0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

DBC文件結(jié)構(gòu)深度解析

汽車ECU開發(fā) ? 來源:csdn ? 2024-04-30 12:50 ? 次閱讀
1. DBC文件的構(gòu)成

Bit_timing 波特率定義,必須部分,但通常為空nodes 定義網(wǎng)絡(luò)節(jié)點(diǎn)messages 定義消息和信號(hào)

2. 關(guān)鍵字

VERSION 版本

VERSION:

NS_ 為new symbol的縮寫,后面緊跟著一堆ns,一般是創(chuàng)建dbc時(shí)自動(dòng)生成,不用太關(guān)心

NS_:

BS_ 定義CAN網(wǎng)絡(luò)的波特率

BS_: [baudrate:BTR1,BTR2]

BU_ 網(wǎng)絡(luò)節(jié)點(diǎn)

BU_: Nodename1 Nodename2 Nodename3 ……

BO_ 報(bào)文

BO_: message_id message_name : message_size transmitter {signal}

SG_ 信號(hào)

SG_: signal_name multiplexer_indicator : start_bit | signal_size @ byte_order value_type ( factor , offset ) [ minimum | maximum ] unit receiver {, receiver}

CM_ 對報(bào)文/信號(hào)的注解

CM_: Object MessageId/NodeName “Comment”

BA_DEF_ 對報(bào)文/信號(hào)/節(jié)點(diǎn)等的屬性定義

BA_DEF: _ Object AttributeName ValueType Min Max;

BA_DEF_ DEF_ 對報(bào)文/信號(hào)/節(jié)點(diǎn)等的屬性初始值定義

BA_DEF_DEF_: AttributeName DefaultValue;

BA_ 對報(bào)文/信號(hào)/節(jié)點(diǎn)等的屬性設(shè)置值定義

BA_: AttributeName projectValue

VAL_ 數(shù)值表定義

VAL_: MessageId SignalName N “DefineN” …… 0 “Define0”

VAL_TABLE_ 全局信號(hào)值表,用來對信號(hào)值解碼

VAL_TABLE_: name value “value_description” …0 “value_description”

EV_ 環(huán)境變量

EV_:

3.本文出現(xiàn)的符號(hào)

‘ | ’ ——可選擇

‘ ; ’——結(jié)束定義

[。..]——內(nèi)容可選(0或1次)

{。..}——內(nèi)容重復(fù)(0或多次)

(。..)——注釋

unsigned_integer:無符號(hào)整型

signed_integer:有符號(hào)整型

double:雙精度小數(shù)

char_string:字符串

C_identifier:C語言變量命名

4. 波特率的結(jié)構(gòu)(BS_)

BS_: [baudrate:BTR1,BTR2];

其中BS_為關(guān)鍵字,用于定義CAN網(wǎng)絡(luò)的波特率;[ ]內(nèi)容表示為可選部分,可以省略(如下圖例子中即把該部分省略了);但關(guān)鍵字”BS_:”必須存在,省略則會(huì)出錯(cuò)?!禗BC File Format Document》規(guī)范中明確提醒,必須保留BS_: 標(biāo)簽。

5. 網(wǎng)絡(luò)節(jié)點(diǎn)的結(jié)構(gòu)(BU_)

BU_: Nodename1 Nodename2 Nodename3 ……

BU_: GW ESC SAS ACU FRS FVCM

解釋:

BU_ 為關(guān)鍵字,表示網(wǎng)絡(luò)節(jié)點(diǎn)

Nodename1、Nodename2 網(wǎng)絡(luò)節(jié)點(diǎn)名字,由用戶自己定義;

注意事項(xiàng):需要保證節(jié)點(diǎn)命名的唯一性

如示例中的BU_: VCU_Vehicle_Control_Unit MotorCtrol SCU PC Vector__XXX :

表示定義了:

VCU_Vehicle_Control_Unit

MotorCtrol

SCU

PC

Vector__XXX這五個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)

