本文是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" ;

【本文完】

DBC文件格式文档【翻译】相关推荐

  1. Linux内核:VFIO Mediated Device(vfio-mdev)内核文档(翻译)

    <ARM SMMU原理与IOMMU技术("VT-d" DMA.I/O虚拟化.内存虚拟化)> <提升KVM异构虚拟机启动效率:透传(pass-through).DM ...

  2. [参考文档] [翻译]Oracle 12c R2优化器白皮书

    [参考文档] [翻译]Oracle 12c R2优化器白皮书 原文链接: http://www.oracle.com/technetwor ... edb-12c-1963236.pdf 第一版翻译链 ...

  3. WebView 文档 翻译

    文档地址:https://developer.android.google.cn/reference/android/webkit/WebView.html WebView 文档 public cla ...

  4. libevent 学习文档-翻译

    文章目录 Libevent 学习记录 第一节 关于文档 第0章:关于本文档 示例说明 第1章:异步IO的简单介绍. 异步 IO 的小介绍 关于便利性?(Windows 呢?) Libevent 参考手 ...

  5. permission 文档 翻译 运行时权限

    文档位置: API24/guide/topics/security/permissions.html System Permissions 系统权限 Android is a privilege-se ...

  6. 【Android应用开发】Android 蓝牙低功耗 (BLE) ( 第一篇 . 概述 . 蓝牙低功耗文档 翻译)

    转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/50515359 参考 :  -- 官方文档 : https://develope ...

  7. Linux内核:VFIO 内核文档 (实例,API,bus驱动API)

    <ARM SMMU原理与IOMMU技术("VT-d" DMA.I/O虚拟化.内存虚拟化)> <提升KVM异构虚拟机启动效率:透传(pass-through).DM ...

  8. 所见即所得编辑器_文档标记语言与所见即所得编辑器相比的优势

    所见即所得编辑器 by Christian Neumanns 克里斯蒂安·纽曼斯(Christian Neumanns) 文档标记语言与所见即所得编辑器相比的优势 (The advantages of ...

  9. Spring-Core 中文翻译+总结文档(上)

    Spring - Core 引言 使用版本 5.2.5RELEASE 这一部分的文档覆盖了几乎所有的Spring 框架的技术,Spring框架最主要的控制反转(IOC容器),在对Spring框架的IO ...

  10. 免费网站翻译整个文档并保留原格式

    2022.11.19补充 刚刚想翻译一下来着,发现百度通用翻译服务开始收费了,每月前5万字符免费!!!刚刚翻译了一篇4页的pdf就用了2万了,慎用. ------------------------- ...

最新文章

  1. 数据中心液体冷却方案正在兴起的五大原因
  2. 科技行业风投日趋谨慎:VR、机器学习和汽车值得关注
  3. Event 事件 - 基础
  4. vscode 使用 ssh 登录
  5. 九、Pandas高级处理
  6. Android5.0新控件
  7. CSS选择器必备的3个知识点
  8. Java数据结构和算法(二):数组
  9. 奇怪的电梯(洛谷-P1135)
  10. linux修改默认python版本_将Linux下python默认版本切换成替代版本
  11. redis持久化之rdb
  12. Flash务实主义——Loading
  13. 使用云CRM的10个理由
  14. 洛谷——P1085 [NOIP2004 普及组] 不高兴的津津
  15. Java全栈工程实践
  16. 用 SwiftUI 实现一个开源的 App Store
  17. uc保存html,UC浏览器如何保存网页 怎么保存网页图文教程
  18. HTML制作宣传片,如何制作一部好的宣传片
  19. flash actionscript MovieClip(电影剪辑)控制
  20. Robotium 介绍

热门文章

  1. 易语言怎么给手机发短信,对接验证码短信接口DEMO示例
  2. 321影音 多功能播放器
  3. 手机号码正则_正则表达式小白有这两个工具就够了 正则表达式生成工具
  4. 代码规范利器-阿里代码规范插件
  5. 华为路由GRE隧道搭建
  6. 官网下载kettle
  7. 如何为html代码加密
  8. canvas+websocket+vue做一个你画我猜小游戏
  9. python 归一化方法
  10. 云计算、雾计算、边缘计算、移动边缘计算和自动驾驶的关系