一種CAN總線高層通信協(xié)議的設(shè)計與實現(xiàn)
1 引言
本文引用地址:http://www.ex-cimer.com/article/201609/303364.htmcan全稱為controller area network,即控制器局域網(wǎng),由德國bosch公司最先提出,是國際上應(yīng)用最廣泛的現(xiàn)場總線之一。最初can 被設(shè)計作為汽車環(huán)境中的通訊,在汽車電子控制裝置之間交換信息形成汽車電子控制網(wǎng)絡(luò)。由于其卓越的性能、極高的可靠性和低廉的價格現(xiàn)已廣泛應(yīng)用于工業(yè)現(xiàn)場控制、醫(yī)療儀器等眾多領(lǐng)域[1][2]。
can協(xié)議是建立在osi 7層開放互連參考模型基礎(chǔ)之上的。但can協(xié)議只定義了模型的最下面兩層:數(shù)據(jù)鏈路層和物理層,僅保證了節(jié)點間無差錯的數(shù)據(jù)傳輸。can的應(yīng)用層協(xié)議必須 由can 用戶自行定義,或采用一些國際組織制訂的標準協(xié)議。應(yīng)用最為廣泛的是devicenet和canopen,分別廣泛應(yīng)用于過程控制和機電控制領(lǐng)域。但此類協(xié)議一般結(jié)構(gòu)比較復(fù)雜,更適合復(fù)雜大型系統(tǒng)的應(yīng)用。筆者在研制一種基于can總線的分布式高頻開關(guān)電源充電機系統(tǒng)的過程中設(shè)計了一種適合于小型控制系統(tǒng)的 can總線高層通信協(xié)議。
2 can的特點[3]
can 是一種多主方式的串行通訊總線,基本設(shè)計規(guī)范要求有高的位速率、抗電磁干擾性,而且要能夠檢測出總線的任何錯誤。當信號傳輸距離達10km時,can仍可 提供高達50kbps 的數(shù)據(jù)傳輸速率。
can具有十分優(yōu)越的特點:
(1) 較低的成本與極高的總線利用率;
(2) 數(shù)據(jù)傳輸距離可長達10km,傳輸速率可高達1mbps[7];
(3) 可靠的錯誤處理和檢錯機制,發(fā)送的信息遭到破壞后可自動重發(fā);
(4) 節(jié)點在錯誤嚴重的情況下具有自動退出總線的功能;
(5) 報文不包含源地址或目標地址,僅用標志符來指示功能信息和優(yōu)先級信息。
3 can的技術(shù)規(guī)范
(1) 幀類型
在can總線中,有四種不同的幀類型[4][5]:
·數(shù)據(jù)幀(data frame) 數(shù)據(jù)幀帶有應(yīng)用數(shù)據(jù);
· 遠程幀(remote frame) 通過發(fā)送遠程幀可以向網(wǎng)絡(luò)請求數(shù)據(jù),啟動其他資源節(jié)點傳送他們各自的數(shù)據(jù),遠程幀包含6個不同的位域:幀起始、仲裁域、控制域、crc域、應(yīng)答域、幀結(jié)尾。仲裁域中的rtr位的隱極性表示為遠程幀;
·錯誤幀(error frame)錯誤幀能夠報告每個節(jié)點的出錯,由兩個不同的域組成,第一個域是不同站提供的錯誤標志的疊加,第二個域是錯誤界定符;
·過載幀 (overload frame)如果節(jié)點的接收尚未準備好就會傳送過載幀,由兩個不同的域組成,第一個域是過載標志,第二個域是過載界定符。
(2) 數(shù)據(jù)幀結(jié)構(gòu)
數(shù)據(jù)幀由以下7個不同的位域(bit field)組成:幀起始、仲裁域、控制域、數(shù)據(jù)域、crc域、應(yīng)答域、幀結(jié)尾。其標準幀結(jié)構(gòu)如表1所示:
表1 數(shù)據(jù)幀的結(jié)構(gòu)[4]
·幀起始:標志幀的開始,它由單個顯性位構(gòu)成,在總線空閑時發(fā)送,在總線上產(chǎn)生同步作用。
·仲裁域: 由11位標識符(id10-id0)和遠程發(fā)送請求位(rtr)組成,rtr位為顯性表示該幀為數(shù)據(jù)幀,隱性表示該幀為遠程幀;標識符由高至低按次序發(fā)送,且前7位 (id10-id4)不能全為顯性位。標識符id用來描述數(shù)據(jù)的含義而不用于通信尋址,can總線的幀是沒有尋址功能的。標識符還用于決定報文的優(yōu)先權(quán),id值越低優(yōu)先權(quán)越高,在競爭總線時,優(yōu)先權(quán)高的報文優(yōu)先發(fā)送,優(yōu)先權(quán)低報文退出總線競爭。can總線競爭的算法效率很高,是一種非破壞性競爭。
· 控制域:為數(shù)據(jù)長度碼 (dlc3-dlc0),表示數(shù)據(jù)域中數(shù)據(jù)的字節(jié)數(shù),不得超過8。
·數(shù)據(jù)域:由被發(fā)送數(shù)據(jù)組成,數(shù)目與控制域中設(shè)定的字節(jié) 數(shù)相等,第一個字節(jié)的最高位首先被發(fā)送。其長度在標準幀中不超過8個字節(jié)。
·crc域:包括crc(循環(huán)冗余碼校驗)序列(15位)和crc界定 符(1個隱性位),用于幀校驗。
l應(yīng)答域:由應(yīng)答間隙和應(yīng)答界定符組成,共兩位;發(fā)送站發(fā)送兩個隱性位,接收站在應(yīng)答間隙中發(fā)送顯性位。應(yīng)答界定符必須是隱性位。
·幀結(jié)束:由7位隱性位組成。
4 自訂can高層協(xié)議
can的高層協(xié)議也可理解為應(yīng)用層協(xié)議,是一種在現(xiàn)有的底層協(xié)議(物理層和數(shù)據(jù)鏈路層)之上實現(xiàn)的協(xié)議。由于充電機系統(tǒng)的結(jié)構(gòu)比較簡單,網(wǎng)絡(luò)規(guī)模也比較 小。因此我們自行制訂了一種簡單而有效的高層通信協(xié)議。
技術(shù)規(guī)范can2.0a規(guī)定標準的數(shù)據(jù)幀有11位標識符,用戶可以自行規(guī)定其含義,將所需要的信息包含在內(nèi)。在充電機系統(tǒng)中,每一個節(jié)點都有一個唯一的地址,地址碼和模塊一一對應(yīng),通過撥碼開關(guān)設(shè)定,總線上數(shù)據(jù)的傳送也是根據(jù)地址進行的。由于本系統(tǒng)規(guī)模較小,節(jié)點數(shù)少于32個,因此為每個模塊分配一個5位 的地址碼,同一系統(tǒng)中地址碼不得重復(fù),系統(tǒng)初始化時由外部引腳讀入。將標識符id9-id5定義為源地址,id4-id0定義為目的地址,本協(xié)議中從模塊 的目的地址全填0,表示數(shù)據(jù)是廣播數(shù)據(jù),所有節(jié)點都可接收,主模塊中目的地址根據(jù)要進行通信目的模塊的地址確定。本通信協(xié)議的數(shù)據(jù)幀格式詳見表2。
表2 數(shù)據(jù)幀格式
理論上源地址和目的地址的范圍都是0~31,但由于can協(xié)議中規(guī)定標識符前7位不能全為顯性位,所以源地址不能為31,這時實際節(jié)點只有31 個 (0~30)。因此每個系統(tǒng)所含的模塊不超過31個。所以源地址和目的地址的范圍縮減到0~30。同時上位監(jiān)控機也要占用一個地址,因此系統(tǒng)中的電源模塊 不超過30個,設(shè)計時根據(jù)節(jié)點的優(yōu)先權(quán)高低從小到大分配節(jié)點地址。id10位定義為主模塊識別碼,該位主模塊為隱性位,從模塊為顯性位,以保證主模塊通信優(yōu)先。模塊的地址碼決定發(fā)送數(shù)據(jù)的優(yōu)先級。主模塊向總線發(fā)送的數(shù)據(jù)有兩種:一種是目的地址全部填0的廣播數(shù)據(jù);另一種是包含特定目的地址的非廣播數(shù)據(jù)。
協(xié)議中一幀數(shù)據(jù)最多能傳送8個字節(jié),對于充電機控制系統(tǒng)來說已經(jīng)足夠用了,本系統(tǒng)只用到其中的前5個字節(jié),其余3個節(jié)字可用于以后的擴展使用,因此未定義 多幀傳輸方式。
從模塊以廣播形式向總線發(fā)送數(shù)據(jù),同時回收自己發(fā)送的數(shù)據(jù),若檢測到所發(fā)送與所收到的數(shù)據(jù)不符,則立即重新發(fā)送上一幀數(shù)據(jù)。從模塊發(fā)送信息的順序由主模塊的發(fā)出的指令決定,以免在總線通信繁忙時優(yōu)先級較低的模塊始終得不到總線通信權(quán)。指令的發(fā)送順序按照各從模塊的地址順序進行,即地址較低的從模塊首先獲得 指令,得以發(fā)送自己的地址碼和電流、溫度采樣值。如發(fā)生沖突,則由can控制器自動根據(jù)模塊的優(yōu)先級調(diào)整發(fā)送順序,在can的底層協(xié)議中有完善的優(yōu)先級仲裁算法,因此應(yīng)用層協(xié)議不必考慮此類問題。
評論