2.3. Modbus Register Map

This section explains modbus addresses and registers. User must see and apply the instructions below.

2.3.1 Coil Registers

No data provided for coil registers.

2.3.2 Discrete Input Registers

No data provided for discrete input registers.

2.3.3 Holding Registers

This table describes all readable parameters that can be read over modbus protocol. Slave address select option also implemented on holding registers. Using single register write function, slave address can be updated. (Refer the 2.3.5)

Table.2.3.1: Holding Registers

Address Register Name Size Type Description
40088-40090 88-90 Software Version 3 uint16 Firmware version (Major.Minor.Patch).
40091-40093 91-93 Hardware Version 3 uint16 Hardware version.
40094-40097 94-97 Serial Number 4 uint16 Device serial number.
40098-40101 98-101 Bootloader Version 4 uint16 Bootloader version.
40102 102 Model Number 1 uint16 Device model number.
40103 103 Pack Voltage 1 uint16 Battery pack total voltage. Multiples of 100mV.
40104 104 Pack Current 1 int16 Battery pack current. Multiples of 100mA.
40105 Reserved Reserved Reserved Reserved Reserved
40106 Reserved Reserved Reserved Reserved Reserved
40107 107 SOC 1 uint16 State of charge of the battery pack. Percent value.
40108 108 Min. Cell Voltage 1 uint16 Minimum cell voltage in the system in mV.
40109 109 Max. Cell Voltage 1 uint16 Maximum cell voltage in the system in mV.
40110 110 Min. Temperature 1 uint16 Minimum temperature in the system in 0.1C°.
40111 111 Max. Temperature 1 uint16 Maximum temperature in the system in 0.1C°.
40112 Reserved Reserved Reserved Reserved Reserved
40113 Reserved Reserved Reserved Reserved Reserved
40114 114 Battery Status (MSB) 1 uint16 Refer the table 2.3.2
40115 115 Battery Status 1 uint16 Refer the table 2.3.2
40116 116 Battery Status 1 uint16 Refer the table 2.3.2
40117 117 Battery Status (LSB) 1 uint16 Refer the table 2.3.2
40118 Reserved Reserved Reserved Reserved Reserved
... ... ... ... ... ...
40128 Reserved Reserved Reserved Reserved Reserved
40129 129 Slave data select 1 uint16 Slave select. This value selects which slave's cell voltages and temperatures will be written into holding register groups. See.: BMS Slave Data Select
40130 130 Cell Count in Slave 1 uint16 Connected cell count in selected slave module.
40131 131 Cell 1 Voltage 1 uint16 Cell 1 voltage in mV. Reads 0xFFFF if cell is not exist.
40132 132 Cell 2 Voltage 1 uint16 Cell 2 voltage in mV. Reads 0xFFFF if cell is not exist.
40133 133 Cell 3 Voltage 1 uint16 Cell 3 voltage in mV. Reads 0xFFFF if cell is not exist.
40134 134 Cell 4 Voltage 1 uint16 Cell 4 voltage in mV. Reads 0xFFFF if cell is not exist.
40135 135 Cell 5 Voltage 1 uint16 Cell 5 voltage in mV. Reads 0xFFFF if cell is not exist.
40136 136 Cell 6 Voltage 1 uint16 Cell 6 voltage in mV. Reads 0xFFFF if cell is not exist.
40137 137 Cell 7 Voltage 1 uint16 Cell 7 voltage in mV. Reads 0xFFFF if cell is not exist.
40138 138 Cell 8 Voltage 1 uint16 Cell 8 voltage in mV. Reads 0xFFFF if cell is not exist.
40139 139 Cell 9 Voltage 1 uint16 Cell 9 voltage in mV. Reads 0xFFFF if cell is not exist.
40140 140 Cell 10 Voltage 1 uint16 Cell 10 voltage in mV. Reads 0xFFFF if cell is not exist.
40141 141 Cell 11 Voltage 1 uint16 Cell 11 voltage in mV. Reads 0xFFFF if cell is not exist.
40142 142 Cell 12 Voltage 1 uint16 Cell 12 voltage in mV. Reads 0xFFFF if cell is not exist.
40143 143 Cell 13 Voltage 1 uint16 Cell 13 voltage in mV. Reads 0xFFFF if cell is not exist.
40144 144 Cell 14 Voltage 1 uint16 Cell 14 voltage in mV. Reads 0xFFFF if cell is not exist.
40145 145 Cell 15 Voltage 1 uint16 Cell 15 voltage in mV. Reads 0xFFFF if cell is not exist.
40146 146 Cell 16 Voltage 1 uint16 Cell 16 voltage in mV. Reads 0xFFFF if cell is not exist.
40147 147 Cell 17 Voltage 1 uint16 Cell 17 voltage in mV. Reads 0xFFFF if cell is not exist.
40148 148 Cell 18 Voltage 1 uint16 Cell 18 voltage in mV. Reads 0xFFFF if cell is not exist.
40149 149 Temperature 1 1 int16 Temperature sensor 1 in 0.1C°. Reads 0xFFFF if sensor is not exist.
40150 150 Temperature 2 1 int16 Temperature sensor 2 in 0.1C°. Reads 0xFFFF if sensor is not exist.
40151 151 Temperature 3 1 int16 Temperature sensor 3 in 0.1C°. Reads 0xFFFF if sensor is not exist.
40152 152 Temperature 4 1 int16 Temperature sensor 4 in 0.1C°. Reads 0xFFFF if sensor is not exist.
40153 153 Temperature 5 1 int16 Temperature sensor 5 in 0.1C°. Reads 0xFFFF if sensor is not exist.
40154 154 Modbus Address 1 uint16 Modbus slave address. Writing to this field updates slave address immediately. Value must be between 1-247(0x01-0xF7). 0x00 is modbus broadcast ID and can't be set.

