CAN總線網絡的實時性研究和改進
目前有很多文獻關于CAN協議的改進,基本都是局限于周期型消息的處理,但是在實際工業現場有很多諸如報警、故障等突發型消息,這些都是事件型消息,都未能有效處理?;诖?,本文兼顧周期型和事件型消息,以CAN 2.0B擴展幀格式為例,通過重新定義ID字段的含義來解決帶寬分配不均的問題。這種重新定義的幀并未改變擴展幀的格式,所以能與其他CAN系統兼容,如圖3所示。擴展格式幀的ID字段被重新定義為3個部分:類間優先級域(1b)、類內優先級域(8b)、內容標示域(20b)。本文引用地址:http://www.104case.com/article/155170.htm
圖3中,類間優先級域為1 b,在實際應用中將0分給事件型消息,使其具有最高優先級,將1分給周期型消息;類內優先級域為8 b,用于標示同種類型消息的優先級大小,數值越小,優先級越高;內容標識符域為20 b,可以根據實際的需要對其進行定義,在類間優先級和類內優先級大小都一樣的情況少,也可進一步起到輔助仲裁的作用。
2 動態優先級調度算法
CAN總線的特點之一就是多主發送,各個站點在任何時候都可以隨機發送數據,如果在某一個時刻有2個或都2個以上的站點要發送數據,就要通過非破壞性仲裁機制進行仲裁來競爭總線的使用權,標識符數值小的站點即優先級較高的站點可以獲得總線使用權,競爭失敗的站點則需等待下次重新競爭,當網絡負載較大時,優先級較低的站點很可能在多次競爭中失敗,從而數據不能及時發送,或有時發送產生沖突有時順利發送,造成發送延時的不確定性,這就是帶寬分配不均所造成的。為了解決隨著網絡負載增加所造成的帶寬分配不均,本文提出了動態優先級算法。動態優先級算法是一種隨著時間推移動態改變各個站點優先級的算法,與原有的靜態分配優先級算法相比,該算法可使每個站點均等地競爭總線的使用權,即能夠均等地分配帶寬,從而保證消息的實時傳輸。方法如下:初始情況下各個站點均有事先分配好的優先級,在不發生沖突的情況下,按原有優先級來完成數據的傳送。當發生沖突之后,高優先級站點可以順利完成數據發送,為了能讓競爭失敗的站點在下次競爭中成功的概率變大,可以將競爭失敗的站點提高一個優先等級參加下次競爭,即使失敗了若干次,這時該站點的優先級也很高了,競爭勝出的概率會很大。但是需要注意的是優先級較低的站點在提高優先級的情況下獲得總線使用權并順利完成數據發送之后,需要將優先級降低為初始優先級,以保證網絡的正常運行。
如果把CAN總線上要發送數據的站點看成一個隊列,某個節點j在隊列的位置可表示為:
Pj=P0-f(n)
式中:Pj為節點j某時刻在隊列中的位置,即節點在此時刻的優先級;P0為節點j在隊列中的初始位置,即初始優先級。圖3中類內優先級分配了8位,當優先級最低時,P0=28-1=255;f(n)為優先級晉升項,為關于競爭失敗次數n的函數,可取正比例函數、指數函數等。在本文中取的為正比例函數,即f(n)=kn,k為系數項,決定著晉升優先級的快慢程度,一般取為CAN系統中節點的個數。由此可得:
Pj=28-1-kn=255-kn
采用該算法還可以避免當節點優先級提高之后出現2個或2個以上優先級相同的情況,例如,在某個網絡中節點個數為5,即k=5,所以Pj=255-5n,則各站點初始及晉升之后優先級如表1所示。
評論