0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DBC文件结构深度解析

汽车ECU开发 来源:csdn 2024-04-30 12:50 次阅读
1. DBC文件的构成

Bit_timing 波特率定义,必须部分,但通常为空nodes 定义网络节点messages 定义消息和信号

2. 关键字

VERSION 版本

VERSION:

NS_ 为new symbol的缩写,后面紧跟着一堆ns,一般是创建dbc时自动生成,不用太关心

NS_:

BS_ 定义CAN网络的波特率

BS_: [baudrate:BTR1,BTR2]

BU_ 网络节点

BU_: Nodename1 Nodename2 Nodename3 ……

BO_ 报文

BO_: message_id message_name : message_size transmitter {signal}

SG_ 信号

SG_: signal_name multiplexer_indicator : start_bit | signal_size @ byte_order value_type ( factor , offset ) [ minimum | maximum ] unit receiver {, receiver}

CM_ 对报文/信号的注解

CM_: Object MessageId/NodeName “Comment”

BA_DEF_ 对报文/信号/节点等的属性定义

BA_DEF: _ Object AttributeName ValueType Min Max;

BA_DEF_ DEF_ 对报文/信号/节点等的属性初始值定义

BA_DEF_DEF_: AttributeName DefaultValue;

BA_ 对报文/信号/节点等的属性设置值定义

BA_: AttributeName projectValue

VAL_ 数值表定义

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

VAL_TABLE_ 全局信号值表,用来对信号值解码

VAL_TABLE_: name value “value_description” …0 “value_description”

EV_ 环境变量

EV_:

3.本文出现的符号

‘ | ’ ——可选择

‘ ; ’——结束定义

[。..]——内容可选(0或1次)

{。..}——内容重复(0或多次)

(。..)——注释

unsigned_integer:无符号整型

signed_integer:有符号整型

double:双精度小数

char_string:字符串

C_identifier:C语言变量命名

4. 波特率的结构(BS_)

BS_: [baudrate:BTR1,BTR2];

其中BS_为关键字,用于定义CAN网络的波特率;[ ]内容表示为可选部分,可以省略(如下图例子中即把该部分省略了);但关键字”BS_:”必须存在,省略则会出错。《DBC File Format Document》规范中明确提醒,必须保留BS_: 标签

5. 网络节点的结构(BU_)

BU_: Nodename1 Nodename2 Nodename3 ……

BU_: GW ESC SAS ACU FRS FVCM

解释:

BU_ 为关键字,表示网络节点

Nodename1、Nodename2 网络节点名字,由用户自己定义;

注意事项:需要保证节点命名的唯一性

如示例中的BU_: VCU_Vehicle_Control_Unit MotorCtrol SCU PC Vector__XXX :

表示定义了:

VCU_Vehicle_Control_Unit

MotorCtrol

SCU

PC

Vector__XXX这五个网络节点

其中:标识为Vector__XXX时表示未指明具体节点

6. 消息的结构(BO_)

BO_ message_id message_name : message_size transmitter {signal}

BO_ 306YRS2: 8 FVCM

解释:

BO_ 为关键字,表示报文;

MessageId 报文ID,是以10进制数表示的;

(如例子中的996,代表报文ID为0x3E4,是longlong类型,也就是CAN ID的值;)

MessageName 报文的名字,命名规则和C语言变量相同;

MessageSize 报文数据域字节数,为无符号整型数据,CAN 2.0为最大8字节,CAN FD 最大64字节;

Transmitter 该报文的网络节点;如果该报文没有指定发送节点,则该值需设置为” Vector__XXX”。

如示例中的BO_ 201959408 MSG1: 8 VCU_Vehicle_Control_Unit

报文ID:201959408(0xC09A7F0)

报文名:MSG1

分隔符 : “:”

报文长度:8字节

报文发送者:VCU_Vehicle_Control_Unit

(由VCU_Vehicle_Control_Unit这个节点发出的,数据域长度为8字节,ID为201959408(0xC09A7F0),名字命名为MSG1的报文)

7. 信号的结构(SG_)

SG_ signal_namemultiplexer_indicator : start_bit | signal_size @ byte_order value_type ( factor , offset ) [ minimum | maximum ] unit receiver {, receiver}