其中:標(biāo)識(shí)為Vector__XXX時(shí)表示未指明具體節(jié)點(diǎn)

6. 消息的結(jié)構(gòu)(BO_)

BO_ message_id message_name : message_size transmitter {signal}

BO_ 306YRS2: 8 FVCM

解釋:

BO_ 為關(guān)鍵字,表示報(bào)文;

MessageId 報(bào)文ID,是以10進(jìn)制數(shù)表示的;

(如例子中的996,代表報(bào)文ID為0x3E4,是longlong類型,也就是CAN ID的值;)

MessageName 報(bào)文的名字,命名規(guī)則和C語言變量相同;

MessageSize 報(bào)文數(shù)據(jù)域字節(jié)數(shù),為無符號(hào)整型數(shù)據(jù),CAN 2.0為最大8字節(jié),CAN FD 最大64字節(jié);

Transmitter 該報(bào)文的網(wǎng)絡(luò)節(jié)點(diǎn);如果該報(bào)文沒有指定發(fā)送節(jié)點(diǎn),則該值需設(shè)置為” Vector__XXX”。

如示例中的BO_ 201959408 MSG1: 8 VCU_Vehicle_Control_Unit

報(bào)文ID:201959408(0xC09A7F0)

報(bào)文名:MSG1

分隔符 : “:”

報(bào)文長度:8字節(jié)

報(bào)文發(fā)送者:VCU_Vehicle_Control_Unit

(由VCU_Vehicle_Control_Unit這個(gè)節(jié)點(diǎn)發(fā)出的,數(shù)據(jù)域長度為8字節(jié),ID為201959408(0xC09A7F0),名字命名為MSG1的報(bào)文)

7. 信號(hào)的結(jié)構(gòu)(SG_)

SG_ signal_namemultiplexer_indicator : start_bit | signal_size @ byte_order value_type ( factor , offset ) [ minimum | maximum ] unit receiver {, receiver}

SG_ YRS2_Checksum : 7|8@0+ (1,0) [0|255] “bit” FRS

SG_ YRS_LongitSensorState : 15|2@0+ (1,0) [0|3] “bit” FRS

SG_ YRS_LongitAcce : 23|16@0+ (0.001,-2) [-2|2] “g” FRS

SG_ YRS_AliveCounter : 59|4@0+ (1,0) [0|15] “bit” FRS

解釋:

SG_ 為關(guān)鍵字,表示信號(hào);

SignalName(SigTypeDefinition) : 表示該信號(hào)的名字 和 多路選擇信號(hào)的定義;

SigTypeDefinition是可選項(xiàng),有3種格式:

a)空,表示普通信號(hào)。

b)M,表示多路選擇器信號(hào)。

c)m50,表示被多路選擇器選擇的信號(hào),50,表示當(dāng)M定義的信號(hào)的值等于50的時(shí)候,該報(bào)文使用此通路。

StartBit、 SignalSize 表示該信號(hào)起始位、信號(hào)長度;

ByteOrder 表示信號(hào)的字節(jié)順序:0代表Motorola格式,1代表Inter格式;

ValueType 表示該信號(hào)的數(shù)值類型:+表示無符號(hào)數(shù),-表示有符號(hào)數(shù);

Factor,Offset 表示因子,偏移量;這兩個(gè)值用于信號(hào)的原始值與物理值之間的轉(zhuǎn)換。

轉(zhuǎn)換如下:物理值=原始值*因子+偏移量;

Min|Max 表示該信號(hào)的最小值和最大值,即指定了該信號(hào)值的范圍;這兩個(gè)值為double類型;

Unit 表示該信號(hào)的物理單位,為字符串類型;

Receiver 表示該信號(hào)的接收節(jié)點(diǎn);若該信號(hào)沒有指定的接收節(jié)點(diǎn),則必須設(shè)置為” Vector__XXX”。

如示下面的例中:

第一個(gè)信號(hào) :

