張庭芳,黃海林,郭勁林,曹 銘
(南昌大學(xué) 機(jī)電工程學(xué)院,南昌 330031)
由于控制器局域網(wǎng)絡(luò)(Controller Area Network,CAN)總線具有較高的可靠性和較低的價(jià)格優(yōu)勢(shì),使其成為目前汽車上應(yīng)用最多的總線。現(xiàn)代汽車的控制系統(tǒng)是通過總線技術(shù)將微控制器、傳感器和執(zhí)行器連接起來而組成的網(wǎng)絡(luò)控制系統(tǒng)[1]。這種網(wǎng)絡(luò)控制系統(tǒng)具有結(jié)構(gòu)分散化、硬件數(shù)量少、布線簡(jiǎn)單、診斷方便的優(yōu)點(diǎn),但是網(wǎng)絡(luò)的引入會(huì)給系統(tǒng)帶來不必要的時(shí)延,使得系統(tǒng)性能降低,甚至使系統(tǒng)不穩(wěn)定[2]。因此,有必要對(duì)CAN總線網(wǎng)絡(luò)控制系統(tǒng)的時(shí)延進(jìn)行深入的理論研究,以保證CAN控制系統(tǒng)工作的實(shí)時(shí)性和穩(wěn)定性。文獻(xiàn)[3]提出基于時(shí)域Smith預(yù)測(cè)器的反饋控制律的算法,并且計(jì)算提出的反饋控制律的反饋增益,最后通過兩個(gè)實(shí)例驗(yàn)證了該算法的有效性。文獻(xiàn)[4]通過對(duì)CAN控制系統(tǒng)時(shí)延分析,推導(dǎo)出保證系統(tǒng)穩(wěn)定的總時(shí)延和采樣周期的關(guān)系式,并采取已有的TTCAN協(xié)議進(jìn)行了仿真驗(yàn)證。文獻(xiàn)[5]提出了安全性、可靠性等5種多維非功能屬性集成的優(yōu)化算法,提高了目標(biāo)優(yōu)化率。上述文獻(xiàn)都沒考慮到總線協(xié)議自身的局限性。
為提高CAN消息的實(shí)時(shí)性,目前研究人員已提出了靜態(tài)的調(diào)度算法,如文獻(xiàn)[6-7]的速率單調(diào)(RM)算法,但該算法的CPU利用率不高;另有研究人員提出了動(dòng)態(tài)調(diào)度算法,如文獻(xiàn)[8-9]的最早截止期優(yōu)先(EDF)算法,然而該算法任務(wù)頻繁切換會(huì)帶來不必要的開銷,并且負(fù)載太大時(shí)調(diào)度性能急劇下降。文獻(xiàn)[10-11]提出一種動(dòng)態(tài)優(yōu)先級(jí)分配方法雖然能使低優(yōu)先級(jí)消息盡快被執(zhí)行,但增加了高優(yōu)先級(jí)消息的延遲,并且沒有很好地解決消息的碰撞問題。文獻(xiàn)[12]提出一種用相鄰節(jié)點(diǎn)傳遞消息的方法,消息在相鄰節(jié)點(diǎn)發(fā)送接收,雖然避免了消息的碰撞,但沒考慮多節(jié)點(diǎn)競(jìng)爭(zhēng)總線和多節(jié)點(diǎn)接收消息的情況,缺乏靈活性,不具有現(xiàn)實(shí)意義。
TTCAN協(xié)議是在CAN基礎(chǔ)上制定的時(shí)間觸發(fā)協(xié)議。該協(xié)議采用時(shí)分復(fù)用的原理來離線分配各種消息的時(shí)間窗,達(dá)到有序發(fā)送消息的目的,增強(qiáng)了消息的實(shí)時(shí)性。但該方法無法和CAN節(jié)點(diǎn)設(shè)備兼容,并且如果要新增消息,需重新離線設(shè)計(jì)時(shí)間窗,靈活性較差。文獻(xiàn)[13-15]研究的共享時(shí)鐘算法是通過在軟件層面上實(shí)現(xiàn)時(shí)間觸發(fā)的CAN通信,但主節(jié)點(diǎn)需頻繁地發(fā)送時(shí)標(biāo)消息來對(duì)從節(jié)點(diǎn)時(shí)鐘同步,對(duì)時(shí)標(biāo)消息的抗干擾性要求很高并且額外增加了通信成本。本文對(duì)消息在CAN控制系統(tǒng)中產(chǎn)生的時(shí)延問題進(jìn)行了分析,并結(jié)合文獻(xiàn)[15]改進(jìn)的共享時(shí)鐘算法(TTC-SC3)和文獻(xiàn)[16]動(dòng)態(tài)ID序列算法的思想,提出一種共享ID序列(Shared ID Sequence,SIDS)的混合算法。
汽車的CAN控制系統(tǒng)由傳感器、控制器和執(zhí)行器組成。端到端時(shí)延組成如圖1所示。

