專利名稱:一種多設備can通訊智能重發方法
技術領域:
本發明涉及一種多設備CAN通訊智能重發方法。
背景技術:
在實際應用中,CAN通信的數據基本上多是實時數據,多臺CAN通信設備連接時,由于CAN通信機制采用的是生產者與消費者消費者模式是通信模式,在這種模式下可以 接收數據模式,每個設備都可以作為生產者也可以作為消費者,所以互相通信時就會存在總線仲裁問題,CAN模塊在發送數據的時候,也同時會對總線進行監聽,當實際情況中有仲裁的情況發生時,系統將會自動觸發CAN總線的仲裁機制,進行仲裁處理。假設兩個節點同時發送數據,A節點發送的前5個位是10000,B節點為10001,在前4個位發送完畢的時候,兩個節點都會認為自己發送成功因為前4位相同,所以不報錯,即認為是發送成功,但是當發送到第5個位的時候,B節點會失去仲裁,因為0的優先級高于I的優先級,B節點監聽到總線上不是1,因此失去仲裁,等待重新發送數據。對于CAN通信,假設仲裁出錯也會表示發送完成,而實際上數據并沒有發送成功,導致當前總線競爭失敗而且放棄當前發送狀態,進而影響到通訊系統出錯和失效。目前在CAN通信中仲裁出錯,采用的是錯誤硬件重發方法來解決仲裁錯誤問題,但是存在不安全因素,當發送不成功則會一直發送,直到發送成功為止。在CAN嘗試發送數據過程中,沒有更新郵箱(CAN通信用郵箱發送或者接收數據,發送的數據和接收的數據都放在郵箱里,一旦總線空閑就直接發送數據,不需要CPU的參與)中數據,往往導致數據過時而會誤導消費者,容易產生誤操作。現有的硬件重發機制,如圖I所示,由于沒有考慮數據的實時更新,沒有發送成功的數據一直在重發,一旦重發的失去實時性的數據發送成功,很容易導致信號邏輯混亂,嚴重時會造成設備故障性損傷和人員傷亡,因此,有必要對現有的重發機制進行改進。因此,有必要設計一種多設備CAN通訊智能重發方法。
發明內容
本發明所要解決的技術問題是提供一種多設備CAN通訊智能重發方法,該多設備CAN通訊智能重發方法易于實施,且能保障控制系統的運行安全性能。發明的技術解決方案如下一種多設備CAN通訊智能重發方法,多個CAN控制器均連接在CAN總線上;多個CAN控制器采用標識符列表過濾機制實現報文過濾,即屏蔽與本CAN控制器無關的CAN控制器發來的報文標識符;每一個CAN控制器中具有2個發送郵箱,具有同等優先級,分別為郵箱I和郵箱2,郵箱I用于按正常邏輯要求發送報文,郵箱2用于發送因錯誤而重發的報文;網絡中的CAN控制器以定時方式或者事件觸發方式用郵箱I發送正常邏輯產生的報文到CAN總線上;
若同一時刻,有多個CAN控制器發送報文到CAN總線上,(當網路中的CAN控制器都監測到總線空閑而且都要發送數據時就會產生總線競爭現象,)此時,每個網絡中的CAN控制器就會啟用總線仲裁,報文標識符(報文包含數據與報文標識符,報文標識符即對應CAN控制器的ID號)小的競爭到總線數據能完成發送,而報文標識符大的退出仲裁丟棄郵箱中的數據同時使能狀態寄存器中的對應仲裁出錯位;在CAN控制器總線仲裁中,報文標識符越小優先級越高,報文標識符最 小的CAN控制器競爭到總線,能夠正常完成報文發送;未競爭到總線的CAN控制器將數據重新加載到本CAN控制器的郵箱2中,在總線空閑時又將該數據發送到CAN總線上;若此時CAN總線上仍有多個CAN控制器同時發送數據,又將產生新的一輪總線競爭;若此時CAN總線沒有其他CAN控制器同時發送數據,則當前的CAN控制器將數據成功發出;采用重發次數限定機制防止數據無限制重發;所述的重發次數限定機制為每一個CAN控制器的重發計數值的初值為0,當前待發送的數據每重發一次,則重發計數值增加1,如果某CAN控制器將該當前待發送的數據成功發出,則重發計數值清零;當重發計數值達到了預先設定的閾值即重發次數N,則放棄當前待發送的數據,不再重發。各CAN控制器每次發送一次正常邏輯產生的數據間隔為發送數據間隔時間T=重發次數N x(報文位數F/波特率B)。N大于等于CAN控制器數量。重發次數N根據現場CAN控制器的個數與每個CAN控制器的發送的報文標識符個數采用優化方式配置,如現場有10臺CAN控制器,每個控制器發送3個報文標識符,由于每個控制器的報文標識符優先級相同,那么最壞的情況是每次10個控制器都競爭總線,則重發次數N大于等于10,以上條件以CAN控制器每次發送正常邏輯報文的時間間隔能夠至少發送N個報文。有益效果本發明的多設備CAN通訊智能重發方法與現有技術相比,本發明的優點就在于I、通過時刻更新發送郵箱中數據內容與設備數據緩沖區同步,保證了數據的完整與實時,克服了硬件重發機制無法保障實時性的缺陷,能提高控制系統的運行安全性能。2、當發送到一定次數后,如果發送依舊不成功將不再發送,進而釋放總線,減少CAN總線負擔,提高數據發送成功率,保證控制器不會由于不斷重發錯誤超出預定數而進入離線狀態,同時由于總線負擔減少使得處于離線狀態的控制器能夠有足夠的總線空余而從新加入總線競爭。
圖I為CAN硬件自動重發方法的流程圖;圖2為多設備CAN通訊智能重發方法的流程圖;圖3為網絡拓撲具體實施例方式以下將結合附圖和具體實施例對本發明做進一步詳細說明本實施例的多設備CAN通訊智能重發方法分為3個步驟
步驟(I)初始化CAN通信為硬件過濾方式實現報文標識符的過濾,采用標示符列表模式屏蔽與當前設備無關的報文標識符(CAN-ID),在CAN協議里,報文的標識符(CAN-ID)不代表節點的地址,CAN是多主通信方式,因此,發送者以廣播的形式把報文發送給所有的接收者。每個 網絡節點在接收報文時一根據報文標識符的值通過硬件過濾,決定軟件是否需要該報文;如果需要,就拷貝到SRAM里;如果不需要,報文就被丟棄且無需軟件的干預,每次交換8個字節的實時數據;通過設置CAN控制器的過濾標識符列表寄存器,本網絡節點的要接收的報文標識符寫入過濾標示符列表寄存器,這樣硬件會自動過濾與列表不相符的標識符。步驟(2)設置報文標識符(CAN-ID)的發送優先級,同時設置郵箱發送的優先級,CAN通信通過郵箱發送報文標識符。每個網絡節點的報文標識符(CAN-ID)采用FIFO經典的包調度策略,先到先發送,實現采用排隊循環方式,每個CAN-ID都用同等的優先級;設置長度為64的一個發送數據的結構循環列表PtrCANDataStream (結構體包含標識符、標識符類型、數據等信息);一個讀出數據發送位置參數Readpostion ;一個寫入數據位置參數Writepostion ;網絡節點初始化時 ptrCANDataStrearn 為空,Readpostion 為 0, Writepostion為0,當有要數據要發送時,當前的數據內容寫入ptrCANDataStream,同時Writepostion加I (當Writepostion大于等于64時,Writepostion變為0),調度程序不斷判斷當前ptrCANDataStream 列表的 Readpostion 參數與 Writepostion 參數,當 Writepostion 大于Readpostion 時,發送Readpostion 當前位置的數據同時Readpostion加 KiWritepostion大于等于64時,Writepostion變為0),直到Readpostion與Writepostion相等;假設當前有數據要發送,數據寫入ptrCANDataStream后,Writepostion加I, Writepostion剛剛好等于Readpostion,那么放棄前面的寫入數據,清空ptrCANDataStream,等待下次要發送的數據。步驟(3)總線競爭策略的實現,通過郵箱I發送普通的報文標,郵箱2發送重發的報文。設置一個參數設置一個參數結構體TxFrameFAULT (包含保存發送的報文標示符faultID,重發標志TxRsdFlag,重發次數記數數組count[128],包含本網絡節點的報文標示符數組 TxFrame [128])。初始化時把本網絡節點的發送報文標識符按照從小到大的順序保存在TxFrame [128];同時 faultID、TxRsdFlag、count 清零;網絡節點發送數據的同時保存當前發送的報文標識符信息到TxFrameFAULT.faultID,在當前發送報文的郵箱為空的情況下(注CAN通信以郵箱發送報文,當郵箱為空時表示報文發送完成),在調度程序中掃描CAN控制器的狀態寄存器的仲裁出錯位和發送錯誤位,假設出錯設置重發使能標志TxRsdFlag ;下面分別對重發送數據的結構循環列表ptrCANDataStream與錯誤重發TxFrame標識符列表描述發送的過程,首先通過郵箱I從ptrCANDataStream得到發送數據報文,faultID保存當前發送的報文標識符,判斷在郵箱I為空的情況下(注CAN通信以郵箱發送報文,當郵箱為空時表示報文發送完成),在調度程序中掃描CAN控制器的狀態寄存器郵箱I對應的仲裁出錯位和發送錯誤位任何位為I表示郵箱I發送失敗,然后設置TxRsdFlag為I表示有重發數據,在報文標示符數組TxFrame [N]中找到對應的faultID,設置對應重發次數記數數組count [N]為I,調度程序判斷到TxRsdFlag為I,掃描整個count數組有大于0的就從對應的TxFrame得到發送的錯誤報文標識符,通過郵箱2發送同時保存報文標識符到faultID,這時會在調度程序中判斷郵箱I出錯的同時判斷郵箱2的出錯,當郵箱2出錯時,掃描整個TxFrame,在相應的位置count對加1,表示當前報文標識符發送再次出錯直到N次;任何時候當前報文標識符發送成功沒有出錯都復位對應報文標識符的重發機制(即對應的參數),假設N次的重發次數沒有完成而郵箱I的相對應的報文標識符已經再次發送,也會復位當前對應的報文標識符的重發機制。實施例I :如圖2所示,采用郵箱I發送正常邏輯要求發送的數據,而采用發送郵箱2作為發送錯誤重發郵箱。當郵箱I正常發送錯誤時,開始發送錯誤次數計數,設置超時發送定時器,當郵箱2發送成功后不再發送,清除重發計數。簡單邏輯就是郵箱I正常發送,發送失敗就放到郵箱2發送,郵箱2在指定次數指定時間間隔內發送。通過以上實現方式解決了數據同步問題,由于采用每次重發前都更新郵箱中的數據,實現數據更新與控制數據一致。提高了總線使用效率與總線域度,在間隔時間與次數限定的情況下,重發幀不是重復與時刻去競爭,從而留給其他數據幀更多的總線空間。控制器1、2、3組成CAN網絡節點,每個控制器發送I個報文標識符CAN-ID,接收I個報文標識符CAN-ID,三個網絡節點的通信規則如下報文標識符CAN-IDl大于報文標識符CAN-ID2,報文標識符CAN-ID2大于報文標識符CAN-ID3,所以報文標識符CAN-IDl優先級最高,報文標識符CAN-ID3優先級最低;控制器I在過濾報文標識符列表寄存器中設置寫入報文標識符CAN-ID3,則表示控制器I發送報文標識符CAN-IDl,接收報文標識符CAN-ID3,而過濾CAN-ID2 ;控制器2在過濾報文標識符列表寄存器中設置寫入報文標識符CAN-ID1,則表示控制器2發送報文標識符CAN-ID2,接收報文標識符CAN-IDl,而過濾CAN-ID2 ;控制器3在過濾報文標識符列表寄存器中設置寫入報文標識符CAN-ID2,則表示控制器3發送報文標識符CAN-ID3,接收報文標識符CAN-ID2,而過濾CAN-ID2。網絡拓撲圖如圖3所示,控制器I定時1000毫秒發送報文標識符CAN-IDl在數據總線上,由于采用了報文標識符過濾方式,僅僅控制器2收到報文標識符CAN-ID1,而控制器3收不到報文標識符CAN-ID1,其他的控制器發送與接收都是同樣的原理。這是理想環境下沒有錯誤的一個發送與接收,但是現場環境的復雜程度在實驗的環境下是無法模擬的,由于控制器之間都是采用1000毫秒定時發送,就會存在控制器之間定時器同時到達的發送數據的狀態,例如控制器I、控制器2和控制器3分別同時發送報文標識符CAN-IDl、報文標識符CAN-ID2和報文標識符CAN-ID3,就會存在總線競爭仲裁現象,由于三個網絡節點的數據都同時出現在郵箱中,就會同時監測到CAN總線空閑,三個網路節點按照報文標識符的位從高到低出現在數據總線上,同時CAN控制器也會接收當前總線的位,當本網絡節點發送的位于采集到的位不符合時,本網絡節點仲裁出錯(注CAN控制器在發送位數據的同時也會采集當前總線上的數據,發送0表示顯性位,I表示隱性位,任何一個網絡節點發送了顯性位總線呈現出顯性),這時CAN控制器硬件會實現整個仲裁過程,報文標識符CAN-IDl的標識符數比較小,所以能夠競爭到總線,而報文標識符CAN-ID2、報文標識符CAN-ID3就會出現仲裁出錯,導致數據發送不成功,網絡節點2的重發標志使能,報文標識符CAN-ID2的重發次數記數加1,同理網絡節點3的重發標志使能,報文標識符CAN-ID3的重發次數記數加1,由于重發機制都使能,在下一次節點調度程序執行時,網絡節點2的報文標識符CAN-ID2、網絡節點3的報文標識符CAN-ID3同時通過郵箱2發送,再次發生競爭總線現象,重復以上的仲裁過程,由于報文標識符CAN-ID2的標識符小,所以競爭到總線,此時網絡節點2對應報文標識符CAN-ID2的復位重發標志和重發次數記數(即對應報文標識符CAN-ID2的重發機制復位),而報文標識符CAN-ID3的標識符較大而再次出錯,網絡節點3的重發標志使能,報文標識符CAN-ID3的重發次數記數加I變成2,在下一次網絡節點3的調度程序執行時,,由于報文標識符CAN-IDl與報文標識符CAN-ID2都已經發送,所以報文標識符CAN-ID3能競爭到總線,正常情況下,報文標識符CAN-ID3正常發送成功,此時網絡節點3對應報文標識符CAN-ID3的復位重發標志和重發次數記數(即對應報文標識符CAN-ID3的重發機制復位),這樣就完成了一個重發過程,保證了通信總線在空閑的情況下立刻發送上次未發送完成的數據。上面是一個比較小的網絡同時也出現了最壞的情況,當 設備多時也是采用類似的重發機制。
權利要求
1.一種多設備CAN通訊智能重發方法,其特征在于,多個CAN控制器均連接在CAN總線上;多個CAN控制器采用標識符列表過濾機制實現報文過濾,即屏蔽與本CAN控制器無關的CAN控制器發來的報文標識符;每一個CAN控制器中具有2個發送郵箱,具有同等優先級,分別為郵箱I和郵箱2,郵箱I用于按正常邏輯要求發送報文,郵箱2用于發送因錯誤而重發的報文; 網絡中的CAN控制器以定時方式或者事件觸發方式用郵箱I發送正常邏輯產生的報文到CAN總線上; 若同一時刻,有多個CAN控制器發送報文到CAN總線上,此時,每個網絡中的CAN控制器就會啟用總線仲裁,報文標識符小的競爭到總線數據能完成發送,而報文標識符大的退出仲裁; 未競爭到總線的CAN控制器將數據重新加載到本CAN控制器的郵箱2中,在總線空閑時又將該數據發送到CAN總線上;若此時CAN總線上仍有多個CAN控制器同時發送數據,又將產生新的一輪總線競爭;若此時CAN總線沒有其他CAN控制器同時發送數據,則當前的CAN控制器將數據成功發出; 采用重發次數限定機制防止數據無限制重發; 所述的重發次數限定機制為每一個CAN控制器的重發計數值的初值為O,當前待發送的數據每重發一次,則重發計數值增加1,如果某CAN控制器將該當前待發送的數據成功發出,則重發計數值清零;當重發計數值達到了預先設定的閾值即重發次數N,則放棄當前待發送的數據,不再重發。
2.根據權利要求I所述的多設備CAN通訊智能重發方法,其特征在于,各CAN控制器每次發送一次正常邏輯產生的數據間隔為 發送數據間隔時間T=重發次數N X (報文位數F/波特率B)。
3.根據權利要求I或2所述的多設備CAN通訊智能重發方法,其特征在于,N大于等于CAN控制器數量。
全文摘要
本發明公開了一種多設備CAN通訊智能重發方法,每一個CAN控制器中具有2個發送郵箱,郵箱1用于按正常邏輯要求發送報文,郵箱2用于發送因錯誤而重發的報文;網絡中的CAN控制器以定時方式或者事件觸發方式用郵箱1發送正常邏輯產生的報文到CAN總線上;若同一時刻,有多個CAN控制器發送報文到CAN總線上,報文標識符小的競爭到總線數據能完成發送,而報文標識符大的退出仲裁;未競爭到總線的CAN控制器將數據重新加載到本CAN控制器的郵箱2中,在總線空閑時又將該數據發送到CAN總線上。采用重發次數限定機制防止數據無限制重發。該多設備CAN通訊智能重發方法易于實施,且能保障控制系統的運行安全性能。
文檔編號H04L12/40GK102752084SQ20121026274
公開日2012年10月24日 申請日期2012年7月27日 優先權日2012年7月27日
發明者戴侃, 李仲, 胡炎良, 陸堅 申請人:湖南先步信息股份有限公司