报文解析
报文组成
一般报文主要有以下几个参数(比较全的情况下)
例
解析报文时主要用到的是帧ID
和帧数据
帧ID
接收到的帧ID是十六进制的形式,由29位标识符转换的,目前大多数的通信协议中都直接给出了相应的帧ID,不需要换算
标识符PGN:
P | R | DP | PF | PS | SA |
---|---|---|---|---|---|
3 | 1 | 1 | 8 | 8 | 8 |
- P:优先级,有3位,可以有8个优先级(0~7)
- R:保留位,有 1位,固定为0
- DP:数据页,有1位,固定为0
- PF:报文的代码,有8 位
- PS:报文的目标地址(也就是报文的接收方),有8位
- SA:报文的源地址(也就是报文的发送方),有8位
BMS与VCU之间的29位标识符PGN
P | R | DP | PF | PS | SA |
---|---|---|---|---|---|
3 | 0 | 0 | 255 | 124 | 3 |
011 | 0 | 0 | 1111 1111 | 0111 1100 | 0000 0011 |
以上29位标识符 二进制 转换为 十六进制 为 ID=0x0CFF7C03
帧数据
帧数据一般由8个字节组成,根据相关通信协议来对应其中的含义,比如BMS发送的报文,byte3对应电流的低字节,byte4对应电流高字节
BMS与VCU之间的报文
OUT | IN | ID | T | 位置 | 数据 | 备注 |
---|---|---|---|---|---|---|
电池管理系统 | 整车控制器 | PGN=65404 | 100ms | 1byte 2byte 3byte 4byte 5byte 6byte 7byte 8byte | 电池总压低字节 电池总压高字节 电流低字节 电流高字节 soc 保留 保留 保留 | 电池总压 分辨率:0.1V/bit;偏移0;范围:0~1000V 电流 分辨率:0.1A/bit;偏移:-1000A;范围-1000~1000A 荷电状态 分辨率:0.4%/bit;偏移:0;范围:0%~100% 保留 保留 保留 |
报文解析
CAN报文解析就是用帧数据中相应的字节,根据具体的通信协议解析
,计算出对应的物理信号的值
数据类型的定义
数据类型 | 比例 | 偏移量 | 字节数 |
---|---|---|---|
电流 | 0.1A/bit | -1000 | 2byte |
value = recv(byte)*scale+offset
例:
帧ID=0x0CFF7C03
帧数据:12 34 12 34 12 FF FF FF
电流 = 3412*0.1-1000=333A