您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 
 订阅
CAN通信矩阵之DBC文件格式详解
 
作者:园长QwQ
   次浏览      
 2024-6-20
 
编辑推荐:

本文主要介绍了CAN通信矩阵之DBC文件格式相关内容。 希望对你的学习有帮助。
本文来自于微信公众号嵌入式软件开发园,由火龙果软件Linda编辑,推荐。

1. DBC文件简介

之前文章《CAN网络通信矩阵》介绍过,OEM制定CAN通信矩阵一般都是使用excel表格来完成,但是没有统一的格式标准;在实际软件开发测试中,会使用CAN工具来完成CAN通信矩阵数据的收发工作,基于excel文件数据难以实现自动读取不同格式的数据内容,因此行业为CAN通信矩阵规定了一种统一的标准文件DBC文件

DBC文件:全称为Data Base CAN,将CAN网络所需的所有信息都存储在CANdb network file中,CANdb network file的文件扩展名为DBC

如下图所示为一个DBC文件

2. CANdb++工具简介

CANdb ++是一个数据管理程序,可用于创建和修改网络总线系统中的信息以及信息单元之间的相互关系,即建立DBC文件的软件工具

使用CANdb++打开一个DBC文件,打开示例如下图所示:

关于如何使用CANdb++工具去编辑DBC文件,感兴趣的可以查看相关资料进行学习,本文主要讲解DBC文件格式内容,让大家了解DBC文件格式,从而从原理上了解如何将一个CAN矩阵excell表格,通过脚本,自动生成一个DBC文件,为接下来分享自动化脚本工具做铺垫

3. DBC文件格式

通过记事本的方法,打开一个DBC文件,呈现的内容格式如下:

上述使用的DBC文件内容如下,将内容复制到一个.txt文件中,将文件后缀格式转换成.dbc文件,就制作了一个DBC文件,可以通过CANdb++工具打开编辑,也可以加载到CAN工具数据库中,读取相关数据内容

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_: DCDC VCU OBD

VAL_TABLE_ Package_Num_Value 1 "No.2" 0 "N0.1" ;
VAL_TABLE_ OBD_status_description 2 "Shutdown" 1 "Run" 0 "Initialization" ;
VAL_TABLE_ Voltage_state 65535 "Invalid voltage" ;
 
