一般的 DBC 文件中包含了如下的8种信息:
1、版本与新符号
2、波特率定义
3、网络节点的定义
4、报文帧的定义
5、信号的定义
6、注解部分
7、特征部分
8、数值表部分
VERSOIN "" //版本信息,为空,也可以自定义
NS_: //NS为 new symbol 的缩写,后面紧跟着一堆ns,一般是创建dbc时自动生成,不用太关心
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_:[baudrate:BTR1,BTR2];
//波特率设置,BS_为关键字,其中[]中为可选部分
BU_:Nodename1 Nodename2 Nodename3 ……
//网络节点定义,其中Nodename为网络节点名字,用户自定义,名字需要唯一性
BO_ MessageId MessageName: MessageSize Transmitter
//报文帧定义,其中
MessageId 为10进制表示的报文ID,类型为longlogn型,即CAN ID
MessageName 报文的名字,与C语言命令规范相同
MessageSize 报文数据段字节数
Transmitter 该报文的网络节点,如果该报文没有指定发送节点,则该值需设置为”Vector__XXX”
SG_ SignalName (SigTypeDefinition) : StartBit|SignalSize@ByteOrder ValueType (Factor,Offset) [Min|Max] Unit Receiver
//信号的定义,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,ESC
CM_ Object MessageId/NodeName “Comment”
//注解信息,其它字段含义:
Object 表示注解的对象类型,可以是节点“BU_”、报文“BO_”、消息”SG_”
MessageId/NodeName 表示进行注解的对象,若前面的对象类型是信号或者报文,则这里的值应为报文的ID(10进制数表示);若前面的对象类型为节点,则这里的值应为节点的名字
Comment 表示进行注解的文本信息
与特征(属性)的Tag一共有三条,如下:
BA_DEF_ Object AttributeName ValueType Min Max;
//1. 特征名称类型定义,其它字段含义:
Object 特征类型,可以是BU_(节点特征定义)、BO_(报文特征定义)、SG_(信号特征定义)、空格(项目特征定义)
AttributeName 特征名称(C语言变量格式)
ValueType 特征值类型(只能是十进制、十六进制、浮点数、枚举、字符5种类型)
Min Max 数值类型这里出现范围,枚举类型这里是枚举值,字符类型,这里是空
BA_DEF_DEF_ AttributeName DefaultValue;
//2. 特征默认值定义,其它字段含义:
AttributeName 特征名称
DefaultValue 该特征的默认设置值
BA_ AttributeName projectValue;
//3. 特征项目设置值定义,其它字段含义如下:
AttributeName 特征名称
projectValue 该特征的设置值
VAL_ MessageId SignalName N “DefineN” …… 0 “Define0”;
//数值表部分,其它字段含义如下:
MessageId 表示该信号所属的报文ID(10进制数表示)
SignalName 表示信号名
N “DefineN” …… 0 “Define0” 表示定义的数值表内容,即该信号的有效值分别用什么符号表示
通信矩阵的填写是根据DBC文件中 SG_ 所定义的信号规则来填充的。
填格子的方式分为Intel和Motorola两种:Intel格式
也即小端,MSB存放在高字节单元,反映到矩阵图中就是以起始位为原点,自上而下填充。
文章来源:https://www.toymoban.com/news/detail-580431.html
Motorola格式
也即大端,MSB存放在低字节单元,反映到矩阵图中就是以起始位为原点,自下而上填充。
文章来源地址https://www.toymoban.com/news/detail-580431.html
到了这里,关于DBC文件解析及CAN通信矩阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!