SG_ S_Check : 45|10@0+ (0.00625,0) [0|160] “M” EL3160_60,ESC

表示定義了一個(gè)命名為 S_Check的普通信號(hào),其起始位是第45位,信號(hào)長度10 bit;

信號(hào)是Motorola格式,數(shù)值類型為無符號(hào)類型數(shù);因子為0.00625,偏移量為0;信號(hào)取值范圍為0到160;

信號(hào)物理單位為字符串”M”;該信號(hào)接收節(jié)點(diǎn)為EL3160_60,ESC這兩個(gè)節(jié)點(diǎn)。

、

第二個(gè)信號(hào):

SG_ Send_Mux M : 7|8@0+ (1,0) [0|0] “” EL3160_60,ESC

表示定義了一個(gè)命名為 Send_Mux的多路選擇器信號(hào),其起始位是第7位,信號(hào)長度8 bit;

信號(hào)是Motorola格式,數(shù)值類型為無符號(hào)類型數(shù);因子為1,偏移量為0;信號(hào)取值范圍為0到0;

信號(hào)物理單位為字符串””;該信號(hào)接收節(jié)點(diǎn)為EL3160_60,ESC這兩個(gè)節(jié)點(diǎn)。

該信號(hào)做選擇通道使用。

第三個(gè)信號(hào):

SG_ S_Level_A_Voltage m50 : 15|16@0+ (0.00625,0) [0|160] “V” EL3160_60,ESC

表示定義了一個(gè)命名為S_Level_A_Voltage的被選擇信號(hào),其起始位是第15位,信號(hào)長度16 bit;

信號(hào)是Motorola格式,數(shù)值類型為無符號(hào)類型數(shù);因子為0.00625,偏移量為0;信號(hào)取值范圍為0到160;

信號(hào)物理單位為字符串”V”;該信號(hào)接收節(jié)點(diǎn)為EL3160_60,ESC這兩個(gè)節(jié)點(diǎn)。

其中byte_order分為motorola和intel兩種格式,motorola對應(yīng)0,intel對應(yīng)1。這兩種格式是區(qū)別如下:

如果在同一個(gè)字節(jié)內(nèi),則沒有區(qū)別,如果跨越多個(gè)字節(jié)則有區(qū)別,motorola格式是高位(msb)在低字節(jié)(說明:CAN消息的字節(jié)排列Byte0 Byte1 … Byte7,Byte0是低字節(jié)),intel格式是高位(msb)在高字節(jié)。

Intel格式

第一字節(jié)的bit0對應(yīng)的是lsb(第一行的紅色箭頭),第二字節(jié)的bit14對應(yīng)的是msb(第二行的紅色箭頭)。起始bit是lsb對應(yīng)的bit0。

Motorola格式

第二字節(jié)的bit9對應(yīng)的是lsb(第二行的紅色箭頭),第一字節(jié)的bit7對應(yīng)的是msb(第一行的紅色箭頭)。起始bit是lsb對應(yīng)的bit9。當(dāng)然也可以修改起始位置,例如將起始位置改為bit8,如下圖:

55~58行定義的是信號(hào)的選項(xiàng)值,其結(jié)構(gòu)如下:‘VAL_’ message_id signal_name { value_description } ‘;’

注意,行結(jié)尾有一個(gè)分號(hào)。其中value_description的定義如下:value_description = double char_string ;

以上是需要解析的部分,注意字符部分都限制在32字節(jié)內(nèi),不太方便。

8. 注解的結(jié)構(gòu)(CM_)

CM_ Object MessageId/NodeName “Comment”

解釋:

CM_ 為關(guān)鍵字,表示注解信息;

Object 表示進(jìn)行注解的對象類型,可以是節(jié)點(diǎn)“BU_”、報(bào)文“BO_”、消息”SG_”;

