DBC文件格式文档【翻译】

本文是Vector文档DBC_File_Format_Documentation.pdf的翻译,水平有限,仅供参考。

1 Introduction 介绍

DBC(DataBase for Can)文件由Vector公司开发的数据库文件,用来描述单个CAN网络的通信,用于监视和分析网络并模拟物理上不可用的节点(剩余总线仿真)。

DBC文件还可用于开发属于CAN网络的电子控制单元的通信软件。DBC文件不处理ECU的功能行为。

 

2 General Definitions 一般定义

本文用到的几个通用的定义:

unsigned_integer: an unsigned integer

signed_integer: a signed integer

double: a double precision float number

char_string: an arbitrary string consisting of any printable characters except double hyphens ('"').

C_identifier: a valid C_identifier. C_identifiers have to start with am alpha character or an underscore and may further consist of alpha-numeric characters and underscores.

C_identifier = (alpha_char | '_') {alpha_num_char | '_'}

DBC文件中用到的几个关键字:

关键字

对象类型

BU_

网络节点

BO_

消息

SG_

信号

EV_

环境变量

本文使用BNF标记语法描述:

符号

含义

=

等号右边的语法是对等号左边名称的定义

;

分号结束一个定义

|

竖线表示可选择的

[ … ]

方括号内的内容是可选的(出现零次或一次)

{ … }

大括号内的内容是重复的(出现零次或多次)

( … )

小括号定义分组的元素

' … '

单引号中的文本必须按照定义显示

(* … *)

注释

3 Structure of the DBC File 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 ;

 

DBC文件使用以下几个部分描述can网络的基本通信:

• Bit_timing 位定时

这个部分是必要的,但一般是空的

• nodes 节点

这个部分是必要的,定义了网络的节点

• messages 消息

这个部分定义了消息和信号

 

以下部分不在普通的DBC中使用,仅出于完整性的目的在此定义它们:

• signal_types

• sigtype_attr_list

• category_definitions

• categories

• filter

• signal_type_refs

• signal_extended_value_type_list

如果不为系统或其余总线模拟定义任何附加数据,DBC文件内不包含环境变量。

 

4 Version and New Symbol Specification 版本和新符号规范

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 Bit Timing Definition位定时定义

位定时部分定义了总线的波特率和BTR寄存器的设置,这部分废弃不再使用了,但是DBC文件中一定要有BS_关键字。

bit_timing = 'BS_:' [baudrate ':' BTR1 ',' BTR2 ] ;
baudrate = unsigned_integer ;
BTR1 = unsigned_integer ;
BTR2 = unsigned_integer ;

 

6 Node Definitions节点定义

节点部分定义了所有节点的名称,这些名称不能重复。

nodes = 'BU_:' {node_name} ;
node_name = C_identifier ;

 

7 Value Table Definitions值表定义

值表部分定义了全局值表。值表里的值描述定义了原始值的编码。在常用的DBC文件中不使用全局值表,而是为每个信号单独定义值描述

value_tables = {value_table} ;
value_table = 'VAL_TABLE_' value_table_name

{value_description}';' ;
value_table_name = C_identifier ;

 

7.1 Value Descriptions值描述

值描述定义单个值的文本描述。 该值可以是总线上传输的信号原始值,也可以是剩余总线仿真中环境变量的值。

value_description = double char_string ;

 

8 Message Definitions消息定义

消息部分定义了所有帧的名称、属性以及在这些帧上传输的信号。

messages = {message} ;
message = BO_ message_id message_name ':' message_size

transmitter {signal} ;
message_id = unsigned_integer ;

消息的id必须是唯一的,最高有效位是1的帧是扩展帧,将扩展帧的id与上0xCFFFFFFF就可以获得实际id。

 

message_name = C_identifier ;

在此部分中定义的名称在消息集中必须是唯一的。

 

transmitter = node_name | 'Vector__XXX' ;

transmitter指定了发送此消息的节点,它必须在前面定义的节点集合之中,没有发送节点的消息的transmitter为'Vector__XXX'

 

8.1 Signal Definitions 信号定义

消息的信号部分列出了位于此消息的所有信号,包括信号的位置和属性。

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值指定了信号在帧数据域中的位置。对于Intel格式的信号,start_bit值是最低有效位的位置。对于motorola格式的信号,start_bit值是最高有效位的位置。这些位以锯齿方式计数。起始位的范围为0 到 (8 * message_size - 1).

 

signal_size = unsigned_integer ;

signal_size指定了信号的位数。

 

byte_order = '0' | '1' ; (* 0=little endian, 1=big endian *)

如果是字节顺序是intel格式,那这一位就是0;如果是motorola格式,这一位是1。

 

value_type = '+' | '-' ; (* +=unsigned, -=signed *)

值类型定义了信号是有符号还是无符号的。

 

factor = double ;
offset = double ;

因数和偏移定义了信号原始值到信号物理值的线性转换规则(因数不能是0):

physical_value = raw_value * factor + offset
raw_value = (physical_value – offset) / factor

 

minimum = double ;
maximum = double ;

最大值最小值定义了信号物理值的范围

 

unit = char_string ;
receiver = node_name | 'Vector__XXX' ;

receiver定义了信号的接收者,接收者名称必须是前面定义的节点集合里面的。如果没有接收者,就是用'Vector__XXX'。

 

float和double类型的信号由signal_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 Definition of Message Transmitters消息发送者的定义

消息发送器部分可以定义一个消息由多个发送节点发送,一般用来描述高层的通信。

message_transmitters = {message_transmitter} ;
Message_transmitter = 'BO_TX_BU_' message_id ':' {transmitter} ';' ;

 

8.3 Signal Value Descriptions信号值描述

信号值部分定义了特定信号原始值的编码。

value_descriptions = { value_descriptions_for_signal |value_descriptions_for_env_var } ;
value_descriptions_for_signal = 'VAL_' message_id signal_name{ value_description } ';' ;

 

9 Environment Variable Definitions环境变量定义

在环境变量部分,定义了在系统仿真和剩余总线仿真中用的环境变量

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_variable_data = 'ENVVAR_DATA_' env_var_name ':'data_size ';' ;
data_size = unsigned_integer ;

 

9.1 Environment Variable Value环境变量值描述

环境变量的值描述提供了该变量的特定值的文本表示形式。

value_descriptions_for_env_var = 'VAL_' env_var_name{ value_description } ';' ;

 

10 Signal Type and Signal Group Definitions信号类型和信号组定义

信号类型用于定义多个信号的通用属性,通常在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 Comment Definitions注释定义

注释部分包含了注释对象,对于每一个带有注释的对象,本节都会定义一个带有对象类型标识符的条目。

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 User Defined Attribute Definitions用户定义的属性

用户定义的属性是一个扩展dbc文件对象属性的方式,这些附加的属性必须用一个带有属性默认值的属性定义。对于具有为属性定义的每个对象,必须定义属性值条目。如果没有为对象定义属性值,对象属性值是默认的属性值。

 

12.1 Attribute Definitions 属性定义

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

【本文完】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值