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