DBC文件说明


DBC(Data Base CAN)文件用于描述单个CAN网络的通信。相较于Excel、Word版的CAN协议描述文件,DBC文件格式比较固定、不会产生歧义和理解误差,便于交流。

本文简单介绍DBC文件内容和格式,部分内容参考了文末引用链接中的文章,如有不正确的地方请批评指正。

1.文件元素

类似于C语言等编程语言,DBC文件也有自己的内容元素,主要分为常规元素,关键字和符号。

1.1 常规元素

DBC文件中的数据类型和标识符。

  • unsigned_integer
    无符号整数,如报文ID、信号位长等。
  • signed_integer
    有符号整数,如用户定义的属性值等。
  • double
    双精度浮点数,如信号增益、偏置、下限值、上限值等。
  • char_string
    字符串,双引号之间的内容,如节点、报文、信号的注释说明等。
  • C_identifier
    标识符, 必须以字母或下划线开始,并可能进一步包含字母、数字和下划线,如节点、报文、信号的名称等。

1.2 关键字

下面列出了部分关键字:

  • BU_
    网络节点类型的对象
  • BO_
    消息类型的对象
  • SG_
    信号类型的对象
  • EV_
    环境变量类型的对象
  • CM_
    注释
  • BA_DEF_
    属性定义
  • BA_DEF_DEF_
    属性默认值
  • BA_
    属性值
  • VAL_
    值描述

1.3 符号

语法使用扩展的BNF符号(Backus-Naur-Format)进行描述。

  • = 等于号
    使左侧的名称=右侧的语法定义。
  • ; 分号
    分号终止一个定义。
  • | 竖线
    竖线表示其左右两边任选一项,相当于或的意思。
  • […] 方括号
    方括号内的定义为可选项(零次或一次出现)。
  • {…} 大括号
    大括号内的定义为可重复项(零次或多次出现)。
  • (…) 圆括号
    圆括号定义分组元素。
  • ’…’ 连字符
    连字符中的文本必须按照定义显示。
  • (* … *) 注释符
    注释说明符号。

2.文件结构

