本發(fā)明涉及現(xiàn)場總線通信技術(shù),尤其涉及冗余CAN總線通信系統(tǒng)的數(shù)據(jù)通信方法。
背景技術(shù):
目前,CAN總線技術(shù)已被廣泛應(yīng)用于工業(yè)控制領(lǐng)域。CAN總線分為物理層、數(shù)據(jù)鏈路層和應(yīng)用層。其中,物理層和數(shù)據(jù)鏈路層遵循CAN2.0協(xié)議規(guī)范。1992年,CIA組織成立,其首要任務(wù)之一就是制定CAN應(yīng)用層協(xié)議。目前,通過的協(xié)議規(guī)范包括DeviceNet、CANOpen等。CANOpen規(guī)范是工業(yè)控制領(lǐng)域權(quán)威的規(guī)范,其包括系列文檔。其中,最基本的為CANOpen301,已正式發(fā)布并應(yīng)用。此外,CANOpen302是針對浮動(dòng)主節(jié)點(diǎn)的規(guī)范,CANOpen307是海事規(guī)范。對于安全等級要求較高的系統(tǒng)而言,尤其是硬實(shí)時(shí)嵌入式系統(tǒng)而言(海事領(lǐng)域、航空航天等領(lǐng)域),對傳輸數(shù)據(jù)的可靠性要求較高,因此通常會采用冗余CAN總線通信系統(tǒng)。冗余CAN總線通信系統(tǒng)的物理層結(jié)構(gòu)如圖1所示,其中,節(jié)點(diǎn)100包括兩個(gè)CAN控制器101、102以及兩個(gè)CAN收發(fā)器103、104。目前的冗余CAN總線系統(tǒng)主要有以下幾種通信方式:
1、雙CAN通信系統(tǒng)的簡單冗余:
這種方式簡單地將雙CAN冗余通訊系統(tǒng)作為單CAN系統(tǒng)的重復(fù),在兩條CAN總線上發(fā)送和接收數(shù)據(jù)。其通信方式過于簡單,如果在數(shù)據(jù)通信過程出現(xiàn)阻塞狀況,同一幀報(bào)文將會在不同的時(shí)間到達(dá)接收方,從而導(dǎo)致數(shù)據(jù)的反復(fù)震蕩,數(shù)據(jù)一致性差。對于實(shí)時(shí)系統(tǒng)而言,將會很大程度影響系統(tǒng)的功能和可靠性。
2、冗余系統(tǒng)的冷備份:
所謂冷備份即數(shù)據(jù)首先在一條CAN總線上進(jìn)行傳輸,當(dāng)使用的這一條CAN總線出現(xiàn)故障時(shí),再使用另外一條CAN總線代替故障的CAN總線,進(jìn)行數(shù)據(jù)的傳輸。該種傳輸機(jī)制由于任一時(shí)刻只有一條CAN總線在傳輸數(shù)據(jù),也即可以保證數(shù)據(jù)的一致性問題。但是,其存在下面問題:(1)在總線切換的過程中會出現(xiàn)數(shù)據(jù)的丟失以及數(shù)據(jù)的延時(shí)傳輸;(2)當(dāng)使用的那一條CAN總線出現(xiàn)短暫的干擾或故障時(shí),該機(jī)制失去冗余的含義,因此,對于實(shí)時(shí)系統(tǒng)而言,冷備份系統(tǒng)并不適合。
3、CANOpen307規(guī)范中使用的熱備份:
針對單CAN總線網(wǎng)絡(luò)而言,CIA組織提出了CANOpen301規(guī)范。而海事電子產(chǎn)品由于其安全等級較高,因此采用冗余CAN總線,并在CANOpen301基礎(chǔ)上提出了CANOpen307規(guī)范。目前,CANOpen307規(guī)范仍然是草稿版,未正式發(fā)布。
CANOpen307規(guī)范中也是采用熱冗余,即兩條CAN總線都進(jìn)行過程數(shù)據(jù)(PDO)的發(fā)送,其從源端保證數(shù)據(jù)的一致性。即:待發(fā)送的CAN報(bào)文,從請求發(fā)送開始,到放入CAN控制器進(jìn)行發(fā)送,會分別在兩條CAN總線上進(jìn)行計(jì)時(shí),如果超過設(shè)定的時(shí)間窗口,會將報(bào)文舍棄,從而保證數(shù)據(jù)的一致性。但是,這種通信方式存在以下問題:(1)時(shí)間窗口的設(shè)置不能無限的大,要小于報(bào)文的禁止時(shí)間,否則仍然會出現(xiàn)亂序的問題;(2)在有限的時(shí)間窗口內(nèi),可能出現(xiàn)下面情況:當(dāng)兩條CAN總線都收到干擾時(shí),會導(dǎo)致總線報(bào)文發(fā)送延遲,兩條CAN總線上的報(bào)文都超過設(shè)定的時(shí)間窗口,將報(bào)文舍棄。那么,對于實(shí)時(shí)嵌入式系統(tǒng)來講,丟棄了重要的報(bào)文,延遲了報(bào)文的接收時(shí)間,將會對系統(tǒng)產(chǎn)生不可預(yù)估,甚至是破壞性的影響。(3)在代碼實(shí)現(xiàn)機(jī)制上復(fù)雜。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題在于提供一種制造成本低的冗余CAN總線通信系統(tǒng)的數(shù)據(jù)通信方法,其能充分保證接收數(shù)據(jù)的一致性,并最大程度避免接收端產(chǎn)生新舊數(shù)據(jù)的震蕩。
為解決上述技術(shù)問題,本發(fā)明所采取的技術(shù)方案是:
冗余CAN總線通信系統(tǒng)的數(shù)據(jù)通信方法,包括以下步驟:
發(fā)送端將包含滾動(dòng)計(jì)數(shù)值a的PDO報(bào)文在兩條CAN總線上發(fā)送;發(fā)送端發(fā)送具有同一個(gè)報(bào)文ID的PDO報(bào)文時(shí),每發(fā)送一幀PDO報(bào)文,PDO報(bào)文的滾動(dòng)計(jì)數(shù)值a加1,滾動(dòng)計(jì)數(shù)值a的初始值為0,滾動(dòng)計(jì)數(shù)值的上限值為N,當(dāng)滾動(dòng)計(jì)數(shù)值a達(dá)到其上限值N時(shí),重新從1開始計(jì)數(shù);
在接收端設(shè)置期望計(jì)數(shù)器,期望計(jì)數(shù)器的計(jì)數(shù)值b用于表示期望接收到的PDO報(bào)文的滾動(dòng)計(jì)數(shù)值;接收端每接收到發(fā)送端發(fā)送的一幀PDO報(bào)文時(shí),先判斷該幀PDO報(bào)文是否有效,其中: 當(dāng)期望計(jì)數(shù)器的計(jì)數(shù)值b為0、接收到的PDO報(bào)文的滾動(dòng)計(jì)數(shù)值a為0、或者是接收到的PDO報(bào)文的滾動(dòng)計(jì)數(shù)值a等于期望計(jì)數(shù)器的計(jì)數(shù)值b時(shí),判斷接收的PDO報(bào)文有效,否則,判斷接收到的PDO報(bào)文為無效報(bào)文;
接收端在接收到滾動(dòng)計(jì)數(shù)值a為0的有效報(bào)文時(shí),將期望計(jì)數(shù)器的計(jì)數(shù)值b設(shè)為1,在接收到滾動(dòng)計(jì)數(shù)值a不為0的有效報(bào)文、且期望計(jì)數(shù)器的計(jì)數(shù)值b小于所述的上限值N時(shí),將期望計(jì)數(shù)器的計(jì)數(shù)值b更新為該有效報(bào)文的滾動(dòng)計(jì)數(shù)值加1,在接收到滾動(dòng)計(jì)數(shù)值a不為0的有效報(bào)文、且期望計(jì)數(shù)器的計(jì)數(shù)值b等于所述的上限值N時(shí),將期望計(jì)數(shù)器的計(jì)數(shù)值b更新為1;
接收端在接收到無效報(bào)文時(shí),丟棄該無效報(bào)文,并維持當(dāng)前期望計(jì)數(shù)器的計(jì)數(shù)值b不變。
本發(fā)明的冗余CAN總線通信系統(tǒng)的數(shù)據(jù)通信方法易于實(shí)現(xiàn)、可靠性高,在熱冗余傳輸?shù)那疤嵯?,即保證了接收數(shù)據(jù)的一致性,又避免了數(shù)據(jù)的震蕩,提高了實(shí)時(shí)系統(tǒng)的性能。與現(xiàn)有技術(shù)相比,本發(fā)明至少具有以下優(yōu)點(diǎn)和特點(diǎn):
1、與雙CAN通信系統(tǒng)的簡單冗余相比,解決了數(shù)據(jù)通信的亂序和數(shù)據(jù)一致性問題;
2、相比冗余系統(tǒng)的冷備份而言,可以實(shí)現(xiàn)兩條CAN總線同時(shí)進(jìn)行數(shù)據(jù)的傳輸,不存在CAN總線切換帶來的丟幀和數(shù)據(jù)通信延時(shí)問題;
3、相比CANOpen307機(jī)制而言,本發(fā)明不在發(fā)送端進(jìn)行報(bào)文的過濾,而采用接收端進(jìn)行報(bào)文的比較判斷,解決了由于時(shí)間窗口設(shè)置時(shí)導(dǎo)致丟失報(bào)文的問題,而且軟件實(shí)現(xiàn)簡單可靠;
4、本發(fā)明的發(fā)送端在兩條CAN總線上都進(jìn)行數(shù)據(jù)的傳輸,從源頭上避免了丟幀的問題,而接收端可區(qū)分出新舊報(bào)文,對新報(bào)文進(jìn)行接收,將舊報(bào)文進(jìn)行舍棄,在保證數(shù)據(jù)一致性的同時(shí),又避免了數(shù)據(jù)的震蕩。
附圖說明
圖1示出了冗余CAN總線通信系統(tǒng)的物理層結(jié)構(gòu)示意圖。
圖2示出了發(fā)送端所采用的滾動(dòng)計(jì)數(shù)機(jī)制的原理示意圖。
圖3示出了根據(jù)本發(fā)明一實(shí)施例的冗余CAN總線通信系統(tǒng)的數(shù)據(jù)通信方法的接收端流程示意圖。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)說明。
請參閱圖2。根據(jù)本發(fā)明一實(shí)施例的一種冗余CAN總線通信系統(tǒng)的數(shù)據(jù)通信方法為了防止接收方接收到的數(shù)據(jù)產(chǎn)生新舊數(shù)據(jù)的震蕩,在發(fā)送端采用了滾動(dòng)計(jì)數(shù)(Rolling Counter)的機(jī)制,在接收端進(jìn)行數(shù)據(jù)的篩選。在本實(shí)施例中,對于同一個(gè)ID的PDO報(bào)文而言,在報(bào)文的數(shù)據(jù)場中取第一個(gè)字節(jié)進(jìn)行滾動(dòng)計(jì)數(shù),該滾動(dòng)計(jì)數(shù)值最大值可以靈活設(shè)置。發(fā)送端每發(fā)送一幀報(bào)文,滾動(dòng)計(jì)數(shù)值就加1,包含該滾動(dòng)計(jì)數(shù)值的報(bào)文在兩條總線(即圖2中的默認(rèn)總線和冗余總線)上發(fā)送。發(fā)送端在上電或復(fù)位后首先發(fā)送滾動(dòng)計(jì)數(shù)值為0的報(bào)文,之后的計(jì)數(shù)從1開始,如果超過數(shù)據(jù)字典中定義的最大值,則從1開始重新計(jì)數(shù)。
請結(jié)合圖3所示。根據(jù)本發(fā)明一實(shí)施例的一種冗余CAN總線通信系統(tǒng)的數(shù)據(jù)通信方法,包括以下步驟:
發(fā)送端將包含滾動(dòng)計(jì)數(shù)值a的PDO報(bào)文在兩條CAN總線上發(fā)送;發(fā)送端發(fā)送具有同一個(gè)報(bào)文ID的PDO報(bào)文時(shí),每發(fā)送一幀PDO報(bào)文,PDO報(bào)文的滾動(dòng)計(jì)數(shù)值a加1,滾動(dòng)計(jì)數(shù)值a的初始值為0,滾動(dòng)計(jì)數(shù)值的上限值為N,當(dāng)滾動(dòng)計(jì)數(shù)值a達(dá)到其上限值N時(shí),在發(fā)送下一幀PDO報(bào)文時(shí),重新從1開始計(jì)數(shù);在本實(shí)施例中,N=255,發(fā)送端發(fā)送的第一幀PDO報(bào)文的a為1,第二幀PDO報(bào)文為2,依次類推,當(dāng)發(fā)送端發(fā)送完a=255的那一幀PDO報(bào)文之后,接下來的發(fā)送的那一幀PDO報(bào)文的滾動(dòng)計(jì)數(shù)值a=1;
在接收端設(shè)置期望計(jì)數(shù)器,期望計(jì)數(shù)器的計(jì)數(shù)值b用于表示期望接收到的PDO報(bào)文的滾動(dòng)計(jì)數(shù)值;接收端每接收到發(fā)送端發(fā)送的一幀PDO報(bào)文時(shí),先判斷該幀PDO報(bào)文是否有效,其中: 當(dāng)期望計(jì)數(shù)器的計(jì)數(shù)值b為0、接收到的PDO報(bào)文的滾動(dòng)計(jì)數(shù)值a為0、或者是接收到的PDO報(bào)文的滾動(dòng)計(jì)數(shù)值a等于期望計(jì)數(shù)器的計(jì)數(shù)值b時(shí),判斷接收的PDO報(bào)文有效,否則,判斷接收到的PDO報(bào)文為無效報(bào)文;也就是說,如果接收到的PDO報(bào)文的滾動(dòng)計(jì)數(shù)值a大于或小于當(dāng)前期望計(jì)數(shù)器的計(jì)數(shù)值b時(shí)則都將該P(yáng)DO報(bào)文視為無效;
接收端在接收到滾動(dòng)計(jì)數(shù)值a為0的有效報(bào)文時(shí),將期望計(jì)數(shù)器的計(jì)數(shù)值b強(qiáng)制設(shè)為1;接收端在接收到滾動(dòng)計(jì)數(shù)值a不為0的有效報(bào)文、且期望計(jì)數(shù)器的計(jì)數(shù)值b小于上限值N時(shí),將期望計(jì)數(shù)器的計(jì)數(shù)值b更新為該有效報(bào)文的滾動(dòng)計(jì)數(shù)值加1,即,b=a+1;接收端在接收到滾動(dòng)計(jì)數(shù)值a不為0的有效報(bào)文、且期望計(jì)數(shù)器的計(jì)數(shù)值b等于上限值N時(shí),則將期望計(jì)數(shù)器的計(jì)數(shù)值b更新為1;
接收端在接收到無效報(bào)文時(shí),丟棄該無效報(bào)文,并維持當(dāng)前期望計(jì)數(shù)器的計(jì)數(shù)值b不變。
在此要說明的是,圖3所示的接收端工作流程圖僅為示意性的,并不應(yīng)當(dāng)視為對本申請限制。例如,接收端也可以先判斷a是否為0,而后判斷b是否為0。
本實(shí)施例中,接收方端對接收到的報(bào)文進(jìn)行了過濾,從而能充分保證接收數(shù)據(jù)的一致性,并最大程度避免接收端產(chǎn)生新舊數(shù)據(jù)的震蕩。
舉例來說,假設(shè)發(fā)送端發(fā)送的第一幀PDO報(bào)文在兩條CAN總線上同時(shí)進(jìn)行傳輸,該P(yáng)DO報(bào)文的滾動(dòng)計(jì)數(shù)值a=0。如果接收端通過其中一條CAN總線先接收到該幀報(bào)文,因a=0會判斷該P(yáng)DO報(bào)文為有效報(bào)文,并使b=1,也就是說,接收端期望接收到的下一幀PDO報(bào)文的滾動(dòng)計(jì)數(shù)值為1。當(dāng)在另一條CAN總線上傳輸?shù)?、滾動(dòng)計(jì)數(shù)值為0的PDO報(bào)文后傳輸?shù)浇邮斩藭r(shí),因a=0,仍然會被接收端判斷為有效報(bào)文,同時(shí)期望計(jì)數(shù)器的計(jì)數(shù)值b仍然為1。接下來,假設(shè)發(fā)送端又將第二幀PDO報(bào)文同時(shí)在兩條CAN總線上進(jìn)行傳輸,此時(shí)第二幀PDO報(bào)文的滾動(dòng)計(jì)數(shù)值a=1。如果接收端又通過其中一條CAN總線先接收到該幀報(bào)文,由于b=a=1,接收端會判斷該P(yáng)DO報(bào)文為有效報(bào)文,并使b=1+1=2。而當(dāng)在另一條CAN總線上傳輸?shù)?、滾動(dòng)計(jì)數(shù)值為1的PDO報(bào)文后傳輸?shù)浇邮斩藭r(shí),因1<2,會被接收端判斷為無效報(bào)文而被舍棄。依此類推,假設(shè)接收端通過其中一條CAN總線先接收到了a=255的這一幀有效報(bào)文,因此時(shí)期望計(jì)數(shù)器的計(jì)數(shù)值b也等于255,則會使b=1。而當(dāng)在另一條CAN總線上傳輸?shù)?、滾動(dòng)計(jì)數(shù)值為255的PDO報(bào)文后傳輸?shù)浇邮斩藭r(shí),因255≠1,還是會被接收端判斷為無效報(bào)文而被舍棄。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。