单片机学习小组
直播中

李玉鑫

7年用户 1253经验值
私信 关注

DBC编辑的知识点汇总,绝对实用

DBC编辑的知识点汇总,绝对实用

回帖(1)

李婷

2022-2-9 10:21:57
1. DBC
DBC是Data Base CAN的缩写。DBC文件是用来描述CAN网络通信信号的一种格式文件。ECU之间的通信、信息的交互以及相互之间的关系,都是通过DBC文件来管理的,也就是ECU之间的通信都要以DBC文件中的内容为标准。DBC文件中定义了总线系统中各个ECU所需要发送和接收的报文,以及每个报文所有Bit的具体定义,同时还定义了个报文/信号的通信属性,例如:通信周期、通信方式、取值范围等。我们可以通过DBC文件来监测与分析CAN网络上的报文数据,也可以通过DBC文件来模拟某个CAN节点(ECU节点)。
2. CANdb++ Editor
Vector公司的CANoe软件提供了CANdb++Editor工具,用来新建或编辑一个DBC文件。CANdb++Editor的编辑界面如下:

CANdb++Editor中新建或编辑DBC文件,大家可以参考书籍《CANoe开发从入门到精通》或者在互联网上查找相关内容,再有就是查看CANdb++Editor的帮助文档(Help-> CANdb++ Help)。 本文中主要介绍用文本形式来编辑DBC文件。
3. 文本编辑DBC
DBC文件是可以用文本工具打开的,例如Notepad++。掌握了DBC文件的标准格式后,我们就可以通过文本的形式来编辑DBC文件了。dbc文件中主要包含了如下的信息:
 版本与新符号
 波特率定义
 网络节点的定义
 报文的定义
 信号的定义
 注解部分
 属性定义部分
 数值表部分
其中波特率定义、网络节点的定义是必须要有的,缺少这两项的dbc文件是不能用CANdb++ Editor软件打开的。
4. DBC 标准格式说明
4.1 版本与新符号
VERSION “版本号”
VERSION是关键字。
例:VERSION“V1.0.0”
代表DBC文件的版本号是V1.0.0,“版本号”内容可以为空。
NS_ :新符号
NS_ 是关键字,。
例:如下图

