Can DBC文件翻譯


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" ;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM