如何實現(xiàn)可靠的CAN長字節(jié)通訊
CAN總線從上個世紀(jì)80年代開始,逐漸在汽車電子、軌道交通、醫(yī)療電子、工程機(jī)械等廣泛的工業(yè)場合應(yīng)用。這個“古老”的總線,最讓人“不爽”的地方,就是一幀只能傳輸八字節(jié)數(shù)據(jù),如果要一次傳輸更長字節(jié),需要分幀,而選擇一種可靠的分幀方法就是使用者一定要注意的。
CAN總線作為汽車電子而生的總線,提出了“優(yōu)先級自動仲裁”和“短幀快速傳輸”的控制概念,為了達(dá)到“高實時性”的快速控制目標(biāo)。使用一幀八字節(jié)的通訊單元具有了一系列的優(yōu)點缺點:
一、CAN通訊的優(yōu)缺點:
優(yōu)點
(1)8個字節(jié)正好是8個字節(jié)、4個16位、2個32位、1個64位的變量的存放“容器”。那么用戶只要在ID中存放“寄存器地址”,然后通過1幀來“讀取”或者“修改”,對應(yīng)的“數(shù)值”,這樣比較方便;
(2)短幀提高總線共享速度。任何一個CAN節(jié)點發(fā)送報文,在發(fā)送一幀后,需要重新和其他節(jié)點競爭總線,這樣只要用戶設(shè)計適當(dāng)?shù)陌l(fā)送間隔,就可以保證所有的點“共享”總線,提高總線利用率,也保證每個節(jié)點的發(fā)送周期大致保證一致。
缺點
(1)長數(shù)據(jù)傳輸時數(shù)據(jù)負(fù)載偏低。在多幀發(fā)送時,由于每幀發(fā)送都要發(fā)送CANID,所以實際的CAN數(shù)據(jù)所占的比例就很低了,以CAN擴(kuò)展幀為例,其29位ID和64位的數(shù)據(jù),導(dǎo)致數(shù)據(jù)承載只能達(dá)到60%。所以在長數(shù)據(jù)傳輸時,CAN甚至比不上同樣波特率下的RS485/Modbus;
(2)長數(shù)據(jù)傳輸分幀丟幀,會導(dǎo)致整包傳輸失敗。當(dāng)需要一次傳輸超過8字節(jié)數(shù)據(jù)時,需要分多幀傳輸,如果其中一幀“丟失”,則會導(dǎo)致整個發(fā)送包的無效。這就要求接收節(jié)點對每一個分幀進(jìn)行確認(rèn),以保證每一個分幀的到達(dá),而這么做就會大大降低效率;
(3)長數(shù)據(jù)傳輸時同步性差。比如要同時輸出動作超過8字節(jié)的控制命令時,由于每個幀到達(dá)有先后,先到的先動作,后到的后動作,就會引起輸出的不同步性。
可見CAN總線在當(dāng)前的主流應(yīng)用中,主要矛盾集中在其8字節(jié)短幀的長數(shù)據(jù)傳輸上。因此世界廣大科技工作者制定出一系列的改進(jìn)和改革方法來解決這些缺點。
二、可靠CAN長數(shù)據(jù)通訊:
升級為CANFD協(xié)議提高數(shù)據(jù)負(fù)載率
幾年前,梅賽德斯奔馳的工程師們對CAN總線的制定單位CiA(CAN in Automatic)協(xié)會提出,奔馳已經(jīng)將CAN用盡了。因為奔馳的工程師們通過不斷優(yōu)化通訊機(jī)制,已經(jīng)將奔馳的CAN總線利用率提高到90%以上,已經(jīng)無帶寬可用,只能通過網(wǎng)關(guān)不斷增加新的CAN網(wǎng)絡(luò)來擴(kuò)展數(shù)據(jù)通道。這樣導(dǎo)致整車的總線區(qū)域越來越多。
車載以太網(wǎng)雖然可以解決數(shù)據(jù)量的問題,但其布線改變過大,成本上升過多,只適合于網(wǎng)關(guān)之間的通訊。所以CiA協(xié)議就聯(lián)合各大車廠,制定出新一代的CANFD協(xié)議,以快速升級現(xiàn)有的CAN2.0B。其主要的內(nèi)容就是將一幀的數(shù)據(jù)段由8字節(jié)提升到64字節(jié),同時可以提升數(shù)據(jù)段的波特率,以縮短通訊時間。如圖1所示。
圖 1 CANFD報文提升數(shù)據(jù)負(fù)載率
這樣,不需要每8字節(jié)就要發(fā)一次CANID,即使不提升波特率,也提升了8倍的數(shù)據(jù)負(fù)載率。如果提升了8倍波特率,則可以達(dá)到64倍的數(shù)據(jù)負(fù)載率,相當(dāng)于擴(kuò)充了64倍帶寬。其提升效果非常明顯。
采用可靠的分幀協(xié)議
成熟的應(yīng)用層協(xié)議都有可靠的分幀協(xié)議,比如CANopen,DeviceNET,J1939協(xié)議等,總的方針都是“握手”“傳輸”“確認(rèn)”“結(jié)束”這四個過程循環(huán)。這里只介紹CANopen協(xié)議中的SDO多幀傳輸。
發(fā)送方(客戶端)發(fā)送的報文CAN-ID為600h+Node-ID,接收方(服務(wù)器)成功接收后,回應(yīng)CAN-ID為580h+Node-ID的報文。下載協(xié)議download protocol 如圖2所示。
圖2 普通SDO下載協(xié)議
上傳協(xié)議upload protocol 如圖3所示。
圖 3普通SDO上傳協(xié)議
采用同步傳輸協(xié)議
同步傳輸,解決的就是實現(xiàn)整個網(wǎng)絡(luò)的同步傳輸,如圖4所示,就像閱兵分列式上的方陣,所有士兵邁著整齊的步伐行進(jìn)。這里以CANopen的同步報文為例講解。
圖4同步協(xié)議與閱兵分列式
每個節(jié)點都以同步報文作為PDO(過程數(shù)據(jù)的)觸發(fā)參數(shù),為了保證時間準(zhǔn)確性,該同步報文的COB-ID 具有比較高的優(yōu)先級以及最短的傳輸時間。 CANopen選用80h作為同步報文的CAN-ID,如圖5所示。
圖5 同步報文
一般同步報文由NMT(網(wǎng)絡(luò)管理)主機(jī)發(fā)出,CAN報文的數(shù)據(jù)為0字節(jié)。但如果一個網(wǎng)絡(luò)內(nèi)有2個同步機(jī)制,就需要設(shè)置不同的同步節(jié)拍,比如某些節(jié)點按1個同步幀發(fā)送1次PDO,其他的節(jié)點收到2個同步幀才發(fā)送1此PDO,
在同步協(xié)議中,有2個約束條件:
同步窗口時間:索引1007h約束了同步幀發(fā)送后,從節(jié)點發(fā)送PDO的時效,即在這個時間內(nèi)發(fā)送的PDO才有效,超過時間的PDO將被丟棄,當(dāng)同步窗口結(jié)束后,開始同時執(zhí)行動作。
通訊循環(huán)周期:索引1006h規(guī)定了同步幀的循環(huán)周期,就是同步包發(fā)送的周期。
CAN總線在諸多愛好者的推動下,不斷改進(jìn)和改革自身,讓這個古老的總線煥發(fā)出勃勃生機(jī)。廣州致遠(yuǎn)電子有限公司,作為CAN總線在國內(nèi)的重要推廣者,CANScope總線綜合分析儀已免費標(biāo)配CANPRO軟件,可以解析主流的CANOpen,DeviceNet,J1939協(xié)議。
圖6 協(xié)議解析