完整的DBC文件从上到下分为如下几个部分,其中的部分结构在一般的DBC文件中不会出现,列出它们只是为了文件的完整性。在一般的DBC文件中不会出现的结构为:signal_types、sigtype_attr_list、category_definitions、categories、filter、signal_type_refs、signal_extended_value_type_list共7个部分。

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;
  • version
    版本:一般为空或者是Vector CANdb++ Editor使用的字符串。
  • new_symbols
    新符号:DBC文件中可能出现的符号。为“NS_ :”符号后面的内容。
  • bit_timing(过时但需要
    位定时:定义波特率和BTR寄存器的设置,已经过时。但关键字“BS_”必须出现在DBC文件中。
  • nodes
    节点:CAN网络中所有节点。为“BU_”符号后面的内容。
  • value_tables
    值表:值表部分定义全局值表,描述了信号的原始值取值列表。为“VAL_TABLE_”符号后面的内容。
  • messages
    报文:定义帧的名称、属性以及帧上传输的信号等信息。为“BO_”符号后面的内容。其中的每个信号的定义为“SG_”符号后面的内容。
  • message_transmitters
    报文多节点发送:定义报文的多个发送节点,即多个节点都会发送该帧报文。为“BO_TX_BU_”符号后面的内容。
  • environment_variables
    环境变量:定义用于系统仿真和半物理总线仿真工具的环境变量。为“EV_”符号后面的内容。
  • environment_variables_data
    环境变量数据:定义环境变量的数据类型,这种数据类型的环境变量可以存储给定长度的任意二进制数据,长度以字节为单位给出。为“ENVVAR_DATA_”符号后面的内容。
  • signal_types
    信号类型:信号类型用于定义多个信号的公共属性。通常不在DBC文件中使用。为“SGTYPE_”符号后面的内容。
  • comments
    注释:注释是对DBC对象的说明。为“CM_”符号后面的内容。
  • attribute_definitions
    属性定义:用户自定义的属性是扩展对象属性的一种方法。这些附加属性必须有默认值。每个具有该属性的对象,都必须指定该属性的值,如未指定则使用该属性的默认值。为“BA_DEF_”符号后面的内容。
  • sigtype_attr_list
    信号类型属性列表:未知。
  • attribute_defaults
    属性默认值:用户自定义属性时指定的默认值。为“BA_DEF_DEF_”符号后面的内容。
  • attribute_values
    属性值:为具有用户自定义属性的对象指定该属性的值。为“BA_”符号后面的内容。
  • value_descriptions
    值描述:对信号原始值或环境变量值的描述。为“VAL_”符号后面的内容。
  • category_definitions
    类别定义:未知。
  • categories
    类别:未知。
  • filter
    过滤:未知。
  • signal_type_refs
    信号类型引用:未知。
  • signal_groups
    信号组:信号组用于定义消息中的信号为一组,对同组的信号执行同一操作。例如,定义一个组的信号同时进行更新。为“SIG_GROUP_”符号后面的内容。
  • signal_extended_value_type_list
    信号扩展值类型列表:值类型为“float”或“double”的信号需要在此列表中添加额外说明项。通常不在DBC文件中使用。为“SIG_VALTYPE_”符号后面的内容。

3.文件格式

一个简单的DBC文件示例:

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_
	SG_MUL_VAL_

BS_:

BU_: BMS VCU MCU

VAL_TABLE_ Enable 1 "开启" 0 "关闭" ;
VAL_TABLE_ ErrLevel 0 "无故障" 1 "一级故障" 2 "二级故障" ;
VAL_TABLE_ State 1 "正转" 2 "反转" ;

BO_ 384 VCU_Msg: 8 VCU
 SG_ VCU_Sig6 : 56|8@1+ (1,0) [0|1] ""  BMS,MCU
 SG_ VCU_Sig5 : 48|8@1+ (1,0) [0|1] ""  BMS,MCU
 SG_ VCU_Sig4 : 40|8@1+ (1,1985) [1985|2235] "year"  BMS,MCU
 SG_ VCU_Sig3 : 32|8@1+ (0.25,0) [0|63.75] "day"  BMS,MCU
 SG_ VCU_Sig2 : 16|8@1+ (1,0) [0|23] "h"  BMS,MCU
 SG_ VCU_Sig1 : 8|8@1+ (1,0) [0|59] "min"  BMS,MCU
 SG_ VCU_Sig0 : 0|8@1+ (0.25,0) [0|63.75] "s"  BMS,MCU

BO_ 2566848513 BMS_Msg: 8 BMS
 SG_ BMS_Sig5 : 62|2@1+ (1,0) [0|3] "V"  VCU
 SG_ BMS_Sig4 : 56|6@1+ (1,0) [0|63] "V"  VCU
 SG_ BMS_Sig4 : 48|8@1+ (1,0) [0|255] "V"  VCU
 SG_ BMS_Sig3 : 45|3@1+ (1,0) [0|7] "V"  VCU
 SG_ BMS_Sig3 : 40|2@1+ (1,0) [0|3] ""  VCU
 SG_ BMS_Sig2 : 32|8@1+ (0.4,0) [0|100] ""  VCU
 SG_ BMS_Sig1 : 16|16@1+ (0.02,-600) [-600|600] "V"  VCU
 SG_ BMS_Sig0 : 0|16@1+ (0.1,0) [0|700] "V"  VCU

BO_ 2365521921 MCU_Msg: 8 MCU
 SG_ MCU_Sig5 : 57|2@0+ (1,0) [0|3] ""  VCU
 SG_ MCU_Sig4 : 55|8@0+ (1,-40) [-40|150] ""  VCU
 SG_ MCU_Sig0 : 3|4@0+ (1,0) [0|15] ""  VCU
 SG_ MCU_Sig1 : 15|16@0+ (1,0) [0|3000] ""  VCU
 SG_ MCU_Sig2 : 31|16@0+ (0.125,0) [0|8000] ""  VCU
 SG_ MCU_Sig3 : 47|8@0+ (1,-40) [-40|150] ""  VCU

CM_ BU_ BMS "BMS节点";
CM_ SG_ 384 VCU_Sig1 "VCU节点的报文发送的信号";
CM_ BO_ 2365521921 "MCU节点发送的报文";
BA_DEF_ SG_  "GenSigStartValue" FLOAT 0 0;
BA_DEF_ SG_  "SignalType" STRING ;
BA_DEF_ BO_  "GenMsgCycleTime" INT 0 10000;
BA_DEF_DEF_  "GenSigStartValue" 0;
BA_DEF_DEF_  "SignalType" "";
BA_DEF_DEF_  "GenMsgCycleTime" 0;
BA_ "GenMsgCycleTime" BO_ 384 50;
BA_ "GenMsgCycleTime" BO_ 2566848513 100;
BA_ "GenMsgCycleTime" BO_ 2365521921 10;
BA_ "GenSigStartValue" SG_ 384 VCU_Sig1 40;
BA_ "GenSigStartValue" SG_ 2566848513 BMS_Sig1 30000;
BA_ "SignalType" SG_ 2365521921 MCU_Sig0 "ENM";
BA_ "GenSigStartValue" SG_ 2365521921 MCU_Sig1 100;
BA_ "SignalType" SG_ 2365521921 MCU_Sig2 "ENM";
BA_ "SignalType" SG_ 2365521921 MCU_Sig3 "ENM";
VAL_ 384 VCU_Sig0 1 "开启" 0 "关闭" ;
VAL_ 2566848513 BMS_Sig0 0 "无故障" 1 "一级故障" 2 "二级故障" ;
VAL_ 2365521921 MCU_Sig0 1 "正转" 2 "反转" ;

下面介绍示例中的部分内容。

  • 节点

语法: BU_: 节点名称1 节点名称2 节点名称3 …

BU_: BMS VCU MCU

BU_开头的行定义节点,每个节点之间用空格分隔。示例中定义了BMS、VCU、MCU三个节点。

  • 值表

语法:VAL_TABLE_ 值表名称 值1 “值1描述” 值2 “值2描述” 值3 “值3描述” … ;

VAL_TABLE_ Enable 1 "开启" 0 "关闭" ;
VAL_TABLE_ ErrLevel 0 "无故障" 1 "一级故障" 2 "二级故障" ;
VAL_TABLE_ State 1 "正转" 2 "反转" ;

VAL_TABLE_开头的行定义值表,值和值的描述成对出现。

  • 报文

语法:BO_ 报文ID 报文名称: 报文数据长度 发送节点

BO_ 384 VCU_Msg: 8 VCU
BO_ 2566848513 BMS_Msg: 8 BMS

BO_开头的行定义报文。报文ID为十进制数,标准帧ID为数值本身,如348为0x180,扩展帧ID为数值本身减去0x80000000,如2566848513为0x18FF0001。报文数据长度一般为8个字节。如未指定报文的发送节点,则发送节点必须为Vector__XXX,不能留空。

  • 信号

语法:SG_ 信号名称: 起始位|位长@字节顺序 符号类型 (增益,偏置) [最小值|最大值] “单位” 接收节点

SG_ VCU_Sig0 : 0|8@1+ (0.25,0) [0|63.75] "s"  BMS,MCU
SG_ MCU_Sig3 : 47|8@0+ (1,-40) [-40|150] ""  VCU

SG_开头的行定义信号。字节顺序0表示Motorola格式,1表示Intel格式。符号类型+表示无符号,-表示有符号。信号的增益和偏置用于信号原始值raw_value和物理值physical_value之间的转换计算,计算公式为:

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

信号的最小值和最大值为物理值的下限值和上限值。接收信号的节点可以为一个或多个,有多个时中间用英文逗号分隔。如未指定信号的接收节点,则接收节点必须为Vector__XXX,不能留空。

  • 注释

语法:CM_ 对象类型 对象名称 “注释”;

CM_ BU_ BMS "BMS节点";
CM_ SG_ 384 VCU_Sig1 "VCU节点的报文发送的信号";
CM_ BO_ 2365521921 "MCU节点发送的报文";

CM_开头的行定义对象的注释。对象类型可以为节点、报文、信号、环境变量。对于报文类型的对象,对象名称使用报文ID。对于信号类型的对象,信号名称之前需要添加报文ID以确定信号的具体位置。

  • 属性定义

语法:BA_DEF_ 对象类型 “属性名称” 属性值类型 最小值 最大值;

BA_DEF_ SG_  "GenSigStartValue" FLOAT 0 0;
BA_DEF_ SG_  "SignalType" STRING ;
BA_DEF_ BO_  "GenMsgCycleTime" INT 0 10000;

BA_DEF_开头的行定义属性。对象类型可以为节点、报文、信号、环境变量,表示该属性用于该类型的对象。

  • 属性默认值

语法:BA_DEF_DEF_ “属性名称” 属性默认值;

BA_DEF_DEF_  "GenSigStartValue" 0;
BA_DEF_DEF_  "SignalType" "";
BA_DEF_DEF_  "GenMsgCycleTime" 0;

BA_DEF_DEF_开头的行定义属性的默认值,定义属性必须指定属性默认值。

  • 属性值

语法:BA_ “属性名称” 对象类型 对象名称 属性值;

BA_ "GenMsgCycleTime" BO_ 2365521921 10;
BA_ "SignalType" SG_ 2365521921 MCU_Sig0 "ENM";
BA_ "GenSigStartValue" SG_ 2566848513 BMS_Sig1 30000;

BA_开头的行定义对象的属性值,如果对象的属性值刚好等于属性的默认值,则不会在DBC文件中出现该对象的属性值的定义。对象类型可以为节点、报文、信号、环境变量。对于报文类型的对象,对象名称为报文ID。示例中第一行表示报文0x0CFF0001的报文周期为10ms。示例中第二行表示报文0x0CFF0001的信号MCU_Sig0的类型为枚举类型。示例中第三行表示报文0x18FF0001的信号BMS_Sig1的初始原始值为30000,初始物理值通过增益和偏置计算为0(0 = 30000 * 0.02 - 600),DBC文件中记录的信号初始值都为信号原始值,而Vector CANdb++ Editor中显示的为信号的物理初始值。

  • 值描述

语法:VAL_ 信号或环境变量名称 值1 “值1描述” 值2 “值2描述” 值3 “值3描述” … ;

VAL_ 384 VCU_Sig0 1 "开启" 0 "关闭" ;
VAL_ 2566848513 BMS_Sig0 0 "无故障" 1 "一级故障" 2 "二级故障" ;
VAL_ 2365521921 MCU_Sig0 1 "正转" 2 "反转" ;

VAL_开头的行定义信号或环境变量的值描述,值和描述成对出现。对于信号类型的对象,信号名称之前需要添加报文ID以确定信号的具体位置。

[1] https://www.cnblogs.com/alphaxz/p/9339715.html
[2] https://zhuanlan.zhihu.com/p/26882148
[3] http://read.pudn.com/downloads766/ebook/3041455/DBC_File_Format_Documentation.pdf

发布了1 篇原创文章 · 获赞 3 · 访问量 1168
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览