2017-07-04 61 views
0

我試圖實現基於NMEA GPS接收器的NTP服務器。我不確定用什麼來填充根延遲字段。實現主NTP服務器(GPS接收器)

我讀過NTPv4 specification,它寫道,根延遲是參考時鐘的總往返延遲。

如果我正在使用輔助服務器,可以根據使用參考服務器進行數據包請求的時間戳之間的時間差計算根延遲(我是否正確?)。

但我不知道如果我使用GPS接收器作爲參考時鐘,應該用什麼來填充它,應該用0填充它嗎?

回答

0

這很大程度上取決於您如何通過GPS設置服務器的時間。如果你正在閱讀NMEA的句子,解釋它並設置時鐘,那麼根延遲就是這樣做的時間。但它不會是一個非常好的時鐘;在讀取RS232時會涉及很多非確定性延遲(抖動)(假設您是如何連接到GPS的)。

您可以使用GPS接收器的每秒1脈衝輸出來修復該問題。它通常在數據載波檢測引腳上。使用合適的RS232端口(不是USB端口),您可以讓服務器的時鐘同步(DCD可用於產生中斷),所以現在您可以很好地調整GPS時間。這當然可以在Solaris(內核的本地部分)和Linux中完成(http://support.ntp.org/bin/view/Support/ConfiguringNMEARefclocks)。如果你這樣做,那麼我認爲根延遲會很小,但是操作系統和硬件的響應時間是中斷的問題。

EDIT

根據this NTP docs page

根延遲

這是總的往返延遲到主參考源在 同步子網的根,單位爲秒。請注意,此 變量可以採用正值和負值,具體取決於時鐘精度和傾斜度 。

所以對於1PPS它會很低。據我所知,這是一個輔助NTP服務器用來告訴它的客戶端參考時鐘延遲的字段。所以如果你有一個1PPS鎖定GPS時間源,你是一個參考時鐘。在這種情況下,或許零是正確的;我不認爲NTP可以比計算機的IRQ響應時間更好地實現跨網絡時間同步精度(最好爲1ms)(< 50us,希望有好的CONFIG_PREEMPT_RT Linux內核,而其他任何事情都不會發生)。

+0

是的,我用PPS輸出來同步實際的第二個,因爲我讀了它非常準確。那麼,在這種情況下,根延遲將是操作系統和硬件對PPS脈衝產生的中斷的響應時間?任何想法我應該如何計算?還是小到可以忽略? – zeluqa

+0

@zeluqa,編輯 – bazza