王紅亮,田帥帥
(中北大學儀器科學與動態(tài)測試教育部重點實驗室,電子測試技術國家重點實驗室,山西太原 030051)
隨著CAN總線在工業(yè)控制領域的廣泛應用,CAN總線網(wǎng)絡中的節(jié)點數(shù)目越來越多,通信距離越來越長,這對CAN總線的通信可靠性提出了更高的要求[1]。目前在提高CAN總線測試系統(tǒng)可靠性的諸多措施中,冗余是一種行之有效的手段[2]。此前對CAN總線的冗余大多只是對總線的冗余,包括熱冗余和冷冗余兩種方式,能在一定程度上減少惡劣工作環(huán)境對CAN總線工作的影響[3-5]。但是若網(wǎng)絡中作用最為關鍵的主節(jié)點出現(xiàn)故障,則整個網(wǎng)絡將陷于癱瘓狀態(tài)。本文針對此問題,提出了一種基于節(jié)點冗余的CAN總線網(wǎng)絡雙冗余方法。
在傳統(tǒng)的冗余技術中,基本上都只對總線進行了冗余設計。主要方式包括冷冗余與熱冗余兩種方式。熱冗余方式是指使用兩條總線電纜,每個節(jié)點內(nèi)部使用兩個總線驅動器,但只有一個總線控制器。當節(jié)點發(fā)送時,總線控制器通過兩個總線驅動器同時向兩條總線發(fā)送相同的報文。在接收過程中,判斷電路自動選擇兩條總線中的一個并將其中的報文送入總線控制器。冷冗余是指當節(jié)點發(fā)送時,總線控制器通過兩個總線驅動器同時向兩條總線發(fā)送相同的報文。在接收時,單片機通過門控電路將一個CAN發(fā)送器的信號輸入CAN控制器進行接收。冷冗余功耗較低但實時性差,在高速傳輸時不易保證數(shù)據(jù)傳輸?shù)乃俾屎驼_性。熱冗余雖然有較好的實時性,但功耗相對較大。在目前已查到的資料中,大部分冗余設計都是單純的冷冗余或者熱冗余。也有采用冷冗余和熱冗余結合的雙冗余設計方式。具體方法詳見參考文獻[3]。但無論是熱冗余還是冷冗余,都只能在總線層面對系統(tǒng)進行冗余設計。當網(wǎng)絡中的主節(jié)點出現(xiàn)故障時,則這種冗余方式無法發(fā)揮任何作用,整個網(wǎng)絡的可靠性無法得到保證,因此其適用范圍也受到了一定限制。
本節(jié)將首先對原有的冗余方法與本文所設計的基于節(jié)點冗余的的雙冗余方法進行比較,然后針對本文所提出的新方法進行介紹。
圖1 已有的CAN總線雙冗余網(wǎng)絡Fig.1 Double CAN-bus redundancy network of foregone
圖2 基于節(jié)點冗余的CAN總線雙冗余網(wǎng)絡Fig.2 Double Redundancy CAN-bus Network Based on node Redundancy
如圖1所示,在已有的CAN總線雙冗余網(wǎng)絡中,一般由一個主節(jié)點以及若干個從節(jié)點組成,這種CAN總線網(wǎng)絡對總線進行了冗余設計,可以選用兩條總線都使用的熱冗余方式,也可選用故障狀態(tài)切換總線的冷冗余方式,由一個主節(jié)點來控制所有從節(jié)點來完成數(shù)據(jù)交換。本文所設計的基于節(jié)點冗余的CAN總線雙冗余網(wǎng)絡如圖2所示,其創(chuàng)新點在于在對網(wǎng)絡進行了總線冗余的基礎上同時對CAN網(wǎng)絡中作用最為重要的主節(jié)點進行了冗余設計。若系統(tǒng)默認的主節(jié)點出現(xiàn)故障時,系統(tǒng)能在很短的時間內(nèi)檢測到其出現(xiàn)故障,自動啟用備份主節(jié)點,而在默認主節(jié)點恢復正常工作時,重新將網(wǎng)絡主控權交還給默認主節(jié)點。同時采用節(jié)點冗余和總線冗余的CAN總線網(wǎng)絡無疑大大增強了系統(tǒng)的可靠性。
本CAN網(wǎng)絡由默認主節(jié)點、備份主節(jié)點以及若干功能節(jié)點構成。每個節(jié)點由內(nèi)嵌CAN控制器的微控制器、多路模擬開關及兩個CAN收發(fā)器組成,每個CAN收發(fā)器都各連到一路總線上。微控制器的I/O口控制多路模擬開關來選通總線0或者總線1。正常狀態(tài)下默認主節(jié)點控制總線,只有在默認主節(jié)點出現(xiàn)故障時備份主節(jié)點才發(fā)揮主節(jié)點作用來主控總線,兩個主節(jié)點通過判斷它們之間的數(shù)據(jù)交換指令來實施當前主控節(jié)點的切換。
為了驗證本方法的正確性,需要首先對節(jié)點間通信的幀格式進行定義,其次設置一定的通信方法,然后再在硬件上實現(xiàn),通過監(jiān)視工具和計算機來查看網(wǎng)絡數(shù)據(jù)交換情況來驗證本方法的可行性。
3.2.1 幀格式定義
由于本系統(tǒng)節(jié)點數(shù)目較少,故數(shù)據(jù)幀采用11位報文標識符。通過使用設置標識符來確定該幀的優(yōu)先級。通過ID號的高5位的數(shù)據(jù)類型代碼可以區(qū)分節(jié)點間通信的8種基本功能;每個CAN節(jié)點都有一個地址號,來區(qū)分不同的節(jié)點。本協(xié)議規(guī)定的部分報文ID號如表1所示。
表1 本協(xié)議中的一些報文ID號Tab.1 Some message ID numbers of the protocal
3.2.2 節(jié)點間通信方法
系統(tǒng)上電時默認主節(jié)點為主控節(jié)點。主節(jié)點以25 ms為周期循環(huán)向備份主節(jié)點發(fā)送同步幀與狀態(tài)請求幀,備份主節(jié)點收到后回應狀態(tài)信息幀;主節(jié)點以25 ms為周期循環(huán)向各功能節(jié)點發(fā)送同步幀與數(shù)據(jù)請求幀,功能節(jié)點收到后向主節(jié)點回應狀態(tài)信息幀與數(shù)據(jù)信息幀。
若當前總線出現(xiàn)故障時,就進行總線切換。在時間T1內(nèi)默認主節(jié)點與備份主節(jié)點都沒有收到其它節(jié)點發(fā)送的數(shù)據(jù),就切換到備用總線上。功能節(jié)點在時間T2內(nèi)沒有收到其它節(jié)點發(fā)送的數(shù)據(jù),就切換到備用總線上。跳轉等待時間T1與T2分別為50 ms和100 ms。
若主節(jié)點出現(xiàn)故障時,備份主節(jié)點若在T1內(nèi)未能收到狀態(tài)請求幀,則由第0路總線切換到第1路總線上。切換總線后若在5 s內(nèi)仍未收到主節(jié)點發(fā)送的狀態(tài)請求幀,則發(fā)揮主節(jié)點作用,在第1路總線上向功能節(jié)點發(fā)送同步幀以及數(shù)據(jù)請求幀。若能收到功能節(jié)點發(fā)送的數(shù)據(jù)信息幀,則證明主節(jié)點發(fā)生故障,回到第0路總線上,發(fā)揮主節(jié)點作用。如果回到第0路總線上后 T1內(nèi)無法與功能節(jié)點1正常通信,則證明此時總線發(fā)生故障,自動跳轉到第1路總線上。當默認主節(jié)點恢復正常后,備份主節(jié)點回到備用狀態(tài)。
整個網(wǎng)絡設計完成后,為了驗證本方法是否能夠正常實現(xiàn),故使用周立功公司的 USBCAN-Ⅱ型接口卡進行網(wǎng)絡測試。為了能用較少的數(shù)據(jù)量達到驗證本協(xié)議的目的,本系統(tǒng)測試時只采用默認主節(jié)點、備份主節(jié)點及功能節(jié)點1組成網(wǎng)絡。
在此通過模擬實際工程應用中可能出現(xiàn)的兩種通信故障來驗證本協(xié)議的可行性,模擬的故障包括總線故障及主節(jié)點故障。網(wǎng)絡測試的步驟如下:
1)系統(tǒng)上電后工作在第0路總線上,首先斷開默認主節(jié)點的第0路總線,觀察此時網(wǎng)絡通信數(shù)據(jù),如圖3所示。然后重新接通默認主節(jié)點的第0路總線,斷開第1路總線,觀察數(shù)據(jù),如圖4所示。
2)系統(tǒng)在正常工作時突然給默認主節(jié)點下電,觀察此時網(wǎng)絡通信數(shù)據(jù),如圖5所示。然后重新給默認主節(jié)點上電,觀察數(shù)據(jù),如圖6所示。
圖3 工作時斷開主節(jié)點0號總線Fig.3 Cut off the NO.0 bus of the main node when the syetem at work
圖4 接通主節(jié)點0號總線,斷開主節(jié)點 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 工作時給主節(jié)點下電Fig.5 Cut the power of main node when the system at work
圖6 重新給主節(jié)點上電Fig.6 Turn-on the power of the main node again
圖3 —圖6中的時間標識的單位為0.1 ms。由圖3可以看到,系統(tǒng)工作在第0路總線上時,網(wǎng)絡中所有節(jié)點都能有序地進行數(shù)據(jù)交換。在斷開第0路總線后,經(jīng)過時間間隔 0x3127e0-0x3125e7=0x1f9=505×0.1 ms=50.5 ms后,默認主節(jié)點與備份主節(jié)點自動切換到第1路總線上通信。而功能節(jié)點1向默認主節(jié)點回發(fā)狀態(tài)信息幀的時間間隔為0x3129de-0x3125ed=3f1=100.9 ms。
圖4所示在重新接通主節(jié)點第0路總線,斷開默認主節(jié)點第1路總線后,所有節(jié)點自動切換到第0路總線通信,切換時間可按上文方法得到,分別為50.5 ms與100.8 ms。
圖5所示在工作時給默認主節(jié)點下電,備份主節(jié)點自動切換總線后,開始工作的時間間隔為0x4263154-0x4256d94=0xc3c0=5.0112 s。在第1路總線與功能節(jié)點1進行一次數(shù)據(jù)交換后,立即回到第0路進行數(shù)據(jù)交換。功能節(jié)點1回應的數(shù)據(jù)信息幀ID號由0x298變?yōu)?x299。
圖6所示在重新給默認主節(jié)點上電后,可以從功能節(jié)點1回應的數(shù)據(jù)信息幀的ID號可以看出:總線主控權迅速回到主節(jié)點手中,備用主節(jié)點回到備用狀態(tài)。
測試結果表明:基于節(jié)點冗余的雙冗余方法不僅能實現(xiàn)原有的雙冗余方法的總線冗余功能,還實現(xiàn)了節(jié)點冗余功能,本方法的正確性得到了驗證。
本文提出的基于節(jié)點冗余的CAN總線雙冗余方法對網(wǎng)絡中每個節(jié)點進行了總線冗余,同時為網(wǎng)絡中最為重要的主節(jié)點進行了節(jié)點冗余。系統(tǒng)在工作時,如果總線出現(xiàn)故障,系統(tǒng)中所有節(jié)點均能自動切換到備用總線上工作;如果主節(jié)點出現(xiàn)故障,備份主節(jié)點則自啟動,發(fā)揮主節(jié)點的作用。當主節(jié)點恢復正常時,備份主節(jié)點則能自行回到備份狀態(tài)。將基于節(jié)點冗余的雙冗余方法進行測試后,測試結果表明:基于節(jié)點冗余的雙冗余方法能同時實現(xiàn)節(jié)點冗余和總線冗余,大大提高了系統(tǒng)的可靠性,但是系統(tǒng)的故障轉換時間的誤差需要進一步降低。
[1]郭曉松,王振業(yè),于傳強,等.基于 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總線的雙機冗余系統(tǒng)設計方法[J].單片機與嵌入式系統(tǒng)應用,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總線系統(tǒng)的研制[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總線智能節(jié)點設計[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.