dbc文件解析
dbc文件整体结构
一个dbc文件包含以下内容:
名称 | 符号 | 名称 | 符号 |
---|---|---|---|
版本 | VERSION "" |
注释部分 | CM_ |
使用的符号 | NS_ |
属性定义 | BA_DEF_ |
波特率 (已弃用,保留符号) | BS_ |
属性默认值 | BA_DEF_DEF_ |
网络节点定义 | BU_ |
属性值 | BA |
报文帧定义 | BO_ |
值表 | VAL_TABLE |
信号定义 (每个报文帧定义下包含多个信号定义) |
SG_ |
值描述 | VAL_ |
dbc文件内容
网络节点
BU_ : 网络节点1 网络节点2 ...
报文帧定义与信号定义
BO_ 报文ID 报文名 : 报文数据长度 发送节点
SG_ 信号名1 多路复用标志: 起始位|位长@字节顺序 符号类型 (分辨率,偏置) [物理最小值|物理最大值] "单位" 接收节点
SG_ 信号名2 多路复用标志: 起始位|位长@字节顺序 符号类型 (分辨率,偏置) [物理最小值|物理最大值] "单位" 接收节点
-
报文ID定义CAN仲裁段中的ID
-
数据报文长度对应CAN控制段中的DLC(数据段的字节数)
-
多路复用标志表示信号是否是普通信号(此处为空)、多路复用信号(此处标志为M)、多路信号(此处标志为
m复用值
,复用值表示当多路复用信号的值为该复用值时,该位上的信号为本信号) -
起始位决定了信号在数据段中的起始比特位置
-
位长表示信号所占的比特数
-
字节顺序分为两种,用于处理当位长覆盖超过一个字节时的填充方式:intel格式(1)按字节顺序从低到高填充,Motorola格式(0)表示按字节顺序从高到低填充
-
符号类型分为两种: + 表示无符号(Unsigned), - 表示有符号 (Signed, Float, Double)
-
分辨率以及偏置用于转换网络值与物理值:$\text{物理值}=\text{网络值}\times\text{分辨率}+\text{偏移量}$
-
物理最小值与最大值定义了信号物理值的有效范围
注释部分
CM_ 对象类型 对象名称 "注释"
如果对象类型是BO_
,则对象名称为报文ID
如果对象类型是SG_
,则对象名称为报文ID 信号名
属性定义
BA_DEF_ 对象类型 属性名 属性类型 范围
对象类型 | BU_ BO_ SG_ 空格 |
节点属性 报文属性 信号属性 项目属性 |
属性名 | ||
属性类型 | INT HEX FLOAT ENUM STRING |
十进制 十六进制 浮点数 枚举 字符 |
范围 | INT HEX FLOAT ENUM STRING |
最小值 最大值 最小值 最大值 最小值 最大值 枚举值1 枚举值2 ... 空 |
属性默认值
给属性设置默认值
BA_DEF_DEF_ 属性名 默认值
属性值
每个对象具体的属性值
BA_ 属性名 对象类型 对象名称 属性值
值表(可以没有)
VAL_TABLE_ 表名 值1 “值1描述” 值2 “值2描述” ...
定义了对不同值的描述
值描述
VAL_ 对象名称 值1 “值1描述” 值2 “值2描述” ...
对具体信号的不同值的描述,其中对象名称为信号报文ID 信号名