本發(fā)明涉及現(xiàn)場總線通信技術(shù),尤其涉及冗余CAN總線通信系統(tǒng)的數(shù)據(jù)通信方法。
背景技術(shù):
目前,CAN總線技術(shù)已被廣泛應用于工業(yè)控制領域。CAN總線分為物理層、數(shù)據(jù)鏈路層和應用層。其中,物理層和數(shù)據(jù)鏈路層遵循CAN2.0協(xié)議規(guī)范。1992年,CIA組織成立,其首要任務之一就是制定CAN應用層協(xié)議。目前,通過的協(xié)議規(guī)范包括DeviceNet、CANOpen等。CANOpen規(guī)范是工業(yè)控制領域權(quán)威的規(guī)范,其包括系列文檔。其中,最基本的為CANOpen301,已正式發(fā)布并應用。此外,CANOpen302是針對浮動主節(jié)點的規(guī)范,CANOpen307是海事規(guī)范。對于安全等級要求較高的系統(tǒng)而言,尤其是硬實時嵌入式系統(tǒng)而言(海事領域、航空航天等領域),對傳輸數(shù)據(jù)的可靠性要求較高,因此通常會采用冗余CAN總線通信系統(tǒng)。冗余CAN總線通信系統(tǒng)的物理層結(jié)構(gòu)如圖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)機制上復雜。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題在于提供一種制造成本低的冗余CAN總線通信系統(tǒng)的數(shù)據(jù)通信方法,其能充分保證接收數(shù)據(jù)的實時性和一致性,并最大程度避免接收端產(chǎn)生新舊數(shù)據(jù)的震蕩。
為解決上述技術(shù)問題,本發(fā)明所采取的技術(shù)方案是:
冗余CAN總線通信系統(tǒng)的數(shù)據(jù)通信方法,包括以下步驟:
a、發(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ù);
b、在接收端設置期望計數(shù)器和無效接收窗口,期望計數(shù)器的計數(shù)值b用于表示期望接收到的PDO報文的滾動計數(shù)值,該無效接收窗口所對應的PDO報文的滾動計數(shù)值范圍由M幀PDO報文的計數(shù)值共同組成,該M幀PDO報文位于期望接收到的PDO報文之前,并緊鄰該期望接收到的PDO報文;M為預設的窗口寬度;接收端每接收到發(fā)送端發(fā)送的一幀PDO報文時,先判斷該幀PDO報文是否有效,其中: 除接收到的PDO報文的滾動計數(shù)值a為0的情況以外,當接收到的PDO報文的滾動計數(shù)值a落入無效接收窗口對應的PDO報文滾動計數(shù)值范圍內(nèi)時,接收端判斷接收到的PDO報文為無效報文;當期望計數(shù)器的計數(shù)值b為0、接收到的PDO報文的滾動計數(shù)值a為0、或者是接收到的PDO報文的滾動計數(shù)值a不在無效接收窗口對應的PDO報文滾動計數(shù)值范圍內(nèi)時,接收端判斷接收的PDO報文有效;
c、接收端在接收到滾動計數(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;
d、接收端在接收到無效報文時,丟棄該無效報文,并維持當前期望計數(shù)器的計數(shù)值b不變。
本發(fā)明的冗余CAN總線通信系統(tǒng)的數(shù)據(jù)通信方法易于實現(xiàn)、可靠性高,在熱冗余傳輸?shù)那疤嵯?,即保證了接收數(shù)據(jù)的一致性,又避免了數(shù)據(jù)的震蕩,提高了實時系統(tǒng)的性能。與現(xiàn)有技術(shù)相比,本發(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ù)的傳輸,從源頭上避免了丟幀的問題。而接收端通過設置接收窗口,可在CAN總線通信系統(tǒng)發(fā)生的故障的情況下也能更好地區(qū)分出新舊報文,對新報文進行接收,將舊報文進行舍棄,提高了數(shù)據(jù)接收的實時性,并能對故障做出報警,在保證數(shù)據(jù)一致性的同時,又避免了數(shù)據(jù)的震蕩。
附圖說明
圖1示出了冗余CAN總線通信系統(tǒng)的物理層結(jié)構(gòu)示意圖。
圖2示出了發(fā)送端所采用的滾動計數(shù)機制的原理示意圖。
圖3示出了根據(jù)本發(fā)明一實施例的一種冗余CAN總線通信系統(tǒng)的數(shù)據(jù)通信方法的接收端流程示意圖。
具體實施方式
下面結(jié)合附圖和具體實施例對本發(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開始,如果超過設定的最大值,則從1開始重新計數(shù)。
根據(jù)本發(fā)明一實施例的一種冗余CAN總線通信系統(tǒng)的數(shù)據(jù)通信方法,包括以下步驟:
步驟a、發(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。
步驟b、在接收端設置期望計數(shù)器和無效接收窗口,期望計數(shù)器的計數(shù)值b用于表示期望接收到的PDO報文的滾動計數(shù)值,無效接收窗口所對應的PDO報文的滾動計數(shù)值范圍由M幀PDO報文的計數(shù)值共同組成,該M幀PDO報文位于期望接收到的PDO報文之前,并緊鄰該期望接收到的PDO報文;M為預設的窗口寬度;接收端每接收到發(fā)送端發(fā)送的一幀PDO報文時,先判斷該幀PDO報文是否有效,其中: 除接收到的PDO報文的滾動計數(shù)值a為0的情況以外,當接收到的PDO報文的滾動計數(shù)值a落入無效接收窗口對應的PDO報文滾動計數(shù)值范圍內(nèi)時,接收端判斷接收到的PDO報文為無效報文;當期望計數(shù)器的計數(shù)值b為0、接收到的PDO報文的滾動計數(shù)值a為0、或者是接收到的PDO報文的滾動計數(shù)值a不在無效接收窗口對應的PDO報文滾動計數(shù)值范圍內(nèi)時,接收端判斷接收的PDO報文有效。
在本實施例中,當接收端在接收到PDO報文的滾動計數(shù)值a為0的報文時,會對外發(fā)出發(fā)送端正在重啟的通知信息,以讓外界知道目前發(fā)送端正在進行重啟。
在本實施例中,在接收端還設有正常接收窗口,正常接收窗口所對應的PDO報文的滾動計數(shù)值范圍由期望接收到的PDO報文和M幀PDO報文的滾動計數(shù)值共同組成,該M幀PDO報文位于期望接收到的PDO報文之后,并緊鄰該期望接收到的PDO報文。接收端在接收到有效的PDO報文時,如果該有效的PDO報文的滾動計數(shù)值a既不為0也不在正常接收窗口所對應的PDO報文滾動計數(shù)值范圍內(nèi),則接收端對外發(fā)出故障報警信息,以讓外界知道冗余CAN總線通信系統(tǒng)發(fā)生了故障。
預設的窗口寬度M可以采用以下公式確定:
使用這樣的方式確定該M值,可以保證只要一條總線上的報文的延遲時間在所預估的可能的最大延遲時間之內(nèi)時,滾動計數(shù)的機制都能夠起到有效的作用,避免數(shù)據(jù)振蕩。本實施例中,預設的窗口寬度M的取值范圍可設為5<M<50。
步驟c、接收端在接收到滾動計數(shù)值a為0的有效報文時,將期望計數(shù)器的計數(shù)值強制設為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。
步驟d、接收端在接收到無效報文時,丟棄該無效報文,并維持當前期望計數(shù)器的計數(shù)值b不變。
舉例來說,在窗口寬度M=10的情況下,假設發(fā)送端發(fā)送的第一幀PDO報文在兩條CAN總線上同時進行傳輸,該PDO報文的滾動計數(shù)值a=0。如果接收端通過其中一條CAN總線先接收到該幀報文,因a=0會判斷該PDO報文為有效報文,并使b=1,也就是說,接收端期望接收到的下一幀PDO報文的滾動計數(shù)值為1,同時接收端還會對外發(fā)出發(fā)送端正在重啟的通知信息。當在另一條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ù)?、滾動計數(shù)值為1的PDO報文后傳輸?shù)浇邮斩藭r,因1<2,會被接收端判斷為無效報文而被舍棄(即后接收到的PDO報文的滾動計數(shù)值a落入無效接收窗口的范圍內(nèi))。依此類推,假設接收端通過其中一條CAN總線先接收到了a=255的這一幀有效報文,因此時期望計數(shù)器的計數(shù)值b也等于255,則會使b=1。此時,期望發(fā)送端發(fā)送的PDO報文的滾動計數(shù)值a為1,無效接收窗口對應的PDO報文的滾動計數(shù)值范圍由期望接收到的PDO報文之前的連續(xù)10幀PDO報文的計數(shù)值共同組成,即a=246~255,只要是發(fā)送端發(fā)送過來的PDO報文的滾動計數(shù)值a為246~255中的任意一者都算是落入了無效接收窗口的范圍,因此,當在另一條CAN總線上傳輸?shù)?、滾動計數(shù)值為255的PDO報文后傳輸?shù)浇邮斩藭r,因255屬于無效接收窗口的范圍內(nèi),還是會被接收端判斷為無效報文而被丟棄。
當冗余CAN總線通信系統(tǒng)的硬件在運行過程中發(fā)生了某些臨時性的故障,比如CAN發(fā)送器和接收器端子的松動導致在一定時間內(nèi)發(fā)送端發(fā)送的數(shù)據(jù)無法傳輸至接收端,本申請因為設置了無效接收窗口可以避免因為這種故障導致系統(tǒng)停止工作,也能保障系統(tǒng)運行具有良好的實時性。
如果一條總線上的報文發(fā)生阻塞,導致報文發(fā)送延遲,當總線恢復正常后,延遲的總線發(fā)送給接收端的報文因為其計數(shù)值小于另一邊總線接收的報文的計數(shù)值,所以會被舍棄。而如果一條CAN線總線負載較低,運行狀態(tài)良好,則接收到最新的滾動計數(shù)值,也即意味著該幀報文為最新的數(shù)據(jù),所以該數(shù)據(jù)將會應用到系統(tǒng)中,從而滿足系統(tǒng)的實時性需求。
圖3示出了根據(jù)本發(fā)明一實施例的一種冗余CAN總線通信系統(tǒng)的數(shù)據(jù)通信方法的接收端流程示意圖,圖3示出了接收端如何判斷接收的PDO報文為有效報文的一個具體應用實例。然而,圖3所示的接收端工作流程圖僅為示意性的,并不應當視為對本申請限制,例如,接收端也可以先判斷a是否為0,而后判斷b是否為0,接收端也可以采用其它的算法判斷接收的PDO報文是否為有效報文。
根據(jù)圖3的記載,前述的步驟b進一步包括以下步驟:
接收端每接收到發(fā)送端發(fā)送的一幀PDO報文時,先判斷所述期望計數(shù)器的計數(shù)值b 是否為0,如果b=0,則判斷接收到的PDO報文為有效報文;
如果b≠0,接收端判斷接收到的PDO報文的滾動計數(shù)值a是否為0,如果a=0,則判斷接收到的PDO報文為有效報文;
如果a≠0,接收端判斷期望計數(shù)器的計數(shù)值b與該接收到的PDO報文的滾動計數(shù)值a的差值c是否小于0,c=a-b;如果c不小于0,則直接判斷c是否大于等于0且小于預設的窗口寬度M,如果c<0,則將c+N賦給c后再判斷c是否大于等于0且小于預設的窗口寬度M;
如果接收端判斷c是大于等于0且小于預設的窗口寬度M,則判斷接收到的PDO報文為有效報文,即接收到的PDO報文的滾動計數(shù)值a處于正常接收窗口對應的PDO報文滾動計數(shù)值范圍內(nèi)。如果接收端判斷c不是大于等于0且小于預設的窗口寬度M,則進一步判斷c是否大于等于M且小于報文有效但發(fā)生故障的閾值T,T=N-M;
如果接收端判斷c是大于等于M且小于報文有效但發(fā)生故障的閾值T,則接收端判斷接收到的PDO報文為有效報文并對外發(fā)出故障報警信息;如果接收端判斷c不是大于等于M且小于報文有效但發(fā)生故障的閾值T,則c應該是大于等于T且小于N,此時判斷接收到的PDO報文為無效報文,即接收到的PDO報文的滾動計數(shù)值a處于無效接收窗口對應的PDO報文滾動計數(shù)值范圍內(nèi)。
舉例而言,在預設的窗口閾值M=10、N=255的情況下,則報文有效但發(fā)生故障的閾值T=N-M=255-10=245。假設當前期望計數(shù)器的計數(shù)值b為200,如果接收端接下來接收到PDO報文的滾動計數(shù)值a為190~199中的任一者時,則判斷這些PDO報文的滾動計數(shù)值a處于無效接收窗口對應的PDO報文滾動計數(shù)值范圍內(nèi),接收的PDO報文為舊的無效報文。如果接下來接收到PDO報文的滾動計數(shù)值a為200~210中的任一者時,則判斷這些PDO報文的滾動計數(shù)值a處于正常接收窗口對應的PDO報文滾動計數(shù)值范圍內(nèi),接收的PDO報文為有效報文。如果接下來接收到PDO報文的滾動計數(shù)值a為0~189或211~255中的任一者時,則判斷接收到的PDO報文為有效報文并對外發(fā)出故障報警信息。
在實際應用如果通過圖3所示的算法流程則是按照以下方式來計算和判斷的。假設在當前期望計數(shù)器的計數(shù)值b為200時,冗余CAN總線通信系統(tǒng)發(fā)生了因此故障,隨后接收端接收到了滾動計數(shù)值a等于10的報文。由于c=a-b=-190,小于0,則使c=N+c=255-190=65。然后判斷65是否大于等于0且小于預設的窗口閾值M,M=10。由于65大于10,因此接收端接下來判斷65是否大于等于M且小于報文有效但發(fā)生故障的閾值T,T=245。由于65大于10且小于245,因此,接收端判斷接收到的PDO報文為有效報文并對外發(fā)出故障報警信息。這與前面的記載是相吻合的。
本實施例中,接收方端對接收到的報文進行了過濾,從而能充分保證接收數(shù)據(jù)的一致性,并最大程度避免接收端產(chǎn)生新舊數(shù)據(jù)的震蕩,同時也高了數(shù)據(jù)接收的實時性。
顯然,本領域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。