一文读懂DBC文件:汽车电子中的关键数据格式

点击订阅专栏不迷路


>>>>>>>>>>返回专栏总目录《AUTOSAR从入门到精通专栏》<<<<<<<<<<

关注文章末尾公众号,回复“资料”领取汽车电子入门资料,回复“加群”加入汽车电子交流群

提到通信,就不得不提到DBC文件,相信从事汽车行业的同学在工作过程中,应该多多少少都接触过该格式的文件。

一、DBC文件简介

DBC文件全称是Database CAN,是CAN的数据库文件,用于定义CAN总线网络中的消息和信号。其起源于90年代中期,当时汽车制造商采用CAN总线作为主要通信网络,因电子设备增加致总线复杂性上升,需标准化方式描述管理数据,DBC文件格式便应运而生,它能记录CAN消息的ID、长度、周期及信号信息,后被各大汽车制造商采用成为行业标准之一。

随着技术发展,DBC文件使用范围已不限于汽车行业,还广泛应用于工业自动化、医疗设备、航空航天等领域,现代的DBC编辑器和阅读器支持更复杂数据结构与高级验证机制,可适用于LIN、FlexRay、MOST等其他车辆网络标准。

在车辆通信系统中,DBC文件至关重要,它是实现车辆内部通信标准化的关键,能让不同制造商的ECU无缝交换信息,还可简化车辆诊断和维护过程,提高售后服务效率与可靠性。

1.1. DBC文件的常见应用场景

  1. ECU开发:为工程师编写ECU软件代码提供消息、信号属性定义,实现数据收发处理。
  2. 汽车诊断:诊断工具依其了解诊断请求、响应消息格式,判断车辆故障。
  3. 测试验证:模拟生成CAN消息测试ECU响应,监控实际通信数据,验证通信准确性。
  4. 网络设计优化:助力规划CAN总线网络,合理分配消息ID、规划信号传输,避免冲突。
  5. 售后维修保养:为维修工具提供协议信息,便于读取故障和配置参数,进行维修。
  6. 软件更新升级:保障新软件与CAN总线通信协议兼容,调整通信逻辑。
  7. 供应商协作:作为通用标准,确保各供应商ECU产品与整车通信系统兼容。

1.2. DBC文件的关键组成部分

  1. 版本信息:记录文件版本号,标识更新情况。
  2. 命名空间:管理元数据,包含描述、注释、属性定义等。
  3. 总线定义:明确CAN总线连接的ECU名称。
  4. 消息定义:含消息ID、名称、长度及发送ECU等信息,它包含了多个信号。。
  5. 信号定义:消息中的数据单元,定义了如何从消息数据中解析出具体的值。每个信号包括名称、位宽、缩放系数、偏移量、范围、单位等信息。
  6. 属性定义和值:前者定义属性类型范围,后者为元素设属性值。
  7. 注释:解释消息、信号等元素含义用途。
  8. 值表:定义信号取值范围及对应含义。

二、DBC文件格式详解

为了更深入地理解DBC文件的结构和内容,我们通过一个简单的示例来展开说明:

VERSION "v00.04.00_00"

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_: ECU2 BMS_UPDATED CCU_UPDATED ECCU_NEW HVCS_MODIFIED HVDI_NEW_VERSION LBM_ENHANCED PEU_F_NEW PEU_R_NEW VCU_UPDATED

BO_ 270 ECU2_04: 8 ECU2
 SG_ Vehicle_SafetyBlitzActive : 40|3@0+ (1,0) [0|7] "" Vector__YYY
 SG_ CGW_04_Checksum : 5|8@0+ (1,0) [0|255] "" PEU_F_NEW,PEU_R_NEW,VCU_UPDATED
 SG_ CGW_04_MessageCounter : 13|4@0+ (1,0) [0|15] "" PEU_F_NEW,PEU_R_NEW,VCU_UPDATED
 SG_ ComfortEnable_SIL : 16|2@0+ (1,0) [0|3] "" LBM_ENHANCED,PEU_F_NEW,PEU_R_NEW

BA_DEF_ "Baudrate" INT 0 1000000;
BA_DEF_ "BusType" STRING;
BA_DEF_ BO_ "CANFD_BRS" ENUM "0","1";
BA_DEF_ "DBName" STRING;
BA_DEF_ BO_ "DiagRequest" ENUM "no","yes";
BA_DEF_ BO_ "DiagResponse" ENUM "no","yes";

BA_DEF_DEF_  "Baudrate" 250000;
BA_DEF_DEF_  "BusType" "CAN_BUS_TYPE_UPDATED";
BA_DEF_DEF_  "CANFD_BRS" "1";

一般来说,DBC文件包含以下8种关键信息:

2.1 版本与新符号

