陳飛,張天宏
(南京航空航天大學江蘇省航空動力系統重點實驗室,南京210016)
Zynq平臺的TTP/C總線控制器容錯算法設計
陳飛,張天宏
(南京航空航天大學江蘇省航空動力系統重點實驗室,南京210016)
在自主設計的TTP/C總線控制器中,充分利用Zynq芯片的可編程邏輯單元和程序處理單元,設計了一種基于成員關系協議(GMP)的容錯算法,以快速檢測與隔離總線集群中的故障節點。試驗表明,所設計的容錯算法能有效檢測并隔離總線集群中的故障節點。
容錯算法;Zynq;TTP/C;GMP
目前,實時嵌入式系統中采用的串行通信協議普遍都是基于事件觸發的。大量研究表明:對高可靠性系統而言,時間觸發架構(TTA)具有更大的優勢[1]。1993年,在TTA架構的基礎上,TTP/C(Time-Triggered Protocol/ Automotive Class C,時間觸發協議C類標準)被首次提出,其是一種用于互聯電子模塊的、分布式容錯實時系統的通信協議,最大的特點是具有嚴格的時間確定性和高度的通信可靠性,主要面向對象是航空航天應用[2]。
容錯能力是總線技術的基本要求,尤其是節點發生故障時,須快速探測并隔離故障節點,防止其影響總線上其他正常節點的信息發送[3]。在故障模式下,集群中的每個正常節點都必須對其他節點的運行狀態有相同的判斷,以便采取和其他正常節點協調的容錯行動,這就是集群的一致性。GMP是TTA架構下的一種分布式多機容錯策略,它的主要作用是通過快速探測和隔離故障節點來維持整個集群的一致性。GMP中規定:每個節點內部都有一個實時更新的成員列表,用來表征節點對集群運行狀態的認知,GMP成功實現的基礎就是成員列表。
為保證TTP/C集群各個節點之間工作狀態的一致性,本文設計了一種基于GMP策略的容錯算法,以此檢測集群中各節點的工作狀態,實現快速檢測和隔離故障節點的目的,保證TTP/C總線集群的通信可靠性。
TTP/C是一種集成的時間觸發協議,采用靜態時分多路復用(TDMA)策略控制節點對傳輸介質的訪問,每一個節點都只能在指定的時間段內發送數據。在每個TDMA周期內,各個節點在預先設定的時間段內以已知的延時在總線上廣播,多個不同長度的時間段構成一個TDMA周期,多個等長的TDMA周期構成一個集群周期。
節點傳輸的數據幀有兩種類型:初始化幀和正常幀。正常幀不包含成員列表,但其CRC校驗碼是結合發送節點成員列表計算得到的,因此接收節點需要用自身的成員列表來對接收到的正常幀進行CRC解碼,以此判斷兩個節點的成員列表是否相同。由于所采用的TTP/C總線控制器并未實現正常幀的發送,因此本文的容錯算法針對初始化幀設計,各節點的成員列表直接包含在數據幀中,容錯原理與正常幀的相同,但實現簡單,無需進行多次CRC解碼。
1.1 故障假設
TTP/C協議的故障假設如下[2]:①節點的故障類型分為接收故障和發送故障,暫不考慮非對稱故障;②節點只能在指定時間段內發送消息,并且在每個TDMA周期內,只能發送一次消息;③在每個TDMA周期內最多一個節點發生故障;④傳輸通道不能自發產生正確消息。
TTP/C協議通過派系避免算法(CA)和隱式確認算法(IA)的交互實現容錯GMP策略。
1.2 派系避免算法
除了成員列表外,節點內部還定義了兩個計數器,確認計數器AC和失敗計數器FC。兩個計數器在運行中遵循累加原則:①當前節點發送數據后,本地AC+1,并將自身添加到本地成員列表中;②若節點判定當前時間段接收的數據幀錯誤,那么FC+1,并在本地成員列表中刪除對應接收節點;③若節點判斷當前時間段接收的數據幀正確,則本地AC+1,并在本地成員列表中增加對應節點;④若節點判斷當前時間段為空,則本地AC和FC維持原值不變,但與當前時間段對應的節點將從本地成員列表刪除。
每一個節點發送數據前都會執行派系避免算法,判斷本地AC是否大于FC,如果為真,節點將數據發出并清零兩個計數器;否則節點進入凍結狀態,不發送數據。
1.3 隱式確認算法
所謂隱式確認是指接收節點無需專門的應答幀來通知發送節點數據幀的發送正確與否,這既滿足了故障假設②,又節省了帶寬。隱式確認算法引入了第1確認節點和第2確認節點的概念。當節點發送數據后累加確認計數器,需等待確認節點確定自身發送數據是否正確。如果在下一次發送時仍未確認自身發送數據是否正確,則認為發生了發送故障,進入凍結狀態。
當節點A發送數據后,等待下一節點B在預期時間內發送正確數據。如果A和B的成員列表在不考慮是否包含A的情形下其他各項均相同,則B是A的第1成功節點,否則A認為B節點故障,將其從成員列表刪除。在B是A的第1確認節點情形下,如果B的成員列表包含A,則A被確認,AC+1,隱式確認算法結束。否則A和B中必有一個發生了故障,需等待第2確認節點。
在A找到其第1確認節點B,但又不能確認的情況下,需等待第2確認節點C,節點C的數據幀是在預期時間內正確接收的,其成員列表包含且只包含A和B中的一個,而且與A成員列表中除A、B外其他各項均相同[4-5]。如果C的成員列表中包含A,則A被確認,在A的成員列表中刪除B并累加AC;否則A被C否認,B是正確的,A進入凍結狀態,隱式確認算法結束。
本文利用Zynq的程序處理單元實現基于GMP策略的容錯算法,而TTP/C總線的其他模塊在可編程邏輯單元實現,主要包括集群啟動模塊、時鐘同步模塊、數據收發模塊和BG模塊。總線控制器原理如圖1所示。

