0. 前言
1. CAN报文解析
报文组成
一般CAN总线调试工具会显示下面几个参数,比较全的情况下
序号 | 通道 | 方向 | 帧格式 | 帧类型 | 数据长度 | 帧ID | 帧数据 | 时间 |
---|
以我平时用的工具为例
解析报文时主要用到帧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发送的报文,byte1对应电池总压的字节,byte2对应电池总压高字节
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
标签:0.1,报文,总压,bit,解析,ID From: https://www.cnblogs.com/coderning/p/16582090.html