一篇文教你详细解析DBC文件结构

举报
灰小猿 发表于 2021/12/24 19:04:49 2021/12/24
【摘要】 hello,你好呀,我是灰小猿,一个超会写bug的程序猿!今天在这里分享一下在汽车电子行业中常会用到的一种文件格式——DBC文件,并和大家对其中的内容的含义进行解析。 DBC文件的作用当前汽车中的通信主要是用can总线通信,而DBC是vector公司定义的,用来描述CAN网络节点间数据通讯的一种文件,其中包含了CAN总线协议中协议数据及其所代表的具体意义,它可以用来监测和分析CAN网络上的报...

hello,你好呀,我是灰小猿,一个超会写bug的程序猿!

今天在这里分享一下在汽车电子行业中常会用到的一种文件格式——DBC文件,并和大家对其中的内容的含义进行解析。

DBC文件的作用

当前汽车中的通信主要是用can总线通信,而DBC是vector公司定义的,用来描述CAN网络节点间数据通讯的一种文件,其中包含了CAN总线协议中协议数据及其所代表的具体意义,它可以用来监测和分析CAN网络上的报文数据,也可以用来模拟某个CAN节点。

基本元素

在DBC的文件结构中会用到很多格式的字符,每一个字符都有不一样的含义,每一个字符对应的含义如下:

符号 含义
= 等号左边为定义的名称,右边为该定义的格式
; 定义的终止
| 表示任选其一
[ … ] 括号内的定义是可选的(零或一个事件)。
{ … } 括号内重复定义(零次或多次),空格隔开
( … ) 定义一组元素
’ … ’ 文本按照“’”符号中写的去定义
(* … *) 备注

版本信息

版本信息部分主要就是用来描述该DBC的哪一个版本的。
格式如下:

VERSION ""

实例如下:

VERSION ""

波特率

该部分定义了波特率和BTR网络寄存器的设置,这部分是过时的,而且不再使用,但是它的关键字‘BS_’必须出现在DBC文件中。

格式如下:

BS_:[baudrate:BTR1,BTR2];

实例如下

BS_:

注意:其中BS为关键字,用于定义CAN网络的波特率;[ ]内容表示为可选部分,可以省略(如下图例子中即把该部分省略了);但关键字”BS:”必须存在,省略则会出错。

网络节点

该部分定义了所有参与节点的名称,在这个部分定义的名称在这个部分里必须是唯一的。

格式如下:

 BU_:Nodename1 Nodename2 Nodename3 ……

实例如下:

BU_: DCU IDS

其中BU_为关键字,表示网络节点,格式中的NodeName1、NodeName2表示定义的网络节点名字,由用户自己定义;但需保证节点命名的唯一性。

如示例中的BU_: DCU IDS 表示定义了DCU,IDS这两个网络节点。

报文帧

报文部分定义了所有报文的名称,同时还定义了报文的信息和报文下包含的信号。

格式如下:

BO_ MessageId(10进制数表示) MessageName: MessageSize Transmitter

其中:

  • B0_为关键字,表示报文的意思
  • MessageId为定义的报文ID,是以十进制数表示的,且报文ID是唯一的,如果最高位置为1,表示该报文为扩展帧,例如下方实例中的256就表示该报文ID为256
  • MessageName表示该报文的名字,命名规则与C语言变量相同
  • MessageSize表示该报文的数据域字节数,为无符号整型数据
  • Transmitter表示发送该报文的网络节点,如果该报文没有指定发送节点,那么该值需要设置为“Vector__XXX”

实例如下:

BO_ 256 IDS_DCU_MSG100: 8 IDS

实例表示,定义了一条由IDS节点发送的,数据域长度为8字节,ID为256,名称为IDS_DCU_MSG100的报文。

信号

信号部分定义了该报文包含的所有信号,信号在报文数据场中的位置以及信号的其他信息。

格式如下:

SG_ SignalName : StartBit|SignalSize@ByteOrder ValueType (Factor,Offset) [Min|Max] Unit Receiver

