Modbus RS485 Protocol Summary - PACE Electronics BMS
1. Holding Register Map (Modbus Function Code 0x03)
0x0000 Current (x10 mA) INT16
0x0001 Pack Voltage (x10 mV) UINT16
0x0002 SOC (%) UINT8 (lower byte)
0x0003 SOH (%) UINT8 (lower byte)
0x0009 Warning Flags (bitwise) UINT16
0x000A Protection Flags (bitwise) UINT16
0x000B Status Flags (bitwise) UINT16
0x0015-0x0024 Cell Voltage [1-16] (mV) UINT16
0x0031-0x0034 Temperature Sensor [1-4] (0.1 degC) INT16
0x0111 Control Command (Shutdown / Reset) Write-only
0x0150-0x0159 Version Info (ASCII) String
0x0160-0x0169 Model SN (ASCII) String
0x0170-0x0179 Pack SN (ASCII) String
2. Control Register (0x0111)
- To shutdown BMS: Write value 0x0001 or 0xFFFF to register 0x0111
- To reset BMS: Write value 0x0002 (if supported)
- Register is write-only, and may require authentication
3. Typical RS485 Wiring (PACE BMS to ESP32/USB-RS485)
Connect as follows:
- BMS RS485 A (D+) -> USB-RS485 A / MAX485 DI
- BMS RS485 B (D-) -> USB-RS485 B / MAX485 RO
- GND -> Shared Ground between devices
Baudrate: 9600 bps, 8N1
Default Modbus Slave ID: 0
Ensure 120-ohm termination at both ends if bus is long
4. Python Integration Tools
- Recommended library: pymodbus >= 3.x
- Read with: read_holding_registers(address, count, slave=ID)
- Encoding note: use UTF-8 when writing special symbols in CSV