季 霆
(合肥工業大學 機械與汽車工程學院,合肥 230009)
FlexRay總線作為下一代汽車內部的主干網絡,其良好的性能尤其是高速、精確和容錯的特點,能夠滿足未來汽車高速控制應用的需要[1-3]。FlexRay總線精確的時鐘基準是其可靠運行的關鍵因素之一,而網絡中的時鐘同步是總線時基精確的重要保證,因此研究FlexRay時鐘同步問題具有重要的現實意義。
文獻[4]提出了一種基于分析模式的FlexRay時鐘同步算法,可以不通過測量而直接通過計算得出任意兩個節點之間的時鐘偏差。文獻[5]對FlexRay總線時鐘同步進行了分析,建立了同步算法數學模型,理論上說明了FlexRay時鐘同步具有較強的容錯性和適用性。文獻[6]指出FlexRay時鐘同步所用容錯中值(Fault-tolerant midpoint,FTM)算法每輪對網絡修正后存在±ε(ε為傳送延時)漂移。
FlexRay協議要求網絡中至少包含3個同步節點進行時鐘同步,上述文獻都是建立在這個基礎上進行討論的。當節點數目較少時,這種限制將對網絡的性能產生影響。針對這種情況,文獻 [7]結合IEEE 1588提出了一種同步節點數目少于3個的同步方法,但是沒有解決同步過程中的同步節點容錯問題。一旦同步節點出現故障,整個網絡將無法正常工作,造成消息的延誤[8]。
本文在上述研究的基礎上,提出了一種FlexRay的單節點容錯同步算法。該方法只需要一個同步節點并且無需額外的硬件支持,即可在保證FlexRay安全性和可靠性的前提下完成時鐘同步。
FlexRay總線協議中,簇內所有的節點都應有相同的“時間觀”,遵守一個標準的全局時間。但是這并不意味著節點間具有完全嚴格的同步時間,只要節點間的時間差保持在允許的誤差范圍內即可。在一個通訊周期內分為4個時間層次,從最低層到最高層分別依次為:最小時間節拍層、最大時間節拍層、仲裁網格層和通訊周期層。
時鐘同步過程設置三種模式:(1)備用模式(STANDBY),(2)非同步模式(NOSYNC),(3)同步模式(SYNC)。在STANDBY模式中時鐘同步過程被停止,在NOSYNC模式中節點執行時鐘同步但不發送同步消息,在SYNC模式中節點發送同步消息并執行時鐘同步[9]。
FlexRay協議中節點在靜態段完成同步測量,以獲得各節點的時間偏差值,運用FTM算法[9]對每一組時間偏差值進行處理,所獲得的值即為時鐘同步算法的校正值。FlexRay同步機制運用兩種類型的校正:相位校正和速率校正。相位校正值是各非同步節點與同步節點的時間偏差值,每周期進行計算并在奇數周期末尾完成校正。速率校正值是兩個連續周期同一節點同一時刻的時間偏差值,偏差的計算結果在每個奇數周期完成計算,在下一個周期開始時生效,在最大時間節拍形成過程中實行。
為了計算同步幀發送節點與同步幀接收節點之間的時間偏差,就必須分別測量同步幀發送端和同步幀接收端的觸發點時刻。但是由于傳輸起始序列截斷影響,同步幀接收節點接收到傳輸起始序列1/0跳變沿的時間并不是同步幀接收節點的觸發點時刻。因此在FlexRay總線協議中需要測量首個字節起始序列中的1/0跳變沿,用該時刻減去解碼修正量和延時補償量倒推得到接收端傳輸起始序列的開始時刻。解碼修正量中包含傳輸起始序列、幀起始序列和字節起始序列,延時補償量中包含有收發器延遲、星型耦合器延遲和電纜長度的傳輸延遲[10]。
圖1為時間偏差值測量過程,其中點 a表示發送端靜態時間槽行動點,即發送端開始發送幀的時刻;點b表示第二時間參考點,位于首個字節起始序列的第二位頻閃點;點c表示主時間參考點,由第二時間參考點減去解碼修正量和延時補償量得來;pDecodingCorrection為解碼修正量,pDelayCompensation為延時補償量,TSS為傳輸起始序列,FSS為幀起始序列,BSS為字節起始序列。由圖1可知,點c與點a之間的差值為同步幀發送節點與同步幀接收節點之間的時間差(時鐘偏差值)。
針對FlexRay協議中同步節點數目不能小于三個的情況,本文采用單節點容錯算法來實現時鐘同步,為了解決單節點失效的問題,在時鐘同步過程中增加一個同步節點優先級表。表的結構見表1,其中NODE_ID為節點的ID號,值越小優先級越高;NODE_NM為節點的名稱;MES_ID為該節點發送同步消息所在的靜態時間槽的ID;NODE_STA為節點狀態標志,表示該節點是否失效。

