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 implemenented 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
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 batteyr 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 four Battery Status register into a 64bit variable and check bit values for error situation. If bit value is 1 then it indicates Error, if bit value is 0 then it indicates No Error.

Bit# Status Description
1 Over Temperature Protection
7 Cell Over Voltage Protection
9 Cell Under Voltage Protection
14 DCHG Over Current Protection
15 DCHG Over Current 2nd Protection
16 CHG Over Current Protection
31 Output RELAY 1
32 Output RELAY 2

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.