其中:

  • SG_为信号的关键字
  • SignalName表示信号的名称,同一个报文下信号的名称是唯一的,
  • StartBit表示信号的起始位,范围是0~Msg_size*8-1
  • SignalSize表示信号的长度
  • ByteOrder表示信号的字节顺序,0代表Motorola格式,1代表Inter格式;
  • ValueType表示信号的数值类型,+表示无符号数,-表示有符号数;信号数据类型是float或者double的需要额外的类型定义字段
  • Factor表示因子,Offset表示偏移量,这两个值于该信号的原始值与物理值之间的转换, 转换如下:物理值=原始值*因子+偏移量;
  • Min|Max表示该信号的最小值和最大值,即指定了该信号值的范围;这两个值为double类型;
  • Unit表示该信号的单位,为字符串类型;
  • Receiver表示该信号的接收节点;若该信号没有指定的接收节点,则必须设置为” Vector__XXX”。

实例如下:

SG_ IDS_DCU_AutoCtrlEna : 0|1@0+ (1,0) [0|1] "-"  DCU` 

上面的实例表示:定义了一个命名为IDS_DCU_AutoCtrlEna的信号,其起始位是第0位,信号长度1个位;信号是Motorola格式,数值类型为无符号类型数;因子为1,偏移量为0;信号取值范围为0到1;信号单位为字符串”-”(缺省);该信号接收节点为DCU这个节点。

注解

格式如下:

CM_ Object MessageId/NodeName “Comment”

其中:

  • CM_为关键字,表示注解的意思
  • Object表示进行注解的对象类型,可以是节点“BU_”、报文“BO__”、消息“SG___”
  • MessageId/NodeName表示进行注解的对象,若前面的对象类型是信号或者报文,则这里的值应为报文的ID(10进制数表示);若前面的对象类型为节点,则这里的值应为节点的名字;
  • Comment表示进行注解的文本信息

实例如下:

CM_ SG_ 996 HUD_HeightLv “Control hud height level”;

上面的实例表示对ID为996这条报文下的名为HUD_HeightLv的信号进行注解说明,说明的内容是Control hud height level

注意:注释以 “” 包围,注释内部不允许出现“号

属性

格式如下:

BA_DEF_ Object AttributeName ValueType Min Max;
BA_DEF_DEF_ AttributeName DefaultValue;

其中:

  • BA_DEF_为关键字,表示属性定义
  • Object表示属性定义的对象类型,可以是节点“BU_”、消息“SG__”、网络节点“ ”(用空格表示)等
  • AttributeName表示进行定义的属性名称,
  • ValueType表示属性值的类型,可以是整型、字符串、浮点型、枚举类型等;
  • Min/Max表示属性值的上下最值,即指定了取值范围(注意:字符串类型没有这一项)
  • BA_DEF_DEF_为关键字,表示定义属性的初始值
  • DefaultValue表示该属性的初始值

实例如下:

BA_DEF_ SG_ “MyTry” INT 0 11;
BA_DEF_DEF_ “MyTry” 0;

上面的实例表示:定义了一个针对信号类型的属性,属性名为”MyTry”,属性值是整型数据,取值范围在0到11之间,初始值为0。

数值表(值列表)

该部分定义了信号值的意义

格式如下:

VAL_ MessageId SignalName N “DefineN” …… 0 “Define0”;

其中:

  • VAL_为关键字,表示数值表的定义
  • MessageId表示该信号所属的报文ID(十进制数表示)
  • SignalName表示信号名
  • N “DefineN” …… 0 “Define0”表示定义的数值表的内容,也就是该信号的有效值分别用什么符号表示。

实例如下:

VAL_ 996 HUD_OffSt 1 “Active” 0 “Not Active”;

在以上实例中表示对ID为996(0X3E4)的这条报文下的,一个命名为HUD_OffSt的信号,进行如下的数值表定义:用Active代替1,用Not Active代替0.

以上就是对DBC文件内容含义的解析,这部分内容主要是用于CAN通信矩阵转换DBC文件时用到,

我是灰小猿,我们下期见!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。