圖1 網(wǎng)絡(luò)傳輸時(shí)延組成
時(shí)延由以下4個(gè)部分組成:
1)消息的生成時(shí)間Tsour
在源節(jié)點(diǎn)上對(duì)生成的信號(hào)處理打包成消息的時(shí)間,主要包括信息采集、信息處理和信息編碼打包時(shí)間。這部分時(shí)延主要和軟硬件性能有關(guān),通常認(rèn)為是定常或者忽略不計(jì)的[17]。
2)消息的排隊(duì)時(shí)間Tw
從報(bào)文開始排隊(duì)到獲得總線控制權(quán)的時(shí)延,與所采取的協(xié)議有關(guān)。
3)消息在總線上的傳輸時(shí)間Tc
消息的傳輸時(shí)間有2個(gè)部分,一個(gè)是和數(shù)據(jù)幀大小、通信波特率有關(guān),另一個(gè)是和節(jié)點(diǎn)距離、電信號(hào)在傳輸媒介的傳播速度有關(guān),由于傳播速度很快(電磁波是光速的0.3倍),并且節(jié)點(diǎn)之間的距離很小,此傳輸時(shí)間忽略不計(jì)。
4)目標(biāo)節(jié)點(diǎn)上的處理時(shí)間Tobj
目標(biāo)節(jié)點(diǎn)上的處理時(shí)間是處理器將接收到的報(bào)文進(jìn)行解析,將數(shù)字量轉(zhuǎn)為模擬量所耗費(fèi)的時(shí)間。這和控制器軟硬件的性能有關(guān),通常認(rèn)為是定常或者是忽略不計(jì)的。
因此,CAN上的傳輸延遲為:
Tdelay=Tsour+Tw+Tc+Tobj
(1)
為便于分析,Tsour、Tobj忽略不計(jì),所以式(1)可改為:
Tdelay=Tw+Tc
(2)
從式(2)可知,排隊(duì)時(shí)間Tw是由CAN協(xié)議引起的,Tc是由報(bào)文長(zhǎng)度和總線通信速率決定的,在報(bào)文發(fā)送過程中是定值,CAN總線通信的不確定性主要體現(xiàn)在排隊(duì)等待時(shí)間Tw上。
Tw的不確定性主要是因?yàn)槎喙?jié)點(diǎn)消息同時(shí)競(jìng)爭(zhēng)總線引起的,當(dāng)多個(gè)消息競(jìng)爭(zhēng)總線時(shí),優(yōu)先級(jí)高的消息搶占優(yōu)先級(jí)低的消息,使低優(yōu)先級(jí)消息排隊(duì)等待時(shí)間過長(zhǎng),有資料表明當(dāng)事件率達(dá)到60%~70%時(shí),優(yōu)先級(jí)低的節(jié)點(diǎn)消息將得不到保證,整個(gè)系統(tǒng)是不可靠的[18],而且優(yōu)先級(jí)高的消息也會(huì)被優(yōu)先級(jí)低的消息阻塞。為便于理解,通過下面例子對(duì)此加以說明。
在500 kb/s的CAN網(wǎng)絡(luò)中,有節(jié)點(diǎn)A、B、C、D、E、F,其中,節(jié)點(diǎn)A發(fā)送消息m1,節(jié)點(diǎn)B發(fā)送消息m2,節(jié)點(diǎn)C發(fā)送消息m3,節(jié)點(diǎn)D發(fā)送消息m4,節(jié)點(diǎn)E發(fā)送消息m5,節(jié)點(diǎn)F發(fā)送消息m6,m1優(yōu)先級(jí)最高,m6優(yōu)先級(jí)最低。上述消息滿足下列條件:
1)所有消息第一次發(fā)送時(shí)間都在0時(shí)刻;
2)所有報(bào)文都是數(shù)據(jù)幀格式,單幀傳送;
3)沒有錯(cuò)誤幀;
4)m1的消息為T1,其他報(bào)文周期都為T,且T/2=T1;
5)滿足可調(diào)度性。
如圖2所示,所有消息都在0時(shí)刻開始競(jìng)爭(zhēng)總線,由于消息m1的優(yōu)先級(jí)最高,m1在k1時(shí)刻獲得總線控制權(quán)傳輸消息。剩下的消息則一直監(jiān)聽總線,等待總線空閑。在k2時(shí)m1消息傳輸完畢,剩下的5個(gè)消息競(jìng)爭(zhēng)總線,由于m2的優(yōu)先級(jí)最高,m2獲得總線控制權(quán)傳輸消息,以此類推,直到k6時(shí)刻,到了m1周期T1,消息m1第二次發(fā)送,但是此時(shí)消息m5正在傳輸,m1被低優(yōu)先級(jí)消息阻塞,等到m5消息傳輸完畢在k7時(shí)刻m1才能傳輸。消息m1傳輸完畢后在k8時(shí)刻消息m6開始傳輸。至此,第一個(gè)周期T內(nèi)的消息仲裁完畢,直到第二個(gè)周期T到來,新一輪仲裁開始,仲裁過程和第一個(gè)周期T的類似。仲裁過程既發(fā)生優(yōu)先級(jí)高的消息搶占優(yōu)先級(jí)低的消息,又發(fā)生優(yōu)先級(jí)高的消息被優(yōu)先級(jí)低的消息阻塞。