BO_ 530 Test_ID_212: 8 OBD
 SG_ Voltage_6_Value m1 : 55|16@0+ (0.1,0) [0|6553.5"V"  VCU
 SG_ Voltage_5_Value m1 : 39|16@0+ (0.1,0) [0|6553.5"V"  VCU
 SG_ Voltage_4_Value m1 : 23|16@0+ (0.1,0) [0|6553.5"V"  VCU
 SG_ Voltage_3_Value m0 : 55|16@0+ (0.1,0) [0|6553.5"V"  VCU
 SG_ Voltage_2_Value m0 : 39|16@0+ (0.1,0) [0|6553.5"V"  VCU
 SG_ Voltage_1_Value m0 : 23|16@0+ (0.1,0) [0|6553.5"V"  VCU
 SG_ Package_Num M : 7|8@0+ (1,0) [0|1"-"  VCU
 
BO_ 529 Test_ID_211: 8 OBD
 SG_ OBD_status : 39|8@0+ (1,0) [0|255"-"  DCDC,VCU
 SG_ Current_value : 23|16@0- (0.1,0) [-300|300"A"  DCDC,VCU
 SG_ Voltage_value : 7|16@0+ (0.1,0) [0|6553.5"V"  DCDC,VCU
 
CM_ BU_ DCDC "DCDC node in CAN network";
CM_ BU_ VCU "VCU node in can network";
CM_ BU_ OBD "OBD node in CAN network";
CM_ BO_ 530 "The CAN_ID of the test message is 0x212.";
CM_ SG_ 530 Voltage_6_Value "Value of Voltage_6.";
CM_ SG_ 530 Voltage_5_Value "Value of Voltage_5.";
CM_ SG_ 530 Voltage_4_Value "Value of Voltage_4.";
CM_ SG_ 530 Voltage_3_Value "Value of Voltage_3.";
CM_ SG_ 530 Voltage_2_Value "Value of Voltage_2.";
CM_ SG_ 530 Voltage_1_Value "Value of Voltage_1.";
CM_ SG_ 530 Package_Num "Number of Voltage.";
CM_ BO_ 529 "The CAN_ID of the test message is 0x211.";
CM_ SG_ 529 OBD_status "OBD working status signal.";
CM_ SG_ 529 Current_value "OBD current signal.";
CM_ SG_ 529 Voltage_value "OBD voltage signal.";
BA_DEF_ SG_  "ProjectSignalRequirementNb" STRING ;
BA_DEF_ SG_  "GenSigStartValue" HEX 0 0;
BA_DEF_ SG_  "GenericSignalRequirementNb" STRING ;
BA_DEF_  "Manufacturer" STRING ;
BA_DEF_ BO_  "ProjectFrameRequirementNb" STRING ;
BA_DEF_ BO_  "GenMsgSendType" ENUM  "Cyclic","OnEvent","Cyclic_And_OnEvent";
BA_DEF_ BO_  "GenMsgCycleTime" INT 0 65535;
BA_DEF_ BO_  "GenericFrameRequirementNb" STRING ;
BA_DEF_  "BusType" STRING ;
BA_DEF_DEF_  "ProjectSignalRequirementNb" "";
BA_DEF_DEF_  "GenSigStartValue" 0;
BA_DEF_DEF_  "GenericSignalRequirementNb" "";
BA_DEF_DEF_  "Manufacturer" "BMW";
BA_DEF_DEF_  "ProjectFrameRequirementNb" "";
BA_DEF_DEF_  "GenMsgSendType" "Cyclic";
BA_DEF_DEF_  "GenMsgCycleTime" 0;
BA_DEF_DEF_  "GenericFrameRequirementNb" "";
BA_DEF_DEF_  "BusType" "CAN";
BA_ "GenMsgSendType" BO_ 530 2;
BA_ "GenMsgCycleTime" BO_ 530 1000;
BA_ "GenMsgSendType" BO_ 529 1;
BA_ "GenMsgCycleTime" BO_ 529 100;
BA_ "GenSigStartValue" SG_ 530 Voltage_6_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_5_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_4_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_3_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_2_Value 3000;
BA_ "GenSigStartValue" SG_ 530 Voltage_1_Value 3000;
BA_ "GenSigStartValue" SG_ 529 OBD_status 2;
BA_ "GenSigStartValue" SG_ 529 Current_value 0;
BA_ "GenSigStartValue" SG_ 529 Voltage_value 768;
VAL_ 530 Package_Num 1 "No.2" 0 "N0.1" ;
VAL_ 529 OBD_status 2 "Shutdown" 1 "Run" 0 "Initialization" ;
VAL_ 529 Voltage_value 65535 "Invalid voltage" ;

 

接下来我们来逐一拆解这些关键字,了解各部分内容含义

3.1 符号字符串

DBC文件中除了固定格式的关键字外,还有一些用户自定义的符号字符串,像Node,Message,Signal的命名,其要求为:

以字母字符或下划线开头,并由字母,数字和下划线组成

长度最多为128个字符,为了与较旧的工具兼容,长度最好不得超过32个字符

3.2 标头

关键字:VERSION :版本信息,后面加双引号,双引号中的内容可以为空,也可以是满足要求的字符串命名

关键字:NS_ ,全称:new symbols,新符号条目,该部分格式基本是固定,具体的含义可以不用了解

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_

 

3.3 Bit Timing 波特率

关键字:BS_ :Bit Timing定义了网络的波特率和BTR寄存器的设置

该部分已过时,不再使用,后面可以不用添加任何信息,但是关键字 BS_必须出现在DBC文件中,不可省略,例如:

BS_:

 

3.4 Node 节点定义

关键字:BU_

格式:BU_: node_1_name node_2_name…

描述:

CAN网络汇中所有节点的名称在此处定义,且定义的名称必须唯一,节点不是必须包含的,也可以没有任何节点信息

节点与节点之间以空格分隔

节点的命名必须满足 符号字符串 要求

举例:定义包含两个节点:VCU和OBD,其在DBC文件中的描述为

BU_: VCU OBD

 

3.5 Value Table 值表定义

关键字:VAL_TABLE_

格式:

VAL_TABLE_ value_table_name value_table_value “value_description” …0 “value_description”;

 

描述:

一个value table中以空格分隔

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

value_table_value 表示 value table 的值,十进制表示

value_description 表示 value table 的值描述

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

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

多个value table需要换行

Value Table值表内容可以完全不存在

举例:

VAL_TABLE_ OBD_status_description 2 "Shutdown" 1 "Run" 0 "Initialization" ;
VAL_TABLE_ Voltage_state 65535 "Invalid voltage" ;

 

3.6 Message 报文定义

关键字:BO_

格式:

BO_ message_id message_name: message_size transmitter

 

描述:

message_id 表示 CAN_ID,以十进制表示,在DBC文件中,CAN_ID必须唯一

message_name 表示 CAN_ID 的消息名称,在在Message中必须是唯一,命名必须满足符号字符串要求

冒号 : 不能少

message_size 表示 Message 消息的长度,以字节为单位,十进制表示

transmitter 表示该 Message 的发送节点,如果Message没有定义发送节点,则必须在此处输入字符串Vector__XXX

举例

BO_ 530 Test_ID_212: 8 OBD

3.7 Signal信号定义

多个信号包含在一个报文中,信号紧跟在 Message 报文后

关键字:SG_

格式:

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

 

描述:

M(大写)将信号定义为 Multiplexor Signal,一个消息中只有一个信号可以是Multiplexor Signal

m(小写)后跟无符号整数,将信号定义为Multiplexed Signal

省略后,默认将信号定义为普通的Signal,表示没有复用

signal_name 表示 信号的名称,一个Message消息中的信号名称必须唯一,多个Message消息之间可以存在相同名称信号;命名必须满足 符号字符串要求

multiplexer_indicator ,信号复用含义:

冒号:不能少

start_bit 值指定信号在帧的数据域内的位置编号,具体和Intel格式还是Motorola格式和采用的大小端有关

符号|不能少

signal_size 表示信号的长度,以位为单位,十进制表示

符号@不能少

byte_order 表示 字节顺序,如果信号的字节顺序为Intel(小端),则byte_order 为 1;如果字节顺序为Motorola(大端),则byte_order 为 0

value_type 表示值类型,+表示无符号;-表示有符号

(factor,offset) 表示增益和偏移量,这两个值于该信号的原始值与物理值之间的转换;转换如下:物理值 = 原始值* factor + offset

[minimum | maximum] 表示 最小值和最大值,定义了信号的有效物理值的范围

unit 表示 信号的单位,为字符串类型,无单位可以任意字符填充,如"_"

receiver 表示 信号的接收方,信号的接收方可以是多个节点,接收方节点名称必须在关键字BU_中定义;如果信号没有定义接收方,则必须在此处输入字符串Vector__XXX

举例:

BO_ 530 Test_ID_212: 8 OBD
 SG_ Voltage_6_Value m1 : 55|16@0+ (0.1,0) [0|6553.5"V"  VCU
 SG_ Voltage_5_Value m1 : 39|16@0+ (0.1,0) [0|6553.5"V"  VCU
 SG_ Voltage_4_Value m1 : 23|16@0+ (0.1,0) [0|6553.5"V"  VCU
 SG_ Voltage_3_Value m0 : 55|16@0+ (0.1,0) [0|6553.5"V"  VCU
 SG_ Voltage_2_Value m0 : 39|16@0+ (0.1,0) [0|6553.5"V"  VCU
 SG_ Voltage_1_Value m0 : 23|16@0+ (0.1,0) [0|6553.5"V"  VCU
 SG_ Package_Num M : 7|8@0+ (1,0) [0|1"-"  VCU

 

3.8 Comment注释定义

关键字:CM_

1. Node节点的注释举例

格式:

CM_ BU_ node_name “Comment”;

 

举例:

CM_ BU_ VCU "VCU node in can network";
CM_ BU_ OBD "OBD node in CAN network";

 

2 . Message消息的注释举例

格式:

CM_ BO_ message_id “Comment”;

 

举例:

CM_ BO_ 529 "The CAN_ID of the test message is 0x211";

 

3. Signal信号的注释举例

格式:

CM_ SG_ message_id signal_name “Comment”;

 

举例:

CM_ SG_ 529 OBD_status "OBD working status signal";
CM_ SG_ 529 Current_value "OBD current signal";
CM_ SG_ 529 Voltage_value "OBD voltage signal";

 

Comment注释定义是非必要信息,可以省略,一般省略节点注释和Message报文注释,添加信号注释可以

3.9 User Defined Attribute

User defined attributes :用户自定义的属性定义,是扩展DBC文件的对象属性的一种方法;这些附加属性必须使用具有属性默认值的属性定义来定义

对于具有属性定义的值的每个对象,必须定义一个属性值;如果未对对象定义属性值,则该对象的属性值为该属性的默认值

1. Attribute属性定义

关键字:BA_DEF_

关键字:BA_DEF_DEF_

格式:

BA_DEF_ object_type “attribute_name” attribute_value_type ;
BA_DEF_DEF_ attribute_name attribute_value ;

描述:

object_type 表示 BU_,BO_,SG_,EV_等关键字

attribute_name 表示 属性的名称,一般比较固定,参照相应的标准

attribute_value_type 表示 INT、FLOAT,STRING,ENUM,HEX等数据类型

attribute_value 表示 unsigned_integer ,signed_integer,double ,char_string

完成一个Attribute,需以分号;结尾

多个Attribute与信号绑定需要换行

举例:

BA_DEF_ SG_  "ProjectSignalRequirementNb" STRING ;
BA_DEF_ SG_  "GenSigStartValue" HEX 0 0;
BA_DEF_  "Manufacturer" STRING ;
BA_DEF_ BO_  "ProjectFrameRequirementNb" STRING ;
BA_DEF_ BO_  "GenMsgSendType" ENUM  "Cyclic","OnEvent","Cyclic_And_OnEvent";
BA_DEF_ BO_  "GenMsgCycleTime" INT 0 65535;
BA_DEF_ BO_  "GenericFrameRequirementNb" STRING ;
BA_DEF_DEF_  "GenSigStartValue" 0;
BA_DEF_DEF_  "GenMsgSendType" "Cyclic";
BA_DEF_DEF_  "GenMsgCycleTime" 0;

2. Attribute属性值

关键字:BA_

格式:

BA_ attribute_name BU_ node_name attribute_value;
BA_ attribute_name BO_ message_id attribute_value;
BA_ attribute_name SG_ message_id signal_name attribute_value;
BA_ attribute_name EV_ env_var_name attribute_value;

 

举例:

BA_ "GenMsgSendType" BO_ 530 2;
BA_ "GenMsgCycleTime" BO_ 530 1000;
BA_ "GenSigStartValue" SG_ 529 OBD_status 2;

 

 

 
   
次浏览       
相关文章

中央计算的软件定义汽车架构设计
汽车电子控制系统中的软件开发过程
一文读懂汽车芯片-有线通信芯片
OTA在汽车上有哪些难点痛点?
相关文档

汽车设计-汽车的整体结构及动力系统
自动驾驶汽车软件计算框架
SysML在汽车领域的应用实践
电子电气架构-大陆汽车系统架构平台
相关课程

AutoSAR原理与实践
功能安全管理体系(基于ISO26262)
MBSE(基于模型的系统工程)
基于SOA的汽车电子架构设计与开发

最新活动计划
SysML和EA系统设计与建模 7-26[特惠]
Python、数据分析与机器学习 8-23[特惠]
软件架构设计方法、案例与实践 8-23[特惠]
嵌入式软件架构设计 8-22[线上]
Linux内核编程及设备驱动 7-25[北京]
 
 
最新文章
中央计算的软件定义汽车架构设计方案解析
汽车电子控制系统中的软件开发过程
一文读懂汽车芯片-有线通信芯片
OTA在汽车上有哪些难点痛点?
智能汽车车用基础软件的内核和中间件
最新课程
Auto SAR原理与实践
MBSE(基于模型的系统工程)
基于SOA的汽车电子架构设计与开发(域控模式)
人工智能助力汽车行业升级
基于UML和EA进行系统分析设计
SysML和EA进行系统设计建模
更多...   
成功案例
奇瑞商用车 购买建模工具EA完全版
航空发动机研究院 购买建模工具EA完全版
联创汽车 购买建模工具EA完全版
江淮汽车 购买建模工具EA
更多...