SG_ YRS2_Checksum : 7|8@0+ (1,0) [0|255] “bit” FRS

SG_ YRS_LongitSensorState : 15|2@0+ (1,0) [0|3] “bit” FRS

SG_ YRS_LongitAcce : 23|16@0+ (0.001,-2) [-2|2] “g” FRS

SG_ YRS_AliveCounter : 59|4@0+ (1,0) [0|15] “bit” FRS

解释:

SG_ 为关键字,表示信号;

SignalName(SigTypeDefinition) : 表示该信号的名字 和 多路选择信号的定义;

SigTypeDefinition是可选项,有3种格式:

a)空,表示普通信号。

b)M,表示多路选择器信号。

c)m50,表示被多路选择器选择的信号,50,表示当M定义的信号的值等于50的时候,该报文使用此通路。

StartBit、 SignalSize 表示该信号起始位、信号长度;

ByteOrder 表示信号的字节顺序:0代表Motorola格式,1代表Inter格式;

ValueType 表示该信号的数值类型:+表示无符号数,-表示有符号数;

Factor,Offset 表示因子,偏移量;这两个值用于信号的原始值与物理值之间的转换。

转换如下:物理值=原始值*因子+偏移量;

Min|Max 表示该信号的最小值和最大值,即指定了该信号值的范围;这两个值为double类型;

Unit 表示该信号的物理单位,为字符串类型;

Receiver 表示该信号的接收节点;若该信号没有指定的接收节点,则必须设置为” Vector__XXX”。

如示下面的例中:

第一个信号 :

SG_ S_Check : 45|10@0+ (0.00625,0) [0|160] “M” EL3160_60,ESC

表示定义了一个命名为 S_Check的普通信号,其起始位是第45位,信号长度10 bit;

信号是Motorola格式,数值类型为无符号类型数;因子为0.00625,偏移量为0;信号取值范围为0到160;

信号物理单位为字符串”M”;该信号接收节点为EL3160_60,ESC这两个节点。

第二个信号:

SG_ Send_Mux M : 7|8@0+ (1,0) [0|0] “” EL3160_60,ESC

表示定义了一个命名为 Send_Mux的多路选择器信号,其起始位是第7位,信号长度8 bit;

信号是Motorola格式,数值类型为无符号类型数;因子为1,偏移量为0;信号取值范围为0到0;

信号物理单位为字符串””;该信号接收节点为EL3160_60,ESC这两个节点。

该信号做选择通道使用。

第三个信号:

SG_ S_Level_A_Voltage m50 : 15|16@0+ (0.00625,0) [0|160] “V” EL3160_60,ESC

表示定义了一个命名为S_Level_A_Voltage的被选择信号,其起始位是第15位,信号长度16 bit;

信号是Motorola格式,数值类型为无符号类型数;因子为0.00625,偏移量为0;信号取值范围为0到160;

信号物理单位为字符串”V”;该信号接收节点为EL3160_60,ESC这两个节点。

其中byte_order分为motorola和intel两种格式,motorola对应0,intel对应1。这两种格式是区别如下:

如果在同一个字节内,则没有区别,如果跨越多个字节则有区别,motorola格式是高位(msb)在低字节(说明:CAN消息的字节排列Byte0 Byte1 … Byte7,Byte0是低字节),intel格式是高位(msb)在高字节。

Intel格式

第一字节的bit0对应的是lsb(第一行的红色箭头),第二字节的bit14对应的是msb(第二行的红色箭头)。起始bit是lsb对应的bit0。

Motorola格式

第二字节的bit9对应的是lsb(第二行的红色箭头),第一字节的bit7对应的是msb(第一行的红色箭头)。起始bit是lsb对应的bit9。当然也可以修改起始位置,例如将起始位置改为bit8,如下图:

55~58行定义的是信号的选项值,其结构如下:‘VAL_’ message_id signal_name { value_description } ‘;’

注意,行结尾有一个分号。其中value_description的定义如下:value_description = double char_string ;

以上是需要解析的部分,注意字符部分都限制在32字节内,不太方便。

8. 注解的结构(CM_)

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(0x3E4)这条报文下的名为”HUD_HeightLv ”的信号进行注解说明,说明的内容为“Control hud height level”。