圖2 不同周期消息發(fā)送時(shí)序示意圖
Fig.2 Schematic diagram of message sending timing in different periods
由以上例子可知,假設(shè)消息m1,m2,…,mi,…,mn滿足可調(diào)度性,i越小優(yōu)先級(jí)越高,當(dāng)消息同時(shí)競(jìng)爭(zhēng)總線時(shí)Tw包含以下3種情況:
1)最高優(yōu)先級(jí)消息m1被低優(yōu)先級(jí)消息阻塞的延遲。
2)中優(yōu)先級(jí)消息mi(i≠1且i≠n)被高優(yōu)先級(jí)消息搶占的延遲或被低優(yōu)先級(jí)消息阻塞的延遲。
3)最低優(yōu)先級(jí)消息mn被高優(yōu)先級(jí)搶占的延遲。
又由文獻(xiàn)[19-21]可知,消息mi被低優(yōu)先級(jí)阻塞的延遲為:
(3)
其中,l(m)是所有優(yōu)先級(jí)低于消息mi的集合。被高優(yōu)先級(jí)消息搶占總線造成的延遲為:

(4)
其中,hp(m)為所有優(yōu)先級(jí)高于m的消息的集合,Ji為消息的抖動(dòng)時(shí)間,τbit為位傳輸時(shí)間。
式(3)與式(4)之和便是最大的等待時(shí)間Tw,即:

(5)
CAN總線采用位填充技術(shù)來減少消息幀在傳輸過程的出錯(cuò)。在CAN消息幀中,從幀起始到CRC界定符之前都以位填充的方式進(jìn)行編碼。當(dāng)發(fā)送器在發(fā)送位流中檢測(cè)到5個(gè)相同的顯性位或者隱性位時(shí),自動(dòng)插入一個(gè)補(bǔ)碼位,例如11111 0000 1111 0000,位填充后變成11111 0 0000 1 1111 0 0000 1。因此,在標(biāo)準(zhǔn)幀中參與位填充的長(zhǎng)度為:
L=34+8×DLC
(6)
由式(6)可知,在標(biāo)準(zhǔn)幀中最大位填充數(shù)為:

