6.2 Modbus protocol

Version 4.1 by Admin on 2024/12/19 10:32

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 addressNumber of registersContentType
0x00001

Hardware version:

byte 0 — minor;

byte 1 — major.

U8[2]
0x0001-0x00022

Firmware version:

byte 0 — patch;

byte 1 — minor;

byte 2 — major;

byte 3 — not used (set to 0).

U8[4]
0x0003-0x00042

Bootloader version:

byte 0 — patch;

byte 1 — minor;

byte 2 — major;

byte 3 — not used (set to 0).

U8[4]
0x20001

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-0x20022Current measured by the primary sensor, АREAL32
0x2003-0x20042External temperature, °CREAL32
0x2007-0x20082

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-0x200A2

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
0x200B1

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
0x200C1

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
0x200E2

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
0x20111

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-0x20132Temperature of the device, °CREAL32
0x2014-0x20152

Cell balancing flags (bitfield):

bit i — balancing resistor is connected to the (i+1)th cell.

U32
0x2016-0x202920

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-0x205140Array of cell voltages (V)REAL32[20]
0x2052-0x207940Array of cell temperatures (°C)REAL32[20]
0x207A-0x20A140Array of cell SOCs (%)REAL32[20]
0x20A2-0x20C940Array of cell resistances (Ohm)REAL32[20]
0x20CD1Number of cells connectedU16
0x20F41

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-0x21012Battery state of charge (SOC), %REAL32
0x21031Number of cellsU16
0x2104-0x21052Battery voltage, VREAL32
0x2106-0x21072Battery resistance, OhmREAL32
0x2108-0x21092Effective capacity, A×hREAL32
0x210A-0x210B2Balancing effectivity, %REAL32
0x210C-0x210D2State of health, %REAL32
0x210E-0x210F2Depth of discharge, A×hREAL32
0x2118-0x21192Minimum cell temperatureREAL32
0x211B1Position of the cell whose temperature is minimalU16
0x211C-0x211D2Maximum cell temperatureREAL32
0x211F1Position of the cell whose temperature is maximalU16
0x2120-0x21212Minimum cell voltageREAL32
0x21231Position of the cell whose voltage is minimalU16
0x2124-0x21252Maximum cell voltageREAL32
0x21271Position of the cell whose voltage is maximalU16
0x21281

Error flag:

0 — no errors;

1 — there are some errors.

U16
0x2130-0x21312Energy received from the charger, W×hREAL32
0x2132-0x21332Energy consumed by the load, W×hREAL32
0x2134-0x21352Energy dissipated by the balancing resistors, W×hREAL32
0x21701

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-0x21722Duration of the battery state (0x2170), secondsU32
0x217B-0x217C2Coulomb received from the charger, A×hREAL32
0x217D-0x217E2Coulomb consumed by the load, A×hREAL32
0x21B81Flag indicating that the cells are balancingU16
0x21B92Average cell voltage, VREAL32
0x24002Current measured by the auxiliary current sensor, AREAL32
0x24022

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 addressNumber of registersContentType
0x41002

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
0x51001

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
0x51011

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
0x51021

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
0x51031

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
0x51041

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
0x51071

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
0x51081

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
0x51091

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
0x510A1

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
0x510E1

Software control of the "Interlock" signal. Allowable values:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Interlock".

U16
0x510F1

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
0x51101

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
0x51111

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
0x51121

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
0x51131

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
0x51141

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
0x51151

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