在DBC文件格式中,各个部分都以特定的关键字起始,这些关键字让文件的结构化内容更易于阅读和解析。紧随着版本声明(VERSION)的是NS_段,它是一种灵活的扩展机制。借助该机制,在DBC文件里引入新的关键字时,既能确保与旧版本的兼容性,又不会干扰解析器的基础解析功能。

  • VERSION:用于明确指定DBC文件的版本号。其内容既可以为空,也可由用户根据实际需求自行定义。通过版本号,开发者能够清晰地了解文件的更新情况和适用范围。
  • NS__:即“New Symbol”的缩写,主要用于定义DBC文件中所使用的额外符号或关键字。这些定义能够帮助解释器或相关工具准确识别哪些是预期的关键字,从而更好地理解文件中特定功能或特性的含义。在创建DBC文件时,该段通常会自动生成,多数情况下保持默认设置即可满足需求。

2.2 波特率定义(以BS_ 开头)

DBC文件中波特率的定义格式如下:

BS_:[baudrate:BTR1, BTR2]

其中,“BS_”是固定的关键字,专门用于定义CAN网络的波特率。中括号“[ ]”内的内容为可选部分,可以根据实际情况选择省略,但“BS_:”这一关键字必须存在,否则会导致文件解析出错。

提示:通常情况下,这一行会保持为空。这是因为CAN网络的波特率配置大多是在CAN控制器中进行设置的,而不是在DBC文件中。

2.3 网络节点的定义(以BU_ 开头)

网络节点在DBC文件中的定义格式为:

BU_: Nodename1 Nodename2 Nodename3 ……
组成部分说明
BU_这是用于标识网络节点定义的关键字
Nodename1, Nodename2代表节点的名称,由用户根据实际情况自行定义

提示:在定义节点名称(Nodename)时,务必确保其唯一性,以避免在网络通信中出现混淆和错误。

2.4 消息定义和结构(以BO_ 开头)

消息定义是DBC文件的核心内容,它详细描述了CAN总线上每个消息(Message)的具体信息。从结构上看,消息定义主要包含以下关键要素:

组成部分说明
BO_作为标识报文定义的关键字
MessageId是CAN总线上消息的唯一标识符,是区分不同消息的关键依据
MessageName为了便于理解和维护,每个消息都有一个具有明确含义的名称
MessageSize指定消息的字节数,为无符号整型数据。在CAN总线上,一般消息的字节数为8字节,而CAN FD最大可支持64字节
Transmitter表示发送该报文的网络节点。若该报文未指定发送节点,则需将该值设置为“Vector__XXX”

示例

BO_ 500 CAN_Messages: 8 
 SG_ Speed : 0|16@1+ (1,0) [0|300] "km/h"
 SG_ Engine_RPM : 16|16@1+ (1,0) [0|8000] "rpm"
 SG_ Temp : 32|16@1+ (1,0) [-40|125] "C"

上述示例表示的是由某个节点(未明确指定,按规则若未指定发送节点,实际解析时需特殊处理)发出的消息,其msg_id = 500,报文名称为“CAN_Messages”,数据长度为8字节。该消息包含三个信号:Speed、Engine_RPM和Temp。每个信号前面的数字表示其在消息中所占的起始位和长度,信号注释部分则给出了信号的取值范围和单位。

2.5 信号的定义和属性(以SG_ 开头)

信号定义位于消息定义内部,用于详细描述消息中每个信号的具体信息。信号的关键属性如下:

组成部分说明
SG_作为标识信号定义的关键字
SignalName用于标识信号的名称,在软件中通过该名称引用该信号
SigTypeDefinition为可选项,存在3种格式:
空:代表普通信号
M:表示多路选择器信号
m50:表示被多路选择器选择的信号,其中50表示当M定义的信号值等于50时,该报文使用此通路
StartBit表示信号在消息中的起始位
SignalSize即信号的长度
ByteOrder用于表示信号的字节顺序:0代表Motorola格式(大端序),1代表Intel格式(小端序)
ValueType表示该信号的数值类型:“+”表示无符号数,“-”表示有符号数
Factor, Offset分别表示因子和偏移量,用于实现信号原始值与物理值之间的转换,转换公式为:物理值 = 原始值 * 因子 + 偏移量
MinMax
Unit表示信号的测量单位,如常见的度、米、帕斯卡等
Receiver表示接收该信号的网络节点。若该信号未指定接收节点,则必须设置为“Vector__XXX”

示例

SG_ CGW_03_CRC : 7|8@0+ (1,0) [0|255] "" PEU_F,PEU_R,VCU

该示例表示定义了一个名为“CGW_03_CRC”的普通信号,其起始位是第7位,信号长度为8bit;信号采用Motorola格式(大端序),数值类型为无符号数;因子为1,偏移量为0;信号的取值范围是0到255;该信号没有物理单位;接收该信号的节点为PEU_F、PEU_R和VCU这三个节点。

