Communication protocols
Modbus protocol
General information
The BMS Mini device provides the information about the battery system using Modbus protocol. The BMS is a Modbus-server and it responds to the Modbus-client’s commands.
Interaction with the device is performed over the RS-485 bus (Modbus RTU) or the Ethernet network (Modbus TCP).
RS-485 bus connection parameters:
- baud rate, bps — 600, 1200, 2400, 4800, 9600 (by default), 19200, 38400, 57600, 115200;
- word length, bits — 8;
- parity — none;
- device address (by default) — 32.
Ethernet connection parameters:
- port — 502.
There is a description of the Input и Holding registers below. Column "Type" contains method of parameters coding:
- U8 — unsigned 8-bit integer number;
- U16 — unsigned 16-bit integer number;
- S16 — signed 16-bit integer number;
- U32 — unsigned 32-bit integer number;
- REAL32 — single precision floating point number (IEEE 754 standard);
- U8[x] — array of unsigned 8-bit integer numbers having a length of x;
- U16[x] — array of unsigned 16-bit integer numbers having a length of x;
- REAL32[x] — array of single precision floating point numbers having a length of x.
Words are in the little endian.
Input registers
Register address | Number of registers | Content | Type |
0x0000 | 1 | Hardware version: byte 0 — minor; byte 1 — major. | U8[2] |
0x0001-0x0002 | 2 | Firmware version: byte 0 — patch; byte 1 — minor; byte 2 — major; byte 3 — not used (set to 0). | U8[4] |
0x0003-0x0004 | 2 | Bootloader version: byte 0 — patch; byte 1 — minor; byte 2 — major; byte 3 — not used (set to 0). | U8[4] |
0x2000 | 1 | Discrete input signals 1 (bitfield): bit 0 – “Battery cover”; bit 1 – “Charger connected”; bit 2 – “Power up/down request”; bit 3 – “Inhibit charging”; bit 4 – “Inhibit discharging”; bit 5 – reserved (set to 0); bit 6 – reserved (set to 0); bit 7 – “Insulation status”; bit 8 – “Charge request”; bit 9 – “Precharge request”; bit 10 – “Discharge request”; bit 11 – reserved (set to 0); bit 12 – reserved (set to 0); bit 13 – reserved (set to 0); bit 14 – “Interlock”; bit 15 – “Fuse 1”. | U16 |
0x2001-0x2002 | 2 | Current measured by the primary sensor, А | REAL32 |
0x2003-0x2004 | 2 | External temperature, °C | REAL32 |
0x2007-0x2008 | 2 | Errors 1 (bitfield): bit 0 – “Overcurrent”; bit 1 – “Undervoltage”; bit 2 – “Overvoltage”; bit 3 – “Low DCH temperature”, temperature is too low for discharging; bit 4 – “High DCH temperature”, temperature is too high for discharging; bit 5 – “Battery cover”; bit 6 – reserved (set to 0); bit 7 – reserved (set to 0); bit 8 – reserved (set to 0); bit 9 – “Cell monitor offline”, connection with the cell monitor is lost; bit 10 – “Critical error”; bit 11 – “Crown error”, connection with the Crown forklift is lost; bit 12 – “Cell count error”, number of cells is incorrect; bit 13 – “HYG offline”, connection with the HYG forklift is lost; bit 14 – “Need acknowledgement”, errors were detected in the past and should be acknowledged; bit 15 – “Combilift offline”, connection with the Combilift forklift is lost; bit 16 – “Short circuit”; bit 17 – “High contactor temperature”, the discharging contactor is overheated; bit 18 – reserved (set to 0); bit 19 – “ADC error”, battery current cannot be measured by the ADC; bit 20 – “Current sensor error”, wires which connect the current sensor with the BMS are damaged; bit 21 – “CH contactor cycles error”, the charging contactor switches very often; bit 22 – “DCH contactor cycles error”, the discharging contactor switches very often; bit 23 – “Shunt offline”, connection with the BMS Current sensor is lost; bit 24 – “Shunt error”, internal error of the BMS Current sensor; bit 25 – reserved (set to 0); bit 26 – “WDT reset”, device is reset by the watchdog timer; bit 27 – “No temperature sensors”; bit 28 – “Temperature sensor is shorted”; bit 29 – “Spirit offline”, connection with the Spirit truck is lost; bits 30–31 – reserved. | U32 |
0x2009-0x200A | 2 | Internal signals (bitfield): bit 0 – “Low SOC”; bit 1 – “High charging current”; bit 2 – “Charging” (0 – open, 1 – closed); bit 3 – “Allow charging” (0 – open, 1 – closed); bit 4 – “Charging current present”; bit 5 – “Discharging” (0 – open, 1 – closed); bit 6 – “Discharging current present”; bit 7 – “Voltage too high” (EV); bit 8 – “Heater” (0 – off, 1 – on); bit 9 – “Cooler” (0 – off, 1 – on); bit 10 – “HYG shutdown”, command from the HYG forklift to open the discharging contactor; bit 11 – “Init”, initialization signal (during the initialization current sensor is calibrating and BMS Logic devices are scanning); bit 12 – “Precharging” (0 – open, 1 – closed); bit 13 – “Combilift shutdown”, command from the Combilift forklift to open the discharging contactor; bit 14 – “Cell analysis”, signal of started analysis of the cells; bit 15 – reserved (set to 0); bit 16 – reserved (set to 0); bit 17 – “Discharging (AUX)” (0 – open, 1 – closed); bit 18 – “Acknowledgement of power down”; bit 19 – “Crown EWS”; bit 20 – “Main contactor” (0 – open, 1 – closed); bit 21 – “Service reset”; bit 22 – “Charging/Discharging” (0 – open, 1 – closed); bit 23 – “Ready to charge” (the voltage of the cells is less than the threshold value and there are no errors that prohibit charging); bit 24 – “Ready to discharge” (the voltage of the cells is greater than the threshold value and there are no errors that prohibit discharging); bit 25 – “Power up”; bit 26 – “External 1”; bits 27–31 – reserved. | U32 |
0x200B | 1 | Discrete output signals (bitfield): bit 0 — state of the output #1; bit 1 — state of the output #2; bit 2 — state of the output #3; bit 3 — state of the output #4; bits 4-15 — not used. | U16 |
0x200C | 1 | MOSFETs states (bitfield): bit 0 — state of the MOSFET #1; bit 1 — state of the MOSFET #2; bit 2 — state of the MOSFET #3; bit 3 — state of the MOSFET #4; bits 4-15 — not used. | U16 |
0x200E | 2 | Errors 2 (bitfield): bit 0 – “Low CH temperature”, temperature is too low for charging; bit 1 – “High CH temperature”, temperature is too high for charging; bit 2 – “SD mount error”; bit 3 – “SD read/write error”; bit 4 – “Unallowable charging”, charging the battery through the discharging contactor; bit 5 – “Stuck contactor”; bit 6 – reserved (set to 0); bit 7 – reserved (set to 0); bit 8 – “Insulation fault”; bit 9 – reserved (set to 0); bit 10 – reserved (set to 0); bit 11 – reserved (set to 0); bit 12 – "Contactor feedback error"; bit 13 – “General error”; bit 14 – reserved (set to 0); bit 15 – reserved (set to 0); bit 16 – reserved (set to 0); bit 17 – "Precharge error"; bit 18 – reserved (set to 0); bit 19 – "Current limit error"; bits 20-31 — reserved. | U32 |
0x2011 | 1 | State of the cell monitor (bitfield): bit 0 — device is present; bit 1 — device is online; bit 2 — device is ready; bit 3 — data from the device is actual; bit 4 — temperature sensor #1 is present; bit 5 — temperature sensor #2 is present; bit 6 — temperature sensor #1 is shorted; bit 7 — temperature sensor #2 is shorted; bits 8-15 — reserved. | U16 |
0x2012-0x2013 | 2 | Temperature of the device, °C | REAL32 |
0x2014-0x2015 | 2 | Cell balancing flags (bitfield): bit i — balancing resistor is connected to the (i+1)th cell. | U32 |
0x2016-0x2029 | 20 | Array of cell states. Each element of the array corresponds to a cell and is a bitfield: bit 0 — cell is present; bit 1 — temperature sensor is present; bit 2 — need to connect a balancing resistor to the cell; bit 3 — balancing resistor is connected to the cell; bit 4 — temperature sensor is shorted; bit 5 — wires are connected to the cell; bit 6 — the cell is balancing; bits 7-15 — reserved. | U16[20] |
0x202A-0x2051 | 40 | Array of cell voltages (V) | REAL32[20] |
0x2052-0x2079 | 40 | Array of cell temperatures (°C) | REAL32[20] |
0x207A-0x20A1 | 40 | Array of cell SOCs (%) | REAL32[20] |
0x20A2-0x20C9 | 40 | Array of cell resistances (Ohm) | REAL32[20] |
0x20CD | 1 | Number of cells connected | U16 |
0x20F4 | 1 | Discrete input signals 2 (bitfield): bit 0 – “Fuse 2”; bit 1 – “Fuse 3”; bit 2 – “Circuit breaker status”; bit 3 – "Balancing request"; bit 4 – "Close Main contactor"; bit 5 – "Close External 1"; bits 6-15 – reserved. | U16 |
0x2100-0x2101 | 2 | Battery state of charge (SOC), % | REAL32 |
0x2103 | 1 | Number of cells | U16 |
0x2104-0x2105 | 2 | Battery voltage, V | REAL32 |
0x2106-0x2107 | 2 | Battery resistance, Ohm | REAL32 |
0x2108-0x2109 | 2 | Effective capacity, A×h | REAL32 |
0x210A-0x210B | 2 | Balancing effectivity, % | REAL32 |
0x210C-0x210D | 2 | State of health, % | REAL32 |
0x210E-0x210F | 2 | Depth of discharge, A×h | REAL32 |
0x2118-0x2119 | 2 | Minimum cell temperature | REAL32 |
0x211B | 1 | Position of the cell whose temperature is minimal | U16 |
0x211C-0x211D | 2 | Maximum cell temperature | REAL32 |
0x211F | 1 | Position of the cell whose temperature is maximal | U16 |
0x2120-0x2121 | 2 | Minimum cell voltage | REAL32 |
0x2123 | 1 | Position of the cell whose voltage is minimal | U16 |
0x2124-0x2125 | 2 | Maximum cell voltage | REAL32 |
0x2127 | 1 | Position of the cell whose voltage is maximal | U16 |
0x2128 | 1 | Error flag: 0 — no errors; 1 — there are some errors. | U16 |
0x2130-0x2131 | 2 | Energy received from the charger, W×h | REAL32 |
0x2132-0x2133 | 2 | Energy consumed by the load, W×h | REAL32 |
0x2134-0x2135 | 2 | Energy dissipated by the balancing resistors, W×h | REAL32 |
0x2170 | 1 | Battery state: 0 – Unknown; 1 – Charging ON; 2 – Charging OFF; 3 – Relaxed (after charging); 4 – Discharging ON; 5 – Discharging OFF; 6 – Relaxed (after discharging). | U16 |
0x2171-0x2172 | 2 | Duration of the battery state (0x2170), seconds | U32 |
0x217B-0x217C | 2 | Coulomb received from the charger, A×h | REAL32 |
0x217D-0x217E | 2 | Coulomb consumed by the load, A×h | REAL32 |
0x21B8 | 1 | Flag indicating that the cells are balancing | U16 |
0x21B9 | 2 | Average cell voltage, V | REAL32 |
0x2400 | 2 | Current measured by the auxiliary current sensor, A | REAL32 |
0x2402 | 2 | Final battery current, A Note — Typically it is the sum of the values measured by the main and auxiliary current sensors | REAL32 |
Holding registers
Register address | Number of registers | Content | Type |
0x4100 | 2 | Command to acknowledge errors in the errors journal (bitfield). Each ith bit corresponds to (i+1) record. Notes: 1 – After the errors are acknowledged, the register value will be set to 0. 2 – To acknowledge all errors, set 0xFFFFFFFF. | U32 |
0x5100 | 1 | Software control of the "Battery cover" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Battery cover". | U16 |
0x5101 | 1 | Software control of the "Charger connected" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Charger connected". | U16 |
0x5102 | 1 | Software control of the "Power up/down request" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Power down request". | U16 |
0x5103 | 1 | Software control of the "Inhibit charging" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Inhibit charging". | U16 |
0x5104 | 1 | Software control of the "Inhibit discharging" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Inhibit discharging". | U16 |
0x5107 | 1 | Software control of the "Insulation status" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Insulation status". | U16 |
0x5108 | 1 | Software control of the "Charge request" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Charge request". | U16 |
0x5109 | 1 | Software control of the "Precharge request" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Precharge request". | U16 |
0x510A | 1 | Software control of the "Discharge request" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Discharge request". | U16 |
0x510E | 1 | Software control of the "Interlock" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Interlock". | U16 |
0x510F | 1 | Software control of the "Fuse 1" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Fuse 1". | U16 |
0x5110 | 1 | Software control of the "Fuse 2" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Fuse 2". | U16 |
0x5111 | 1 | Software control of the "Fuse 3" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Fuse 3". | U16 |
0x5112 | 1 | Software control of the "Circuit breaker status" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Circuit breaker status". | U16 |
0x5113 | 1 | Software control of the "Balancing request" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Balancing request". | U16 |
0x5114 | 1 | Software control of the "Close Main contactor" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Close Main contactor". | U16 |
0x5115 | 1 | Software control of the "Close External 1" signal. Allowable values: 0 – clear the signal; 1 – set the signal; 2-65535 – use the physical input "Close External 1". | U16 |