
目錄
0 DBC檔案中“符號字串”命名要求
1 DBC檔案的標頭
2 Bit Timing波特率定義
3 Node節點定義
4 Value Table值表定義
5 Message訊息定義
5.1 標準幀Message定義舉例
5.2 擴展幀Message定義舉例
6 Signal信號定義
7 Value Table指標的系結Signal信號
8 Comment注釋定義
8.1 Node節點的注釋舉例
8.2 Message訊息的注釋舉例
8.3 Signal信號的注釋舉例
9 User Defined Attribute用戶定義的屬性定義
9.1 Attribute屬性定義
9.2 Attribute屬性值
10 本文使用的DBC檔案內容附錄
11 結尾
關鍵字:
DBC:CANdb network file (Data Base for CAN)
描述CAN網路所需的所有資訊都存盤在CANdb network file中,CANdb network file的檔案擴展名為DBC,可以使用CANdb編輯器(CAN資料庫編輯器)或CANdb ++編輯器創建,
推薦閱讀(單擊下方文字即可跳轉至對應博文):
1、【DBC專題】-1-如何使用CANdb++ Editor創建并制作一個DBC
2、【DBC專題】-2-CAN Signal信號的Multiplexor多路復用在DBC中實作
3、【DBC專題】-3-利用CANdb++ Editor在DBC檔案添加幀CAN_ID和信號CAN_Signal
4、【DBC專題】-4-DBC檔案中的Signal信號位元組順序Motorola和Intel介紹
通過前兩個【DBC專題】中,我們已經掌握了DBC的創建和制作,在一些高階應用(如DBC轉Excel,DBC轉XML,DBC轉ARXML等等)中,了解這些顯然是不夠的,需要熟知其檔案格式,畢竟“CANdb++ Editor”是參照某個標準,生成DBC檔案的一個工具而已,
DBC檔案描述單個CAN網路的通信,完成“【DBC專題】-1-如何使用CANdb++ Editor創建并制作一個DBC”一文中的第2章節,我們會得到一個Classic CAN的資料庫DBC檔案空模板(見下圖左側);完成第9章節,我們會得到一個較為完成DBC檔案(見下圖右側),二者的差異下圖,

一眼看去感覺有點“蒙”,下面我們就逐一來介紹這些“關鍵字”,
0 DBC檔案中“符號字串”命名要求
DBC檔案中除了固定格式的關鍵字外,還有一些用戶自定義的“符號字串”,像Node,Message,Signal…的命名,其要求為:
- 以字母字符或下劃線開頭,并且可能進一步由字母數字字符和下劃線組成,
- 長度最多為128個字符,為了與較舊的工具兼容,長度不得超過32個字符,
1 DBC檔案的標頭
關鍵字:VERSION
關鍵字:NS_ ,全稱:new symbols
描述:
DBC檔案包含帶有版本(關鍵字:VERSION)和新符號條目(關鍵字:NS_)的標頭,關鍵字:VERSION后面的雙引號中通常是空的,或者是CANdb++編輯器使用的字串,
該部分基本是固定的,
2 Bit Timing波特率定義
關鍵字:BS_
Bit Timing定義了網路的波特率和BTR暫存器的設定,該部分已過時,不再使用,但是,關鍵字“BS_”必須出現在DBC檔案中,
舉例:
BS_:
3 Node節點定義
關鍵字:BU_
格式:
BU_: node_1_name node_2_name…
描述:
a)CAN網路匯中所有節點的名稱在此處定義,且定義的名稱必須唯一;
b)節點與節點之間以“空格”分隔;
c)節點的命名必須滿足“符號字串”要求,
舉例:
在“【DBC專題】-1-如何使用CANdb++ Editor創建并制作一個DBC”一文的第3章節我們定義兩個節點:VCU和OBD,其在DBC檔案中的描述為:
BU_: VCU OBD
4 Value Table值表定義
關鍵字:VAL_TABLE_
格式:
VAL_TABLE_ value_table_name value_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需要換行,
舉例:
在“【DBC專題】-1-如何使用CANdb++ Editor創建并制作一個DBC”一文的第7章節我們定義兩個value table:Voltage_state和OBD_status_description,其在DBC檔案中的描述為:
VAL_TABLE_ OBD_status_description 2 "Shutdown" 1 "Run" 0 "Initialization" ;
VAL_TABLE_ Voltage_state 65535 "Invalid voltage" ;
5 Message訊息定義
關鍵字:BO_
格式:
BO_ message_id message_name: message_size transmitter
描述:
a)message_id表示CAN_ID,以十進制表示,在DBC檔案中,CAN-ID必須唯一,如果CAN_ID的型別是“CAN Extended”,則在DBC檔案中表示是“0x8000 0000 + 十六進制CAN_ID”的十進制轉換;
b)message_name表示CAN_ID的訊息名稱,在在Message中必須是唯一, 命名必須滿足“符號字串”要求;
c) “: ” 冒號不能少;
d)message_size表示Message訊息的長度,以位元組為單位,十進制表示;
e)transmitter表示該Message的發送節點, 如果Message沒有定義發送節點,則必須在此處輸入字串“Vector__XXX”;
5.1 標準幀Message定義舉例
在“【DBC專題】-1-如何使用CANdb++ Editor創建并制作一個DBC”一文的第4章節我們定義一個Message:Test_ID_211,其在DBC檔案中的描述為:
BO_ 530 Test_ID_212: 8 OBD

