Bit_timing 波特率定義,必須部分,但通常為空nodes 定義網絡節點messages 定義消息和信號
2. 關鍵字
VERSION 版本
VERSION:
NS_ 為new symbol的縮寫,后面緊跟著一堆ns,一般是創建dbc時自動生成,不用太關心
NS_:
BS_ 定義CAN網絡的波特率
BS_: [baudrate:BTR1,BTR2]
BU_ 網絡節點
BU_: Nodename1 Nodename2 Nodename3 ……
BO_ 報文
BO_: message_id message_name : message_size transmitter {signal}
SG_ 信號
SG_: signal_name multiplexer_indicator : start_bit | signal_size @ byte_order value_type ( factor , offset ) [ minimum | maximum ] unit receiver {, receiver}
CM_ 對報文/信號的注解
CM_: Object MessageId/NodeName “Comment”
BA_DEF_ 對報文/信號/節點等的屬性定義
BA_DEF: _ Object AttributeName ValueType Min Max;
BA_DEF_ DEF_ 對報文/信號/節點等的屬性初始值定義
BA_DEF_DEF_: AttributeName DefaultValue;
BA_ 對報文/信號/節點等的屬性設置值定義
BA_: AttributeName projectValue
VAL_ 數值表定義
VAL_: MessageId SignalName N “DefineN” …… 0 “Define0”
VAL_TABLE_ 全局信號值表,用來對信號值解碼
VAL_TABLE_: name value “value_description” …0 “value_description”
EV_ 環境變量
EV_:
3.本文出現的符號
‘ | ’ ——可選擇
‘ ; ’——結束定義
[。..]——內容可選(0或1次)
{。..}——內容重復(0或多次)
(。..)——注釋
unsigned_integer:無符號整型
signed_integer:有符號整型
double:雙精度小數
char_string:字符串
C_identifier:C語言變量命名
4. 波特率的結構(BS_)
BS_: [baudrate:BTR1,BTR2];
其中BS_為關鍵字,用于定義CAN網絡的波特率;[ ]內容表示為可選部分,可以省略(如下圖例子中即把該部分省略了);但關鍵字”BS_:”必須存在,省略則會出錯。《DBC File Format Document》規范中明確提醒,必須保留BS_: 標簽。
5. 網絡節點的結構(BU_)
BU_: Nodename1 Nodename2 Nodename3 ……
解釋:
BU_ 為關鍵字,表示網絡節點
Nodename1、Nodename2 網絡節點名字,由用戶自己定義;
注意事項:需要保證節點命名的唯一性
如示例中的BU_: VCU_Vehicle_Control_Unit MotorCtrol SCU PC Vector__XXX :
表示定義了:
VCU_Vehicle_Control_Unit
MotorCtrol
SCU
PC
Vector__XXX這五個網絡節點
其中:標識為Vector__XXX時表示未指明具體節點
6. 消息的結構(BO_)
BO_ message_id message_name : message_size transmitter {signal}
BO_ 306YRS2: 8 FVCM
解釋:
BO_ 為關鍵字,表示報文;
MessageId 報文ID,是以10進制數表示的;
(如例子中的996,代表報文ID為0x3E4,是longlong類型,也就是CAN ID的值;)
MessageName 報文的名字,命名規則和C語言變量相同;
MessageSize 報文數據域字節數,為無符號整型數據,CAN 2.0為最大8字節,CAN FD 最大64字節;
Transmitter 該報文的網絡節點;如果該報文沒有指定發送節點,則該值需設置為” Vector__XXX”。
如示例中的BO_ 201959408 MSG1: 8 VCU_Vehicle_Control_Unit
報文ID:201959408(0xC09A7F0)
報文名:MSG1
分隔符 : “:”
報文長度:8字節
報文發送者:VCU_Vehicle_Control_Unit
(由VCU_Vehicle_Control_Unit這個節點發出的,數據域長度為8字節,ID為201959408(0xC09A7F0),名字命名為MSG1的報文)
7. 信號的結構(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_ 為關鍵字,表示信號;
SignalName(SigTypeDefinition) : 表示該信號的名字 和 多路選擇信號的定義;
SigTypeDefinition是可選項,有3種格式:
a)空,表示普通信號。
b)M,表示多路選擇器信號。
c)m50,表示被多路選擇器選擇的信號,50,表示當M定義的信號的值等于50的時候,該報文使用此通路。
StartBit、 SignalSize 表示該信號起始位、信號長度;
ByteOrder 表示信號的字節順序:0代表Motorola格式,1代表Inter格式;
ValueType 表示該信號的數值類型:+表示無符號數,-表示有符號數;
Factor,Offset 表示因子,偏移量;這兩個值用于信號的原始值與物理值之間的轉換。
轉換如下:物理值=原始值*因子+偏移量;
Min|Max 表示該信號的最小值和最大值,即指定了該信號值的范圍;這兩個值為double類型;
Unit 表示該信號的物理單位,為字符串類型;
Receiver 表示該信號的接收節點;若該信號沒有指定的接收節點,則必須設置為” Vector__XXX”。
如示下面的例中:
第一個信號 :
SG_ S_Check : 45|10@0+ (0.00625,0) [0|160] “M” EL3160_60,ESC
表示定義了一個命名為 S_Check的普通信號,其起始位是第45位,信號長度10 bit;
信號是Motorola格式,數值類型為無符號類型數;因子為0.00625,偏移量為0;信號取值范圍為0到160;
信號物理單位為字符串”M”;該信號接收節點為EL3160_60,ESC這兩個節點。
、
第二個信號:
SG_ Send_Mux M : 7|8@0+ (1,0) [0|0] “” EL3160_60,ESC
表示定義了一個命名為 Send_Mux的多路選擇器信號,其起始位是第7位,信號長度8 bit;
信號是Motorola格式,數值類型為無符號類型數;因子為1,偏移量為0;信號取值范圍為0到0;
信號物理單位為字符串””;該信號接收節點為EL3160_60,ESC這兩個節點。
該信號做選擇通道使用。
第三個信號:
SG_ S_Level_A_Voltage m50 : 15|16@0+ (0.00625,0) [0|160] “V” EL3160_60,ESC
表示定義了一個命名為S_Level_A_Voltage的被選擇信號,其起始位是第15位,信號長度16 bit;
信號是Motorola格式,數值類型為無符號類型數;因子為0.00625,偏移量為0;信號取值范圍為0到160;
信號物理單位為字符串”V”;該信號接收節點為EL3160_60,ESC這兩個節點。
其中byte_order分為motorola和intel兩種格式,motorola對應0,intel對應1。這兩種格式是區別如下:
如果在同一個字節內,則沒有區別,如果跨越多個字節則有區別,motorola格式是高位(msb)在低字節(說明:CAN消息的字節排列Byte0 Byte1 … Byte7,Byte0是低字節),intel格式是高位(msb)在高字節。
Intel格式
第一字節的bit0對應的是lsb(第一行的紅色箭頭),第二字節的bit14對應的是msb(第二行的紅色箭頭)。起始bit是lsb對應的bit0。
Motorola格式
第二字節的bit9對應的是lsb(第二行的紅色箭頭),第一字節的bit7對應的是msb(第一行的紅色箭頭)。起始bit是lsb對應的bit9。當然也可以修改起始位置,例如將起始位置改為bit8,如下圖:
55~58行定義的是信號的選項值,其結構如下:‘VAL_’ message_id signal_name { value_description } ‘;’
注意,行結尾有一個分號。其中value_description的定義如下:value_description = double char_string ;
以上是需要解析的部分,注意字符部分都限制在32字節內,不太方便。
8. 注解的結構(CM_)
CM_ Object MessageId/NodeName “Comment”
解釋:
CM_ 為關鍵字,表示注解信息;
Object 表示進行注解的對象類型,可以是節點“BU_”、報文“BO_”、消息”SG_”;
MessageId/NodeName 表示進行注解的對象,若前面的對象類型是信號或者報文,則這里的值應為報文的ID(10進制數表示);若前面的對象類型為節點,則這里的值應為節點的名字;
Comment 表示進行注解的文本信息;
如示例中的 CM_ SG_ 996 HUD_HeightLv “Control hud height level”;
表示對ID為996(0x3E4)這條報文下的名為”HUD_HeightLv ”的信號進行注解說明,說明的內容為“Control hud height level”。
又如 CM_ BU_ HUD “Head Up Display“;表示對HUD這個節點進行注解說明,說明的內容為” Head Up Display “。
注釋以 “” 包圍,注釋內部不允許出現“號。
9. 特征(屬性)的結構(BA_DEF_ BA_DEF_DEF_ BA_)
和特征相關的Tag一共有三條:
9.1 報文/信號/節點等的屬性定義(BA_DEF_)
特征名稱類型定義。格式如下:
BA_DEF_ ObjectAttributeNameValueTypeMin Max;
解釋:
BA_DEF 標簽
Object 特征類型,可以是BU_(節點特征定義)、BO_(報文特征定義)、SG_(信號特征定義)、空格(項目特征定義);
AttributeName 特征名稱(C語言變量格式)
ValueType 特征值類型(只能是十進制、十六進制、浮點數、枚舉、字符5種類型)
Min Max 數值類型這里出現范圍,枚舉類型這里是枚舉值,字符類型,這里是空。
9.2 報文/信號/節點等的屬性初始值定義(BA_DEF_DEF_) 特征默認值定義。格式如下:
BA_DEF_DEF_ AttributeNameDefaultValue;
解釋:
BA_DEF_DEF_ 標簽
AttributeName 特征名稱(C語言變量格式)
DefaultValue 該特征的默認設置值
9.3 報文/信號/節點等的屬性設置值定義(BA_)特征項目設置值定義,格式如下:
BA_ AttributeName projectValue;
解釋:
BA_ 標簽
AttributeName 特征名稱(C語言變量格式)
projectValue 該特征的設置值
舉例:
BA_DEF_ BO_ “GenMsgCycleTime” INT 0 65535;
BA_DEF_DEF_ “GenMsgCycleTime” 2200;
BA_ “GenMsgCycleTime” BO_ 400 100;
表示對定義了一個針對消息類型的特征,特征名為”GenMsgCycleTime”,特征值是整型數據,取值范圍在0到65535之間;
默認值為2200;
項目設置值 CAN ID ==400的消息的該特征值設置為100
在DBCView4.3里面是把BA_DEF_ 和 BA_DEF_DEF_合并在一起了,用了特征視圖來管理,如下圖。
然后把 特征項目設置值定義 BA_ AttributeName projectValue; 和元素合并在一起了。
10. 數值表的結構(VAL_)格式如下:
VAL_ MessageId SignalName N “DefineN” …… 0 “Define0”;
解釋:
VAL_ 為關鍵字,表示數值表定義;
MessageId 表示該信號所屬的報文ID(10進制數表示);
SignalName 表示信號名;
N “DefineN” …… 0 “Define0” 表示定義的數值表內容,即該信號的有效值分別用什么符號表示 。
如示例中的 VAL_ 996 HUD_OffSt 1 “Active” 0 “Not Active”;
表示對ID為996(0x3E4)的這條報文下的,一個命名為”HUD_OffSt”的信號,進行其數值表的定義;
用”Active”取代1;用”Not Active”取代0。只有自然數類型的信號才可以使用數值表表示。
信號的值的表示方法有兩種:
1) 物理值=原始值*因子+偏移量;(常規表示,前面有提到)
2) 數字表,用來表示邏輯值;
11. 全局信號值表(用來對信號值解碼)的結構(VAL_TABLE_) 格式如下:
VAL_TABLE_ value_table_namevalue_table_value “value_description” … 0 “value_description”;
描述:
a)一個value table中以“空格”分隔;
b)value_table_name表示value table的名稱, 命名必須滿足“符號字符串”要求;
c) value_table_value表示value table的值,十進制表示;
d) value_description表示value table的值描述;
e)當一個value table存在多個值描述時,以(value_table_value “value_description”)的形式接著追加,value table內的兩個值描述以“空格”分隔;
f)完成一個value table定義,需以“分號;”結尾;
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“ ;
審核編輯:黃飛
-
DBC
+關注
關注
2文章
55瀏覽量
7824
原文標題:DBC的結構詳細分析
文章出處:【微信號:eng2mot,微信公眾號:汽車ECU開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論