工业车辆BMS通信协议分析实战(一):RS485抓包、Modbus解析与CAN适配

发布时间:2026/11/2 18:58:35
工业车辆BMS通信协议分析实战(一):RS485抓包、Modbus解析与CAN适配

文章目录

  • 一、项目背景:从两根未知通信线开始
  • 二、通信协议分析
    • 串口参数(⭐)
    • 主要寄存器定义
      • 读取主参数的标准命令
      • 读取时钟字段组(0x06D6)
  • 三、485转换CAN
  • 四、免责声明

一、项目背景:从两根未知通信线开始

近期在一个工业车辆项目中,遇到了一套益佳通电池管理系统(BMS)。

车辆原有的电量显示屏通过两根通信线直接连接电池,可以实时显示SOC、电池电压、电流以及温度等信息。

由于项目需要将电池数据接入整车控制器(VCU),而现场缺少完整的通信协议资料,因此尝试通过通信分析的方式完成电池数据读取与适配。

二、通信协议分析

初期无法确定两根通信线采用的具体协议,需要从硬件接口、电气特性以及实际通信数据入手进行排查。

经过多次测试,最终确认该电池采用RS485通信接口,应用层使用Modbus RTU协议。

在此基础上,通过分析设备正常运行时的通信数据,逐步完成了电池核心参数的识别与解析。

串口参数(⭐)

项目实测参数
物理层两线半双工 RS485(A/B)
波特率9600 bit/s
数据位8
校验位无(none)
停止位1
从站地址0x01
功能码0x04 读取输入寄存器;0x02 读取离散输入
CRC校验CRC-16/Modbus;初值0xFFFF,多项式0xA001;CRC低字节先发送
通信拓扑显示屏为主站,电池BMS为从站

主要寄存器定义

寄存器含义数据格式换算系数抓包例子
0x041A总电压uint160.103 33 → 819 → 81.9 V
0x041B总电流int160.1FF FA → -6 → -0.6 A
0x041CSOCuint160.101 58 → 344 → 34.4 %

读取主参数的标准命令

主站请求: 01 04 04 1A 00 06 50 FF
BMS应答 : 01 04 0C 03 33 FF FA 01 58 03 E8 80 00 00 00 7F 4D

寄存器数据依次为:03 33 | FF FA | 01 58 | 03 E8 | 80 00 | 00 00。

0x041A = 0x0333 = 819,电压 = 81.9 V。

0x041B = 0xFFFA = -6(int16),电流 = -0.6 A;本次实测负值对应放电,正值充电符号尚未专门实测。

0x041C = 0x0158 = 344,SOC = 34.4%。

读取时钟字段组(0x06D6)

查询:01 04 06 D6 00 06 91 78
应答:01 04 0C 07 EA 00 0A 00 18 00 0D 00 30 00 1C DC C1

年月日时分秒
该应答前六个寄存器依次为2026(07 EA)、(00 0A)10、(00 18)24、(00 0D)13、(00 30)48、(00 1C)28。

三、485转换CAN

有两个方案

  1. 购买485-CAN设备进行数据透传。(简单但是自由度低)
  2. ECU支持485和CAN自己通过代码实现(复杂但自由度高)

四、免责声明

本文仅用于技术研究、工程经验分享及技术交流,不代表相关设备制造商的官方立场或授权。

文中涉及的通信协议分析结果均基于实际测试,不代表设备厂商发布的官方技术规范。相关品牌名称及商标归其合法权利人所有。

本文不提供完整通信协议、设备专有技术资料及具体工程源码。

涉及BMS、整车控制及其他安全相关设备的开发,应在合法授权及符合电气安全要求的前提下进行,并经过充分测试验证。

未经充分验证的技术方案,不应直接应用于量产车辆或安全关键控制系统。