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

 
       

Can DBC 文件翻译,不是很标准,凑合看还可以的更多相关文章

  1. Can DBC文件翻译

    1 引言 DBC文件描述单个CAN网络的通信.这个信息足以监测和分析网络并模拟不是物理可用的节点(剩余的总线模拟). DBC文件也可以用来开发电子控制单元的通信软件,该控制单元应该是CAN网络的一部分 ...

  2. 解析.DBC文件, 读懂CAN通信矩阵,实现车内信号仿真

    通常我们拿到某个ECU的通信矩阵数据库文件,.dbc后缀名的文件. 直接使用CANdb++ Editor打开,可以很直观的读懂信号矩阵的信息,例如下图: 现在要把上图呈现的信号从.dbc文件中解析出来 ...

  3. Nemo Documents – 给文件添加标签 以日历的形式将文件呈现出来,很像 Outlook,你可以根据年、月、日来查看不同类型的文档

    Nemo Documents – 给文件添加标签   scavin(Google+) on 2012.03.28. Nemo Documents 是款文件组织管理工具(文档管理器),不是街道大妈胜似大 ...

  4. DBC文件小结

    Vector的DBC文件描述了CAN网络的通信规范,通过定义signal可以表示CAN帧中的各个物理信号的含义.通过CANdb++ Editor软件可以创建和修改DBC文件,一般监控或控制CAN网络内 ...

  5. PHP读写大“二进制”文件,不必申请很大内存(fopen、fread、fwrite、fclose)

    <?php /** * 读写大二进制文件,不必申请很大内存 * 只有读取到内容才创建文件 * 保证目录可写 * * @param string $srcPath 源文件路径 * @param s ...

  6. Linux内核Makefile文件(翻译自内核手册)

    --译自Linux3.9.5 Kernel Makefiles(内核目录documention/kbuild/makefiles.txt) kbuild(kernel build) 内核编译器 Thi ...

  7. Python3.2官方文件翻译--课堂笔记和异常是阶级

    6.7备注 有时喜欢Pasca在"录"和C中"数据体"的数据类型很实用.集合一些数据项. 一个空类定义能够清楚地显示: class Employee: pass ...

  8. 读写大“二进制”文件,不必申请很大内存(fopen,fread,fwrite,fclose)

    <?php /** * 读写大二进制文件,不必申请很大内存 * 只有读取到内容才创建文件 * 保证目录可写 * * @param string $srcPath 源文件路径 * @param s ...

  9. 文件I/O之C标准库函数和系统库函数差别

    1.首先C标准库函数是工作在系统库函数之上的.C标准库函数在读写文件时候都有一个文件流指针.FILE*fp=NULL;// fp=fopen(F_PATH,"r"); fp文件流指 ...

随机推荐

  1. Spring Cloud ----> 几个组件的总结

    Spring Cloud Eureka 多个服务,对应多个Eureka Client 只有一个Eureka Server ,充当注册中心的角色每个Eureka Client 有ip 地址和端口号,它们 ...

  2. jacoco覆盖率工具测试及性能分析

    ant版本:https://ant.apache.org/bindownload.cgi jdk版本 注: ant 1.10    --->   jdk1.8 ant 1.9      ---& ...

  3. 『超分辨率重建』从SRCNN到WDSR

    超分辨率重建技术(Super-Resolution)是指从观测到的低分辨率图像重建出相应的高分辨率图像.SR可分为两类:    1. 从多张低分辨率图像重建出高分辨率图像    2. 从单张低分辨率图 ...

  4. [转]关于Megatops BinCalc RPN计算器的说明

    最近收到几个好心人发来的邮件,指出我的BinCalc存在低级BUG,即1+1算出来不等于2--鉴于存在这种误解的人之多,俺不得不爬出来澄清一下--我的Megatops BinCalc当中的计算器是RP ...

  5. 关于a标签的用法总结

    onclick的事件被先执行 ,其次是href中定义的(页面跳转或者javascript) 同时存在两个定义的时候(onclick与href都定义了),如果想阻止href的动作,在onclick必须加 ...

  6. yii依赖注入和依赖注入容器

    依赖注入和依赖注入容器¶ 为了降低代码耦合程度,提高项目的可维护性,Yii采用多许多当下最流行又相对成熟的设计模式,包括了依赖注入(Denpdency Injection, DI)和服务定位器(Ser ...

  7. Hive中数据的导入与导出

    最近在做一个小任务,将一个CDH平台中Hive的部分数据同步到另一个平台中.毕竟我也刚开始工作,在正式开始做之前,首先进行了一段时间的练习,下面的内容就是练习时写的文档中的内容.如果哪里有错误或者疏漏 ...

  8. mysql 联合表(federated)及视图

    1)验证环境 源库:192.168.8.75 centos 7.5 mysql8.3 目标库:192.168.8.68 redhat 6.8 mysql5.7 2)登录源库并创建源表 $ mysql ...

  9. WPF实现分页控件

    页面代码如下: <UserControl x:Class="Music163.DataGridPaging" xmlns="http://schemas.micro ...

  10. 如何调用别人提供的webservice接口

    当我们拿到一个接口的时候,先别急着去调用它,我们得先测试这个接口是否正确,是否能调用成功,以及返回的数据是否是我们需要的类型等等.这时候我们需要一个工具,比如SoapUI.(最好用绿色免安装版的.)然 ...