摘要:PTP(Precision Time Protocol)協定基于以太網,能夠達到亞微妙級的對時精度,在模态分析和振動測試等領域将有着廣闊的應用前景。首先介紹了PTP協定的基本原理及工作流程,接着剖析了關鍵資料結構及子產品,最後給出了測試結果和下一步要作的工作。
關鍵詞:精确時間同步,以太網,IEEE 1588,嵌入式系統
1、引言
随着網絡技術的不斷增加和發展,尤其是以太網在測量和控制系統中應用越來越廣泛,計算機和網絡界也在緻力于解決以太網的定時同步能力不足的問題,開發了網絡時間協定(NTP),但其同步準确度隻能達到200μs,仍然不能滿足測量儀器和工業控制所需的準确度。為了解決這個問題,網絡精密時鐘同步委員2002年推出了IEEE1588标準,即“網絡測量和控制系統精密時鐘同步協定标準”, 其基本功能是使分布式網絡内的所有時鐘與最精确時鐘保持同步,它定義了一種精确時間協定PTP(Precision Time Protocol),用于對标準以太網或其他采用多點傳播技術的分布式總線系統中的傳感器、執行器以及其他終端裝置中的時鐘進行亞微秒級同步,2008年又推出了更加高效、簡潔的第二版。IEEE 1588可以以純軟體的方式實作,也可以用能夠提供更精确的時間同步的專門的硬體實作。時間的精度和不确定性主要依子產品和IEEE 1588執行的情況而定,一般期望在幾十納秒到幾十亞微秒間。IEEE 1588用于需要時間精度比NTP高的局域分布系統,也用于一些不能接受GPS高成本或者不能接收到GPS信号的應用場合。由于其精度高、成本低、裝置布置靈活,國外許多高端測量儀器中已廣泛采用,而我國在這方面的研究與開發相對比較落後,但測量裝置采用PTP同步方式已成為大事所趨,尤其是模态分析和振動測試等領域将有着廣闊的應用前景。
2、PTP原理及工作流程
PTP協定通過以太網同步各裝置的時鐘,可以提供亞微妙級的對時精度,其對時過程包含兩步:
第一步:通過最佳主時鐘(Best Master Clock)算法确定網絡中最精确的時鐘,作為主時鐘master,其餘所有時鐘都作為slave,并與master同步。
第二步:通過計算主從時鐘偏移量和網絡延時修正從裝置時鐘。同步的過程中需要計算主從時間差異,其中包含主從鐘的偏移量和網絡傳輸時延。是以從時鐘的修正也包含偏移量的修正和傳輸時延的修正。
2.1 主從消息交換流程
主從裝置主要通過消息交換,完成對時,為保持長期一緻,需要不斷對時,消息交換模式如圖1所示:
a、主節點發送一個Sync消息到從節點,并記住消息發送時間t1。
b、從端接收Sync消息,并記下接收時間t2。
c、主端通過把t1嵌入到Sync消息中或随後的Follow_Up消息中,将時間戳t1發送給從端。
d、從端發送Delay_Req消息給主端,并記錄發送時間t3。
e、主端接收Delay_Req消息并記下接收時間t4。
f、主通過把時間戳t4嵌入Delay_Resp消息發送給從端。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLi0zaHRGcWdUYuVzVa9GczoVdG1mWfVGc5RHLwkzX39GZhh2csATMflHLwEzX4xSZz91ZsADMx8FdsYkRGZkRG9lcvx2bjxSa2EWNhJTW1AlUxEFeVRUUfRHelRHL2EzXlpXazxyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PnVGcq5yMhF2YxQ2NmhTZjRGNwQzN5MWOhJGZhZzMwUTZldzN58CXwMzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL1M3Lc9CX6MHc0RHaiojIsJye.jpeg)
圖1 主從消息交換流程
消息交換結束後,從端擁有了所有4個時間戳,用它們可以計算主從端時間差和平均消息傳輸延時。
Tmsd = t2 + Tms – t1
Tsmd = t4 –( Tms + t3)
由于通信路徑的對稱性,
路徑延時Td = Tmsd = Tsmd = 1/2 *(t2 – t1 + t4 – t3)
主從時差 Tms = 1/2*(t2 – t1 + t4 - t3)
2.2調整從裝置時鐘的原則
如果時間差Tms過大,則應用絕對時間調整,從裝置時鐘要加上時間差以調整絕對時間,使其時間在此刻與主時鐘時間完全一緻;
如果時間差Tms較小,則使從時鐘的頻率改變某一百分比,從時鐘裝置需要調整各自的時鐘頻率,與主時鐘頻率保持一緻。
一般來說,PC機可以通過設定系統時間來調整主從時間差,但不能調整時鐘的頻率。為了能夠調整時鐘頻率,需要1588時鐘晶片或内置1588時鐘的PHY晶片支援,如美國NS的DPS83640。系統各時鐘對時時,如果沒有硬體支援,隻能達到亞毫秒級的同步精度;如果有專用硬體支援時,可以達到亞微妙級的同步精度。
2.3 消息類型
PTP中消息分為事件消息和通用消息兩種。其中,事件消息在離開和到達一台裝置時必須打時标(記錄本地時間),包括Sync、Delay_Req、Pdelay_Req、Pdelay_Resp;通用消息不需要打時間戳,包括Announce、Follow_Up、Delay_Resp、Delay_Resp_Follow_Up、
Management和Signaling。
3、關鍵資料結構
關鍵資料結構對于PTP協定的了解和分析至關重要,現列出一些主要的資料結構。
3.1 時間戳類型,表示相對于1970年1月1日0時0分0秒的時間。
struct Timestamp {
u48 seconds; //秒
u32 nanoseconds; //納秒 (<10^9)
u16 frac_nanoseconds; //分數納秒
};
3.2 端口上下文,作為每個端口相關函數的參數。
struct ptp_port_ctx {
struct ptp_port_ctx *next; //内部清單指針
bool port_state_updated; //端口狀态修改标志
int timer_flags; //各定時器使能标志
struct Timestamp announce_timer; // announce封包逾時時間戳
struct Timestamp sync_timer; //sync封包發送逾時時間戳
struct Timestamp delay_req_timer; //delay_req 封包發送逾時時間戳
struct Timestamp pdelay_req_timer; // pdelay_req封包發送逾時時間戳
struct Timestamp announce_recv_timer; // announce封包接收逾時時間戳
bool announce_recv_timer_expired; // announce封包接收逾時标志
u16 sync_seqid; //sync封包序号
u16 delay_req_seqid; //delay_req 封包序号
u16 announce_seqid; // announce 封包序号
struct Timestamp sync_recv_time; //sync封包接收時間戳
u64 sync_recv_corr_field; // sync封包中的校正字段
struct Timestamp delay_req_send_time; /// delay_req封包發送時間戳
struct ForeignMasterDataSetElem *foreign_master_head;
ClockIdentity current_master; //目前主時鐘ID
bool unicast_port; //單點傳播端口标志
struct PortDataSet port_dataset; //端口資料集
3.3 PTP封包頭格式
struct ptp_header {
u8 msg_type; // ptp 消息類型 (bits 3-0), 傳輸相關 (bits 7-4)
u8 ptp_ver; //ptp版本 (bits 3-0)
u16 msg_len; //消息長度
u8 domain_num; //域号
u8 res; //預留
u16 flags; //标志
u64 corr_field; //校正值
u32 res1; //預留
struct PortIdentity src_port_id; // 源端口Id
u16 seq_id; //序号
u8 control; //控制
u8 log_mean_msg_interval; //對數平均間隔
} __attribute__ ((packed));
4、主要子產品
系統由主要、配置、端口收發、最佳主時鐘算法、端口狀态機和時鐘接口等子產品組成。其調用關系如圖2所示。
圖2 子產品調用關系
4.1 PTP主要子產品
1)初始化:配置設定存儲器,各種上下文,各種資料集,包交換、作業系統和時鐘接口等。
然後,循環進行以下4步:
2)檢查各端口Announce封包接受定時器是否逾時
3)運作BMC最佳主時鐘算法
4)運作各端口的狀态機
5)等待新消息到達或某些定時器逾時
4.2 PTP配置子產品
主要功能包括:讀取xml格式的配置檔案放入相應的資料結構,分析各項配置的合法性,
配置各網絡端口。
4.3 PTP端口收發子產品
發送子產品主要負責建立、關閉新PTP端口,建立SYNC、FOLLOW_UP、ANNOUNCE、DELAY_REQ和DELAY_RESP消息,并由端口發事件消息包。
接收子產品負責接收處理所有的PTP消息,包括sync、follow_up、announce、delay_req和delay_resp。
作業系統相關包子產品負責底層的網絡端口socket(事件消息和通用消息各占一個socket)的初始化與關閉,PTP幀的發送與接收。
4.4 PTP最佳主時鐘選擇算法和端口狀态機
PTP端口有initializing、faulty、disabled、listening、pre_master、master、passive、uncalibrated和slave九種狀态。随着網絡上裝置及收發消息的變化,經最佳主時鐘算法計算,可以改變端口狀态。
4.5 PTP時鐘接口子產品
主要初始化時鐘接口,擷取時鐘特性,記錄收到事件消息時的時間戳,并調整主從時鐘時間差及時鐘頻率。
5、結束語
本文設計實作了PTP協定第2版,首先基于PC機平台Ubuntu10.04 Linux作業系統進行了測試,測試結果表明已達到。下一步,将在Omap-L138雙核嵌入式平台上進行更深入的實驗,并采用專用的1588 PHY晶片,以達到更精确的同步效果,并應用到多種測量儀器上。
參考文獻
[1] IEEE Std 1588TM-2008, IEEE Standard for a Precision Clock Synchonization Protocol for Networked Measurement and Control System[S].July 2008.
[2] [美]W.Richard Stevens 網絡程式設計[M].施振川 周利民 孫宏晖,譯.北京:清華大學出版社,2010.
[3]陳興敏,康國欽.LXI的精準時間同步觸發方式分析[J].測試測量技術,2008.
【作者】張昺華