MessageId/NodeName 表示進(jìn)行注解的對象,若前面的對象類型是信號(hào)或者報(bào)文,則這里的值應(yīng)為報(bào)文的ID(10進(jìn)制數(shù)表示);若前面的對象類型為節(jié)點(diǎn),則這里的值應(yīng)為節(jié)點(diǎn)的名字;

Comment 表示進(jìn)行注解的文本信息;

如示例中的 CM_ SG_ 996 HUD_HeightLv “Control hud height level”;

表示對ID為996(0x3E4)這條報(bào)文下的名為”HUD_HeightLv ”的信號(hào)進(jìn)行注解說明,說明的內(nèi)容為“Control hud height level”。

又如 CM_ BU_ HUD “Head Up Display“;表示對HUD這個(gè)節(jié)點(diǎn)進(jìn)行注解說明,說明的內(nèi)容為” Head Up Display “。

注釋以 “” 包圍,注釋內(nèi)部不允許出現(xiàn)“號(hào)。

9. 特征(屬性)的結(jié)構(gòu)(BA_DEF_ BA_DEF_DEF_ BA_)

和特征相關(guān)的Tag一共有三條:

9.1 報(bào)文/信號(hào)/節(jié)點(diǎn)等的屬性定義(BA_DEF_)

特征名稱類型定義。格式如下:

BA_DEF_ ObjectAttributeNameValueTypeMin Max;

解釋:

BA_DEF 標(biāo)簽

Object 特征類型,可以是BU_(節(jié)點(diǎn)特征定義)、BO_(報(bào)文特征定義)、SG_(信號(hào)特征定義)、空格(項(xiàng)目特征定義);

AttributeName 特征名稱(C語言變量格式)

ValueType 特征值類型(只能是十進(jìn)制、十六進(jìn)制、浮點(diǎn)數(shù)、枚舉、字符5種類型)

Min Max 數(shù)值類型這里出現(xiàn)范圍,枚舉類型這里是枚舉值,字符類型,這里是空。

9.2 報(bào)文/信號(hào)/節(jié)點(diǎn)等的屬性初始值定義(BA_DEF_DEF_) 特征默認(rèn)值定義。格式如下:

BA_DEF_DEF_ AttributeNameDefaultValue;

解釋:

BA_DEF_DEF_ 標(biāo)簽

AttributeName 特征名稱(C語言變量格式)

DefaultValue 該特征的默認(rèn)設(shè)置值

9.3 報(bào)文/信號(hào)/節(jié)點(diǎn)等的屬性設(shè)置值定義(BA_)特征項(xiàng)目設(shè)置值定義,格式如下:

BA_ AttributeName projectValue;

解釋:

BA_ 標(biāo)簽

AttributeName 特征名稱(C語言變量格式)

projectValue 該特征的設(shè)置值

舉例:

BA_DEF_ BO_ “GenMsgCycleTime” INT 0 65535;

BA_DEF_DEF_ “GenMsgCycleTime” 2200;

BA_ “GenMsgCycleTime” BO_ 400 100;

表示對定義了一個(gè)針對消息類型的特征,特征名為”GenMsgCycleTime”,特征值是整型數(shù)據(jù),取值范圍在0到65535之間;

默認(rèn)值為2200;

項(xiàng)目設(shè)置值 CAN ID ==400的消息的該特征值設(shè)置為100

在DBCView4.3里面是把BA_DEF_ 和 BA_DEF_DEF_合并在一起了,用了特征視圖來管理,如下圖。

然后把 特征項(xiàng)目設(shè)置值定義 BA_ AttributeName projectValue; 和元素合并在一起了。

10. 數(shù)值表的結(jié)構(gòu)(VAL_)格式如下:

VAL_ MessageId SignalName N “DefineN” …… 0 “Define0”;

解釋:

VAL_ 為關(guān)鍵字,表示數(shù)值表定義;

MessageId 表示該信號(hào)所屬的報(bào)文ID(10進(jìn)制數(shù)表示);

SignalName 表示信號(hào)名;

