系统合格性测试——数据场(CAN报文解析)

1  CAN报文解析

        本章节主要对标准帧数据场中64位CAN数据如何进行解析进行讲解。

        64位CAN数据(即一帧报文)我们可以理解为:8个字节(Byte),每个字节由2个16进制数组成,1个16进制数又译为4个二进制数,即1个Byte由8个Bit组成,8(Byte)x8(Bit)=64(Bit),也就是ECU实际要发送和接收的数据。

        在实际的应用场景中,例如我们看到的CAN报文如下:

IDByte1Byte1Byte1Byte1Byte1Byte1Byte1Byte1
0x1111122D34455667788

        在CAN报文ID为0x111的报文中,要想知道当前ECU发送/接收到了什么数据,我们需要先在报文定义中去查看对应数据在哪个报文的哪个字节位,然后将对应字节位置的16字节数据转换为2进制(依据16进制对应2进制转换表),例如:

Byte3
D3
Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
11010011

        其中“D”为高字节,“3”为低字节,将其整体转换为2进制后,此时我们需要依照报文定义去进行换算。例如:现在要通过解析后的数据查看当前门状态是打开还是关闭?以下为门状态报文定义:

ID      数据长度字节(Byte)位(Bit)信号信号值
0x111833.4-3.5门状态

0x0:打开

0x1:关闭

到这里我们需要记住,大字节是从左往右数,分别从Byte1~Byte8/Byte0~Byte7.共8个字节:1个大字节中的8个bit (位)是从右往左数,分别从Bit0~Bit7,也是共8个位,如上表:这里门状态的字节是3.4-3.5,即第3个字节的第4位到第5位,解析后的2进制数据为: 01,但是在“门状态”定义中打开和关闭是由16进制(0x)数表示的,所以这里我们又需要将2进制数“01”再次转换为16进制数,也就是“0x1”,就代表当前门是什么状态,所以最后通过报文看到的门状态为“关闭”。

2    CAN报文发送

      依据CAN协议发送报文:

ID      数据长度字节(Byte)位(Bit)信号信号值
0x222833.1-3.2按键状态

0x0:按下

0x1:未按下

      如果当前需要发送的CAN报文“按键状态”为“未按下”,从CAN协议中可以得到要发送的数据处于第三个字节的3.0-3.1:

      1.将0x2(未按下)16进制转换为2进制为1和0;

      2.一个字节存在8个位,我们可以先将这8个位都想象为0,如下图:

Byte3
3.73.6 3.53.43.33.23.13.0
00000000

      3.我们此时要发送的数据处于3.0-3.1,也就是上表的最后两位,然后将0x2的2进制1和0填写进去,其余用0填充,如下图:

Byte3
3.73.6 3.53.43.33.23.13.0
00000010

      4.再将这8个位转换为2个16进制数,每4个位为1个16进制数,如下图:

Byte3
3.73.6 3.53.43.33.23.13.0
00000010
02

      5.其他不用的字节用0填充,最后得出要发送至总线的报文为:0x222,00 00 02 00 00 00 00 00

下章我们将进行实战讲解!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值