張 濤 胡立生
(上海交通大學電子信息與電氣工程學院,上海 200240)
大型工業生產系統會使用大量的控制器和儀表,這些控制器和儀表通常內置有時鐘,因此整個系統內往往存在多個獨立運行的時鐘。但是生產的各個環節具有嚴格的時間先后順序,一旦各個設備時間不統一,很可能導致順序錯亂,從而引發事故。所以為保證生產過程的協調有序,必須讓整個系統內的所有時鐘遵循同一個時間基準,即實現時間同步。目前時間同步技術已經在工業生產中得到了廣泛的應用,如文獻[1]中的30萬t聚丙烯生產線及文獻[2]中的三塘湖管道輸油管道SCADA系統等。
IEEE 1588標準,又稱精確時鐘同步協議,描述的是一種可以利用普通工業通信網絡,在兩個時鐘之間通過交換數據包,實現納秒級精度的時間同步策略。在現有的時間同步策略中,無論從實現成本,還是從同步精度上看,IEEE 1588標準都是較好的選擇,所以該標準一經頒布,便在實際生產應用中迅速推廣開來。
IEEE 1588以每隔一定時間調整一次從時鐘的方式來實現主、從時鐘同步。目前針對IEEE 1588的研究也基本集中在怎樣提高同步精度上,但若將從時鐘的時間值不加處理直接作為最終的時間使用值,則無論同步精度如何提高,提供給系統的從時鐘時間值都將與主時鐘時間值有較大的偏差。針對這一情況,筆者通過計算分析主從時間偏差的變化規律,提出了對從時鐘時間值進行偏差補償,來得到準確時間使用值的方法,并給出了補償量的具體計算公式。
IEEE 1588協議是建立在主-從層次結構上的時鐘同步機制。該協議首先采用最優主時鐘(BMC)算法從所有時鐘中選出精確度及穩定性等各項時鐘特性指標最優的時鐘作為最高主時鐘,并在各個時鐘之間建立主-從關系。然后使用同步算法將從時鐘的時間調整至與其對應的主時鐘一致。時鐘之間這樣一級一級依次主-從同步,最終使得所有時鐘的時間都與最高主時鐘保持一致,從而實現整個系統的時間基準統一。
可以看出,同步算法是IEEE 1588的核心,正是它保證了主、從時鐘之間的高精度同步,其基本執行過程如圖1所示[3],包含4個步驟:
a. 主時鐘按照設定的同步周期tsync,每隔一定時間向從時鐘發送一個“同步”消息,消息中含有該消息的發送時間T1,T1以主時鐘為參考時鐘測得;
b. 從時鐘接收“同步”消息,并記錄下接收時間T2,T2以從時鐘為參考時鐘測得;
c. 從時鐘每隔一段時間向主時鐘發送一個“延遲測量請求”消息,并記錄下該消息的發送時間T3,T3以從時鐘為參考時鐘測得;
d. 主時鐘接收“延遲測量請求”消息,并記下消息的接收時間T4,T4以主時鐘為參考時鐘測得,然后立即向從時鐘回復一個“延遲測量應答”消息,將T4寫進消息中傳遞給從時鐘。

圖1 IEEE 1588標準同步過程
經過以上步驟,從時鐘獲得了T1、T2、T3、T4的值,由這4個參數可計算出Tms與Tsm之和:
Tms+Tsm=(T4-T1)-(T3-T2)
(1)
其中Tms為消息由主時鐘發送到從時鐘所用時間,Tsm為消息由從時鐘發送到主時鐘所用時間。協議假設Tms和Tsm是相等的,則消息在主、從時鐘之間的傳遞時間delay為:
(2)
“同步”消息被從時鐘接收那一刻,主時鐘的時間值為(T1+delay),而從時鐘的時間值為T2,因此從時鐘與主時鐘之間的時間偏差Offset為:
Offset=T2-(T1+delay)
(3)
得到主-從時鐘之間的時間偏差之后,調整從時鐘的時間值,去除時鐘偏差,便實現了從時鐘的時間值與主時鐘的同步。
運行IEEE 1588協議之后,主、從時鐘時間值的變化曲線如圖2所示[4]。每過一個同步周期tsync,根據計算出的主-從時間偏差,從時鐘修改一次時間值,與主時鐘同步一次。因此從時鐘的時間曲線每隔tsync發生一次階躍變化,向主時鐘的時間曲線靠攏。但是由于時間戳標記不準確及網絡延時抖動等原因,同步算法計算出的時間偏差Offset也存在一定誤差,不完全等于兩時鐘之間的真實時間偏差。因此從時鐘并不能通過修改時間值達到與主時鐘完全同步。從圖2上看,在每次階躍調整時,主時鐘時間曲線和從時鐘時間曲線之間仍會有微小的間隙存在,這一間隙就是同步誤差。

