<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 如何通過(guò)DBC文件看懂CAN通信矩陣

如何通過(guò)DBC文件看懂CAN通信矩陣

發(fā)布人:美男子玩編程 時(shí)間:2024-08-21 來(lái)源:工程師 發(fā)布文章

實(shí)現汽車(chē)CAN通信開(kāi)發(fā),必不可少要用到DBC文件和CAN通信矩陣。


CAN通信矩陣是指用于描述 CAN 網(wǎng)絡(luò )中各個(gè)節點(diǎn)之間通信關(guān)系的表格或矩陣。它通常記錄了每個(gè)節點(diǎn)能夠發(fā)送和接收的消息標識符(ID)以及與其他節點(diǎn)之間的通信權限。


圖片


通信矩陣在 CAN 網(wǎng)絡(luò )中具有重要作用:

  • 通信權限管理:通過(guò)通信矩陣可以清晰地了解每個(gè)節點(diǎn)之間的通信權限,包括哪些節點(diǎn)可以向哪些節點(diǎn)發(fā)送消息,以及哪些節點(diǎn)可以接收來(lái)自哪些節點(diǎn)的消息。這有助于確保網(wǎng)絡(luò )中的數據傳輸是有序和安全的。

  • 網(wǎng)絡(luò )配置和管理:通信矩陣可以用于配置和管理 CAN 網(wǎng)絡(luò )的通信規則。通過(guò)調整矩陣中的條目,可以靈活地修改節點(diǎn)之間的通信關(guān)系,以滿(mǎn)足不同的通信需求和網(wǎng)絡(luò )拓撲結構。

  • 故障診斷:在出現通信故障或異常情況時(shí),通信矩陣可以作為診斷工具,幫助定位問(wèn)題。通過(guò)比較實(shí)際通信情況和預期的通信矩陣,可以找出通信錯誤的根本原因,并進(jìn)行相應的修復。


DBC(DataBase Container)文件是用于描述CAN總線(xiàn)網(wǎng)絡(luò )中消息和信號的一種格式,是一種數據庫文件,通常由CAN網(wǎng)絡(luò )中的通信和信號定義組成,可用于配置和管理CAN總線(xiàn)上的通信協(xié)議。


下載CANdb++軟件可以打開(kāi)DBC文件。


鏈接:https://www.vector.com/int/en/products/products-a-z/software/candb/#c104632

圖片


以下是一個(gè)DBC文件示例:


圖片


以下是 DBC 文件的主要組成部分:


消息定義:描述了在CAN總線(xiàn)上發(fā)送和接收的消息,包括消息的ID、周期、發(fā)送節點(diǎn)等信息。每個(gè)消息定義通常包含了一條或多條信號定義。


圖片

  • 控制器名稱(chēng) :控制器ECU名稱(chēng)

  • 報文名稱(chēng) :每個(gè)報文消息規定的名字

  • 報文ID :唯一標識報文的ID號,一般規定ID范圍為0x00 - 0x7FF

  • 報文發(fā)送類(lèi)型 :分為周期報文,事件報文,周期事件報文,使能周期發(fā)送

  • 報文周期 :周期報文的發(fā)送周期值

  • 長(cháng)度  :報文字節長(cháng)度


信號定義:描述了消息中傳輸的數據,如信號的名稱(chēng)、起始位、長(cháng)度、單位、因子、偏移量等。信號定義用于將物理數據映射到CAN消息的數據域中。


圖片

  • 信號名稱(chēng):信號英文名稱(chēng),一般命名:ECUName_MessgeName,ECUName為發(fā)送節點(diǎn)的名字簡(jiǎn)寫(xiě),MessgeName為具體的報文名稱(chēng)

  • 信號描述:信號中文名稱(chēng)描述

  • 信號類(lèi)型:信號的數據類(lèi)型,比如布爾類(lèi)型Boolean,無(wú)符號 Unsigned,有符號Signed

  • 信號長(cháng)度:信號的長(cháng)度,即占多少個(gè)bit 位的長(cháng)度

  • 字節次序 :規定信號的大小端位置和布局layout,有Motorola格式和Intel格式

  • 起始字節位置:起始位所在的字節序號

  • 起始位位置:信號起始位所在的bit位置編號

  • 精度/偏移量:描述信號值如何轉變成信號物理值,計算公式:真實(shí)物理值 = 信號值 * 精度 + 偏移量

  • Range范圍 :信號數值的范圍

  • 信號單位 :信號數值的單位,比如可為:m ,km

  • 信號值描述:信號數值含義

  • 初始值:信號默認的初始值

  • 無(wú)效值 :信號無(wú)任何含義的無(wú)效值狀態(tài)

  • 備注:信號備注內容


打開(kāi)DBC文件后,我們主要關(guān)注:Tx Messages和Rx Messages,這里面是CAN發(fā)送和接收的信息。


圖片


寫(xiě)程序時(shí)候,最容易搞錯的就是起始位和信號長(cháng)度,如果發(fā)送或者接收的信號沒(méi)有對齊,數據解析就會(huì )存在問(wèn)題。


