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