又如 CM_ BU_ HUD “Head Up Display“;表示对HUD这个节点进行注解说明,说明的内容为” Head Up Display “。

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

9. 特征(属性)的结构(BA_DEF_ BA_DEF_DEF_ BA_)

和特征相关的Tag一共有三条:

9.1 报文/信号/节点等的属性定义(BA_DEF_)

特征名称类型定义。格式如下:

BA_DEF_ ObjectAttributeNameValueTypeMin Max;

解释:

BA_DEF 标签

Object 特征类型,可以是BU_(节点特征定义)、BO_(报文特征定义)、SG_(信号特征定义)、空格(项目特征定义);

AttributeName 特征名称(C语言变量格式)

ValueType 特征值类型(只能是十进制、十六进制、浮点数、枚举、字符5种类型)

Min Max 数值类型这里出现范围,枚举类型这里是枚举值,字符类型,这里是空。

9.2 报文/信号/节点等的属性初始值定义(BA_DEF_DEF_) 特征默认值定义。格式如下:

BA_DEF_DEF_ AttributeNameDefaultValue;

解释:

BA_DEF_DEF_ 标签

AttributeName 特征名称(C语言变量格式)

DefaultValue 该特征的默认设置值

9.3 报文/信号/节点等的属性设置值定义(BA_)特征项目设置值定义,格式如下:

BA_ AttributeName projectValue;

解释:

BA_ 标签

AttributeName 特征名称(C语言变量格式)

projectValue 该特征的设置值

举例:

BA_DEF_ BO_ “GenMsgCycleTime” INT 0 65535;

BA_DEF_DEF_ “GenMsgCycleTime” 2200;

BA_ “GenMsgCycleTime” BO_ 400 100;

表示对定义了一个针对消息类型的特征,特征名为”GenMsgCycleTime”,特征值是整型数据,取值范围在0到65535之间;

默认值为2200;

项目设置值 CAN ID ==400的消息的该特征值设置为100

在DBCView4.3里面是把BA_DEF_ 和 BA_DEF_DEF_合并在一起了,用了特征视图来管理,如下图。

然后把 特征项目设置值定义 BA_ AttributeName projectValue; 和元素合并在一起了。

10. 数值表的结构(VAL_)格式如下:

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

解释:

VAL_ 为关键字,表示数值表定义;

MessageId 表示该信号所属的报文ID(10进制数表示);

SignalName 表示信号名;

N “DefineN” …… 0 “Define0” 表示定义的数值表内容,即该信号的有效值分别用什么符号表示 。

如示例中的 VAL_ 996 HUD_OffSt 1 “Active” 0 “Not Active”;

表示对ID为996(0x3E4)的这条报文下的,一个命名为”HUD_OffSt”的信号,进行其数值表的定义;

用”Active”取代1;用”Not Active”取代0。只有自然数类型的信号才可以使用数值表表示。

信号的值的表示方法有两种:

1) 物理值=原始值*因子+偏移量;(常规表示,前面有提到)

2) 数字表,用来表示逻辑值;

11. 全局信号值表(用来对信号值解码)的结构(VAL_TABLE_) 格式如下:

VAL_TABLE_ value_table_namevalue_table_value “value_description” … 0 “value_description”;

描述:

a)一个value table中以“空格”分隔;

b)value_table_name表示value table的名称, 命名必须满足“符号字符串”要求;

c) value_table_value表示value table的值,十进制表示;

d) value_description表示value table的值描述;

e)当一个value table存在多个值描述时,以(value_table_value “value_description”)的形式接着追加,value table内的两个值描述以“空格”分隔;

f)完成一个value table定义,需以“分号;”结尾;

g)多个value table需要换行。

VAL_TABLE_ ESC_QDCFRS 1 ”ERROR“ 0 ”NO_ERROR“ ;

VAL_TABLE_ ESC_BrakeTempTooHigh 1 ”ABNORMAL“ 0 ”NORMAL“ ;

VAL_TABLE_ ESC_DTC_Active 1 ”ACTIVE“ 0 ”INACTIVE“ ;

VAL_TABLE_ ESC_Vehiclestandstill 3 ”RESERVED“ 2 ”INVALID“ 1 ”STANDSTILL“ 0 ”NOT_STANDSTILL“ ;

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • DBC
    DBC
    +关注

    关注

    2

    文章

    54

    浏览量

    7741