(7)
又由式(7)可知,在標(biāo)準(zhǔn)幀中最大傳輸時(shí)間為:
(8)
擴(kuò)展幀中最大傳輸時(shí)間為:
(9)
其中,DLC為字節(jié)數(shù),τbit為位傳輸時(shí)間。
由式(8)和式(9)可知,消息的傳輸時(shí)間Tc是由數(shù)據(jù)幀的長(zhǎng)度和通信速率決定的,在已知通信速率的CAN中傳輸?shù)臄?shù)據(jù)越多,Tc越大。由式(5)可知Tw非常復(fù)雜,這也是引起CAN總線消息的不確定性的原因,并且對(duì)于低優(yōu)先級(jí)消息來說這部分延遲更為嚴(yán)重。因此,應(yīng)深入研究Tw以降低或者消除這部分延遲。
共享時(shí)鐘算法(Shared Clock,SC)是作為一個(gè)軟件平臺(tái)角度來實(shí)現(xiàn)節(jié)點(diǎn)間消息的通信,像TTCAN一樣采用時(shí)分多址(TDMA)協(xié)議,但不需要相應(yīng)的硬件支持。而文獻(xiàn)[15]改進(jìn)的共享時(shí)鐘算法(TTC-SC3)在共享時(shí)鐘算法上作了稍微改動(dòng)。在TTC-SC3算法中,允許多個(gè)從節(jié)點(diǎn)在一個(gè)時(shí)標(biāo)間隔內(nèi)應(yīng)答。每次主節(jié)點(diǎn)發(fā)送一個(gè)時(shí)標(biāo)消息時(shí),消息中也會(huì)發(fā)送一個(gè)ID(與共享時(shí)鐘算法相同)。與共享時(shí)鐘算法不同,這是一個(gè)“組ID”,而不是一個(gè)ID,并且如果一個(gè)特定的組中有多個(gè)從節(jié)點(diǎn),組中的所有從節(jié)點(diǎn)都將同時(shí)作出應(yīng)答。CAN控制器自行處理任何消息的碰撞。主節(jié)點(diǎn)在傳輸下一條時(shí)標(biāo)消息之前,檢查從節(jié)點(diǎn)是否已作出了應(yīng)答,如假設(shè)有4個(gè)節(jié)點(diǎn)消息在CAN總線上進(jìn)行通信,通信模式如圖3所示。

圖3 TTC-SC3算法中主從節(jié)點(diǎn)的通信模式
Fig.3 Communication mode of master and slave nodes in TTC-SC3 algorithm
此算法是通過主節(jié)點(diǎn)不斷地發(fā)送一個(gè)時(shí)標(biāo)消息來對(duì)從節(jié)點(diǎn)進(jìn)行時(shí)鐘同步,對(duì)本地時(shí)鐘的魯棒性要求很高,并且從節(jié)點(diǎn)不斷發(fā)送應(yīng)答消息給主節(jié)點(diǎn)來達(dá)到錯(cuò)誤檢測(cè)的功能,如文獻(xiàn)[15]所述,當(dāng)其中一個(gè)從節(jié)點(diǎn)發(fā)生錯(cuò)誤導(dǎo)致不斷地重傳消息時(shí),將會(huì)使一系列低優(yōu)先級(jí)消息的從節(jié)點(diǎn)無法訪問總線,顯然會(huì)造成大量數(shù)據(jù)丟失,導(dǎo)致網(wǎng)絡(luò)不穩(wěn)定。
文獻(xiàn)[16]研究的動(dòng)態(tài)ID序列算法的核心思想是在參加通信的節(jié)點(diǎn)中離線預(yù)設(shè)好一個(gè)消息ID序列,如圖4所示,每個(gè)節(jié)點(diǎn)都按照消息序列和發(fā)送周期來發(fā)送消息。該算法最大的優(yōu)點(diǎn)是不需要頻繁地發(fā)送時(shí)標(biāo)消息來對(duì)各個(gè)節(jié)點(diǎn)同步,但為了動(dòng)態(tài)更新節(jié)點(diǎn)中消息ID序列,算法需要每個(gè)節(jié)點(diǎn)接收總線上的全部消息,這對(duì)節(jié)點(diǎn)中CPU的負(fù)擔(dān)是很大的。