Table.2.3.2: Battery Status Registers Description

Combine the four Battery Status registers into a single 64-bit value - register 40114 holds the most significant word (bits 63:48) and 40117 holds the least significant word (bits 15:0). Then check each bit below (bit 0 = LSB). A bit value of 1 indicates the condition is active, 0 indicates it is inactive.

Bit# Status Description
0 User Attention Required
1 Over Temperature Protection
2 Over Temperature Warning
3 DCHG Under Temperature Protection
4 DCHG Under Temperature Warning
5 CHG Under Temperature Protection
6 CHG Under Temperature Warning
7 Cell Over Voltage Protection
8 Cell Over Voltage Warning
9 Cell Under Voltage Protection
10 Cell Under Voltage Warning
11 Max. Cell Delta Voltage Protection
12 Max. Temperature Delta Protection
13 DCHG Over Current Warning
14 DCHG Over Current Protection
15 DCHG Over Current 2nd Protection
16 CHG Over Current Warning
17 CHG Over Current Protection
18 Short Circuit Protection
19 Low SOC 1st Warning
20 Low SOC 2nd Warning
21 PCB Over Temperature Warning
22 PCB Over Temperature Protection
23 FET Over Temperature Warning
24 FET Over Temperature Protection
25 Internal Error
26 Cell Connection Error
27 Sleep Cannot Execute
28 Max. Parallel Group Delta Voltage Protection
29 Slave Module Communication Error
30 Main Contactor Malfunction
31 PreCharge Fault
32 System Power On
33 Multi-Master Enable Power-Out Sequence
34 Multi-Master Communication Timeout
35 Multi-Master Parallel Packs Delta Voltage Error
36 Charge Contactor Malfunction
37 Discharge Contactor Malfunction
38 Balancing Over Temperature Warning

2.3.4 Input Registers

No data provided for input registers

2.3.5 Modbus Slave Address Update

Using this modbus protocol "Write Single Register" function, single register on holding registers can be altered. This function implemented for changing modbus slave address using modbus protocol. Writing to holding register address 40154, sets device slave address effective immediately. So, any frame send after slave address update, must be implemented using updated slave address. Any value ranging between 1-247 (0x01-0xF7) can be selected as slave address.

2.3.6 BMS Slave Data Select

This register is used to select which slave BMS's data will be put into holding registers. Values in address range 40130 to 40153 are populated with selected BMS's voltage and temperature values. Slave data select register can be updated frequently to read all cell voltages and temperatures in the system.