N “DefineN” …… 0 “Define0” 表示定義的數(shù)值表內(nèi)容,即該信號(hào)的有效值分別用什么符號(hào)表示 。

如示例中的 VAL_ 996 HUD_OffSt 1 “Active” 0 “Not Active”;

表示對ID為996(0x3E4)的這條報(bào)文下的,一個(gè)命名為”HUD_OffSt”的信號(hào),進(jìn)行其數(shù)值表的定義;

用”Active”取代1;用”Not Active”取代0。只有自然數(shù)類型的信號(hào)才可以使用數(shù)值表表示。

信號(hào)的值的表示方法有兩種:

1) 物理值=原始值*因子+偏移量;(常規(guī)表示,前面有提到)

2) 數(shù)字表,用來表示邏輯值;

11. 全局信號(hào)值表(用來對信號(hào)值解碼)的結(jié)構(gòu)(VAL_TABLE_) 格式如下:

VAL_TABLE_ value_table_namevalue_table_value “value_description” … 0 “value_description”;

描述:

a)一個(gè)value table中以“空格”分隔;

b)value_table_name表示value table的名稱, 命名必須滿足“符號(hào)字符串”要求;

c) value_table_value表示value table的值,十進(jìn)制表示;

d) value_description表示value table的值描述;

e)當(dāng)一個(gè)value table存在多個(gè)值描述時(shí),以(value_table_value “value_description”)的形式接著追加,value table內(nèi)的兩個(gè)值描述以“空格”分隔;

f)完成一個(gè)value table定義,需以“分號(hào);”結(jié)尾;

g)多個(gè)value table需要換行。

VAL_TABLE_ ESC_QDCFRS 1 ”ERROR“ 0 ”NO_ERROR“ ;

VAL_TABLE_ ESC_BrakeTempTooHigh 1 ”ABNORMAL“ 0 ”NORMAL“ ;

VAL_TABLE_ ESC_DTC_Active 1 ”ACTIVE“ 0 ”INACTIVE“ ;

VAL_TABLE_ ESC_Vehiclestandstill 3 ”RESERVED“ 2 ”INVALID“ 1 ”STANDSTILL“ 0 ”NOT_STANDSTILL“ ;

審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • DBC
    DBC
    +關(guān)注

    關(guān)注

    2

    文章

    55

    瀏覽量

    7768

原文標(biāo)題:DBC的結(jié)構(gòu)詳細(xì)分析