原文标题:DBC的结构详细分析

文章出处:【微信号:eng2mot,微信公众号:汽车ECU开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    关于CANdb++ Editor编写DBC文件时Factor的设置问题求解

    求助CANdb++ Editor编写DBC文件时 Factor设置的问题: 编辑DBC文件时,当我设置Signal的Factor时,如果设置了0.0001,
    发表于 04-12 07:03

    labview CAN DBC加载解析程序

    labview CAN DBC加载解析程序
    发表于 08-18 11:42

    labview怎么解析dbc文件

    我用的是研华的can卡,用labview解析dbc文件
    发表于 05-12 10:07

    AUTOSAR架构深度解析 精选资料推荐

    AUTOSAR架构深度解析本文转载于:AUTOSAR架构深度解析目录AUTOSAR架构深度解析A
    发表于 07-28 07:40

    labview加载DBC文件错误

    本帖最后由 溜溜球18 于 2021-12-16 16:05 编辑 labview解析DBC,调用的周立功ZDBC.DLL,加载DBC格式文件总是失败,是什么原因
    发表于 12-09 17:23

    CAN报文解析需要知道DBC的哪些信息排序方式

    CAN总线中报文数据读取方法motorola编码格式的CAN报文解析需要知道DBC的哪些信息排序方式读取方式发送方式注motorola编码格式的CAN报文解析知道CAN报文的DBC,即
    发表于 01-12 07:28

    Android系统文件结构解析

    Android系统文件结构解析
    发表于 03-19 11:23 0次下载

    配置DBC变量文件资料免费下载

    本文档的主要内容详细介绍的是配置DBC变量文件资料免费下载
    发表于 07-03 08:00 18次下载
    配置<b class='flag-5'>DBC</b>变量<b class='flag-5'>文件</b>资料免费下载

    使用candb++制作dbc文件笔记

    今天又来分享一篇工具使用的文章,candb++的工具,也是Vector的,用来制作、编辑或者是查看dbc文件,今天主要来分享dbc文件的创建。
    的头像 发表于 12-26 14:04 4350次阅读

    【产品应用】如何通过IoT云平台对CAN数据进行实时DBC解析

    DBC文件是用来描述CAN总线通讯信息数据的一种文件,其中包含了CAN总线中协议数据及其所代表的具体意义。在汽车路试中,对于车辆错误故障信息,需对CAN报文数据进行实时DBC
    的头像 发表于 03-20 23:10 555次阅读

    labview读取解析CAN DBC文件

    labview读取解析can总线dbc文件
    发表于 07-03 09:18 104次下载

    CAN DBC文件解析

    CAN DBC 指的是CAN 报文的数据库。简单地说,通过CAN 总线通信的数据类型可以用DBC 文件来读取和理解。DBC 是一种基于ASCII 的翻译,是在20世纪90年代发展起来的
    的头像 发表于 08-14 11:35 3463次阅读
    CAN <b class='flag-5'>DBC</b><b class='flag-5'>文件</b><b class='flag-5'>解析</b>

    用Labview开发的DBC文件转Excel表格文件的VI

    使用Labview软件开发的DBC文件转Excel表格文件的VI
    发表于 10-25 18:23 34次下载

    TSMaster如何同时记录标定变量和DBC信号至BLF文件

    客户在使用TSMaster软件标定功能时,有如下使用场景:将DBC文件中的信号与A2L文件中的标定变量同时记录在一个记录文件。针对此应用场景,TSMaster软件提供了一种方法来满足此
    的头像 发表于 03-25 08:20 611次阅读
    TSMaster如何同时记录标定变量和<b class='flag-5'>DBC</b>信号至BLF<b class='flag-5'>文件</b>

    CAN底层报文抓到了,却不知怎么解析?以及如何看到信号运行状态?

    本文介绍CAN总线中DBC文件的重要性及ZCANPRO如何实现DBC解析、数据发送和实时曲线分析,帮助您更有效地分析和利用CAN总线数据。在CAN总线的实际应用中,我们经常需要
    的头像 发表于 09-30 08:05 756次阅读
    CAN底层报文抓到了,却不知怎么<b class='flag-5'>解析</b>?以及如何看到信号运行状态?