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