1 引言
DBC文件描述單個CAN網絡的通信。這個信息足以監測和分析網絡並模擬不是物理可用的節點(剩余的總線模擬)。
DBC文件也可以用來開發電子控制單元的通信軟件,該控制單元應該是CAN網絡的一部分。 DBC文件不處理ECU的功能行為。
2一般定義
本文檔中使用以下常規元素:
unsigned_integer:一個無符號整數
signed_integer:一個有符號的整數
double:雙精度浮點數
char_string:除雙連字符('“')以外的任何可打印字符組成的任意字符串。
C_identifier:一個有效的C_identifier。 C_identifiers必須以字母字符或下划線開始,並可能進一步包含
字母數字字符和下划線。 C_identifier =(alpha_char |'_'){alpha_num_char | '_'}
DBC文件中使用的C標識符最多可以有128個字符。為了與舊工具兼容,長度不應超過32個字符。
DBC文件中使用的其他字符串可能是任意長度。
在DBC文件中使用的關鍵字o標識一個對象的類型在下表中給出:
關鍵字 對象類型
BU_ 網絡節點
BO_ 消息
SG_ 信號
EV_ 環境變量
語法使用擴展的BNF符號(Backus-Naur-Format)進行描述。
符號含義
=使用右側的語法(語法規則)定義=的左側的名稱。
;分號終止一個定義。
|豎條表示替代方案。
[...]括號內的定義是可選的(零次或一次出現)。
{...}大括號內的定義重復(零次或多次出現)
(...)括號定義分組元素。
'...'連字符中的文本必須按照定義出現。
(* ... *)評論。
3 DBC文件的結構
DBC文件格式具有以下總體結構:
DBC_file =
version
new_symbols
bit_timing(*過時但需要*)
nodes
value_tables
messages
message_transmitters
environment_variables
environment_variables_data
signal_types
comments
attribute_definitions
sigtype_attr_list
attribute_defaults
attribute_values
value_descriptions
category_definitions(*過時*)
categories(*過時*)
filter(*過時*)
signal_type_refs
signal_groups
signal_extended_value_type_list;
描述CAN網絡基本通信的DBC文件包括以下部分:
• Bit_timing
這部分是必需的,但通常是空的。
• nodes
這部分是必需的,並定義了網絡節點。
• messages
本節定義了消息和信號。
以下部分不在正常的DBC文件中使用。它們只是為了完整而定義在這里:
• signal_types
• sigtype_attr_list
• category_definitions
• category
• filter
• signal_type_refs
• signal_extended_value_type_list
描述CAN通信的DBC文件,不定義系統或剩余總線仿真的任何附加數據,不包括環境變量。
4版本和新符號規范
DBC文件包含一個包含版本和新符號條目的頭文件。版本或者是空的,或者是CANdb編輯器使用的字符串。
version = ['VERSION''''{CANdb_version_string}'“'];
new_symbols = ['NS_'':'['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_']];
5位定時定義
位定時部分定義了波特率和網絡的BTR寄存器的設置這部分已經過時,不再使用。盡管如此,他的關鍵字'BS_'必須出現在DBC文件中。
bit_timing ='BS_:'[baudrate':'BTR1','BTR2];
baudrate = unsigned_integer; BTR1 = unsigned_integer;
BTR2 = unsigned_integer;
6節點定義
節點部分定義所有參與節點的名稱,本節中定義的名稱在本節中必須是唯一的。
nodes ='BU_:'{node_name};
node_name = C_identifier;
7值表定義
值表部分定義了全局值表。值表中的值描述定義了信號原始值的值編碼。在常用的DBC文件中,不使用全局值表,而是分別為每個信號定義值描述。
value_tables = {value_table} ;
value_table = 'VAL_TABLE_' value_table_name {value_description} ';' ;
value_table_name = C_identifier;
7.1值描述(值編碼)
值描述為單個值定義文本描述。該值可以是在總線上傳輸的信號原始值,也可以是剩余總線(虛擬節點)模擬中環境變量的值。
value_description = double char_string;
8消息定義
消息部分定義了集群中所有幀的名稱以及它們的屬性和在這些幀上傳輸的信號。
messages = {message};
message = BO_ message_id message_name':'message_size trans-mitter {signal} ;
message_id = unsigned_integer;
該消息的CAN-ID。 CAN-ID在DBC文件中必須是唯一的。如果CAN-ID的最高有效位被設置,則該ID是擴展的CAN ID。擴展的CAN ID可以通過用掩碼0xCFFFFFFF屏蔽掉最高有效位來確定。
message_name = C_identifier ;
在這個部分定義的名字在這組消息中必須是唯一的。
message_size = unsigned_integer;
message_size以字節為單位指定消息的大小。
transmitter = node_name | 'Vector__XXX';
發送者名稱指定發送消息的節點的名稱。發件人名稱必須在節點部分的節點名稱集中定義。如果消息沒有發送者,則必須在這里給出字符串Vector__XXX。
8.1信號定義
消息的信號部分列出消息中放置的所有信號,消息數據字段中的位置及其屬性。
signal = 'SG_' signal_name multiplexer_indicator ':' start_bit '|' signal_size '@' byte_order value_type '(' factor ',' offset ')' '[' minimum '|' maximum ']' unit receiver {',' receiver} ;
signal_name = C_identifier ;
這里定義的名稱對於單個消息的信號必須是唯一的。
multiplexer_indicator = ' ' | 'M' | m multiplexer_switch_value ;
多路復用器指示器定義信號是正常信號、多路復用信號的多路開關,還是多路復用信號。 “M”(大寫)字符將信號定義為多路復用器開關。多路復用器交換機中只能有一個信號內的信號。一個“m”(小寫)字符,后跟一個無符號整數,將信號定義為復用器開關復用的信號。如果多路復用器信號的開關值等於其multiplexer_switch_value,則多路復用信號被傳送到消息中。
start_bit = unsigned_integer ;
start_bit值指定幀的數據字段內信號的位置。對於字節順序為英特爾(little endian)的信號給出了最低有效位的位置。對於具有字節順序Motorola(big endian)的信號,給出最高有效位的位置。這些位以鋸齒形方式計數。起始位必須在0到(8 * message_size - 1)的范圍內。
signal_size = unsigned_integer;
signal_size以位為單位指定信號的大小
byte_order ='0'| '1'; (* 0 =小端,1 =大端*)
如果信號的字節順序是Intel(小端),則byte_format是0;如果字節順序是Motorola(大端),則byte_format是1。(這里可能有錯誤,從其他渠道獲取的消息是1=intel ,0=Motorola)
value_type ='+'| ' - '; (* + =無符號, - =有符號*)
value_type將信號定義為unsigned( - )或signed( - )類型。
factor = double;
offset = double;
系數和偏移定義了線性轉換規則,將信號原始值轉換為信號的物理值,反之亦然:
physical_value = raw_value * factor + offset
raw_value =(physical_value - offset)/ factor
從轉換規則公式中可以看出,該因子不能為0。
minimum = double ;
maximum = double ;
最小值和最大值定義信號有效物理值的范圍。
unit = char_string;
receiver = node_name | 'Vector__XXX';
接收者名稱指定信號的接收者。接收者名稱必須在節點部分的一組節點名稱中定義。如果信號沒有
接收器,字符串'Vector__XXX'必須在這里給出。
值為“float”和“double”的信號在sig-nal_valtype_list部分有附加條目。
signal_extended_value_type_list = 'SIG_VALTYPE_' message_id signal_
name signal_extended_value_type ';' ;
signal_extended_value_type = '0' | '1' | '2' | '3' ; (* 0=signed or
unsigned integer, 1=32-bit IEEE-float, 2=64-bit IEEE-double *)
8.2消息發送器的定義
消息發送器部分使得能夠定義單個節點的多個發送器節點。這用於描述更高層協議的通信數據。這不用於定義CAN二層通信。
message_transmitters = {message_transmitter} ;
Message_transmitter = 'BO_TX_BU_' message_id ':' {transmitter} ';' ;
8.3信號值描述(值編碼)
信號值描述定義了特定信號原始值的編碼。
value_descriptions = { value_descriptions_for_signal |
value_descriptions_for_env_var } ;
value_descriptions_for_signal = 'VAL_' message_id signal_name
{ value_description } ';' ;
9環境變量定義
在環境變量部分中定義了用於系統仿真和剩余總線仿真工具的環境變量。
environment_variables = {environment_variable}
environment_variable = 'EV_' env_var_name ':' env_var_type '[' minimum
'|' maximum ']' unit initial_value ev_id access_type access_
node {',' access_node } ';' ;
env_var_name = C_identifier ;
env_var_type = '0' | '1' | '2' ; (* 0=integer, 1=float, 2=string *)
minimum = double ;
maximum = double ;
initial_value = double ;
ev_id = unsigned_integer ; (* obsolete *)
access_type = 'DUMMY_NODE_VECTOR0' | 'DUMMY_NODE_VECTOR1' |
'DUMMY_NODE_VECTOR2' | 'DUMMY_NODE_VECTOR3' ; (*
0=unrestricted, 1=read, 2=write, 3=readWrite *)
access_node = node_name | 'VECTOR_XXX' ;
環境變量數據部分中的條目將此處列出的環境定義為數據類型“數據”。這種類型的環境變量可以存儲給定長度的任意二進制數據。長度以字節為單位給出。
environment_variables_data = environment_variable_data ;
environment_variable_data = 'ENVVAR_DATA_' env_var_name ':'
data_size ';' ;
data_size = unsigned_integer ;
9.1環境變量值描述
環境變量的值描述提供了變量特定值的文本表示。
value_descriptions_for_env_var = 'VAL_' env_var_aname
{ value_description } ';' ;
10信號類型和信號組定義
信號類型用於定義幾個信號的公共屬性。它們通常不用於DBC文件。
signal_types = {signal_type} ;
signal_type = 'SGTYPE_' signal_type_name ':' signal_size '@'
byte_order value_type '(' factor ',' offset ')' '[' minimum '|'
maximum ']' unit default_value ',' value_table ';' ;
signal_type_name = C_identifier ;
default_value = double ;
value_table = value_table_name ;
signal_type_refs = {signal_type_ref} ;
signal_type_ref = 'SGTYPE_' message_id signal_name ':' signal_
type_name ';' ;
信號組被用來定義消息內的一組信號,例如,以確定一個組的信號必須共同更新。
signal_groups = 'SIG_GROUP_' message_id signal_group_name repetitions
':' { signal_name } ';' ;
signal_group_name = C_identifier ;
repetitions = unsigned_integer ;
11注釋定義
注釋部分包含對象注釋。對於每個有注釋的對象,本節定義了一個帶有對象類型標識的條目。
comments = {comment} ;
comment = 'CM_' (char_string |
'BU_' node_name char_string |
'BO_' message_id char_string |
'SG_' message_id signal_name char_string |
'EV_' env_var_name char_string)
';' ;
12用戶定義的屬性定義
用戶定義的屬性是擴展DBC文件的對象屬性的一種手段。這些附加屬性必須使用具有屬性默認值的屬性定義進行定義。對於每個具有為該屬性定義的值的對象,都必須定義一個屬性值條目。如果沒有為對象定義屬性值條目,則該對象的屬性值是該屬性的默認值。
12.1屬性定義
attribute_definitions = { attribute_definition } ;
attribute_definition = 'BA_DEF_' object_type attribute_name attribute_
value_type ';' ;
object_type = '' | 'BU_' | 'BO_' | 'SG_' | 'EV_' ;
attribute_name = '"' C_identifier '"' ;
attribute_value_type = 'INT' signed_integer signed_integer |
'HEX' signed_integer signed_integer |
'FLOAT' double double |
'STRING' |
'ENUM' [char_string {',' char_string}]
attribute_defaults = { attribute_default } ;
attribute_default = 'BA_DEF_DEF_' attribute_name attribute_value
';' ;
attribute_value = unsigned_integer | signed_integer | double |
char_string ;
12.2屬性值
attribute_values = { attribute_value_for_object } ;
attribute_value_for_object = 'BA_' attribute_name (attribute_value |
'BU_' node_name attribute_value |
'BO_' message_id attribute_value |
'SG_' message_id signal_name attribute_value |
'EV_' env_var_name attribute_value)
13 Examples
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_
BS_:
BU_: Engine Gateway
BO_ 100 EngineData: 8 Engine
SG_ PetrolLevel : 24|8@1+ (1,0) [0|255] "l" Gateway
SG_ EngPower : 48|16@1+ (0.01,0) [0|150] "kW" Gateway
SG_ EngForce : 32|16@1+ (1,0) [0|0] "N" Gateway
SG_ IdleRunning : 23|1@1+ (1,0) [0|0] "" Gateway
SG_ EngTemp : 16|7@1+ (2,-50) [-50|150] "degC" Gateway
SG_ EngSpeed : 0|16@1+ (1,0) [0|8000] "rpm" Gateway
CM_ "CAN communication matrix for power train electronics *******************************************************
implemented: turn lights, warning lights, windows";
VAL_ 100 IdleRunning 0 "Running" 1 "Idle" ;