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

版权声明:本文为isAndyWu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/isAndyWu/p/9523528.html