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 | int16 | Minimum temperature in the system in 0.1C°. |
| 40111 | 111 | Max. Temperature | 1 | int16 | 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. |
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).
Table.2.3.2: Battery Status Bits
| Bit | Name | Class | Behaviour |
|---|---|---|---|
| 0 | User Attention Required | STATUS | Set by a CRITICAL fault or when a PROTECT fault reaches the retry limit. |
| 1 | Over Temperature Protection | PROTECT | Switches off both paths until the condition clears. |
| 2 | Over Temperature Warning | WARNING | No path is switched off. |
| 3 | Discharge Under Temperature Protection | PROTECT | Switches off the discharge path until the condition clears. |
| 4 | Discharge Under Temperature Warning | WARNING | No path is switched off. |
| 5 | Charge Under Temperature Protection | PROTECT | Switches off the charge path until the condition clears. |
| 6 | Charge Under Temperature Warning | WARNING | No path is switched off. |
| 7 | Cell Over Voltage Protection | PROTECT | Switches off the charge path until the condition clears. |
| 8 | Cell Over Voltage Warning | WARNING | No path is switched off. |
| 9 | Cell Under Voltage Protection | PROTECT | Switches off the discharge path until the condition clears. |
| 10 | Cell Under Voltage Warning | WARNING | No path is switched off. |
| 11 | Max. Cell Delta Voltage Protection | CRITICAL | Switches off both paths and sets User Attention; the paths stay off until the BMS restarts. |
| 12 | Max. Temperature Delta Protection | CRITICAL | Switches off both paths and sets User Attention; the paths stay off until the BMS restarts. |
| 13 | Discharge Over Current Warning | WARNING | No path is switched off. |
| 14 | Discharge Over Current Protection | PROTECT | Switches off the discharge path until the condition clears. |
| 15 | Discharge Over Current 2nd Protection | PROTECT | Switches off the discharge path until the condition clears. |
| 16 | Charge Over Current Warning | WARNING | No path is switched off. |
| 17 | Charge Over Current Protection | PROTECT | Switches off the charge path until the condition clears. |
| 18 | Short Circuit Protection | PROTECT | Switches off both paths until the condition clears. |
| 19 | Low SoC 1st Warning | WARNING | No path is switched off. |
| 20 | Low SoC 2nd Warning | WARNING | No path is switched off. |
| 21 | PCB Over Temperature Warning | WARNING | No path is switched off. |
| 22 | PCB Over Temperature Protection | PROTECT | Switches off both paths until the condition clears. |
| 23 | FET Over Temperature Warning | WARNING | No path is switched off. |
| 24 | FET Over Temperature Protection | PROTECT | Switches off both paths until the condition clears. |
| 25 | Internal Error | UNUSED | Not set by the current firmware. |
| 26 | Cell Connection Error | CRITICAL | Switches off both paths and sets User Attention; the paths stay off until the BMS restarts. |
| 27 | Sleep Cannot Execute | STATUS | Set when a shutdown is requested while faults hold both paths off. |
| 28 | Max. Parallel Group Delta Voltage Protection | CRITICAL | Switches off both paths and sets User Attention; the paths stay off until the BMS restarts. |
| 29 | Slave Module Communication Error | CRITICAL | Switches off both paths and sets User Attention; the paths stay off until the BMS restarts. |
| 30 | Main Contactor Malfunction | CRITICAL | Switches off both paths and sets User Attention; the paths stay off until the BMS restarts. |
| 31 | Pre-Charge Fault | CRITICAL | Switches off both paths and sets User Attention; the paths stay off until the BMS restarts. |
| 32 | System Power On | STATUS | Set at power-on and cleared in the first protection cycle. |
| 33 | Multi-Master Enable Power-Out Sequence | PROTECT | Slave only: both paths stay off until the master enables power out. |
| 34 | Multi-Master Communication Timeout | MULTI-MASTER | Communication lost; depending on the comm-error strategy the master switches off the affected slave's power out. |
| 35 | Multi-Master Parallel Packs Delta Voltage Error | MULTI-MASTER | Master only: pack voltages differ too much; the master switches off the affected slave's power out. |
| 36 | Charge Contactor Malfunction | CRITICAL | Switches off both paths and sets User Attention; the paths stay off until the BMS restarts. |
| 37 | Discharge Contactor Malfunction | CRITICAL | Switches off both paths and sets User Attention; the paths stay off until the BMS restarts. |
| 38 | Balancing Over Temperature Warning | WARNING | No path is switched off; balancing stops. |
Bits 39–63 are not used. The class describes what the firmware does when the bit is set.
Table.2.3.3: Error Classes
| Class | Meaning |
|---|---|
| WARNING | Reports that a warning limit is exceeded. No path is switched off. |
| PROTECT | Switches off the listed path while the condition lasts and back on when it clears; see the retry note below. |
| CRITICAL | Switches off both paths and sets User Attention; the paths stay off until the BMS restarts. |
| STATUS | Reports a state of the BMS. No path is switched off. |
| MULTI-MASTER | Used in multi-master systems; acts on the power output of another pack. |
| UNUSED | Defined but not set by the current firmware. |
PROTECT faults switch the path back on by themselves once the condition clears. Each trip of the same fault is counted; when the count reaches Max Retry Limit (LiMon Peripheral Settings, default 5, 0 = no limit) the BMS sets User Attention and no longer switches the path back on by itself. CRITICAL faults keep both paths off until the BMS restarts.
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.