5.2 擴展幀Message定義舉例
與4.1章節的差異是Type中選擇了CAN Extended,注意在DBC檔案中CAN_ID描述:
BO_ 2147484177 Test_ID_211: 8 OBD

6 Signal信號定義
關鍵字:SG_
格式:
SG_ signal_name multiplexer_indicator : start_bit|signal_size@byte_order+value_type (factor,offset) [minimum|maximum] “unit” receiver
描述:
a) signal_name表示信號的名稱,一個Message訊息中的信號名稱必須唯一,多個Message訊息之間可以存在相同名稱信號,命名必須滿足“符號字串”要求;
b) multiplexer_indicator含義:
- “ M”(大寫)將信號定義為Multiplexor Signal,一個訊息中只有一個信號可以是Multiplexor Signal;
- “m”(小寫)后跟無符號整數,將信號定義為Multiplexed Signal;
- “空格”將信號定義為普通的Signal,表示沒有復用,
c)“:”冒號不能少;
d)start_bit值指定信號在幀的資料域內的位置:Intel(小端)模式這里表示信號的LSB;Motorola(大端)模式這里表示信號的MSB;
e)signal_size表示信號的長度,以位為單位,十進制表示;
f)“@”不能少;
g)byte_order表示位元組順序,如果信號的位元組順序為Intel(小端),則byte_order為1;如果位元組順序為Motorola(大端),則byte_order為0;
h)value_type表示值型別,“+”表示無符號;“-”表示有符號;
i)(factor,offset)表示解析度(不能為0)和偏移量,這兩個值于該信號的原始值與物理值之間的轉換,轉換如下:物理值=原始值* factor + offset;
j)[minimum|maximum]表示最小值和最大值,定義了信號的有效物理值的范圍;
k) unit表示信號的單位,為字串型別;
l) receiver表示信號的接收方,信號的接收方可以是多個節點,接收方節點名稱必須在關鍵字BU_中定義,如果信號沒有定義接收方,則必須在此處輸入字串“Vector__XXX”,
舉例:
在“【DBC專題】-1-如何使用CANdb++ Editor創建并制作一個DBC”一文的第6章節我們定義三個信號:OBD_status、Current_value和Voltage_value,其在DBC檔案中的描述為:
BO_ 529 Test_ID_211: 8 OBD
SG_ OBD_status : 39|8@0+ (1,0) [0|255] "-" VCU
SG_ Current_value : 23|16@0- (0.1,0) [-300|300] "A" VCU
SG_ Voltage_value : 7|16@0+ (0.1,0) [0|6553.5] "V" VCU
其在第5章生成的DBC檔案效果如下:
BO_ 529 Test_ID_211: 8 OBD
SG_ OBD_status : 39|8@0+ (1,0) [0|255] "-" Vector__XXX
SG_ Current_value : 23|16@0- (0.1,0) [-300|300] "A" Vector__XXX
SG_ Voltage_value : 7|16@0+ (0.1,0) [0|6553.5] "V" Vector__XXX
以第6章為基礎,拓展一下,新定義一個DCDC節點,同時DCDC也接收者三個信號:OBD_status、Current_value和Voltage_value,其在DBC檔案效果如下:當信號被多個節點接收時,在DBC中的描述,節點與節點之間用“逗號,”隔開,
BU_: DCDC VCU OBD
BO_ 529 Test_ID_211: 8 OBD
SG_ OBD_status : 39|8@0+ (1,0) [0|255] "-" DCDC,VCU
SG_ Current_value : 23|16@0- (0.1,0) [-300|300] "A" DCDC,VCU
SG_ Voltage_value : 7|16@0+ (0.1,0) [0|6553.5] "V" DCDC,VCU
在“【DBC專題】-2-CAN Signal信號的Multiplexor多路復用在DBC中實作”多路復用信號在DBC檔案中的描述如下:
VAL_TABLE_ Package_Num_Value 1 "No.2" 0 "N0.1" ;
BO_ 530 Test_ID_212: 8 OBD
SG_ Voltage_6_Value m1 : 55|16@0+ (0.1,0) [0|6553.5] "V" VCU
SG_ Voltage_5_Value m1 : 39|16@0+ (0.1,0) [0|6553.5] "V" VCU
SG_ Voltage_4_Value m1 : 23|16@0+ (0.1,0) [0|6553.5] "V" VCU
SG_ Voltage_3_Value m0 : 55|16@0+ (0.1,0) [0|6553.5] "V" VCU
SG_ Voltage_2_Value m0 : 39|16@0+ (0.1,0) [0|6553.5] "V" VCU
SG_ Voltage_1_Value m0 : 23|16@0+ (0.1,0) [0|6553.5] "V" VCU
SG_ Package_Num M : 7|8@0+ (1,0) [0|1] "-" VCU
7 Value Table指標的系結Signal信號
關鍵字:VAL_
格式:
VAL_ message_id signal_name value_table_value “value_description” …… 0 “value_description”;
描述:
a) message_id同Message中的關鍵字描述;
b) signal_name同Signal中的關鍵字描述;
c) value_table_value “value_description” …… 0 “value_description”同Value Table中的關鍵字描述,
d)完成一個value table與信號系結,需以“分號;”結尾;
f)多個value table與信號系結需要換行,
舉例:
在“【DBC專題】-1-如何使用CANdb++ Editor創建并制作一個DBC”一文的第8章節我們將Value Table系結了信號,其在DBC檔案中的描述為:
VAL_TABLE_ OBD_status_description 2 "Shutdown" 1 "Run" 0 "Initialization" ;
VAL_TABLE_ Voltage_state 65535 "Invalid voltage" ;
BO_ 529 Test_ID_211: 8 OBD
SG_ OBD_status : 39|8@0+ (1,0) [0|255] "-" VCU
SG_ Current_value : 23|16@0- (0.1,0) [-300|300] "A" VCU
SG_ Voltage_value : 7|16@0+ (0.1,0) [0|6553.5] "V" VCU
VAL_ 529 OBD_status 2 "Shutdown" 1 "Run" 0 "Initialization" ;
VAL_ 529 Voltage_value 65535 "Invalid voltage" ;
8 Comment注釋定義
關鍵字:CM_
8.1 Node節點的注釋舉例
格式:
CM_ BU_ node_name “Comment”;
舉例:
CM_ BU_ VCU "VCU node in can network";
CM_ BU_ OBD "OBD node in CAN network";


