轉自:http://www.coinv.com/page/pid/492.html
摘要: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消息發送給從端。
圖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.