文章出處:【微信號(hào):eng2mot,微信公眾號(hào):汽車ECU開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    關(guān)于CANdb++ Editor編寫DBC文件時(shí)Factor的設(shè)置問題求解

    求助CANdb++ Editor編寫DBC文件時(shí) Factor設(shè)置的問題: 編輯DBC文件時(shí),當(dāng)我設(shè)置Signal的Factor時(shí),如果設(shè)置了0.0001,
    發(fā)表于 04-12 07:03

    labview CAN DBC加載解析程序

    labview CAN DBC加載解析程序
    發(fā)表于 08-18 11:42

    labview怎么解析dbc文件

    我用的是研華的can卡,用labview解析dbc文件
    發(fā)表于 05-12 10:07

    AUTOSAR架構(gòu)深度解析 精選資料推薦

    AUTOSAR架構(gòu)深度解析本文轉(zhuǎn)載于:AUTOSAR架構(gòu)深度解析目錄AUTOSAR架構(gòu)深度解析A
    發(fā)表于 07-28 07:40

    labview加載DBC文件錯(cuò)誤

    本帖最后由 溜溜球18 于 2021-12-16 16:05 編輯 labview解析DBC,調(diào)用的周立功ZDBC.DLL,加載DBC格式文件總是失敗,是什么原因
    發(fā)表于 12-09 17:23

    CAN報(bào)文解析需要知道DBC的哪些信息排序方式

    CAN總線中報(bào)文數(shù)據(jù)讀取方法motorola編碼格式的CAN報(bào)文解析需要知道DBC的哪些信息排序方式讀取方式發(fā)送方式注motorola編碼格式的CAN報(bào)文解析知道CAN報(bào)文的DBC,即
    發(fā)表于 01-12 07:28

    Android系統(tǒng)文件結(jié)構(gòu)解析

    Android系統(tǒng)文件結(jié)構(gòu)解析
    發(fā)表于 03-19 11:23 ?0次下載

    配置DBC變量文件資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是配置DBC變量文件資料免費(fèi)下載
    發(fā)表于 07-03 08:00 ?18次下載
    配置<b class='flag-5'>DBC</b>變量<b class='flag-5'>文件</b>資料免費(fèi)下載

    使用candb++制作dbc文件筆記

    今天又來分享一篇工具使用的文章,candb++的工具,也是Vector的,用來制作、編輯或者是查看dbc文件,今天主要來分享dbc文件的創(chuàng)建。
    的頭像 發(fā)表于 12-26 14:04 ?4598次閱讀

    【產(chǎn)品應(yīng)用】如何通過IoT云平臺(tái)對CAN數(shù)據(jù)進(jìn)行實(shí)時(shí)DBC解析?

    DBC文件是用來描述CAN總線通訊信息數(shù)據(jù)的一種文件,其中包含了CAN總線中協(xié)議數(shù)據(jù)及其所代表的具體意義。在汽車路試中,對于車輛錯(cuò)誤故障信息,需對CAN報(bào)文數(shù)據(jù)進(jìn)行實(shí)時(shí)DBC
    的頭像 發(fā)表于 03-20 23:10 ?596次閱讀

    labview讀取解析CAN DBC文件

    labview讀取解析can總線dbc文件
    發(fā)表于 07-03 09:18 ?104次下載

    CAN DBC文件解析

    CAN DBC 指的是CAN 報(bào)文的數(shù)據(jù)庫。簡單地說,通過CAN 總線通信的數(shù)據(jù)類型可以用DBC 文件來讀取和理解。DBC 是一種基于ASCII 的翻譯,是在20世紀(jì)90年代發(fā)展起來的
    的頭像 發(fā)表于 08-14 11:35 ?3626次閱讀
    CAN <b class='flag-5'>DBC</b><b class='flag-5'>文件</b><b class='flag-5'>解析</b>

    用Labview開發(fā)的DBC文件轉(zhuǎn)Excel表格文件的VI

    使用Labview軟件開發(fā)的DBC文件轉(zhuǎn)Excel表格文件的VI
    發(fā)表于 10-25 18:23 ?34次下載

    TSMaster如何同時(shí)記錄標(biāo)定變量和DBC信號(hào)至BLF文件

    客戶在使用TSMaster軟件標(biāo)定功能時(shí),有如下使用場景:將DBC文件中的信號(hào)與A2L文件中的標(biāo)定變量同時(shí)記錄在一個(gè)記錄文件。針對此應(yīng)用場景,TSMaster軟件提供了一種方法來滿足此
    的頭像 發(fā)表于 03-25 08:20 ?728次閱讀
    TSMaster如何同時(shí)記錄標(biāo)定變量和<b class='flag-5'>DBC</b>信號(hào)至BLF<b class='flag-5'>文件</b>

    CAN底層報(bào)文抓到了,卻不知怎么解析?以及如何看到信號(hào)運(yùn)行狀態(tài)?

    本文介紹CAN總線中DBC文件的重要性及ZCANPRO如何實(shí)現(xiàn)DBC解析、數(shù)據(jù)發(fā)送和實(shí)時(shí)曲線分析,幫助您更有效地分析和利用CAN總線數(shù)據(jù)。在CAN總線的實(shí)際應(yīng)用中,我們經(jīng)常需要
    的頭像 發(fā)表于 09-30 08:05 ?1163次閱讀
    CAN底層報(bào)文抓到了,卻不知怎么<b class='flag-5'>解析</b>?以及如何看到信號(hào)運(yùn)行狀態(tài)?