表1 同步節點優先級表
在網絡啟動或者有新節點加入網絡時,網絡中各節點根據其他節點提供的信息建立或者更新自身的同步節點優先級表。當前同步節點失效時,根據此表優先級與其他節點協商決定同步節點。
在FlexRay協議中,各非同步節點在觸發點接收同步消息,在超過觸發點偏移量之后仍然沒有收到同步報文,就認為該同步節點發生了故障,本文亦采用該方法判斷節點是否發生故障。如果故障發生次數達到設定值,則認為該同步節點失效,在同步節點優先級表中選擇優先級最高的節點替代同步節點,在周期動態段部分發出選擇消息(Vote)。各節點收到 Vote消息后,掃描信息表,若與己選同步節點相同,發送確認消息,啟動候選同步節點。
FlexRay協議中為了測量同步節點和非同步節點之間的偏差,需要測量第二時間參考點并計算解碼修正量和延時補償量的值,這樣不僅增加了計算開銷,還增大了誤差。為了減小開銷和誤差,本文基于文獻[11]的方法來計算時間偏差值,圖2為相應的通信過程。同步節點在T1時刻發送Sync消息,同步節點和非同步節點接收端分別測量接收到該報文的第二時間參考點時刻,分別記為T2和T3,同步節點在T4時刻發送一個包含時間戳T2的Follow_up消息。
本文時間偏差值計算過程中采用如下假設[7,11]:
(1)幀到達各節點的延時是定值,即網絡必須是廣播型網絡,延遲時間可以接近于0,或是一個常值。
(2)節點接收器能夠接收到該節點發送器發送的幀。
設Toffset為時間偏差,單位為最小時間片個數,該值可以為正也可以為負;Lmaxoffset為時間偏差允許上限,根據情況預先設置;u為解碼修正量,ν為延時補償量。那么,可以得到同步節點和非同步節點之間的等式:
由于同步節點的發送端和接收端在同一節點上,認為它們之間的偏差為0,那么可以得到同步節點發送端和接收端的等式:
由假設(1)可知式,(1)(2)中解碼修正量和延時補償量的值相等,即 u1=u2,ν1=ν2,因而由(2)和(1)可得:
式(3)中的Toffset就是同步節點與非同步節點的時間偏差值,因此由T3和T2即可得到Toffset,而T3和T2可以從Sync消息和Follow_up消息中獲取。
基于上述機制的單節點容錯算法,算法流程圖如圖3所示,具體步驟如下:
步驟1:初始化FlexRay網絡中各節點控制器和寄存器,錯誤計數器M清零。根據在同步節點優先級表中預先的設置,將表中優先級最高的節點設為同步模式,其他節點設為非同步模式。
步驟 2:在第 i(i≤63)個通信,同步節點向總線上各節點發送Sync消息。
步驟3:各節點(包括同步節點)接收到Sync消息,并記錄各自的接收時刻。
步驟4:同步節點向各節點發送一個Follow_up消息,非同步節點通過公式(3)可以計算各節點本地時鐘的偏差 Toffset,當∣Toffset∣>Lmaxoffset時,啟動錯誤計數器令 M=M+1,令 Toffset=Lmaxoffset。
步驟5:因為網絡可能出現錯誤,造成部分Sync消息不能被所有節點成功接收。如果節點超過觸發點偏移量仍然沒有收到Sync消息,啟動錯誤計數器令 M=M+1,同時令 Toffset=Lmaxoffset。
步驟6:若某節點錯誤計數 M≥3則判定同步節點失效,掃描數據表選擇下一順序節點為候選同步節點,并在動態段中發送廣播選擇消息(Vote)。
步驟7:各節點收到 Vote消息后掃描信息表,若與已選同步節點相同,則在動態段中發送確認消息。Vote消息的發送節點收到確認后,將原同步節點的模式改為備用模式,所選同步節點的模式改為同步模式,各節點錯誤計數器清零。若規定時間內未收到確認消息,判定該非同步節點故障,原同步節點繼續運行,錯誤計數器清零。
步驟8:若該周期結束,則i=i+1。如果i≤63,則返回步驟2,否則返回步驟1。
圖4a中表示了一個周期內上述時鐘同步的過程。在一個周期靜態段內,同步節點在發送Sync消息和Follow_up消息后預留了兩個靜態時間片,在第五個靜態時間片開始發送普通數據幀。圖4b中表示了FlexRay協議時鐘同步過程,四個同步節點分別發送四個Sync消息之后,在第五個靜態時間片開始發送普通數據幀。從圖4可以看出,在保證相同可靠性的前提下,本文所提同步算法不影響靜態段的長度以及周期長度。而且本文同步算法不需計算解碼修正量和延時補償量就可以直接計算時間偏差值,精簡了測量步驟同時也減少了由于計算解碼修正量和延時補償量值而造成的誤差。
本文利用CANoe和DaVinci Network Designer軟件對本文所提單節點容錯同步算法進行仿真實驗。
實驗中選取4個節點,記為ECU_1、ECU_2、E CU_3和ECU_4,每個節點均有兩組工作消息需要發送。在單節點容錯同步算法中,考慮容錯需要,令ECU_1為初始同步節點,ECU_2為候選同步節點;在FlexRay協議原有同步算法中,ECU_1、ECU_2和ECU_3為同步節點。在DaVinci Network Designer軟件中完成FlexRay數據庫建立,并在CANoe軟件中建立仿真系統,如圖5所示。
在正常通信過程中,當初始同步節點ECU_1斷開,候選同步節點ECU_2能夠代替ECU_1成為下一同步節點,圖6為上述過程的trace圖。
本文在對FlexRay協議時鐘同步算法研究的基礎上,提出了FlexRay總線的單節點容錯同步算法,只需要1個同步節點即可完成時鐘同步,減少了時鐘同步的測量步驟和計算量。該算法引入同步節點優先級表,在同步節點出現故障的情況下,可以根據同步節點優先級表選擇新的同步節點。最后在CANoe中進行仿真,結果表明該算法可以在保證安全可靠的前提完成通信,并提高同步精度。
[1]羅峰,陳智琦,劉矗,等.基于FlexRay的車載網絡系統開發[J].電子測量與儀器學 2009(增刊 1):289-295.
[2]顧嫣,張鳳登.FlexRay動態段優化調度算法研究[J].自動化儀表,2009,30(12):25-29.
[3]周躍鋼.基于LabVIEW和J1939協議的CAN總線通訊平臺構建[J].汽車科技,2011,06:18-22.
[4]Jan Sobotka,Jiri Novak,Jan Malinsky.Analytic Model of FlexRay Synchronization Mechanism [J].The 6th IEEE In ternational Conference on Intelligent Data Acquisition and Advanced Computing Systems,2011:969-974.
[5]陳濤,秦貴和.FlexRay時鐘同步分析[J].計算機工程,2010,14(36):235-237.
[6]Bruno Dutertr.the Welch Lynch Clock Synchronization Algorithm[R].1998,5.
[7]Jin Ho Kim,Suk Hyung Seo,Jung Hoon Chun,Jae Wook Jeon.Distributed Clock Synchronization Algorithm for Industrial Networks[J].The 8th IEEE International Workshop on Factory Communication Systems.2003.
[8]J.H.Kim,S.H.Seo,T.Y.Moon,K.H.Kwon,J.W.Jeon,S.H.Hwang.A method of Task Synchronization in a distributed system using FlexRay[J].The IEEE Interational Conference on In-dustrial Informatics,2008:1149-1153.
[9]FlexRay Consortium.FlexRay Communications System Protocol Specfication [S].2005(12).
[10]楊福宇.FlexRay時鐘同步的同向漂移[J].單片機與嵌入式應用,2011,4:3-6.
[11]張利,李縣軍,王躍飛.汽車CAN網絡時鐘同步方法研究[J].電子測量與儀器學報,2011,25(2):147-152.