大端和小端的解释
在DBC文件的信号定义中,“0”代表Motorola(Big Endian,大端序)格式,“1”代表Intel(Little Endian,小端序)格式。这两种格式主要用于描述多字节数据中字节的排列顺序:

  • Motorola格式(大端序):从人类常规的阅读习惯(从左到右)来看,数据的表示方式与我们日常书写习惯一致。例如,对于十六进制数0x1234,在内存中它会按照0x12 0x34的顺序存储。这种格式在网络协议以及汽车制造商领域中较为常用。
  • Intel格式(小端序):在这种格式下,十六进制数0x1234在内存中的存储顺序变为0x34 0x12。大多数现代的PC架构,如x86和x86 - 64架构,都采用小端序格式。

2.6 注释部分(以CM_ 开头,为可选部分)

为了增强DBC文件的可读性,我们可以为消息、信号等元素添加注释信息。注释的格式如下:

CM_ BO 1234 "This is a message for ECU1 communication";
CM_ SG 1234 SignalName "This signal represents the speed of the vehicle";
组成部分说明
CM_表示注释内容的起始关键字
BO 或 SG用于指明注释的对象是消息(BO)还是信号(SG)
1234若注释对象是消息,则为该消息的ID;若注释对象是信号,则为该信号所属消息的ID
“…”具体的注释内容,用于对消息或信号进行详细说明

2.7 特征属性部分

2.7.1 BA_DEF 特征名称类型定义

其定义格式为:BA_DEF_ Object AttributeName ValueType Min Max;

组成部分说明
BA_DEF_作为标识特征名称类型定义的关键字
Object表示特征类型,可以是BU_(用于节点特征定义)、BO_(用于报文特征定义)、SG_(用于信号特征定义)、空格(用于项目特征定义)
AttributeName代表特征的名称,需采用C语言变量的格式
ValueType表示特征值的类型,仅限于十进制、十六进制、浮点数、枚举、字符这5种类型
Min Max对于数值类型,这里表示取值范围;对于枚举类型,这里是具体的枚举值;对于字符类型,此处为空

示例

BA_DEF_ BO_ "CANFD_BRS" ENUM "0","1";

上述示例表示“CANFD_BRS”是一个枚举类型的变量,其取值只能为0和1。

2.7.2 BA_DEF_DEF_ 特征默认值定义

定义格式为:BA_DEF_DEF_ AttributeName DefaultValue;

组成部分说明
BA_DEF_DEF_用于标识特征默认值定义的关键字
AttributeName代表特征的名称,同样采用C语言变量的格式
projectValue表示该特征的默认设置值

示例

BA_DEF_DEF_  "Baudrate" 500000;

此示例表明波特率(Baudrate)的默认值被设置为500000。

2.7.3 BA_ 特征项目设置值定义

定义格式为:BA_ AttributeName Object MessageId/NodeName projectValue;

组成部分说明
BA_作为标识特征项目设置值定义的关键字
AttributeName代表属性的名称,需遵循C语言变量的格式
Object表示特征类型,可以是BU_(用于节点特征定义)、BO_(用于报文特征定义)、SG_(用于信号特征定义)、空格(用于项目特征定义)
MessageId/NodeName若前面的对象类型是信号或者报文,则此处应为报文的ID(以十进制数表示);若前面的对象类型为节点,则此处应为节点的名字
projectValue表示该属性的具体设置值

示例

BA_ "ILUsed" BU_ BGW 1;

该示例表示对于特征名称为“ILUsed”的属性,其对应的网络节点名为“BGW”,该特征的设置值被设定为1。

2.8 数值表部分

数值表的定义格式为:VAL_ MessageId SignalName N “DefineN” …… 0 “Define0”;

组成部分说明
VAL_作为标识数值表定义的关键字
MessageId表示该信号所属的报文ID,以十进制数表示
SignalName即信号的名称
N “DefineN” …… 0 “Define0”用于定义数值表的具体内容,也就是该信号的各个有效值分别对应的符号表示

示例

VAL_ 268 ComfEna_ASIL 3 "Invalid" 2 "Reserved" 1 "Comfort enabled" 0 "Comfort not enabled" ;

上述示例表示对msg_id = 268的报文中名为“ComfEna_ASIL”的信号进行数值表定义:将数值3用“Invalid”表示,数值2用“Reserved”表示,数值1用“Comfort enabled”表示,数值0用“Comfort not enabled”表示。

三、总结

DBC文件作为定义汽车内部通信的标准,确保了不同供应商和开发团队可以高效地协作,标准化了汽车行业的通信协议,其重要性不言而喻。正确地使用和理解DBC文件对于确保汽车系统的顺畅通信和高效开发至关重要。正确理解和应用DBC文件对于汽车系统集成商和ECU开发人员而言,也是一项重要的技能!!!

扫码关注公众号,回复“资料”领取汽车电子入门资料,回复“加群”加入汽车电子交流群

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值