我们在看Trace 报文的时候,看到的信息主要包括
canID 以及对应 Data值
虽然能够看到id和对应的data 值, 但是我不知道里面的意思是什么?
这里就需要使用dbc文件来解析。 如果没有dbc文件, 你拿到这些报文也不知道是什么意思
可以通过信号中的定义信息的信息来解析上面的报文值。
- Name : 信号的名字
- Message: 信号所在的报文名
- StartBit: 开始位
- Length:长度
- ByteOrder: 排序方式
- Motorola 0
- Intel 1
- Factor: 分辨率(就是传输数据时每一位(bit)代表的最小单位数据量)
- Offset: 偏移量(偏移量就是在传输数据中加上一个数据量;有些数据传输只能传输正整数,负物理量就需要偏移量转换成正整数传输)
。
我们主要就是根据dbc文件中的定义来解析报文
解析Motorola格式的报文
这里对应的是一条报文 1字节(byte)=8位(bit) 报文的id 0x123
报文的值(长度8字节) 20 02 17 00 00 00 00 07
根据 Motorola 格式,将 上面报文值(16进制) 转换成 2进制 下面的表格中对应的二进制值就是上面报文值对应的值。
根据dbc文件中的定义 我们来计算一下 GTS_CRC 这条信号对应的值。
这个信号对应的 StartBit 是8 , length为 8, factor: 1 , offset:0
根据排序,对应的值 是下面的表格中的值
开始取值:取到的对应的二进制的值是: 0000 0010
将二进制 转换为10进制的值: 0000 0010 = 2(raw_value)
根据 factor: 1 , offset:0(偏移量)
2*1+0 = 2 (把原始信号转换物理值)(physical_value = raw_value*factor+offset)
所以这个信号解析之后的值是 2
根据这个计算方式,我们再来看一条报文
GTS_D 对应的 startBit:20,length:4, Factor:1,offset:0
对应的二进制: 0001
换算 10进制: 0001 = 1
根据 factor 和offset :1*1+0 = 1
再看一条
startbit: 56 length:32 factor:1 offset:0
对应的二进制的值:0000 0000 0000 0000 0000 0000 0000 0111
转换成10进制: 0000 0000 0000 0000 0000 0000 0000 0111 = 7
7*1+0 = 7 所以这个值是7
解析Intel 格式的报文
这里有条报文,报文的id 0x123 报文的data C5 09, 对应的dbc文件
先来解析 OnOff
startbit:0 length:1 类型: intel factor:1 offset:0
data值 C5 09 只有两个字节, 也就说总共16bit
Intel数据排序 相反 (高位在下,低位在上)
对应的排序, 从最低开始为 0 ,1,2 ,3 ,4.....
取到值就是 1
1 * 1 +0 = 1 (physical_value = raw_value*factor+offset)
EngineSpeed的dbc定义
startbit: 1 length:15
对应的二进制值为: 0000 1001 1100 010
所以现在转换成 10进制:0000 1001 1100 010 = 1250
计算 1250*1+0 = 1250
对应的can信息
canid: 64 data: 37 0E 29 23 0E 01 EE 02
根据报文解析之后的结果是
| EngSpeed 3639 rpm E37(物理值对应的信号值)
| EngTemp 32 degC 29
| IdleRunning Running 0
| PetrolLevel 35 l 23
| EngForce 270 N 10E
| EngPower 7.5000 kW 2EE
对应的dbc文件
can信号:https://www.isolves.com/it/wl/zs/2022-07-07/57309.html