圖2 主、從時鐘時間曲線
在兩次同步之間的這段時間內,主、從時鐘各自獨立運行,由于兩個時鐘自身物理特性的差別,時間值會慢慢發生偏離,兩條時間曲線逐步分離開來,直到下一次時間同步發生,兩者偏差被消除,時間值又一次同步,兩條曲線也再次接近。
目前針對IEEE 1588標準的研究主要集中在如何減小同步誤差上。但是從圖2可以看出,兩次同步之間,從時鐘和主時鐘的偏差會逐漸加大。如果直接將從時鐘的時間值作為最終的時間使用值,那么就算同步誤差為零,時間使用值和主時鐘時間值之間的偏差依舊會很大。所以,兩次同步之間的時間偏差也是不容忽視的偏差源。筆者利用適當的時間值修正方法,對從時鐘的時間值進行偏差補償,獲得了更接近主時鐘時間的從時鐘時間使用值。
經分析,主、從時鐘之間之所以會產生時間值上的偏差,主要有兩個原因[5]:一個是兩個時鐘初始的時間值不一樣,是一項靜態偏差,這一偏差在IEEE 1588協議穩定運行之后,基本就得到了消除;還有一個原因就是時鐘晶振的實際頻率與標稱頻率不一致。設計系統時使用的是晶振的標稱頻率,所以理論上主、從時鐘是同步的。但晶振的實際頻率很難做到與標稱值完全一致。這就導致受晶振驅動的兩個時鐘時間值的增加速率會有所不同,從而造成時間偏差。而且,如果僅僅修正時鐘時間值,而不調節晶振頻率,那么修正完時間值之后,時間偏差又會出現,而且隨著時間的推移,這一偏差會持續加大,所以這是一種動態誤差。圖2中,兩次同步之間,主、從時鐘時間曲線的分離體現了這一特點。
下面詳細分析由晶振導致的時間偏差隨真實時間的變化情況。在真實時間t時刻,時鐘m的時間值為Cm(t),晶振頻率為fm,兩者之間的關系為[6]:
Cm(t)=Pmfmt
(4)
其中,Pm為晶振頻率與時間值之間的關系系數,對于特定時鐘來說是一個定值。在設計系統時,如需主時鐘m和從時鐘s同步,則只需Cm(t)與Cs(t)相等即可,代入式(4),得:
Pmfmt=Psfst
(5)
所以設計系統時,只需確定參數Pm和Ps,使其滿足下式,理論上即可實現時鐘同步:
(6)
但實際上,晶振的實際頻率fm′和fs′往往并不等于設計系統時使用的晶振標稱值fm和fs,兩者之間存在未知的差值d,即:
(7)
(8)
(9)
代入式(5)、(6)得:
(10)

(11)
dm和ds未知,但對特定晶振來說是定值,fm、fs、Ps皆為設計時已知的定值,所以K也是一個定值。因此當兩個時鐘沒有初始偏差時,由晶振造成的時鐘時間值偏差是關于真實時間t的正比例函數,換言之,偏差隨著真實時間t以固定速率增大。這一理論分析結果也與圖3所示的仿真結果吻合。
一般系統會將從時鐘的時間不加處理,直接作為時間使用值提供給使用者。但從第2節的分析已經知道,從時鐘的原始時間值與主時鐘之間有較大的誤差,所以更好的辦法是將從時鐘原始值進行一定的處理,對主、從時間偏差進行一定的補償,然后將補償之后的結果作為時間使用值提供給使用者。

(12)
Kt即主、從時間偏差補償量,其中K未知,由于只知道從時鐘時間值,所以此刻的真實時間t也未知。求出K和t就能算出補償量。

(13)
而在tend時刻,主、從時鐘之間的時間偏差為第2節同步算法求出的Offset,第n個同步周期求出的Offset表示為Offset(n),代入式(11)得:
(14)
綜合式(13)、(14)可得:
K(n)(tend-tstart)=Offset(n)
(15)
而tend-tstart就是同步周期tsync,故:
(16)

(17)
其中r為參與估計的同步周期個數,可根據系統的運算能力適當選取。結合式(16)得:
(18)

Var(n)=T2(n)-Tinit(n)
(19)
根據圖2,由幾何關系得:
(20)
即:
(21)

(22)
結合式(21),最后得:
(23)

(24)

(25)
為檢驗以上準確時間值獲取方法的效果,筆者使用Matlab的Stateflow工具,參照IEEE 1588-2008標準搭建了整個協議運行的仿真模型。該模型完全按照IEEE 1588協議規定的方式進行兩個時鐘的時間同步。
在此模型上,讀取從時鐘的時間值,按照式(25)進行偏差補償,其中r取2。得到的仿真結果如圖3所示,補償之后的從時鐘時間使用值基本與主時鐘同步,兩者僅僅因為同步誤差的存在而有一定的間隙,晶振實際頻率與標稱值不一致導致的偏差基本得到消除。由此說明以上的時間值獲取方法達到了理想效果,能夠切實提高從時鐘時間使用值的精度。

圖3 仿真結果
時間同步在工業生產中具有重要意義。IEEE 1588時間同步方式以其低成本、高精度的優勢得到了廣泛應用。但若直接以從時鐘時間值作為時間使用值,則將與主時鐘時間值產生較大的偏差。筆者通過對從時鐘時間值進行補償,解決了這一問題。仿真結果表明:這一時間值獲取方法能夠切實提高時間使用值的精度,可為工業生產中精確時間同步方案的設計提供參考。