圖4 CPU中ID序列
Fig.4 ID sequence in CPU
本文結(jié)合TTC-SC3算法和動(dòng)態(tài)ID序列算法的思想,提出了一種共享ID序列(SIDS)混合算法,該算法能有效地將消息發(fā)送時(shí)刻錯(cuò)開,避免消息之間的碰撞,消除了時(shí)延Tw,從而提高消息傳輸?shù)膶?shí)時(shí)性。算法流程如圖5所示。
該算法首先在主節(jié)點(diǎn)中預(yù)設(shè)好ID序列(ID序列根據(jù)優(yōu)先級(jí)從左至右降序排列),當(dāng)程序啟動(dòng)時(shí),主節(jié)點(diǎn)(此節(jié)點(diǎn)消息優(yōu)先級(jí)設(shè)置為最高級(jí)別)把預(yù)設(shè)的ID序列像TTC-SC3算法一樣以廣播的方式發(fā)送給各個(gè)從節(jié)點(diǎn)(一個(gè)節(jié)點(diǎn)可能既是發(fā)送節(jié)點(diǎn)又是接收節(jié)點(diǎn),稱為從節(jié)點(diǎn))。從節(jié)點(diǎn)根據(jù)接收到的ID序列CPU會(huì)產(chǎn)生一個(gè)中斷響應(yīng),判斷本節(jié)點(diǎn)消息ID是否是下一個(gè)要發(fā)送的ID,接著判斷是否到了發(fā)送周期,如果是,則各個(gè)從節(jié)點(diǎn)按ID序列順序把消息發(fā)送給接收節(jié)點(diǎn)和主節(jié)點(diǎn),否則直接退出程序。顯然,當(dāng)各個(gè)消息按ID發(fā)送時(shí),它們之間的延遲為消息的傳輸時(shí)間Tc,根據(jù)式(8)和式(9)計(jì)算得出,在500 Kb/s的通信速率中,標(biāo)準(zhǔn)幀中一幀的傳輸時(shí)間范圍為Tc∈[94 μs,270 μs],擴(kuò)展幀一幀的傳輸時(shí)間范圍為Tc∈[134 μs,320 μs]。值得注意的是,各個(gè)從節(jié)點(diǎn)的消息也要發(fā)送給主節(jié)點(diǎn),類似TTC-SC3算法,從節(jié)點(diǎn)發(fā)送應(yīng)答消息給主節(jié)點(diǎn),即主節(jié)點(diǎn)會(huì)接收所有從節(jié)點(diǎn)產(chǎn)生的消息。如果主節(jié)點(diǎn)沒在下一個(gè)周期到來之前收到消息,說明數(shù)據(jù)包丟失,則代表接收節(jié)點(diǎn)的數(shù)據(jù)包同樣丟失,主節(jié)點(diǎn)報(bào)錯(cuò)計(jì)數(shù),當(dāng)達(dá)到設(shè)定的閾值(該閾值根據(jù)消息的重要程度設(shè)置)后,主節(jié)點(diǎn)的CPU會(huì)以中斷響應(yīng)的方式在ID序列中檢索相應(yīng)的出錯(cuò)ID并刪除它,接著生成一個(gè)全新的ID序列以廣播的方式發(fā)送給各個(gè)從節(jié)點(diǎn),開始新一輪通信。當(dāng)有新的節(jié)點(diǎn)加入時(shí),總線的消息傳輸完成,該節(jié)點(diǎn)立即控制總線(臨時(shí)生成第二高優(yōu)先級(jí)偽ID方式搶占總線,真正ID寫入數(shù)據(jù)場(chǎng)),發(fā)送消息給接收節(jié)點(diǎn)和主節(jié)點(diǎn),主節(jié)點(diǎn)提取此消息的真正ID重新排列ID序列,把此更新后的ID序列以廣播方式發(fā)給各個(gè)從節(jié)點(diǎn)(包括新加入的節(jié)點(diǎn)),開始新一輪通信。
本文通過實(shí)例來更清晰地說明此算法。假設(shè)節(jié)點(diǎn)A有消息m1,節(jié)點(diǎn)B有消息m2,節(jié)點(diǎn)C有消息m3,節(jié)點(diǎn)D有消息m4,節(jié)點(diǎn)E有消息m5,節(jié)點(diǎn)F有消息m6。m1優(yōu)先級(jí)最高,m6優(yōu)先級(jí)最低,m1、m2的周期為10 ms,m3、m4的周期都為20 ms,m5、m6周期都為30 ms。剛開始在CAN中進(jìn)行通信的節(jié)點(diǎn)有節(jié)點(diǎn)A、B、C、D、F,各節(jié)點(diǎn)消息通信如圖6所示。

