DBC 文件解讀
DBC 是由 vector 公司定義的 CAN 網(wǎng)絡通信文件格式,具體規(guī)范可參考《DBC File Format Document》。
DBC 文件常用 Vector CANdb++ Editor 工具打開。打開后的界面如下:
Network nodes 中定義了本 DBC 文件所有報文的發(fā)送及接收節(jié)點;展開節(jié)點 NEO 可查看該節(jié)點的發(fā)送及接收報文。
Node Name 定義了報文的發(fā)送節(jié)點;Massage Name 定義了報文名稱。
Name 還是對應報文名稱;ID 對應報文 ID,十六機制,每個 CAN 報文都有自己唯一對應的 ID 號;DLC 為該報文的長度,單位為 Byte;Cycle Time 為循環(huán)發(fā)送時間,即應每隔多久發(fā)送一次,此處為 0。
Signals 為該幀報文包含的信號;Transmitters 為該報文的發(fā)送節(jié)點;Receivers 為該報文的接收節(jié)點;
Layout 的排版格式如上,具體含義需結合下面的信號格式解讀。
注意左上角標題:Node Rx Signal’LAT_DIST’,即某節(jié)點的接收信號,而報文的左上角標題為’Massage’,注意區(qū)分。
Node Name定義了信號的發(fā)送節(jié)點;Massage Name 定義了信號所在的報文名稱;Signal Name 定義了信號名稱。
由于該面板是在Massage選項框下的,故所有信息均為報文TRACK_3的信息。
該面板是在Signal選項框下的,故所有信息均為信號LAT_DIST的信息。
長為10個bit;Layout對應的排序方式為Motorola;單位為m;數(shù)據(jù)類型為有符號整型;初始值為0;精度為0.0625;偏移量為0;最小值0;最大值63.5。
該信號所代表的實際物理值 = 原始值(二進制轉為十進制)*因子+偏移量。
Motorola格式,從起始位開始自右向左倒退。
Inter格式,從起始位開始自右向左前進。
當信號在一個字節(jié)內實現(xiàn)(信號不跨字節(jié))時,Intel 格式和 Motorola 格式的信號排序完全一致,信號的高位(MSB)放在該字節(jié)的高位,信號的低位(LSB)放在該字節(jié)的低位。
當信號在多個字節(jié)內實現(xiàn)(信號跨字節(jié))時,Intel 格式和 Motorola 格式的信號排序有所不同:
Intel 格式:信號的高位(MSB)放在高字節(jié)的高位,信號的低位(LSB)放在低字節(jié)的低位;
Motorola格式:信號的高位(MSB)放在低字節(jié)的高位,信號的低位(LSB)放在高字節(jié)的低位。不管是 Intel 格式,還是 Motorola 格式,起始位都為該信號的低位。
不管是 Intel 格式,還是 Motorola 格式,起始位都為該信號的低位。
DBC文件的底層實現(xiàn)邏輯
用記事本或Nodepad++打開一份DBC文件,如下:
VERSION ""
NS_ :
NS_DESC_
CM_
BA_DEF_
BA_
VAL_
...
BU_SG_REL_
BU_EV_REL_
BU_BO_REL_
SG_MUL_VAL_
BS_:
BU_: K182_PACM K43_PSCM K17_EBCM NEO K124_ASCM
VERSION:定義DBC文件的版本信息,這里并未給出。
NS_(New Symbol) :定義DBC文件使用的命名空間,該信息在創(chuàng)建DBC文件時自動生成,一般無需理會。
BS_:用于定義CAN網(wǎng)絡通訊的波特率,內容可以省略,但該關鍵字必須存在。
BU_:定義總線上的節(jié)點,在這個例子中有5個節(jié)點:K182_PACM、K43_PSCM、K17_EBCM、NEO和K124_ASCM。
BO_ 823 PACMParkAssitCmd: 7 NEO
SG_ RollingCounter : 35|2@0+ (1,0) [0|0] "" NEO
SG_ SteeringWheelChecksum : 47|16@0+ (1,0) [0|0] "" NEO
SG_ SteeringWheelCmd : 23|16@0+ (1,0) [0|0] "" NEO
BO_:定義了一個數(shù)據(jù)幀,即一幀報文,其ID為823(十六進制對應0x337);該幀報文的名稱為:PACMParkAssitCmd;整個報文長為7個字節(jié),CAN 2.0最長為8字節(jié),CAN FD最長為64字節(jié);發(fā)送節(jié)點為NEO。如果該報文沒有指定發(fā)送節(jié)點,則發(fā)送節(jié)點處設置為” Vector__XXX”。
SG_:定義了該報文包含的信號,共RollingCounter、SteeringWheelChecksum和SteeringWheelCmd,3個信號。
// BO_ 1073 TRACK_1: 8 RADAR
SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
定義了一個名為LONG_DIST的信號;從第7位開始;長為12個bit;
@0表示信號的字節(jié)順序,0 代表Motorola,1 代表 Inter;
+表示無符號數(shù),-表示有符號數(shù);
Factor=0.0625;OffSet=0;min=0;max=255.5;
單位為"m ";接收節(jié)點為NEO。
SIG_GROUP_ 896 VehBattU 1 : VehBattUSysU VehBattUSysUQf;
定義信號組VehBattU,包含兩個信號VehBattUSysU和VehBattUSysUQf。
CM_ SG_ 1024 RADAR_STATE "need to find out more diagnostic values";
CM_(Comment):用于添加備注和注釋,方便用戶理解文件內容。
上述代碼的含義為:RADAR_STATE的信號ID為1024(十六機制為0x400),含義為"need to find out more diagnostic values"。
可以進行注解的對象類型不僅限于信號,還可以是節(jié)點“BU_”、報文“BO_”等。
VAL_ 1024 RADAR_STATE 121 "ok" 110 "faulted" 105 "wrong_config";
VAL_(Value Table):給信號添加值域描述。
定義報文ID為1024(十六機制為0x400)的信號RADAR_STATE為枚舉變量,當其值為121時表示"ok";110時表示"faulted";105時表示"wrong_config"。
原文:https://blog.csdn.net/i37193429/article/details/136491517
文章來源于網(wǎng)絡,版權歸原作者所有,如有侵權,請聯(lián)系刪除。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.