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