圖片


可以使用CANdb++軟件打開(kāi)Layout,通過(guò)可視化的方式看清楚報文的字節排序,例如以下0X342報文的字節排序:


圖片


以一個(gè)8byte的報文為例,8byte即為64個(gè)bit位,會(huì )將每一個(gè)bit位編號為0 - 63,信號起始位數值即為起始位位置所在的編號值,信號長(cháng)度表示從起始位開(kāi)始,連續占用的bit位長(cháng)度。


圖片


根據具體的布局安排,以及數據的大小端規定,DBC中CAN字節排序有兩種格式:Motorola格式和Intel格式。


Intel格式:也稱(chēng)為小端序。在Intel格式中,數據的低位字節存儲在低地址,高位字節存儲在高地址。與Motorola格式相反,數據的最低有效字節存儲在地址最低的位置,而最高有效字節存儲在地址最高的位置。大多數個(gè)人計算機和x86架構的處理器都使用小端序。


Intel格式規定的布局安排規定示例如下,起始位位置規定了位于64bit(編號0-63)具體的那個(gè)位置,如下示例起始位置為12;信號長(cháng)度規定了從起始位編號位置開(kāi)始,連續占用的bit位長(cháng)度,如下示例信號長(cháng)度為12。


圖片


Motorola格式:也稱(chēng)為大端序。在Motorola格式中,數據的高位字節存儲在低地址,低位字節存儲在高地址。這意味著(zhù)數據的最高有效字節存儲在地址最低的位置,而最低有效字節存儲在地址最高的位置。這種格式通常用于一些嵌入式系統和網(wǎng)絡(luò )協(xié)議中。起始位表示信號的大小端規定不同,又可以分成 Motorola MSB格式 和 Motorola LSB格式。


Motorola MSB格式布局示例如下,起始位位置表示的是大端位置。


圖片


Motorola LSB格式布局示例如下,起始位位置表示的是小端位置。


圖片


使用Intel格式設置續航里程998KM, 它的信號值在整條報文中為3E、60、00、00、00、00、00、00,在DBC文件中設置如下:


圖片


信號以低字節低位起始,此處占了12bit,以第一字節的低bit 0位算起,計12個(gè)bit總長(cháng)度,信號是非連續的(發(fā)送的字節序體現出的信號值非連續,但是bit位是由低到高連續的)。 


使用Motorola格式設置續航里程998KM, 它的信號值在整條報文中為3E、60、00、00、00、00、00、00,在DBC文件中設置如下:


圖片


信號以高字節低位起始,此處占了12bit,以第二字節的低bit 12位算起,計12個(gè)bit總長(cháng)度,信號是連續的(此處連續針對低字節在前的字節發(fā)送序,參看LSB與MSB)。 


報文發(fā)送類(lèi)型可分為:周期,事件,周期事件,使能周期。


圖片


  • 周期 :報文按照固定的周期發(fā)送,例如周期為100ms,則每隔100ms發(fā)送一幀報文。

  • 事件 :當事件觸發(fā)后,發(fā)送出數據報文,一般規定連續發(fā)送3幀,間隔20ms。

  • 周期事件 :周期和事件的結合,報文以周期時(shí)間發(fā)送每幀報文,當某個(gè)事件信號觸發(fā)后,按照事件的形式立馬發(fā)送出來(lái),之后恢復到固定周期發(fā)送。

  • 使能周期 :報文以周期時(shí)間發(fā)送每幀報文,當某個(gè)事件觸發(fā)后并且達到下一個(gè)發(fā)送周期時(shí),這個(gè)時(shí)刻按照事件發(fā)送,一般規定連續發(fā)送3幀,間隔20ms。


周期事件報文中的事件信號,在實(shí)際應用中,有事件保持和事件不保持兩種。


  • 事件保持 :觸發(fā)信號發(fā)送后,信號一直保持之前的狀態(tài)。

  • 事件不保持 :觸發(fā)信號發(fā)送后,信號恢復到默認值狀態(tài)。


有些報文規定了兩個(gè)特殊的信號:RollingCounter信號 和 CheckSum信號,為CAN報文添加安全加密屬性,保護CAN報文信號數據。


圖片


  • RollingCounter信號 :滾動(dòng)計數值,例如示例信號從0 - 15,循環(huán)滾動(dòng),每發(fā)送一幀報文,該信號值累加1。

  • CheckSum信號 :檢驗值,基于某種校驗算法,將報文數據進(jìn)行加密處理,加密算法一般使用的是CRC算法。


參考資料:

1、https://www.cnblogs.com/yao-zhang/p/10220665.html

2、https://blog.csdn.net/PlutoZuo/article/details/133043032

3、https://blog.csdn.net/CJohn1994/article/details/124105213

4、https://blog.csdn.net/wteruiycbqqvwt/article/details/102929488

5、https://mp.weixin.qq.com/s/5x0-JqTKx6Uv_3yz9p4K0g


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: CAN 通信矩陣

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>