打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
CAN通信矩阵之DBC文件格式详解
userphoto

2024.06.24 广东

关注

文章目录:

  • 1. DBC文件简介

  • 2. CANdb 工具简介

  • 3. DBC文件格式

    • 3.1 符号字符串

    • 3.2 标头

    • 3.3 Bit Timing 波特率

    • 3.4 Node 节点定义

    • 3.5 Value Table 值表定义

    • 3.6 Message 报文定义

    • 3.7 Signal信号定义

    • 3.8 Comment注释定义

    • 3.9 User Defined Attribute

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;

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
DBC的结构详细分析
dbc文件格式解析
车载测试系列:DBC文件格式解析
【DBC专题】
399bf7c511ba465b9a14c1def3a6c755 (360×480)
苏教版 数学 七下 月考试卷含解析
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服