張 濤 胡立生
(上海交通大學(xué)電子信息與電氣工程學(xué)院,上海 200240)
大型工業(yè)生產(chǎn)系統(tǒng)會(huì)使用大量的控制器和儀表,這些控制器和儀表通常內(nèi)置有時(shí)鐘,因此整個(gè)系統(tǒng)內(nèi)往往存在多個(gè)獨(dú)立運(yùn)行的時(shí)鐘。但是生產(chǎn)的各個(gè)環(huán)節(jié)具有嚴(yán)格的時(shí)間先后順序,一旦各個(gè)設(shè)備時(shí)間不統(tǒng)一,很可能導(dǎo)致順序錯(cuò)亂,從而引發(fā)事故。所以為保證生產(chǎn)過(guò)程的協(xié)調(diào)有序,必須讓整個(gè)系統(tǒng)內(nèi)的所有時(shí)鐘遵循同一個(gè)時(shí)間基準(zhǔn),即實(shí)現(xiàn)時(shí)間同步。目前時(shí)間同步技術(shù)已經(jīng)在工業(yè)生產(chǎn)中得到了廣泛的應(yīng)用,如文獻(xiàn)[1]中的30萬(wàn)t聚丙烯生產(chǎn)線及文獻(xiàn)[2]中的三塘湖管道輸油管道SCADA系統(tǒng)等。
IEEE 1588標(biāo)準(zhǔn),又稱(chēng)精確時(shí)鐘同步協(xié)議,描述的是一種可以利用普通工業(yè)通信網(wǎng)絡(luò),在兩個(gè)時(shí)鐘之間通過(guò)交換數(shù)據(jù)包,實(shí)現(xiàn)納秒級(jí)精度的時(shí)間同步策略。在現(xiàn)有的時(shí)間同步策略中,無(wú)論從實(shí)現(xiàn)成本,還是從同步精度上看,IEEE 1588標(biāo)準(zhǔn)都是較好的選擇,所以該標(biāo)準(zhǔn)一經(jīng)頒布,便在實(shí)際生產(chǎn)應(yīng)用中迅速推廣開(kāi)來(lái)。
IEEE 1588以每隔一定時(shí)間調(diào)整一次從時(shí)鐘的方式來(lái)實(shí)現(xiàn)主、從時(shí)鐘同步。目前針對(duì)IEEE 1588的研究也基本集中在怎樣提高同步精度上,但若將從時(shí)鐘的時(shí)間值不加處理直接作為最終的時(shí)間使用值,則無(wú)論同步精度如何提高,提供給系統(tǒng)的從時(shí)鐘時(shí)間值都將與主時(shí)鐘時(shí)間值有較大的偏差。針對(duì)這一情況,筆者通過(guò)計(jì)算分析主從時(shí)間偏差的變化規(guī)律,提出了對(duì)從時(shí)鐘時(shí)間值進(jìn)行偏差補(bǔ)償,來(lái)得到準(zhǔn)確時(shí)間使用值的方法,并給出了補(bǔ)償量的具體計(jì)算公式。
IEEE 1588協(xié)議是建立在主-從層次結(jié)構(gòu)上的時(shí)鐘同步機(jī)制。該協(xié)議首先采用最優(yōu)主時(shí)鐘(BMC)算法從所有時(shí)鐘中選出精確度及穩(wěn)定性等各項(xiàng)時(shí)鐘特性指標(biāo)最優(yōu)的時(shí)鐘作為最高主時(shí)鐘,并在各個(gè)時(shí)鐘之間建立主-從關(guān)系。然后使用同步算法將從時(shí)鐘的時(shí)間調(diào)整至與其對(duì)應(yīng)的主時(shí)鐘一致。時(shí)鐘之間這樣一級(jí)一級(jí)依次主-從同步,最終使得所有時(shí)鐘的時(shí)間都與最高主時(shí)鐘保持一致,從而實(shí)現(xiàn)整個(gè)系統(tǒng)的時(shí)間基準(zhǔn)統(tǒng)一。
可以看出,同步算法是IEEE 1588的核心,正是它保證了主、從時(shí)鐘之間的高精度同步,其基本執(zhí)行過(guò)程如圖1所示[3],包含4個(gè)步驟:
a. 主時(shí)鐘按照設(shè)定的同步周期tsync,每隔一定時(shí)間向從時(shí)鐘發(fā)送一個(gè)“同步”消息,消息中含有該消息的發(fā)送時(shí)間T1,T1以主時(shí)鐘為參考時(shí)鐘測(cè)得;
b. 從時(shí)鐘接收“同步”消息,并記錄下接收時(shí)間T2,T2以從時(shí)鐘為參考時(shí)鐘測(cè)得;
c. 從時(shí)鐘每隔一段時(shí)間向主時(shí)鐘發(fā)送一個(gè)“延遲測(cè)量請(qǐng)求”消息,并記錄下該消息的發(fā)送時(shí)間T3,T3以從時(shí)鐘為參考時(shí)鐘測(cè)得;
d. 主時(shí)鐘接收“延遲測(cè)量請(qǐng)求”消息,并記下消息的接收時(shí)間T4,T4以主時(shí)鐘為參考時(shí)鐘測(cè)得,然后立即向從時(shí)鐘回復(fù)一個(gè)“延遲測(cè)量應(yīng)答”消息,將T4寫(xiě)進(jìn)消息中傳遞給從時(shí)鐘。
圖1 IEEE 1588標(biāo)準(zhǔn)同步過(guò)程
經(jīng)過(guò)以上步驟,從時(shí)鐘獲得了T1、T2、T3、T4的值,由這4個(gè)參數(shù)可計(jì)算出Tms與Tsm之和:
Tms+Tsm=(T4-T1)-(T3-T2)
(1)
其中Tms為消息由主時(shí)鐘發(fā)送到從時(shí)鐘所用時(shí)間,Tsm為消息由從時(shí)鐘發(fā)送到主時(shí)鐘所用時(shí)間。協(xié)議假設(shè)Tms和Tsm是相等的,則消息在主、從時(shí)鐘之間的傳遞時(shí)間delay為:
(2)
“同步”消息被從時(shí)鐘接收那一刻,主時(shí)鐘的時(shí)間值為(T1+delay),而從時(shí)鐘的時(shí)間值為T(mén)2,因此從時(shí)鐘與主時(shí)鐘之間的時(shí)間偏差Offset為:
Offset=T2-(T1+delay)
(3)
得到主-從時(shí)鐘之間的時(shí)間偏差之后,調(diào)整從時(shí)鐘的時(shí)間值,去除時(shí)鐘偏差,便實(shí)現(xiàn)了從時(shí)鐘的時(shí)間值與主時(shí)鐘的同步。
運(yùn)行IEEE 1588協(xié)議之后,主、從時(shí)鐘時(shí)間值的變化曲線如圖2所示[4]。每過(guò)一個(gè)同步周期tsync,根據(jù)計(jì)算出的主-從時(shí)間偏差,從時(shí)鐘修改一次時(shí)間值,與主時(shí)鐘同步一次。因此從時(shí)鐘的時(shí)間曲線每隔tsync發(fā)生一次階躍變化,向主時(shí)鐘的時(shí)間曲線靠攏。但是由于時(shí)間戳標(biāo)記不準(zhǔn)確及網(wǎng)絡(luò)延時(shí)抖動(dòng)等原因,同步算法計(jì)算出的時(shí)間偏差Offset也存在一定誤差,不完全等于兩時(shí)鐘之間的真實(shí)時(shí)間偏差。因此從時(shí)鐘并不能通過(guò)修改時(shí)間值達(dá)到與主時(shí)鐘完全同步。從圖2上看,在每次階躍調(diào)整時(shí),主時(shí)鐘時(shí)間曲線和從時(shí)鐘時(shí)間曲線之間仍會(huì)有微小的間隙存在,這一間隙就是同步誤差。
圖2 主、從時(shí)鐘時(shí)間曲線
在兩次同步之間的這段時(shí)間內(nèi),主、從時(shí)鐘各自獨(dú)立運(yùn)行,由于兩個(gè)時(shí)鐘自身物理特性的差別,時(shí)間值會(huì)慢慢發(fā)生偏離,兩條時(shí)間曲線逐步分離開(kāi)來(lái),直到下一次時(shí)間同步發(fā)生,兩者偏差被消除,時(shí)間值又一次同步,兩條曲線也再次接近。
目前針對(duì)IEEE 1588標(biāo)準(zhǔn)的研究主要集中在如何減小同步誤差上。但是從圖2可以看出,兩次同步之間,從時(shí)鐘和主時(shí)鐘的偏差會(huì)逐漸加大。如果直接將從時(shí)鐘的時(shí)間值作為最終的時(shí)間使用值,那么就算同步誤差為零,時(shí)間使用值和主時(shí)鐘時(shí)間值之間的偏差依舊會(huì)很大。所以,兩次同步之間的時(shí)間偏差也是不容忽視的偏差源。筆者利用適當(dāng)?shù)臅r(shí)間值修正方法,對(duì)從時(shí)鐘的時(shí)間值進(jìn)行偏差補(bǔ)償,獲得了更接近主時(shí)鐘時(shí)間的從時(shí)鐘時(shí)間使用值。
經(jīng)分析,主、從時(shí)鐘之間之所以會(huì)產(chǎn)生時(shí)間值上的偏差,主要有兩個(gè)原因[5]:一個(gè)是兩個(gè)時(shí)鐘初始的時(shí)間值不一樣,是一項(xiàng)靜態(tài)偏差,這一偏差在IEEE 1588協(xié)議穩(wěn)定運(yùn)行之后,基本就得到了消除;還有一個(gè)原因就是時(shí)鐘晶振的實(shí)際頻率與標(biāo)稱(chēng)頻率不一致。設(shè)計(jì)系統(tǒng)時(shí)使用的是晶振的標(biāo)稱(chēng)頻率,所以理論上主、從時(shí)鐘是同步的。但晶振的實(shí)際頻率很難做到與標(biāo)稱(chēng)值完全一致。這就導(dǎo)致受晶振驅(qū)動(dòng)的兩個(gè)時(shí)鐘時(shí)間值的增加速率會(huì)有所不同,從而造成時(shí)間偏差。而且,如果僅僅修正時(shí)鐘時(shí)間值,而不調(diào)節(jié)晶振頻率,那么修正完時(shí)間值之后,時(shí)間偏差又會(huì)出現(xiàn),而且隨著時(shí)間的推移,這一偏差會(huì)持續(xù)加大,所以這是一種動(dòng)態(tài)誤差。圖2中,兩次同步之間,主、從時(shí)鐘時(shí)間曲線的分離體現(xiàn)了這一特點(diǎn)。
下面詳細(xì)分析由晶振導(dǎo)致的時(shí)間偏差隨真實(shí)時(shí)間的變化情況。在真實(shí)時(shí)間t時(shí)刻,時(shí)鐘m的時(shí)間值為Cm(t),晶振頻率為fm,兩者之間的關(guān)系為[6]:
Cm(t)=Pmfmt
(4)
其中,Pm為晶振頻率與時(shí)間值之間的關(guān)系系數(shù),對(duì)于特定時(shí)鐘來(lái)說(shuō)是一個(gè)定值。在設(shè)計(jì)系統(tǒng)時(shí),如需主時(shí)鐘m和從時(shí)鐘s同步,則只需Cm(t)與Cs(t)相等即可,代入式(4),得:
Pmfmt=Psfst
(5)
所以設(shè)計(jì)系統(tǒng)時(shí),只需確定參數(shù)Pm和Ps,使其滿(mǎn)足下式,理論上即可實(shí)現(xiàn)時(shí)鐘同步:
(6)
但實(shí)際上,晶振的實(shí)際頻率fm′和fs′往往并不等于設(shè)計(jì)系統(tǒng)時(shí)使用的晶振標(biāo)稱(chēng)值fm和fs,兩者之間存在未知的差值d,即:
(7)
(8)
(9)
代入式(5)、(6)得:
(10)
(11)
dm和ds未知,但對(duì)特定晶振來(lái)說(shuō)是定值,fm、fs、Ps皆為設(shè)計(jì)時(shí)已知的定值,所以K也是一個(gè)定值。因此當(dāng)兩個(gè)時(shí)鐘沒(méi)有初始偏差時(shí),由晶振造成的時(shí)鐘時(shí)間值偏差是關(guān)于真實(shí)時(shí)間t的正比例函數(shù),換言之,偏差隨著真實(shí)時(shí)間t以固定速率增大。這一理論分析結(jié)果也與圖3所示的仿真結(jié)果吻合。
一般系統(tǒng)會(huì)將從時(shí)鐘的時(shí)間不加處理,直接作為時(shí)間使用值提供給使用者。但從第2節(jié)的分析已經(jīng)知道,從時(shí)鐘的原始時(shí)間值與主時(shí)鐘之間有較大的誤差,所以更好的辦法是將從時(shí)鐘原始值進(jìn)行一定的處理,對(duì)主、從時(shí)間偏差進(jìn)行一定的補(bǔ)償,然后將補(bǔ)償之后的結(jié)果作為時(shí)間使用值提供給使用者。
(12)
Kt即主、從時(shí)間偏差補(bǔ)償量,其中K未知,由于只知道從時(shí)鐘時(shí)間值,所以此刻的真實(shí)時(shí)間t也未知。求出K和t就能算出補(bǔ)償量。
(13)
而在tend時(shí)刻,主、從時(shí)鐘之間的時(shí)間偏差為第2節(jié)同步算法求出的Offset,第n個(gè)同步周期求出的Offset表示為Offset(n),代入式(11)得:
(14)
綜合式(13)、(14)可得:
K(n)(tend-tstart)=Offset(n)
(15)
而tend-tstart就是同步周期tsync,故:
(16)
(17)
其中r為參與估計(jì)的同步周期個(gè)數(shù),可根據(jù)系統(tǒng)的運(yùn)算能力適當(dāng)選取。結(jié)合式(16)得:
(18)
Var(n)=T2(n)-Tinit(n)
(19)
根據(jù)圖2,由幾何關(guān)系得:
(20)
即:
(21)
(22)
結(jié)合式(21),最后得:
(23)
(24)
(25)
為檢驗(yàn)以上準(zhǔn)確時(shí)間值獲取方法的效果,筆者使用Matlab的Stateflow工具,參照IEEE 1588-2008標(biāo)準(zhǔn)搭建了整個(gè)協(xié)議運(yùn)行的仿真模型。該模型完全按照IEEE 1588協(xié)議規(guī)定的方式進(jìn)行兩個(gè)時(shí)鐘的時(shí)間同步。
在此模型上,讀取從時(shí)鐘的時(shí)間值,按照式(25)進(jìn)行偏差補(bǔ)償,其中r取2。得到的仿真結(jié)果如圖3所示,補(bǔ)償之后的從時(shí)鐘時(shí)間使用值基本與主時(shí)鐘同步,兩者僅僅因?yàn)橥秸`差的存在而有一定的間隙,晶振實(shí)際頻率與標(biāo)稱(chēng)值不一致導(dǎo)致的偏差基本得到消除。由此說(shuō)明以上的時(shí)間值獲取方法達(dá)到了理想效果,能夠切實(shí)提高從時(shí)鐘時(shí)間使用值的精度。
圖3 仿真結(jié)果
時(shí)間同步在工業(yè)生產(chǎn)中具有重要意義。IEEE 1588時(shí)間同步方式以其低成本、高精度的優(yōu)勢(shì)得到了廣泛應(yīng)用。但若直接以從時(shí)鐘時(shí)間值作為時(shí)間使用值,則將與主時(shí)鐘時(shí)間值產(chǎn)生較大的偏差。筆者通過(guò)對(duì)從時(shí)鐘時(shí)間值進(jìn)行補(bǔ)償,解決了這一問(wèn)題。仿真結(jié)果表明:這一時(shí)間值獲取方法能夠切實(shí)提高時(shí)間使用值的精度,可為工業(yè)生產(chǎn)中精確時(shí)間同步方案的設(shè)計(jì)提供參考。