天天看點

精确時間協定PTP研究【轉】

 ​

摘要: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消息發送給從端。

精确時間協定PTP研究【轉】

                圖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所示。

精确時間協定PTP研究【轉】

                    圖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.

【作者】​​張昺華​​