:RS485抓包、Modbus解析与CAN适配)
文章目录一、项目背景从两根未知通信线开始二、通信协议分析串口参数⭐主要寄存器定义读取主参数的标准命令读取时钟字段组0x06D6三、485转换CAN四、免责声明一、项目背景从两根未知通信线开始近期在一个工业车辆项目中遇到了一套益佳通电池管理系统BMS。车辆原有的电量显示屏通过两根通信线直接连接电池可以实时显示SOC、电池电压、电流以及温度等信息。由于项目需要将电池数据接入整车控制器VCU而现场缺少完整的通信协议资料因此尝试通过通信分析的方式完成电池数据读取与适配。二、通信协议分析初期无法确定两根通信线采用的具体协议需要从硬件接口、电气特性以及实际通信数据入手进行排查。经过多次测试最终确认该电池采用RS485通信接口应用层使用Modbus RTU协议。在此基础上通过分析设备正常运行时的通信数据逐步完成了电池核心参数的识别与解析。串口参数⭐项目实测参数物理层两线半双工 RS485A/B)波特率9600 bit/s数据位8校验位无none停止位1从站地址0x01功能码0x04 读取输入寄存器0x02 读取离散输入CRC校验CRC-16/Modbus初值0xFFFF多项式0xA001CRC低字节先发送通信拓扑显示屏为主站电池BMS为从站主要寄存器定义寄存器含义数据格式换算系数抓包例子0x041A总电压uint160.103 33 → 819 → 81.9 V0x041B总电流int160.1FF FA → -6 → -0.6 A0x041CSOCuint160.101 58 → 344 → 34.4 %读取主参数的标准命令主站请求: 01 04 04 1A 00 06 50 FFBMS应答 : 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 -6int16电流 -0.6 A本次实测负值对应放电正值充电符号尚未专门实测。0x041C 0x0158 344SOC 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年月日时分秒该应答前六个寄存器依次为202607 EA、(00 0A)10、(00 18)24、(00 0D)13、(00 30)48、(00 1C)28。三、485转换CAN有两个方案购买485-CAN设备进行数据透传。简单但是自由度低ECU支持485和CAN自己通过代码实现复杂但自由度高四、免责声明本文仅用于技术研究、工程经验分享及技术交流不代表相关设备制造商的官方立场或授权。文中涉及的通信协议分析结果均基于实际测试不代表设备厂商发布的官方技术规范。相关品牌名称及商标归其合法权利人所有。本文不提供完整通信协议、设备专有技术资料及具体工程源码。涉及BMS、整车控制及其他安全相关设备的开发应在合法授权及符合电气安全要求的前提下进行并经过充分测试验证。未经充分验证的技术方案不应直接应用于量产车辆或安全关键控制系统。