1.1 CAN总线输出数据表头:
![](https://img2020.cnblogs.com/blog/1967197/202007/1967197-20200713143521662-622595993.png)
解析CAN数据的相关基础知识:
1.channel:CAN通道。
2.Identifier:在某个时间点发送一条报文,该报文的ID号,将这个ID号对照解析文件,从而进行报文解析。
3.Is Standard:判断是否是标准帧。
CAN的消息帧格式有两种,分别是CAN2.0A标准帧(standard)和CAN2.0B扩展帧(extended)。
标准帧用11个bit表示ID编号(identifier),注意11bit的ID是一个有符号数,需要用偏置(offset)补偿。【扩展帧用?个bit表示ID编号,是否是有符号数?】
4.Is Data:判断帧类型是否是数据帧。
帧的类型有四种类型,分别是数据帧、远程帧、错误帧、超载帧。
远程帧:接收数据的节点可以通过发送远程帧要求源节点发送数据,远程帧没有数据场。
错误帧:是6个连续的显性位。
5. Is TX:判断是接收节点还是发送节点(TX)
6.DLC:数据长度码,占4个bit,可包括0~8Byte,本例中为8Byte。
7~14:报文(包含8个字节),十六进制表示。
1.2 解析原始数据的公式
【程序中的ui表示Ui(unsigned int)无符号整型数据,不同公司的CAN解析有各自的解析规则,需要解析文件】
CAN总线发送出来的原始数据是有符号数,需要转化为无符号数,所以需要加一个offset偏置量。factor是调整(状态参数物理值和报文数值)的比例系数
offset含义:将有符号数值(比如100 0000 0000)转化为无符号数(000 0000 0000)需要+1024。
【100 0000 0000(bin)=1024 (dec)
CAN总线传输出的数据是 100 0000 0000 ,但是第一个bit表示的是符号位,1表示负号,其真正想传输的是0(十进制的数值0),所以需要解析的时候需要+1024;
100 0000 0000 是11个bit,这是由于标准帧表示ID的bit个数是11;【那么扩展帧的偏置是29bit,偏置+2^29?】
factor含义:
按照老师程序的编写方式:解析规律= 状态值 = (报文解析出的十进制数值 + offset) * factor (有空可以再去看看一般的CAN解析公式)
【程序中的/10,/8,/100 对应的就是 factor=0.1,0.125,0.01】
【程序中的ui表示Ui(unsigned int)无符号整型数据,不同公司的CAN解析有各自的解析规则,需要解析文件】
CAN总线发送出来的原始数据是有符号数,需要转化为无符号数,所以需要加一个offset偏置量。factor是调整(状态参数物理值和报文数值)的比例系数
offset含义:将有符号数值(比如100 0000 0000)转化为无符号数(000 0000 0000)需要+1024。
【100 0000 0000(bin)=1024 (dec)
CAN总线传输出的数据是 100 0000 0000 ,但是第一个bit表示的是符号位,1表示负号,其真正想传输的是0(十进制的数值0),所以需要解析的时候需要+1024;
100 0000 0000 是11个bit,这是由于标准帧表示ID的bit个数是11;【那么扩展帧的偏置是29bit,偏置+2^29?】
factor含义:
按照老师程序的编写方式:解析规律= 状态值 = (报文解析出的十进制数值 + offset) * factor (有空可以再去看看一般的CAN解析公式)
【程序中的/10,/8,/100 对应的就是 factor=0.1,0.125,0.01】