王紅亮,田帥帥
(中北大學儀器科學與動態測試教育部重點實驗室,電子測試技術國家重點實驗室,山西太原 030051)
隨著CAN總線在工業控制領域的廣泛應用,CAN總線網絡中的節點數目越來越多,通信距離越來越長,這對CAN總線的通信可靠性提出了更高的要求[1]。目前在提高CAN總線測試系統可靠性的諸多措施中,冗余是一種行之有效的手段[2]。此前對CAN總線的冗余大多只是對總線的冗余,包括熱冗余和冷冗余兩種方式,能在一定程度上減少惡劣工作環境對CAN總線工作的影響[3-5]。但是若網絡中作用最為關鍵的主節點出現故障,則整個網絡將陷于癱瘓狀態。本文針對此問題,提出了一種基于節點冗余的CAN總線網絡雙冗余方法。
在傳統的冗余技術中,基本上都只對總線進行了冗余設計。主要方式包括冷冗余與熱冗余兩種方式。熱冗余方式是指使用兩條總線電纜,每個節點內部使用兩個總線驅動器,但只有一個總線控制器。當節點發送時,總線控制器通過兩個總線驅動器同時向兩條總線發送相同的報文。在接收過程中,判斷電路自動選擇兩條總線中的一個并將其中的報文送入總線控制器。冷冗余是指當節點發送時,總線控制器通過兩個總線驅動器同時向兩條總線發送相同的報文。在接收時,單片機通過門控電路將一個CAN發送器的信號輸入CAN控制器進行接收。冷冗余功耗較低但實時性差,在高速傳輸時不易保證數據傳輸的速率和正確性。熱冗余雖然有較好的實時性,但功耗相對較大。在目前已查到的資料中,大部分冗余設計都是單純的冷冗余或者熱冗余。也有采用冷冗余和熱冗余結合的雙冗余設計方式。具體方法詳見參考文獻[3]。但無論是熱冗余還是冷冗余,都只能在總線層面對系統進行冗余設計。當網絡中的主節點出現故障時,則這種冗余方式無法發揮任何作用,整個網絡的可靠性無法得到保證,因此其適用范圍也受到了一定限制。
本節將首先對原有的冗余方法與本文所設計的基于節點冗余的的雙冗余方法進行比較,然后針對本文所提出的新方法進行介紹。

圖1 已有的CAN總線雙冗余網絡Fig.1 Double CAN-bus redundancy network of foregone

圖2 基于節點冗余的CAN總線雙冗余網絡Fig.2 Double Redundancy CAN-bus Network Based on node Redundancy
如圖1所示,在已有的CAN總線雙冗余網絡中,一般由一個主節點以及若干個從節點組成,這種CAN總線網絡對總線進行了冗余設計,可以選用兩條總線都使用的熱冗余方式,也可選用故障狀態切換總線的冷冗余方式,由一個主節點來控制所有從節點來完成數據交換。本文所設計的基于節點冗余的CAN總線雙冗余網絡如圖2所示,其創新點在于在對網絡進行了總線冗余的基礎上同時對CAN網絡中作用最為重要的主節點進行了冗余設計。若系統默認的主節點出現故障時,系統能在很短的時間內檢測到其出現故障,自動啟用備份主節點,而在默認主節點恢復正常工作時,重新將網絡主控權交還給默認主節點。同時采用節點冗余和總線冗余的CAN總線網絡無疑大大增強了系統的可靠性。
本CAN網絡由默認主節點、備份主節點以及若干功能節點構成。每個節點由內嵌CAN控制器的微控制器、多路模擬開關及兩個CAN收發器組成,每個CAN收發器都各連到一路總線上。微控制器的I/O口控制多路模擬開關來選通總線0或者總線1。正常狀態下默認主節點控制總線,只有在默認主節點出現故障時備份主節點才發揮主節點作用來主控總線,兩個主節點通過判斷它們之間的數據交換指令來實施當前主控節點的切換。
為了驗證本方法的正確性,需要首先對節點間通信的幀格式進行定義,其次設置一定的通信方法,然后再在硬件上實現,通過監視工具和計算機來查看網絡數據交換情況來驗證本方法的可行性。
3.2.1 幀格式定義
由于本系統節點數目較少,故數據幀采用11位報文標識符。通過使用設置標識符來確定該幀的優先級。通過ID號的高5位的數據類型代碼可以區分節點間通信的8種基本功能;每個CAN節點都有一個地址號,來區分不同的節點。本協議規定的部分報文ID號如表1所示。

