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. CF #552(div3)F 背包问题

    题目链接:http://codeforces.com/contest/1154/problem/F 题意:一个商店有n个物品,每个物品只能买一次,同时有m种优惠,即一次买够x件后,这x件中最便宜的k件 ...

  2. Django框架简介-模型系统

    2.5 模型 2.5.1 ORM介绍 2.5.1.1 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现 ...

  3. React 的组件与 this.props对象

    1.组件 React 允许将代码封装成组件,然后像插入普通 HTML 标签一样,在网页中插入这个组件.React.createClass 的方法就是用于生成一个组件类. 2.this.props对象 ...

  4. kafka producer batch 发送消息

    1. 使用 KafkaProducer 发送消息,是按 batch 发送的,producer 首先把消息放入 ProducerBatch 中: org.apache.kafka.clients.pro ...

  5. 回文的范围——算法面试刷题2(for google),考察前缀和

    如果一个正整数的十进制表示(没有前导零)是一个回文字符串(一个前后读取相同的字符串),那么它就是回文.例如,数字5, 77, 363, 4884, 11111, 12121和349943都是回文. 如 ...

  6. python数据结构与算法之问题求解

    懂得计算机的童鞋应该都知道,一条计算机程序由数据结构跟算法两大部分组成.所以,其实不管你使用哪种计算机语言编写程序,最终这两部分才是一个程序设计的核心.所以,一个不懂得数据结构与算法的程序员不是一个好 ...

  7. MySQL—增删改查,分组,连表,limit,union,alter,排序,去重

    MySQL增删改查 在表格的增删改查中,查的内容是最多的,包括group by ,join,limit,union,alter,排序都是服务于查的 #sql语句数据行操作补充 #增加: #insert ...

  8. Tensorflow安装指南

    1.关闭所有安全工具!!!!!(非常重要!否则很可能安装失败) 2.下载CUDA 地址https://developer.nvidia.com/accelerated-computing-toolki ...

  9. C++学习笔记(一):C++基础知识

    一.C++基础知识 新的数据类型 C语言中的数据类型 C++中新的数据类型 思考:新的数据类型有什么好处?请看下面的代码: 可以见得:新的类型使整个程序更加简洁,程序变得易读易懂!这个就是bool类型 ...

  10. Mysql基本操作命令【转载】

    原文链接:http://www.cnblogs.com/rookie-c/p/6425039.html 创建数据库 CREATE DATABASE name; 显示所有数据库 SHOW DATABAS ...