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