表1 本協議中的一些報文ID號Tab.1 Some message ID numbers of the protocal
3.2.2 節點間通信方法
系統上電時默認主節點為主控節點。主節點以25 ms為周期循環向備份主節點發送同步幀與狀態請求幀,備份主節點收到后回應狀態信息幀;主節點以25 ms為周期循環向各功能節點發送同步幀與數據請求幀,功能節點收到后向主節點回應狀態信息幀與數據信息幀。
若當前總線出現故障時,就進行總線切換。在時間T1內默認主節點與備份主節點都沒有收到其它節點發送的數據,就切換到備用總線上。功能節點在時間T2內沒有收到其它節點發送的數據,就切換到備用總線上。跳轉等待時間T1與T2分別為50 ms和100 ms。
若主節點出現故障時,備份主節點若在T1內未能收到狀態請求幀,則由第0路總線切換到第1路總線上。切換總線后若在5 s內仍未收到主節點發送的狀態請求幀,則發揮主節點作用,在第1路總線上向功能節點發送同步幀以及數據請求幀。若能收到功能節點發送的數據信息幀,則證明主節點發生故障,回到第0路總線上,發揮主節點作用。如果回到第0路總線上后 T1內無法與功能節點1正常通信,則證明此時總線發生故障,自動跳轉到第1路總線上。當默認主節點恢復正常后,備份主節點回到備用狀態。
整個網絡設計完成后,為了驗證本方法是否能夠正常實現,故使用周立功公司的 USBCAN-Ⅱ型接口卡進行網絡測試。為了能用較少的數據量達到驗證本協議的目的,本系統測試時只采用默認主節點、備份主節點及功能節點1組成網絡。
在此通過模擬實際工程應用中可能出現的兩種通信故障來驗證本協議的可行性,模擬的故障包括總線故障及主節點故障。網絡測試的步驟如下:
1)系統上電后工作在第0路總線上,首先斷開默認主節點的第0路總線,觀察此時網絡通信數據,如圖3所示。然后重新接通默認主節點的第0路總線,斷開第1路總線,觀察數據,如圖4所示。
2)系統在正常工作時突然給默認主節點下電,觀察此時網絡通信數據,如圖5所示。然后重新給默認主節點上電,觀察數據,如圖6所示。

圖3 工作時斷開主節點0號總線Fig.3 Cut off the NO.0 bus of the main node when the syetem at work

圖4 接通主節點0號總線,斷開主節點 1號總線Fig.4 Turn-on the NO.0 bus of the main node,and cut off the NO.1 bus of the main node

圖5 工作時給主節點下電Fig.5 Cut the power of main node when the system at work

圖6 重新給主節點上電Fig.6 Turn-on the power of the main node again
圖3 —圖6中的時間標識的單位為0.1 ms。由圖3可以看到,系統工作在第0路總線上時,網絡中所有節點都能有序地進行數據交換。在斷開第0路總線后,經過時間間隔 0x3127e0-0x3125e7=0x1f9=505×0.1 ms=50.5 ms后,默認主節點與備份主節點自動切換到第1路總線上通信。而功能節點1向默認主節點回發狀態信息幀的時間間隔為0x3129de-0x3125ed=3f1=100.9 ms。
圖4所示在重新接通主節點第0路總線,斷開默認主節點第1路總線后,所有節點自動切換到第0路總線通信,切換時間可按上文方法得到,分別為50.5 ms與100.8 ms。
圖5所示在工作時給默認主節點下電,備份主節點自動切換總線后,開始工作的時間間隔為0x4263154-0x4256d94=0xc3c0=5.0112 s。在第1路總線與功能節點1進行一次數據交換后,立即回到第0路進行數據交換。功能節點1回應的數據信息幀ID號由0x298變為0x299。
圖6所示在重新給默認主節點上電后,可以從功能節點1回應的數據信息幀的ID號可以看出:總線主控權迅速回到主節點手中,備用主節點回到備用狀態。
測試結果表明:基于節點冗余的雙冗余方法不僅能實現原有的雙冗余方法的總線冗余功能,還實現了節點冗余功能,本方法的正確性得到了驗證。
本文提出的基于節點冗余的CAN總線雙冗余方法對網絡中每個節點進行了總線冗余,同時為網絡中最為重要的主節點進行了節點冗余。系統在工作時,如果總線出現故障,系統中所有節點均能自動切換到備用總線上工作;如果主節點出現故障,備份主節點則自啟動,發揮主節點的作用。當主節點恢復正常時,備份主節點則能自行回到備份狀態。將基于節點冗余的雙冗余方法進行測試后,測試結果表明:基于節點冗余的雙冗余方法能同時實現節點冗余和總線冗余,大大提高了系統的可靠性,但是系統的故障轉換時間的誤差需要進一步降低。
[1]郭曉松,王振業,于傳強,等.基于 CAN總線的容錯冗余技術研究[J].計算機測量與控制,2009,17(1):60-63.GUO Xiaosong,WANG Zhenye,YU Chuanqiang,et al.Research of thef ault tolerant redundant technology based on CAN bus[J].Computer Measurement&Control,2009,17(1):60-63.
[2]孫立輝,原亮.基于CAN總線的雙機冗余系統設計方法[J].單片機與嵌入式系統應用,2002(9):33-35.SUN Lihui,YUAN Liang.Design of twin-MCU redundancy system based on CAN bus[J].Microcontrollers&Embedded Systems,2002(9):33-35.
[3]禹春來,許化龍,劉根旺,等.CAN總線冗余方法研究[J].測控技術,2003,22(10):28-31.YU Chunlai,XU Hualong,LIU Genwang,et al.Research of the redundant methods of CAN[J].Measurement&Control Technology,2003,22(10):28-31.
[4]陳堯,孫漢旭,賈慶軒,等.空間機器人冷熱雙冗余CAN總線系統的研制[J].電子技術應用,2008,34(2):83-88.CHEN Yao,SUN HanXu,JIA QingXuan,et al.The implementation of a dual-redundaney CAN bus system for space robot[J].Application of Electronic Technique,2008,34(2):83-88.
[5]馮源,向桂林,李軍.基于 C8051的冗余CAN總線智能節點設計[J].航空計算技術,2008,38(5):107-110.FENG Yuan,XIANG Guilin,LI Jun.Design of intelligent node in redundancy CAN bus based on C8051[J].Aeronautical Computing Technique,2008,38(5):107-110.