圖1 總線控制器原理
在正常運行時,時鐘同步模塊負責將本地時鐘與全局時鐘進行同步,BG模塊負責限制發送時間在指定時間段內,數據收發模塊負責數據幀的發送和接收,包括CRC解碼也在此部分實現。CPU0作為主機處理器負責運行應用程序,CPU1為協議處理器。當發送時間到后,時間觸發器向協議處理器發送一個中斷信號,協議處理器將應用程序中要發送的數據送入冗余總線收發器發送。非發送時間BG模塊控制485驅動,使得冗余總線收發器只能接收數據幀。當冗余總線收發器接收到一個數據幀并進行CRC校驗之后,向協議處理器發送一個中斷信號,協議處理器立即讀取接收到的數據幀和CRC校驗結果。容錯算法在協議處理器中實現,交叉在發送程序和接收程序中。
2.1 空幀檢測算法
TTP/C總線協議并未指明如何實現空幀的檢查,但協議中的容錯原理明確指明了出現空幀時如何累加兩個計數器,因此本文設計了一種空幀檢測算法,該算法實現簡單,無需時刻讀取節點的本地時間以確認當前時間段是否接收到數據幀。空幀檢測算法的原理如圖2所示。
每次執行接收程序時,節點依據本地時間獲得當前接收數據幀所處TDMA周期內時間段的編號node_rec (TTP/C協議規定每個TDMA周期可以包含4~64個時間段,在這里規定每個TDMA周期開始的時間段編號為1,并以此類推),并與上一接收數據幀的時間段編號node_rec_ old比較。如果node_rec大于node_rec_old,說明當前比較的兩個數據幀處在同一TDMA周期內,只需比較兩者是否差1,就可檢測是否有空幀現象;如果node_rec小于node_rec_old,說明當前比較的兩個數據幀處在兩個TDMA周期內,此時為檢測空幀現象,需將node_rec加上TDMA周期內時間段的個數MAX再做檢測,檢測方式與處在同一TDMA周期內的情形相同。注意:空幀檢測程序執行完畢后需更新node_rec_old。

圖2 空幀檢測算法流程圖
需特別注意,兩次接收程序中間可能需要執行發送程序,發送程序中首先利用自身節點所處時間段編號Node_ Info和node_rec_old判斷是否出現空幀,判斷方式與接收程序類似,之后需將node_rec_old更新成Node_Info,以便下一時刻執行接收程序時,空幀檢測算法能夠有效執行。
2.2 容錯算法的實現
容錯算法由派系避免、隱式確認和空幀檢查3部分組成,交叉在發送程序和接收程序中實現。發送程序中容錯算法流程圖如圖3所示。