圖6 各節(jié)點(diǎn)消息通信情況
從圖6可知,剛開始主節(jié)點(diǎn)在0時(shí)刻發(fā)送ID序列給各個(gè)節(jié)點(diǎn)。在t1時(shí)刻,各個(gè)從節(jié)點(diǎn)收到ID序列,CPU產(chǎn)生中斷響應(yīng),進(jìn)入圖5所示的程序判斷后(為方便分析,忽略CPU中斷和處理的時(shí)間),因?yàn)槭窃诟鱾€(gè)消息的第一周期,所以節(jié)點(diǎn)A、B、C、D、F中的消息按ID序列有序發(fā)送到接收節(jié)點(diǎn)和主節(jié)點(diǎn),相鄰優(yōu)先級(jí)節(jié)點(diǎn)消息之間的最小延遲為上一個(gè)消息的傳輸時(shí)間大小。傳輸完各節(jié)點(diǎn)消息后,經(jīng)過一段總線空閑到了10 ms時(shí)刻,到了節(jié)點(diǎn)A、B的消息周期,按ID序列發(fā)送消息m1、m2,由于節(jié)點(diǎn)C、D消息周期為20 ms,節(jié)點(diǎn)F消息周期為30 ms,所以節(jié)點(diǎn)C、D、F不發(fā)送消息,在t2時(shí)刻就完成消息傳輸。經(jīng)過一段總線空閑后到了20 ms時(shí)刻,到了節(jié)點(diǎn)A、B、C、D的消息周期,根據(jù)ID序列發(fā)送消息,由于沒到節(jié)點(diǎn)F的消息周期,節(jié)點(diǎn)F不發(fā)送消息,在t3完成消息傳輸。經(jīng)過一段總線空閑到了30 ms時(shí)刻,節(jié)點(diǎn)A、B發(fā)送消息,在t4時(shí)刻E節(jié)點(diǎn)加入總線,按前面所述方法立即控制總線發(fā)送消息m5給接收節(jié)點(diǎn)和主節(jié)點(diǎn),主節(jié)點(diǎn)提取此消息的ID在節(jié)點(diǎn)重新排列ID,發(fā)送新的ID序列給節(jié)點(diǎn)A、B、C、D、E、F,各節(jié)點(diǎn)再通過周期判斷是否發(fā)送消息,在t5時(shí)刻,只有節(jié)點(diǎn)F到了發(fā)送周期,發(fā)送消息。在t7時(shí)刻,主節(jié)點(diǎn)沒收到節(jié)點(diǎn)F的消息m6,主節(jié)點(diǎn)報(bào)錯(cuò),刪除此消息ID(錯(cuò)誤閾值設(shè)置為1,這個(gè)根據(jù)消息重要程度設(shè)定)并重新排列ID序列,發(fā)送給節(jié)點(diǎn)A、B、C、D、E、F,所以最后進(jìn)行通信的消息有m1、m2、m3、m4、m5,開始新一輪通信。
由本文算法可知,主節(jié)點(diǎn)不需要頻繁地發(fā)送時(shí)標(biāo)消息對(duì)各個(gè)從節(jié)點(diǎn)時(shí)鐘同步,只需一開始發(fā)送預(yù)設(shè)好的ID序列和更新后的ID序列給各個(gè)從節(jié)點(diǎn),對(duì)于報(bào)錯(cuò)的節(jié)點(diǎn)消息用刪除ID的方法屏蔽,相比文獻(xiàn)[16]方法只需一個(gè)主節(jié)點(diǎn)接收總線上所有的消息,節(jié)約了CPU軟硬件資源。明顯可以看出,SIDS混合算法通過融合TTC-SC3算法和動(dòng)態(tài)ID序列算法的優(yōu)點(diǎn),弱化了它們各自的缺陷。
CANoe是德國(guó)VECTOR公司為總線開發(fā)推出的一款集建模、仿真、測(cè)試與診斷等功能于一體的軟件。首先在CANoe中的CANdb++ Editor寫好有關(guān)的DBC文件,各參數(shù)如表1所示,其中,通信速率為500 Kb/s。建立包括主從節(jié)點(diǎn)的8節(jié)點(diǎn)仿真模型,如圖7所示。其中,Main_Node是主節(jié)點(diǎn),New_Node_1到New_Node_6是發(fā)送節(jié)點(diǎn),Receive_Node是接收節(jié)點(diǎn)。

