一種CAN息線(xiàn)報文優(yōu)先級產(chǎn)生與檢測方法
作為國際標準ISO11898和IS011519的控制器局域網(wǎng)CAN,雖然最初是為汽車(chē)的監測、控制系統而設計的,但由于它在性能、可靠性等方面的突出優(yōu)勢,現已廣泛地應用于各工業(yè)領(lǐng)域。在CAN總線(xiàn)技術(shù)中,MAC機制是基本的和關(guān)鍵的部分之一。在CAN的技術(shù)規范中首先提到的就是仲裁,而仲裁規則是通過(guò)報文優(yōu)先級體現的。目前國內外雖然對CAN報文優(yōu)先級有一些理論研究和分析,但尚未見(jiàn)到有文獻介紹有效的方法或手段來(lái)產(chǎn)生和檢測報文的優(yōu)先級。這在很大程度上阻礙了CAN總線(xiàn)的進(jìn)一步研究與應用。本文給出了一種CAN報文優(yōu)先級的產(chǎn)生與檢測方法,清晰地解析了CAN總線(xiàn)的非破壞性逐位仲裁機制。
1 CAN的MAC機制分析
CAN技術(shù)規范中的MAC機制是指對媒體訪(fǎng)問(wèn)的控制/仲裁機制。CAN網(wǎng)絡(luò )上一個(gè)節點(diǎn)發(fā)送的報文可被網(wǎng)絡(luò )上所有其他節點(diǎn)監聽(tīng)并應答。當總線(xiàn)開(kāi)放時(shí),任何CAN節點(diǎn)均可開(kāi)始發(fā)送報文;若多個(gè)節點(diǎn)同時(shí)開(kāi)始發(fā)送報文,總線(xiàn)訪(fǎng)問(wèn)沖突借助標識符進(jìn)行逐位仲裁來(lái)解決。仲裁期間,每一個(gè)發(fā)送器都將發(fā)送的位電平與在總線(xiàn)上監視到的電平進(jìn)行比較。若相同,則該單元可以繼續發(fā)送;若不同,則該單元丟失仲裁,且須退出而不再發(fā)送后續位。
對于多個(gè)節點(diǎn)同時(shí)發(fā)送情況下總線(xiàn)訪(fǎng)問(wèn)的仲裁,CAN采用的是帶優(yōu)先權的非破壞性逐位仲裁機制來(lái)解決總線(xiàn)沖突的;對于一個(gè)節點(diǎn)想要發(fā)送而另一個(gè)節點(diǎn)正在發(fā)送的總線(xiàn)訪(fǎng)問(wèn)情況,CAN采用的是載波監聽(tīng)技術(shù)。這二者共同的基礎是CAN總線(xiàn)上一個(gè)節點(diǎn)發(fā)送的報文可被所有節點(diǎn)(包括自身)監聽(tīng)。帶優(yōu)先權的非破壞性逐位仲裁機制所依賴(lài)的其他基礎是顯性位(“O”)的優(yōu)先權高于隱性位(“l(fā)”),即當一個(gè)隱性位和一個(gè)顯性位同時(shí)被發(fā)送至總線(xiàn)上時(shí),總線(xiàn)上所出現的結果為一個(gè)顯性位,“非破壞性”即是對高優(yōu)先權的“O”而言的。參與逐位仲裁的位為仲裁場(chǎng)(11位標識符和RTR位,對于標準格式),如圖1所示。
2 硬件支持
CAN報文優(yōu)先級檢測系統由4個(gè)CAN通信節點(diǎn)組成,通過(guò)各節點(diǎn)的CAN―H和CAN―L端口并聯(lián)到總線(xiàn)上,總線(xiàn)兩端各接上一個(gè)120Ω左右的終端電阻,構成一個(gè)閉合回路。4個(gè)節點(diǎn)的主體結構是基本相同的,根據系統功能的需要每個(gè)節點(diǎn)在硬件結構上又有所差別。系統總體結構如圖2所示。每個(gè)節點(diǎn)均有鍵盤(pán)和顯示單元;節點(diǎn)1、2、3為發(fā)送節點(diǎn),每個(gè)節點(diǎn)均有“啟動(dòng)發(fā)送”按鈕;節點(diǎn)1還有“停止發(fā)送”按鈕,并可對CAN總線(xiàn)電平進(jìn)行檢測,亦即可對CAN總線(xiàn)MAC(媒體訪(fǎng)問(wèn)控制)幀進(jìn)行檢測;節點(diǎn)4為接收節點(diǎn),可顯示接收到的報文。
3 CAN報文優(yōu)先級的產(chǎn)生與檢測方法
3.1 基本原理
根據CAN的MAC機制及仲裁規則,如果高優(yōu)先級的報文一直占用著(zhù)總線(xiàn),則其他低優(yōu)先級的報文將無(wú)法獲得仲裁,但是會(huì )嘗試重新發(fā)送。只有當高優(yōu)先級報文不再占用總線(xiàn)時(shí),低優(yōu)先級的報文才可能發(fā)送成功。因此,檢測報文優(yōu)先級的前提和關(guān)鍵是如何讓不同優(yōu)先級的報文同時(shí)競爭總線(xiàn)。
為方便說(shuō)明,首先命名標識符。節點(diǎn)1要發(fā)送兩種報文,將其發(fā)送報文標識符分別命名為SENT_ID_11和SENT_ID_12,將節點(diǎn)2和節點(diǎn)3發(fā)送報文標識符分別命名為SENT_ID_2和SENT_ID_3。報文的優(yōu)先級順序:SENT_ID_11>SENT_ID_2,SENT_ID_11>SENT_ID_3,SENT_ID_12>SENT_ID_2,SENT_ID_12>SENT_ID_3,SENT_ID_11不同于SENT_ID_12,SENT_ID_2不同于SENT_ID_3。使節點(diǎn)1連續發(fā)送標識符為SENT_ID_11的報文,目的是讓高優(yōu)先級的報文占用總線(xiàn),使總線(xiàn)一直處于“忙”的狀態(tài)。然后使節點(diǎn)2和節點(diǎn)3分別開(kāi)始發(fā)送標識符為SENT_ID_2和SENT_ID_3報文,節點(diǎn)2、3發(fā)送的報文優(yōu)先級不同且均比節點(diǎn)1優(yōu)先級低。此時(shí),節點(diǎn)2和3監聽(tīng)總線(xiàn)的結果是:發(fā)現有比其本身優(yōu)先級高的報文正在發(fā)送,因此要邊監聽(tīng)邊等待。這時(shí)節點(diǎn)l停止發(fā)送后,節點(diǎn)2和3會(huì )同時(shí)競爭總線(xiàn),從而創(chuàng )造了使不同優(yōu)先級的報文同時(shí)競爭總線(xiàn)的條件。根據節點(diǎn)4接收到報文的先后順序即可驗證節點(diǎn)2和節點(diǎn)3所發(fā)報文的優(yōu)先級了,并且兩個(gè)節點(diǎn)發(fā)出的報文都被成功接收,也驗證了CAN總線(xiàn)的非破壞性仲裁機制。另外,通過(guò)節點(diǎn)1檢測到的MAC幀也能確定節點(diǎn)2和3的報文優(yōu)先級。這里要注意的是,SENT_ID_12的報文作為檢測開(kāi)始的標志。使節點(diǎn)l停止連續發(fā)送報文,讓節點(diǎn)1再發(fā)送1幀ID為SENT_ID_12的報文,同時(shí)開(kāi)始檢測總線(xiàn)電平,捕捉MAC幀。在第3次檢測到連續11個(gè)“l(fā)”時(shí)停止檢測,即第3幀報文結束時(shí)停止檢測。節點(diǎn)1將檢測到的MAC幀的各位值通過(guò)顯示單元順序地顯示出來(lái),并與節點(diǎn)2和3發(fā)送的MAC幀相比較,可體現節點(diǎn)2和3的報文優(yōu)先級。這就雙方面驗證了報文優(yōu)先級,保證了準確性和可信度。
評論