圖3 發送程序中容錯算法流程圖
在發送程序中,先執行空幀檢測算法,再以此判斷AC與FC、隱式確認結果,如果兩次判斷都通過,則說明節點正常,否則節點故障進入凍結狀態。
在接收程序中,節點首先判斷是否需要進行隱式確認。如果不需要進行隱式確認,說明本身發送正確,只需依據接收方的成員列表判斷對方是否正確;如果需要進行隱式確認,則需判斷要等待哪一個確認節點,并依據隱式確認原理進行判斷,同時累加AC和FC,流程如圖4所示。
具體代碼如下:

試驗集群包含4個節點,每個TDMA周期分配4個時間段,并通過串口將本地成員列表和接收到的其他節點成員列表一起發送給串口助手進行顯示,以此判斷節點當前是否處在正常工作狀態以及集群中的故障節點是哪一個。串口通信協議如下所示:

0 1 2 3~7 7 8 9 0x55 0x AA本地成員列表節點1~4的成員列表count fault校驗

圖4 接收程序中容錯算法流程圖
count表示一個TDMA周期內發送節點接收到的數據幀的個數,fault為1,表示檢測到當前TDMA周期內存在節點未發送數據。成員列表采用一個8位無符號整形數表示,低4位從第0位開始分別表示1~4號節點的狀態,1表示節點正常,0表示節點故障,高4位暫時未啟用,默認為1。
圖5所示是1號節點發送給串口助手的成員列表信息,由于1號節點不能接收到自身發送的數據幀,因此所有串口助手接收的數據中第3個數據(1號節點成員列表)為零,但是可以從第2個數據看到本地成員列表。圖中方框區域是節點檢測到集群故障后發送的第一組信息。由于1號節點只能在其他節點發送數據幀之后更新其各節點的成員列表,這會導致串口助手中顯式的各節點成員列表存在滯后,才會出現圖5中存在3個節點的成員列表不同的現象,但這并不會影響容錯算法的有效性,最終3個正常節點的成員列表一致,有效判斷出故障的編號,并且故障節點進入凍結狀態,不再發送數據幀。如2號節點故障后,其余3個節點的成員列表變為FD,第1位數據變為0,對應的是2號節點故障,此時2號節點進入凍結狀態,1號節點不再接收到2號節點發送的數據幀,count等于2,fault等于1。

圖5 節點發生接收故障時容錯算法效果圖
本文基于Zynq平臺在自主設計的TTP/C總線控制器上實現了一種基于GMP策略的容錯算法,并實現了協議中未指明的空幀檢測算法。試驗驗證表明所設計的容錯算法可以有效檢測并隔離集群中的故障節點,保證集群的正常運行。
[1]魏婷,張喜民,陳益,等.一種基于TTP/C協議的容錯策略研究[J].航空計算技術,2008,38(3):90-93.
[2]Time-Triggered Protocol TTP/C High-Level Specification Document Protocol Version 1.1.Specification edition 1.4.3, 2003.
[3]楊福宇.TTP/C組籍算法存在的問題[J].單片機與嵌入式系統應用,2014(10):1-4.
[4]劉雙與,郭麗娟,張激,等.TTP/C協議的一致性機制研究[J].計算機工程,2006,32(5):119-121.
[5]劉冬冬,張天宏,陳建,等.TTP/C協議的關鍵特性研究[J].計算機測量與控制,2012,20(10):69-72.
陳飛(碩士研究生),主要從事航空發動機控制系統設計與仿真;張天宏(教授),研究方向為嵌入式控制系統、系統控制與仿真。
Fault Tolerant Algorithm for TTP/C Bus Controller Based on Zynq
Chen Fei,Zhang Tianhong
(Jiangsu Province Key Laboratory of Aerospace Power System,Nanjing University of Aeronautics and Astronautics,Nanjing 210016,China)
The fault tolerant algorithm is the basis of the TTP/C bus,which is a kind of time-triggered data bus with the characteristics of strict time certainty and high reliability.A fault tolerant algorithm based on group member protocol is realized on the self-designed TTP/C bus controller for the rapid detection and isolation of the fault nodes in the TTP/C cluster.The experiment results show that the designed fault tolerant algorithm can effectively detect and isolate the fault nodes in the cluster.
fault tolerant algorithm;Zynq;TTP/C;GMP
V233.7
:A
薛士然
2016-05-11)