李麗丹,王永康,南立軍
(中國(guó)北方車(chē)輛研究所,北京100072)
目前,CAN總線是在眾多領(lǐng)域中廣泛應(yīng)用的現(xiàn)場(chǎng)總線之一,TTCAN總線是在CAN總線基礎(chǔ)上發(fā)展的基于時(shí)間觸發(fā)機(jī)制的總線,延遲是評(píng)價(jià)總線系統(tǒng)性能好壞的主要因素之一.
在總線系統(tǒng)開(kāi)發(fā)初期,對(duì)其性能進(jìn)行預(yù)測(cè)和研究的最常用方法是計(jì)算機(jī)仿真法,像CANoe、ATI CANlab網(wǎng)絡(luò)分析軟件等基于軟件的計(jì)算機(jī)仿真工具[1],都需要相應(yīng)的編程語(yǔ)言來(lái)實(shí)現(xiàn),例如:CANoe常用CAPL語(yǔ)言來(lái)進(jìn)行節(jié)點(diǎn)仿真,這樣掌握起來(lái)就比較復(fù)雜.像MATLABSimulinkStateflow是圖形化的仿真軟件,不需要編程語(yǔ)言實(shí)現(xiàn),比較容易掌握,而且它是采用模塊化和層次化形式來(lái)建立仿真模型,便于修改、擴(kuò)展.本文正是利用Stateflow這一動(dòng)態(tài)系統(tǒng)建模仿真工具建立CAN和TTCAN的仿真模型,利用該模型,通過(guò)改變信息的發(fā)送周期,觀測(cè)其對(duì)系統(tǒng)延遲的影響,從而證實(shí)Stateflow對(duì)總線協(xié)議進(jìn)行建模仿真的可行性.
TTCAN協(xié)議與CAN協(xié)議的物理層和數(shù)據(jù)鏈路層相同,兩種協(xié)議下網(wǎng)絡(luò)通信延遲時(shí)間的組成部分相同,主要可以分為兩類(lèi):片內(nèi)延遲和線上延遲[2].片內(nèi)延遲與控制器的工作頻率等硬件指標(biāo)與控制算法的實(shí)現(xiàn)等軟件指標(biāo)相關(guān).線上延遲與數(shù)據(jù)在網(wǎng)絡(luò)上的發(fā)送過(guò)程相關(guān),可以分為隊(duì)列延遲和傳輸延遲.隊(duì)列延遲指從報(bào)文進(jìn)入CAN控制器等待發(fā)送到報(bào)文獲得總線控制權(quán)的時(shí)間,傳輸延遲是從報(bào)文占據(jù)總線,到脫離總線之間的時(shí)間[3].
由于CAN協(xié)議采用的是事件觸發(fā)和非破壞性逐位仲裁的機(jī)制來(lái)決定消息是否獲得總線的使用權(quán),因此,CAN協(xié)議下的總線通訊網(wǎng)絡(luò)中消息的隊(duì)列延遲和傳輸延遲時(shí)間均不為零[4].而TTCAN協(xié)議中的系統(tǒng)矩陣對(duì)于整個(gè)總線通訊時(shí)間進(jìn)行了規(guī)劃,網(wǎng)絡(luò)中周期性消息幀的發(fā)送被規(guī)定在獨(dú)占窗中完成,其發(fā)送不受其它消息幀的影響,所以其隊(duì)列延遲為0 ms,系統(tǒng)中主要為傳輸延遲;對(duì)于非周期性消息,其延遲同CAN網(wǎng)絡(luò),但本文只研究周期性的消息.
Stateflow是嵌入在Simulink仿真環(huán)境中的,是在Simulink基礎(chǔ)上完成動(dòng)態(tài)邏輯系統(tǒng)建模與仿真的可視化開(kāi)發(fā)平臺(tái)[5].
Stateflow是圖形化設(shè)計(jì)工具,每個(gè)狀態(tài)自動(dòng)機(jī)用一個(gè)圖(Chart)來(lái)表示,每個(gè)圖在Simulink中封裝成一個(gè)模塊,雙擊這個(gè)模塊可以打開(kāi)一個(gè)Stateflow的編輯窗口,在這個(gè)界面中可以完成所有的設(shè)計(jì)和編輯工作,仿真運(yùn)行時(shí)還可以在該界面下觀察狀態(tài)流程.一個(gè)Stateflow圖由圖形對(duì)象和非圖形對(duì)象構(gòu)成.圖形對(duì)象包括狀態(tài)(State)、轉(zhuǎn)換(Transition)、節(jié)點(diǎn)(junction)、圖形函數(shù)(Graphical function)等.非圖形對(duì)象則包括數(shù)據(jù)(Data)和事件(Event)的定義[6].
本文利用該工具建立了CAN和TTCAN通信系統(tǒng)中數(shù)據(jù)的發(fā)送部分,因此,只分析節(jié)點(diǎn)周期對(duì)CAN隊(duì)列延遲的影響,以及TTCAN系統(tǒng)中不存在隊(duì)列延遲,從而證明運(yùn)用Stateflow工具箱來(lái)對(duì)總線協(xié)議進(jìn)行建模仿真的可行性.
CAN總線是以事件觸發(fā)為基礎(chǔ)的總線系統(tǒng),可以多個(gè)消息同時(shí)觸發(fā),這就會(huì)造成多個(gè)節(jié)點(diǎn)訪問(wèn)總線的沖突.總線沖突時(shí)利用非破壞性逐位仲裁機(jī)制,具有最高優(yōu)先級(jí)的消息會(huì)贏得仲裁進(jìn)行發(fā)送.根據(jù)CAN的這些特點(diǎn),在Stateflow層建立的節(jié)點(diǎn)發(fā)送模塊和總線仲裁模塊分別見(jiàn)圖1和圖2.
圖1 節(jié)點(diǎn)1的發(fā)送模塊
圖2 競(jìng)爭(zhēng)總線的模塊
圖1顯示的是節(jié)點(diǎn)1(node1)的發(fā)送模塊,總線上其他節(jié)點(diǎn)發(fā)送模塊的原理都與圖1相同,它們之間采用parallel形式連接 (即每個(gè)模塊的外圍為虛線),表示它們之間是并行的,能同時(shí)被觸發(fā),虛線框右上腳的數(shù)字表示它們的執(zhí)行次序,每個(gè)節(jié)點(diǎn)中又包括3個(gè)并行結(jié)構(gòu)的子狀態(tài):send,buffer,period_data_put.period_data_put用于采集Simulink中輸入的數(shù)據(jù)Din1,然后組合成數(shù)據(jù)幀,并通過(guò)exit(node1.period_data_put.nodata)語(yǔ)句來(lái)觸發(fā)buffer塊從null轉(zhuǎn)到nonnull,用于數(shù)據(jù)緩沖;之后通過(guò)exit(node1.buffer.null)語(yǔ)句來(lái)觸發(fā)send塊從sleep(無(wú)數(shù)據(jù)傳輸)狀態(tài)轉(zhuǎn)到wait(等待獲得總線訪問(wèn)權(quán))狀態(tài),一旦獲得總線訪問(wèn)權(quán),就脫離等待狀態(tài),進(jìn)入transmission(傳輸數(shù)據(jù))狀態(tài),當(dāng)數(shù)據(jù)傳輸完就回到sleep狀態(tài);否則將一直處于等待狀態(tài),直到獲得總線訪問(wèn)權(quán).
圖2競(jìng)爭(zhēng)總線塊fieldbus是通過(guò)調(diào)用compete函數(shù)來(lái)實(shí)現(xiàn)的.當(dāng)節(jié)點(diǎn)有數(shù)據(jù)處于等待狀態(tài)時(shí),會(huì)置其狀態(tài)標(biāo)志位ni=1.compete函數(shù)利用選擇結(jié)構(gòu)判斷每個(gè)節(jié)點(diǎn)的ni,之后決定節(jié)點(diǎn)對(duì)總線的訪問(wèn)權(quán).當(dāng)總線上有數(shù)據(jù)傳輸時(shí),總線處于busy狀態(tài);當(dāng)數(shù)據(jù)傳輸完之后會(huì)觸發(fā)return這個(gè)事件,總線就會(huì)進(jìn)入space狀態(tài),進(jìn)而進(jìn)入空閑狀態(tài),等待下一輪的競(jìng)爭(zhēng).
為了能夠讓Stateflow層設(shè)計(jì)的狀態(tài)轉(zhuǎn)移運(yùn)動(dòng)起來(lái),還需要在Simulink層添加必要的輸入源和輸出.圖3先建立了4個(gè)節(jié)點(diǎn)的CAN總線系統(tǒng)母板的仿真模型,頻率為500 kHz,輸入為隨機(jī)分布的數(shù),通過(guò)floor塊將其變成整數(shù),經(jīng)過(guò)chart模塊輸出,結(jié)果會(huì)在scope模塊中顯示.要想修改chart模塊,雙擊該模塊就進(jìn)入Stateflow的編輯界面.
圖3 4個(gè)節(jié)點(diǎn)的CAN總線的母板模型
由于采用的是模塊化設(shè)計(jì),所以該系統(tǒng)很容易進(jìn)行擴(kuò)展,想要幾個(gè)節(jié)點(diǎn),就在Stateflow中添加幾個(gè)狀態(tài)和數(shù)據(jù)對(duì)象即行.圖4是擴(kuò)展的10個(gè)節(jié)點(diǎn)的母板仿真模型,其原理與圖3相同,各個(gè)節(jié)點(diǎn)的子模塊與圖1相同,競(jìng)爭(zhēng)總線模塊只要將圖2中的compete函數(shù)選擇分支加成10個(gè)即行.
圖4 10個(gè)節(jié)點(diǎn)的CAN總線母板模型
TTCAN是基于時(shí)間觸發(fā)的總線,在每個(gè)時(shí)刻總線上最多只允許有一個(gè)節(jié)點(diǎn)發(fā)送信息,這些節(jié)點(diǎn)是通過(guò)周期矩陣來(lái)調(diào)度的.在TTCAN中,時(shí)間主節(jié)點(diǎn)周期性地發(fā)送參考消息來(lái)使網(wǎng)絡(luò)中各節(jié)點(diǎn)達(dá)到時(shí)鐘同步,通過(guò)調(diào)度表實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)中消息傳輸?shù)墓芾砼c預(yù)測(cè).參考消息標(biāo)志著一個(gè)基本周期的開(kāi)始,基本周期由若干個(gè)時(shí)間窗口組成,表1給出了由3個(gè)基本周期組成的矩陣周期表.
表1 系統(tǒng)的矩陣周期
本文要研究的是node1到node9在總線上的傳輸情況,以此來(lái)觀測(cè)其隊(duì)列延遲.不考慮參考信息,因此node0是空狀態(tài),建立的Stateflow層模型如圖5所示.
圖5中,1個(gè)基本周期(DB)為1個(gè)狀態(tài),它們之間以exclusive的形式連接,即DB1外框?yàn)閷?shí)線,表示它們之間是互斥的關(guān)系,即每個(gè)時(shí)刻只能有1個(gè)狀態(tài)處于激活態(tài),當(dāng)仿真開(kāi)始時(shí),先進(jìn)入DB1,之后進(jìn)入DB2,DB3,傳輸完成后又轉(zhuǎn)移到DB1,這樣循環(huán)進(jìn)行直到仿真結(jié)束,n表示循環(huán)的次數(shù).
圖5 1個(gè)基本周期的模型
每個(gè)DB中又包含4個(gè)子狀態(tài),分別對(duì)應(yīng)表1中的4列,也是以 exclusive的形式連接的,即node0、node1、node4、node7外框都是實(shí)線,表明它們只能通過(guò)事件來(lái)激發(fā),即E1、E4,而圖1中節(jié)點(diǎn)的外圍為虛線,表明各個(gè)節(jié)點(diǎn)間是平行的,處于競(jìng)爭(zhēng)總線狀態(tài).另外,每個(gè)節(jié)點(diǎn)又各自包含3個(gè)并行的狀態(tài)send、buffer、period_data_put,它們中包含的具體內(nèi)容見(jiàn)圖6.
圖6 node1的模型
DB1中,node0發(fā)生一個(gè)列寬時(shí)間后轉(zhuǎn)移到node1,node1的狀態(tài)圖見(jiàn)圖6,若有數(shù)據(jù)就傳輸,傳輸完成且到了下個(gè)節(jié)點(diǎn)的傳輸時(shí)刻,退出transmission狀態(tài),同時(shí)激發(fā)E1事件以此來(lái)觸發(fā)node4(本文是利用事件E1~E8來(lái)模擬TTCAN協(xié)議中的時(shí)間主節(jié)點(diǎn)的),之后,node4開(kāi)始傳輸,依此類(lèi)推;若無(wú)數(shù)據(jù),則到時(shí)間點(diǎn)轉(zhuǎn)移.node2到node9的模型與圖6的模型只是觸發(fā)事件的時(shí)間不同,即time變量不同,這里不再贅述.
為了能夠讓Stateflow層設(shè)計(jì)的TTCAN模型運(yùn)動(dòng)起來(lái),也需要在Simulink層添加必要的輸入源和輸出.由于TTCAN在Simulink中的母板模塊與圖4基本相同,只是將node10的相關(guān)參數(shù)都改成node0,因此這里不再贅述.
文中對(duì)CAN和TTCAN通信系統(tǒng)進(jìn)行了簡(jiǎn)化,只建立了它們發(fā)送部分的模型,而且1個(gè)節(jié)點(diǎn)只發(fā)送1個(gè)優(yōu)先級(jí)的周期性報(bào)文,node1的優(yōu)先級(jí)最高,其他節(jié)點(diǎn)依次降低.
由于CAN總線系統(tǒng)是多條報(bào)文競(jìng)爭(zhēng)總線,所以其存在隊(duì)列延遲.通過(guò)改變各個(gè)節(jié)點(diǎn)發(fā)送報(bào)文的周期改變總線負(fù)載率,從而影響系統(tǒng)的隊(duì)列延遲,同時(shí)不同優(yōu)先級(jí)的報(bào)文其隊(duì)列延遲也不同.
從圖1中可知,當(dāng)節(jié)點(diǎn)處于wait狀態(tài)時(shí),n1為1;當(dāng)開(kāi)始傳輸數(shù)據(jù)時(shí),n1變成2,所以,可以用n1為1的時(shí)間長(zhǎng)度來(lái)反映隊(duì)列延遲.這里將n1作為Stateflow的輸出,可以從圖3的Simulinkscope1中觀測(cè)其變化規(guī)律.圖7是T1=0.015 s,T2=0.01 s,T3=0.005 s,T4=0.001 s的波形圖.
圖7 4個(gè)節(jié)點(diǎn)的輸出波形圖
通過(guò)分析計(jì)算可得4個(gè)節(jié)點(diǎn)的隊(duì)列延遲表,見(jiàn)表2.
表2 4個(gè)節(jié)點(diǎn)的隊(duì)列延遲表
從表2可看出,優(yōu)先級(jí)越高等待的時(shí)間越短.改變每個(gè)節(jié)點(diǎn)的周期,可以得出不同周期下4個(gè)節(jié)點(diǎn)的輸出波形圖和隊(duì)列延遲表.根據(jù)隊(duì)列延遲表,繪制3組不同周期下各個(gè)節(jié)點(diǎn)的隊(duì)列延遲對(duì)比圖,見(jiàn)圖8.
圖8 3組周期的延遲對(duì)比圖
由圖7、圖8可以給出如下的分析結(jié)果:
1)在同一負(fù)載率下,優(yōu)先級(jí)高的報(bào)文平均隊(duì)列延遲要小,說(shuō)明優(yōu)先級(jí)高的報(bào)文在傳輸時(shí)所需的排隊(duì)時(shí)間短.
2)對(duì)于同一優(yōu)先級(jí)的報(bào)文,隨著節(jié)點(diǎn)周期的減小,負(fù)載率的增加,平均隊(duì)列延遲增大,說(shuō)明隨著負(fù)載率的升高,報(bào)文碰撞即總線仲裁的機(jī)會(huì)增多,導(dǎo)致排隊(duì)時(shí)間增大.
3)在3組不同的周期下,優(yōu)先級(jí)越低的報(bào)文平均隊(duì)列延遲的時(shí)間增加的越快,說(shuō)明在仲裁過(guò)程中,報(bào)文碰撞越多,優(yōu)先級(jí)低的報(bào)文獲得總線訪問(wèn)權(quán)的機(jī)會(huì)越小,導(dǎo)致排隊(duì)時(shí)間增大的比較快.
以上的分析結(jié)果與CAN總線的傳輸特性相一致.
TTCAN中每個(gè)節(jié)點(diǎn)都是按照矩陣周期中分配的時(shí)間來(lái)發(fā)送的,到點(diǎn)即發(fā),不存在隊(duì)列延遲,下面通過(guò)仿真來(lái)觀測(cè)這個(gè)現(xiàn)象.
在TTCAN中是通過(guò)改變基本周期和列寬來(lái)改變總線的負(fù)載率,基本周期和列寬越大,負(fù)載率越小,文中只觀測(cè)了節(jié)點(diǎn)1、4、7的發(fā)送波形圖,圖9中基本周期為2 s,列寬為0.5 s.
從圖9可以看出:當(dāng)時(shí)間為0.5 s時(shí),節(jié)點(diǎn)1開(kāi)始發(fā)送,發(fā)送0.5 s之后,節(jié)點(diǎn)4開(kāi)始發(fā)送,再過(guò)0.5 s,節(jié)點(diǎn)7開(kāi)始發(fā)送,6 s之后DB3發(fā)送完,又轉(zhuǎn)移到DB1,依次循環(huán)進(jìn)行.改變基本周期為3 s,列寬為0.75 s的波形圖見(jiàn)圖10.
圖10中節(jié)點(diǎn)1、4、7的發(fā)送時(shí)刻也是按照調(diào)度表中的時(shí)刻來(lái)發(fā)送的.
由于TTCAN中每個(gè)節(jié)點(diǎn)都是按照矩陣周期中分配的時(shí)間來(lái)發(fā)送的,所以從圖9、圖10可以看出,在不同負(fù)載率工況下,對(duì)于不同優(yōu)先級(jí)的報(bào)文,隊(duì)列延遲的大小不變,可見(jiàn)TTCAN的實(shí)時(shí)性要比CAN的好,這與TTCAN協(xié)議的傳輸特性一致.
圖9 發(fā)送波形圖
圖10 改變負(fù)載率的波形圖
通過(guò)以上仿真可知,MATLABSimulinkStateflow便于擴(kuò)展和修改,很多復(fù)雜的邏輯可以在一張小圖表中表述,規(guī)則簡(jiǎn)單,可讀性和可驗(yàn)證性很強(qiáng),在Stateflow編輯界面中可以很直觀的觀察狀態(tài)轉(zhuǎn)換過(guò)程,便于調(diào)試和對(duì)系統(tǒng)原理的掌握.同時(shí),證明了利用Stateflow對(duì)總線協(xié)議進(jìn)行建模仿真的可行性.在進(jìn)一步的研究中,可以加入系統(tǒng)的接收部分,對(duì)總線系統(tǒng)的其他特性進(jìn)行仿真分析.另外,還可以將它和Realtime工具箱緊密集成,直接生成目標(biāo)代碼進(jìn)行半實(shí)物仿真.
[1]杜 微.混合動(dòng)力電動(dòng)汽車(chē)TTCAN網(wǎng)絡(luò)研究[D].北京:北京交通大學(xué),2008.
[2]王俊波,胥布工.CAN報(bào)文實(shí)時(shí)性分析及在線評(píng)估[J].控制與決策,2007,22(4):448-452.
[3]王大方.基于OSEK與TTCAN的電動(dòng)汽車(chē)分布式實(shí)時(shí)控制系統(tǒng)研究[D].北京:北京理工大學(xué),2008.
[4]王 歡.電動(dòng)汽車(chē) TTCAN總線技術(shù)研究[D].北京:中國(guó)科學(xué)院研究生院,2006.
[5]張 威.Stateflow邏輯系統(tǒng)建模[M].西安:西安電子科技大學(xué)出版社,2007.
[6]鄒 暉,陳萬(wàn)春,殷興良.Stateflow在巡航導(dǎo)彈仿真中的應(yīng)用[J].系統(tǒng)仿真學(xué)報(bào),2004,16(8):1854-1856.