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.