表1 各消息的參數(shù)

圖7 CAN網(wǎng)絡(luò)中節(jié)點(diǎn)仿真模型
在Trace窗口可以看到相關(guān)報(bào)文數(shù)據(jù),各消息的報(bào)文數(shù)據(jù)如圖8~圖13所示。由各個(gè)消息的ID可知,總共占3個(gè)字節(jié)長(zhǎng)度,根據(jù)式(9),主節(jié)點(diǎn)通過總線發(fā)送給各個(gè)從節(jié)點(diǎn)的最大傳輸時(shí)間是170 μs,假設(shè)主節(jié)點(diǎn)的消息從0.100 000 s開始發(fā)送,如圖8所示,從節(jié)點(diǎn)接收的時(shí)間為0.100 152 s,即從消息發(fā)出到被接收的延遲為152 μs,小于170 μs,是合理的。接著各個(gè)從節(jié)點(diǎn)按ID序列發(fā)送,由于m1的優(yōu)先級(jí)最高,m6的優(yōu)先級(jí)最低,消息m1先發(fā)送,m1字節(jié)數(shù)為2,所以最大傳輸時(shí)間是150 μs,消息m1被接收的時(shí)間為0.100 288 s,即延遲為136 μs,小于150 μs,是合理的。因?yàn)橄⒌淖止?jié)數(shù)都設(shè)置為2,傳輸時(shí)間都為136 μs,從圖8~圖13各個(gè)消息被接收時(shí)間可知,消息之間的延遲都約為136 μs,與理論符合。

圖8 m1報(bào)文數(shù)據(jù)

圖9 m2報(bào)文數(shù)據(jù)

圖10 m3報(bào)文數(shù)據(jù)

圖11 m4報(bào)文數(shù)據(jù)

圖12 m5報(bào)文數(shù)據(jù)

圖13 m6報(bào)文數(shù)據(jù)
CAN總線是目前汽車上應(yīng)用最普遍的總線,對(duì)CAN總線研究有實(shí)際意義。本文通過CAN控制系統(tǒng)的時(shí)延分析可知,消息的延遲主要體現(xiàn)在排隊(duì)等待時(shí)間Tw和Tc上,而忽略排隊(duì)等待時(shí)間Tw。本文結(jié)合TTC-SC3算法和動(dòng)態(tài)ID序列算法,提出一種SIDS混合算法,該算法可有效避免消息的碰撞,消除消息的Tw時(shí)延,提高消息的實(shí)時(shí)性和穩(wěn)定性。最終通過CANoe軟件建立的仿真模型驗(yàn)證了該算法的有效性。