新符号就是定义在DBC中要使用的关键字,上述新符号的信息在我们用CANdb++Editor创建dbc文件时就已经自动生成了,默认即可。
4.2 波特率定义
BS_:[baudrate:BTR1,BTR2];
BS_是关键字,用于定义CAN网络的波特率。
[ ]内容表示为可选部分,可以省略。但关键字”BS_:”必须存在,省略则会出错。
4.3 网络节点的定义
BU_:Nodename1 Nodename2 Nodename3 ……
BU_ 是关键字,用于定义网络节点。
Nodename1、Nodename2表示定义的网络节点名字,由用户自己定义;但需保证节点命名的唯一性。
例:BU_: IVI GW
代表定义网络节点IVI、GW。
4.4 报文的定义
BO_ MessageId(10进制数表示) MessageName: MessageSize Transmitter
BO_ 是关键字,用于定义报文。
MessageId为定义的报文ID,是以10进制数表示的;
MessageName表示该报文的名字,命名规则和C语言变量相同;
MessageSize表示该报文数据域字节数,为无符号整型数据;
Transmitter表示发送该报文的网络节点;如果该报文没有指定发送节点,则该值需设置为” Vector__XXX”。
例:BO_ 555 ATC_11: 8 GW
555代表报文ID是0x22B。
ATC_11代表报文名是ATC_11。
8代表报文数据长度是8字节。
GW代表发送节点是GW。
4.5 信号的定义
SG_ SignalName : StartBit|SignalSize@ByteOrder ValueType (Factor,Offset) [Min|Max] Unit Receiver
SG_ 是关键字,用于定义信号。
SignalName、 StartBit、 SignalSize分别表示该信号的名字、起始位、信号长度;
ByteOrder表示信号的字节顺序:0代表Motorola格式,1代表Inter格式;
ValueType 表示该信号的数值类型:+表示无符号数,-表示有符号数;
Factor表示因子,Offset表示偏移量;这两个值于该信号的原始值与物理值之间的转换。转换公式:物理值=原始值*因子+偏移量;
Min|Max表示该信号的最小值和最大值,即指定了该信号值的范围;这两个值为double类型;
Unit表示该信号的单位,为字符串类型;
Receiver表示该信号的接收节点;若该信号没有指定的接收节点,则必须设置为” Vector__XXX”。
例:SG_ IVI_Time_Day : 40|7@1+ (1,0) [1|128] “day” IC
IVI_Time_Day代表信号名IVI_Time_Day。
40代表起始位40。
7代表信号长度7。
@1代表编码格式Intel格式(@0是Motorola格式)。
+代表信号数据是无符号数据(1代表信号数据是有符号数据)。
(1,0)代表factor值是1,offset值是0。
[1|128]代表最小值是1,最大值是128。
“day"代表信号的单位是"day”。
IC代表接收节点是IC。
4.6 注解部分
CM_ Object MessageId/NodeName “Comment”
CM_ 是关键字,表示注释信息。
Object表示进行注解的对象类型,可以是节点“BU_”、报文“BO_”、消息”SG_”。
MessageId/NodeName 表示进行注解的对象,若前面的对象类型是信号或者报文,则这里的值应为报文的ID(10进制数表示),若前面的对象类型为节点,则这里的值应为节点的名字。
Comment表示进行注解的文本信息;
例:CM_ SG_ 900 IVI_Time_Day “Indicates the day sent by IVI.”;
900代表信号所在的报文ID是900(0x384)。
IVI_Time_代表信号名字是IVI_Time_Day。
“Indicates the day sent by IVI.“代表注释内容是"Indicates the day sent by IVI.”。
4.7 属性定义部分
BA_DEF_ Object AttributeName ValueType Min Max;
BA_DEF_DEF_ AttributeName DefaultValue;
BA_DEF_为关键字,表示属性定义。
Object表示属性定义的对象类型,可以是节点“BU_”、报文“BO_”、信号”SG_”、网络节点” ”(用空格表示)等。
AttributeName表示进行定义的属性名字。
ValueType表示属性值的类型,可以是整型、字符串、浮点型、枚举类型等。
Min/Max表示属性值的上下最值,即指定了取值范围(字符串类型没有此项)。
BA_DEF_DEF_为关键字,表示定义属性的初始值;
DefaultValue表示该属性的初始值。
例:BA_DEF_ SG_ “Sv_AutoRestoreInactiveValue” ENUM “No”,“Yes”;
BA_DEF_DEF_ “Sv_AutoRestoreInactiveValue” “No”;
“Sv_AutoRestoreInactiveValue"代表一个信号类型的属性"Sv_AutoRestoreInactiveValue”,属性的类型是枚举类型,属性的取值范围是"No”,“Yes”。
属性"Sv_AutoRestoreInactiveValue"的初期值是"No"。
属性"Sv_AutoRestoreInactiveValue"定义好之后,在CANdb++Editor的信号属性中会显示自定义的属性"Sv_AutoRestoreInactiveValue"。如下:

BA_ AttributeName Object AttributeValue;
BA_ 是关键字,表示属性的设置。
例1:BA_ “GenMsgCycleTime” BO_ 555 100;
代表ID为555(0x22B)的报文的循环周期时100ms,属性GenMsgCycleTime代表报文的循环周期。
例2:BA_ “SystemSignalLongSymbol” SG_ 741 FDM_AutoChangeStatus_RearSunShad “FDM_AutoChangeStatus_RearSunShade”;
代表ID为741(0x2E5)的报文中的信号“FDM_AutoChangeStatus_RearSunShad“的相关属性设定。用"FDM_AutoChangeStatus_RearSunShade"来代替FDM_AutoChangeStatus_RearSunShad。
注1:属性“GenMsgCycleTime”和"SystemSignalLongSymbol"是CANdb++Editor自带得标准属性,类似的标准属性的含义参考CANdb++Editor得帮助文档。
注2:用到的属性都需要通过BA_DEF_和BA_DEF_DEF_定义过。
4.8 数值表部分
VAL_ MessageId SignalName N “DefineN” …… 0 “Define0”;
VAL_为关键字,表示数值表定义;
MessageId表示该信号所属的报文ID(10进制数表示);
SignalName表示信号名;
N “DefineN” …… 0 “Define0”表示定义的数值表内容,即该信号的有效值分别用什么符号表示 。
例:VAL_ 272 WorkingSt_AEB 0 “Off” 1 “Standby” 2 “Active” ;
代表ID为272 (0x110)的报文中的” WorkingSt_AEB”的信号,进行其数值表的定义;用” Off”代替0;用” Standby”代替1,用"Active"代替2。
数值表可以在IG 模拟发送信号时使用,或者在Graphics界面中查看信号值时使用。如下:

举报

更多回帖

发帖
×
20
完善资料,
赚取积分