8.2 Message訊息的注釋舉例
格式:
CM_ BO_ message_id “Comment”;
舉例:
CM_ BO_ 529 "The CAN_ID of the test message is 0x211.";

8.3 Signal信號的注釋舉例
格式:
CM_ SG_ message_id signal_name “Comment”;
舉例:
CM_ SG_ 529 OBD_status "OBD working status signal";
CM_ SG_ 529 Current_value "OBD current signal.";
CM_ SG_ 529 Voltage_value "OBD voltage signal.";



9 User Defined Attribute用戶定義的屬性定義
User defined attributes是擴展DBC檔案的物件屬性的一種方法,這些附加屬性必須使用具有屬性默認值的屬性定義來定義,對于具有為屬性定義的值的每個物件,必須定義一個屬性值, 如果未對物件定義屬性值,則該物件的屬性值為該屬性的默認值,
9.1 Attribute屬性定義
關鍵字:BA_DEF_
關鍵字:BA_DEF_DEF_
格式:
BA_DEF_ object_type “attribute_name”attribute_value_type ;
BA_DEF_DEF_ attribute_name attribute_value ;
描述:
a) object_type表示BU_、BO_、SG_、EV_等關鍵字;
b) attribute_name表示屬性的名稱,一般比較固定,參照相應的標準;
c) attribute_value_type表示INT、FLOAT、STRING、ENUM、HEX等型別,各自的表示發如下:
- INT signed_integer signed_integer;
- HEX signed_integer signed_integer;
- FLOAT double double;
- STRING ;
- ENUM “char_1_string ”, “char_2_string”, “char_3_string”;
d) attribute_name同b);
e) attribute_value表示unsigned_integer 、 signed_integer、double |char_string
f)完成一個Attribute,需以“分號;”結尾;
g)多個Attribute與信號系結需要換行,
舉例:
BA_DEF_ SG_ "ProjectSignalRequirementNb" STRING ;
BA_DEF_ SG_ "GenSigStartValue" HEX 0 0;
BA_DEF_ SG_ "GenericSignalRequirementNb" STRING ;
BA_DEF_ "Manufacturer" STRING ;
BA_DEF_ BO_ "ProjectFrameRequirementNb" STRING ;
BA_DEF_ BO_ "GenMsgSendType" ENUM "Cyclic","OnEvent","Cyclic_And_OnEvent";
BA_DEF_ BO_ "GenMsgCycleTime" INT 0 65535;
BA_DEF_ BO_ "GenericFrameRequirementNb" STRING ;
BA_DEF_DEF_ "ProjectSignalRequirementNb" "";
BA_DEF_DEF_ "GenSigStartValue" 0;
BA_DEF_DEF_ "GenericSignalRequirementNb" "";
BA_DEF_DEF_ "Manufacturer" "BMW";
BA_DEF_DEF_ "ProjectFrameRequirementNb" "";
BA_DEF_DEF_ "GenMsgSendType" "Cyclic";
BA_DEF_DEF_ "GenMsgCycleTime" 0;
BA_DEF_DEF_ "GenericFrameRequirementNb" "";
9.2 Attribute屬性值
關鍵字:BA_
格式:
BA_ attribute_name BU_ node_name attribute_value;
BA_ attribute_name BO_ message_id attribute_value;
BA_ attribute_name SG_ message_id signal_name attribute_value;
BA_ attribute_name EV_ env_var_name attribute_value;
舉例:
BA_ "GenMsgSendType" BO_ 530 2;
BA_ "GenMsgCycleTime" BO_ 530 1000;
BA_ "GenMsgSendType" BO_ 529 1;
BA_ "GenMsgCycleTime" BO_ 529 100;
BA_ "GenSigStartValue" SG_ 530 Voltage_6_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_5_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_4_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_3_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_2_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_1_Value 3000;
BA_ "GenSigStartValue" SG_ 529 OBD_status 2;
BA_ "GenSigStartValue" SG_ 529 Current_value 0;
BA_ "GenSigStartValue" SG_ 529 Voltage_value 768;
10 本文使用的DBC檔案內容附錄
VERSION ""
NS_ :
NS_DESC_
CM_
BA_DEF_
BA_
VAL_
CAT_DEF_
CAT_
FILTER
BA_DEF_DEF_
EV_DATA_
ENVVAR_DATA_
SGTYPE_
SGTYPE_VAL_
BA_DEF_SGTYPE_
BA_SGTYPE_
SIG_TYPE_REF_
VAL_TABLE_
SIG_GROUP_
SIG_VALTYPE_
SIGTYPE_VALTYPE_
BO_TX_BU_
BA_DEF_REL_
BA_REL_
BA_DEF_DEF_REL_
BU_SG_REL_
BU_EV_REL_
BU_BO_REL_
SG_MUL_VAL_
BS_:
BU_: DCDC VCU OBD
VAL_TABLE_ Package_Num_Value 1 "No.2" 0 "N0.1" ;
VAL_TABLE_ OBD_status_description 2 "Shutdown" 1 "Run" 0 "Initialization" ;
VAL_TABLE_ Voltage_state 65535 "Invalid voltage" ;
BO_ 530 Test_ID_212: 8 OBD
SG_ Voltage_6_Value m1 : 55|16@0+ (0.1,0) [0|6553.5] "V" VCU
SG_ Voltage_5_Value m1 : 39|16@0+ (0.1,0) [0|6553.5] "V" VCU
SG_ Voltage_4_Value m1 : 23|16@0+ (0.1,0) [0|6553.5] "V" VCU
SG_ Voltage_3_Value m0 : 55|16@0+ (0.1,0) [0|6553.5] "V" VCU
SG_ Voltage_2_Value m0 : 39|16@0+ (0.1,0) [0|6553.5] "V" VCU
SG_ Voltage_1_Value m0 : 23|16@0+ (0.1,0) [0|6553.5] "V" VCU
SG_ Package_Num M : 7|8@0+ (1,0) [0|1] "-" VCU
BO_ 529 Test_ID_211: 8 OBD
SG_ OBD_status : 39|8@0+ (1,0) [0|255] "-" DCDC,VCU
SG_ Current_value : 23|16@0- (0.1,0) [-300|300] "A" DCDC,VCU
SG_ Voltage_value : 7|16@0+ (0.1,0) [0|6553.5] "V" DCDC,VCU
CM_ BU_ DCDC "DCDC node in CAN network";
CM_ BU_ VCU "VCU node in can network";
CM_ BU_ OBD "OBD node in CAN network";
CM_ BO_ 530 "The CAN_ID of the test message is 0x212.";
CM_ SG_ 530 Voltage_6_Value "Value of Voltage_6.";
CM_ SG_ 530 Voltage_5_Value "Value of Voltage_5.";
CM_ SG_ 530 Voltage_4_Value "Value of Voltage_4.";
CM_ SG_ 530 Voltage_3_Value "Value of Voltage_3.";
CM_ SG_ 530 Voltage_2_Value "Value of Voltage_2.";
CM_ SG_ 530 Voltage_1_Value "Value of Voltage_1.";
CM_ SG_ 530 Package_Num "Number of Voltage.";
CM_ BO_ 529 "The CAN_ID of the test message is 0x211.";
CM_ SG_ 529 OBD_status "OBD working status signal.";
CM_ SG_ 529 Current_value "OBD current signal.";
CM_ SG_ 529 Voltage_value "OBD voltage signal.";
BA_DEF_ SG_ "ProjectSignalRequirementNb" STRING ;
BA_DEF_ SG_ "GenSigStartValue" HEX 0 0;
BA_DEF_ SG_ "GenericSignalRequirementNb" STRING ;
BA_DEF_ "Manufacturer" STRING ;
BA_DEF_ BO_ "ProjectFrameRequirementNb" STRING ;
BA_DEF_ BO_ "GenMsgSendType" ENUM "Cyclic","OnEvent","Cyclic_And_OnEvent";
BA_DEF_ BO_ "GenMsgCycleTime" INT 0 65535;
BA_DEF_ BO_ "GenericFrameRequirementNb" STRING ;
BA_DEF_ "BusType" STRING ;
BA_DEF_DEF_ "ProjectSignalRequirementNb" "";
BA_DEF_DEF_ "GenSigStartValue" 0;
BA_DEF_DEF_ "GenericSignalRequirementNb" "";
BA_DEF_DEF_ "Manufacturer" "BMW";
BA_DEF_DEF_ "ProjectFrameRequirementNb" "";
BA_DEF_DEF_ "GenMsgSendType" "Cyclic";
BA_DEF_DEF_ "GenMsgCycleTime" 0;
BA_DEF_DEF_ "GenericFrameRequirementNb" "";
BA_DEF_DEF_ "BusType" "CAN";
BA_ "GenMsgSendType" BO_ 530 2;
BA_ "GenMsgCycleTime" BO_ 530 1000;
BA_ "GenMsgSendType" BO_ 529 1;
BA_ "GenMsgCycleTime" BO_ 529 100;
BA_ "GenSigStartValue" SG_ 530 Voltage_6_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_5_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_4_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_3_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_2_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_1_Value 3000;
BA_ "GenSigStartValue" SG_ 529 OBD_status 2;
BA_ "GenSigStartValue" SG_ 529 Current_value 0;
BA_ "GenSigStartValue" SG_ 529 Voltage_value 768;
VAL_ 530 Package_Num 1 "No.2" 0 "N0.1" ;
VAL_ 529 OBD_status 2 "Shutdown" 1 "Run" 0 "Initialization" ;
VAL_ 529 Voltage_value 65535 "Invalid voltage" ;
11 結尾

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/240135.html
標籤:其他
