SolaX Power X1 and X3 energy storage inverters Modbus register map
One Modbus register map from SolaX for its single-phase (X1) and three-phase (X3) energy storage inverters. The document lists the inverters that share the map by name and inverter ID. It covers firmware and serial data, status and fault words, PV, grid, meter, battery and energy history values, and the common operating settings. The inverter reports its own type code, and some registers apply only to X1 or only to X3. This file is a selection of the document, not every register: battery serial numbers, time of use and charge period tables, generator, VPP, parallel and other settings are left out.
- Protocol
- Modbus RTU over RS485 (function codes 0x03, 0x04, 0x06, 0x10). Modbus TCP is provided by SolaX monitoring modules, not by the inverter itself.
- Defaults
- Slave address 1 (default), allowed 1 to 247. RS485: 19200 baud (default), 8 data bits, 1 stop bit, no parity (p. 2). Modbus TCP via the monitoring module: port 502, unit ID 0x01 by default (p. 3). The document asks for at least 1 s between two instructions and a response timeout of 1 s (p. 4).
- Addresses in the manual
- 0-based protocol addresses, as sent on the wire
- 32 and 64-bit values
- Low word first (CD AB)
- Registers listed
- 198
- Checked against
- Version V001.02, revision dated 2026/2/10, SolaX Power Network Technology (Zhejiang) Co., Ltd. (copy hosted by a third party; a vendor-hosted copy could not be fetched, and the SolaX knowledge base tells integrators to ask SolaX for the document)
Address base. The document prints register addresses in hex (for example 0x0000) and its frame examples use them directly as the start address on the wire: reading the inverter serial number sends start address 0x0000 for 7 registers, and the Modbus protocol version read uses 0x0082 (pp. 12-13). Addresses here are those hex values converted to decimal. Reading uses function 0x03 (holding) for firmware info and settings and function 0x04 (input) for real-time and history data. Setting registers are read and written at different addresses; the write address is given in each setting's note. The unlock password (write 0x0000, function 0x06, p. 38) is not listed because it shares an address with Inverter_SN. Some registers exist only on X1 or only on X3 (marked _X1 or _X3), and dual battery registers only on dual battery models (Appendix A). Address 0 in the manual is address 0 on the wire.
Word order. For 32-bit values the tables label the first register address LSB and the second MSB (for example 0x0052 LSB, 0x0053 MSB for Etotal_Togrid), so the low word comes first. The VPP example on p. 76 confirms this: ACActivePower of -1000 W is sent as 0xFC18 then 0xFFFF. Bytes inside each register are big endian (p. 3). The document does not define its Gain column (the changelog only says the attribute was added to all tables in V001.00), so the meaning is inferred: a raw register value equals the physical value times Gain, and scale here is 1 divided by Gain (gain 10 gives scale 0.1, gain 100 gives 0.01, gain 1000 gives 0.001). This is the only reading that fits the document's own ranges: the cell voltage gain of 1000 on a V unit only makes sense for millivolt counts, and the export power limit (Table 3.5.2) prints gain X1: 1 and X3: 0.1 with ranges 0 to 60000 W (X1) and 0 to 30000 W (X3) in a 16-bit register, which fits only if an X3 count is 10 W. The document gives no worked example for a register with a gain other than 1.
Modbus Poll and the Modbus protocol itself count from 0. The "Wire address" column is the number to type into Modbus Poll.
Downloads
The register table has every column on this page. The blocks file imports into Modbus Poll. The template JSON holds the same blocks plus unit, scale and access for scripts.
Registers
| Manual | Wire | Register | Type | Regs | Unit | Scale | Access | Area |
|---|---|---|---|---|---|---|---|---|
| 0 | 0 | Inverter serial numberInverter_SN · ASCII text, 7 registers. |
string | 7 | 1 | R | Holding (FC03) | |
| 7 | 7 | Factory nameFactory_Name · ASCII text, 7 registers. |
string | 7 | 1 | R | Holding (FC03) | |
| 14 | 14 | Inverter nameInverter_Name · ASCII text, 7 registers. |
string | 7 | 1 | R | Holding (FC03) | |
| 21 | 21 | Inverter type codeInverter_Type · Codes in Appendix A, for example 0x0E is X3-Hybrid G4 and 0x0F is X1-Hybrid G4. Appendix A also lists 0x2B X3-ULTRA-GLV, which is not in the inverter list on p. iv. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 89 | 89 | Total battery port numberBat_Port_Num |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 123 | 123 | Full DSP firmware versionFirmware_Version_DSP |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 124 | 124 | Full ARM firmware versionFirmware_Version_ARM · Full version is ARM major * 100 + ARM minor, so 109 means V001.09 (p. 13 example). Supported from Modbus protocol version V001.00. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 125 | 125 | Minor DSP software versionFirmware_Version_DSP_Minor |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 126 | 126 | Hardware versionHardware_Version |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 127 | 127 | Major DSP software versionFirmware_Version_DSP_Major |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 128 | 128 | Major ARM software versionFirmware_Version_ARM_Major |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 130 | 130 | Modbus protocol document version supported by the firmwareFirmware_Version_Modbus · The p. 13 example reads 0x0064 (100), which the document says is protocol version V001.00. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 131 | 131 | Minor ARM software versionFirmware_Version_ARM_Minor |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 132 | 132 | ARM bootloader versionFirmware_Version_ARM_Boot |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 133 | 133 | Real time clock, secondsRTC_Seconds · Set the clock by writing 0x0000 to 0x0005 with function 0x10 (p. 20). |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 134 | 134 | Real time clock, minutesRTC_Minutes |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 135 | 135 | Real time clock, hoursRTC_Hours |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 136 | 136 | Real time clock, daysRTC_Days |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 137 | 137 | Real time clock, monthsRTC_Months |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 138 | 138 | Real time clock, yearsRTC_Years |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 170 | 170 | Communication module serial numberModule_SN · ASCII text, 5 registers. |
string | 5 | 1 | R | Holding (FC03) | |
| 186 | 186 | Inverter rated AC output powerRated_Output_Power |
uint16 | 1 | W | 1 | R | Holding (FC03) |
| 9 | 9 | Inverter working mode codeInverter_Run_Mode · Codes: 0 Wait, 1 Check, 2 Normal, 3 Fault, 4 Permanent fault, 5 Update, 6 EPS check, 7 EPS, 8 Self test, 9 Idle, 10 Standby, 11 Fault charging, 20 VPP normal, 21 to 25 TOU sub modes, 26 Generator normal, 27 Wait charge, 28 Smart schedule (Appendix B). |
uint16 | 1 | 1 | R | Input (FC04) | |
| 84 | 84 | Parameter unlock statusInverter_Lock_State · 0: locked, 1: unlocked. Unlocked state allows parameter configuration. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 64 | 64 | Inverter fault bit fieldInverter_Fault_Message · 32-bit bit field, bits listed in Appendix C. The appendix uses the X3-Hybrid G4 as its example and says fault codes may vary across inverters. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | 1 | R | Input (FC04) | |
| 94 | 94 | Inverter fault bit field, extendedInv_Fault_Message_Extend · 32-bit bit field, see Appendix C. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | 1 | R | Input (FC04) | |
| 67 | 67 | Manager fault bit fieldManager_Fault_Message |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 68 | 68 | BMS1 fault bit fieldBMS1_Fault_Message · 32-bit bit field, see Appendix C. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | 1 | R | Input (FC04) | |
| 214 | 214 | BMS1 fault bit field, extendedBMS1_Fault_Message_Extend · 32-bit bit field, see Appendix C. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | 1 | R | Input (FC04) | |
| 298 | 298 | BMS2 fault bit fieldBMS2_Fault_Message · 32-bit bit field, see Appendix C. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | 1 | R | Input (FC04) | |
| 775 | 775 | BMS2 fault bit field, extendedBMS2_Fault_Message_Extend · 32-bit bit field, see Appendix C. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | 1 | R | Input (FC04) | |
| 50 | 50 | Sum of all PV powerPv_Power_Sum · Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | W | 1 | R | Input (FC04) |
| 52 | 52 | On-grid total active power of the inverterOn_Grid_Power_Sum · Positive for output, negative for input. Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | W | 1 | R | Input (FC04) |
| 54 | 54 | Off-grid total active power of the inverterOff_Grid_Power_Sum · Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | W | 1 | R | Input (FC04) |
| 56 | 56 | Total power of the battery systemBat_Power_Sum · Positive for charge, negative for discharge. Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | W | 1 | R | Input (FC04) |
| 58 | 58 | Total capacity of the battery systemBat_Sys_Installed_Capacity · Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | Wh | 1 | R | Input (FC04) |
| 60 | 60 | Total SOC of the battery systemBat_System_SOC |
uint16 | 1 | % | 1 | R | Input (FC04) |
| 61 | 61 | Total SOH of the battery systemBat_System_SOH |
uint16 | 1 | % | 1 | R | Input (FC04) |
| 27 | 27 | Total number of PV stringsMPPT_Count |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3 | 3 | PV1 voltagePv_Voltage1 · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 5 | 5 | PV1 currentPv_Current1 · Table gain 10. |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 10 | 10 | PV1 powerPv_Power1 |
uint16 | 1 | W | 1 | R | Input (FC04) |
| 4 | 4 | PV2 voltagePv_Voltage2 · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 6 | 6 | PV2 currentPv_Current2 · Table gain 10. |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 11 | 11 | PV2 powerPv_Power2 |
uint16 | 1 | W | 1 | R | Input (FC04) |
| 290 | 290 | PV3 voltagePv_Voltage3 · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 291 | 291 | PV3 currentPv_Current3 · Table gain 10. |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 292 | 292 | PV3 powerPv_Power3 |
uint16 | 1 | W | 1 | R | Input (FC04) |
| 40 | 40 | PV4 voltagePv_Voltage4 · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 43 | 43 | PV4 currentPv_Current4 · Table gain 10. |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 46 | 46 | PV4 powerPv_Power4 |
uint16 | 1 | W | 1 | R | Input (FC04) |
| 41 | 41 | PV5 voltagePv_Voltage5 · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 44 | 44 | PV5 currentPv_Current5 · Table gain 10. |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 47 | 47 | PV5 powerPv_Power5 |
uint16 | 1 | W | 1 | R | Input (FC04) |
| 42 | 42 | PV6 voltagePv_Voltage6 · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 45 | 45 | PV6 currentPv_Current6 · Table gain 10. |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 48 | 48 | PV6 powerPv_Power6 |
uint16 | 1 | W | 1 | R | Input (FC04) |
| 26 | 26 | Grid statusGrid_Status · 0: on-grid, 1: off-grid. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 0 | 0 | On-grid voltage, single-phase inverterGrid_Voltage_X1 · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 1 | 1 | On-grid current, single-phase inverterGrid_Current_X1 · Table gain 10. |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 2 | 2 | On-grid active power, single-phase inverterGrid_Power_X1 |
int16 | 1 | W | 1 | R | Input (FC04) |
| 7 | 7 | On-grid frequency, single-phase inverterGrid_Frequency_X1 · Table gain 100. |
uint16 | 1 | Hz | 0.01 | R | Input (FC04) |
| 106 | 106 | R-phase on-grid voltage, three-phase inverterGrid_Voltage_R_X3 · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 107 | 107 | R-phase on-grid current, three-phase inverterGrid_Current_R_X3 · Table gain 10. |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 108 | 108 | R-phase on-grid active power, three-phase inverterGrid_Power_R_X3 |
int16 | 1 | W | 1 | R | Input (FC04) |
| 109 | 109 | R-phase on-grid frequency, three-phase inverterGrid_Frequency_R_X3 · Table gain 100. |
uint16 | 1 | Hz | 0.01 | R | Input (FC04) |
| 110 | 110 | S-phase on-grid voltage, three-phase inverterGrid_Voltage_S_X3 · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 111 | 111 | S-phase on-grid current, three-phase inverterGrid_Current_S_X3 · Table gain 10. |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 112 | 112 | S-phase on-grid active power, three-phase inverterGrid_Power_S_X3 |
int16 | 1 | W | 1 | R | Input (FC04) |
| 113 | 113 | S-phase on-grid frequency, three-phase inverterGrid_Frequency_S_X3 · Table gain 100. The description column for the S-phase frequency says R-phase, which looks like a typo. |
uint16 | 1 | Hz | 0.01 | R | Input (FC04) |
| 114 | 114 | T-phase on-grid voltage, three-phase inverterGrid_Voltage_T_X3 · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 115 | 115 | T-phase on-grid current, three-phase inverterGrid_Current_T_X3 · Table gain 10. |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 116 | 116 | T-phase on-grid active power, three-phase inverterGrid_Power_T_X3 |
int16 | 1 | W | 1 | R | Input (FC04) |
| 117 | 117 | T-phase on-grid frequency, three-phase inverterGrid_Frequency_T_X3 · Table gain 100. |
uint16 | 1 | Hz | 0.01 | R | Input (FC04) |
| 96 | 96 | On-grid total reactive power of the inverterGrid_Reactive_Power_Sum · Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | Var | 1 | R | Input (FC04) |
| 98 | 98 | On-grid total apparent power of the inverterGrid_Apparent_Power_Sum · Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | VA | 1 | R | Input (FC04) |
| 100 | 100 | R-phase on-grid reactive powerGrid_Reactive_Power_R |
int16 | 1 | Var | 1 | R | Input (FC04) |
| 101 | 101 | S-phase on-grid reactive powerGrid_Reactive_Power_S |
int16 | 1 | Var | 1 | R | Input (FC04) |
| 102 | 102 | T-phase on-grid reactive powerGrid_Reactive_Power_T |
int16 | 1 | Var | 1 | R | Input (FC04) |
| 103 | 103 | R-phase on-grid apparent powerGrid_Apparent_Power_R |
uint16 | 1 | VA | 1 | R | Input (FC04) |
| 104 | 104 | S-phase on-grid apparent powerGrid_Apparent_Power_S |
uint16 | 1 | VA | 1 | R | Input (FC04) |
| 105 | 105 | T-phase on-grid apparent powerGrid_Apparent_Power_T |
uint16 | 1 | VA | 1 | R | Input (FC04) |
| 136 | 136 | On-grid run timeOn_Grid_Run_Time · Table gain 10. Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | h | 0.1 | R | Input (FC04) |
| 76 | 76 | Off-grid voltage, single-phase inverterOff_Grid_Voltage_X1 · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 77 | 77 | Off-grid current, single-phase inverterOff_Grid_Current_X1 · Table gain 10. |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 78 | 78 | Off-grid power, single-phase inverterOff_Grid_Power_X1 · The table prints the unit as VA for this register. |
uint16 | 1 | VA | 1 | R | Input (FC04) |
| 79 | 79 | Off-grid frequencyOff_Grid_Frequency · Table gain 100. |
uint16 | 1 | Hz | 0.01 | R | Input (FC04) |
| 118 | 118 | R-phase off-grid voltage, three-phase inverterOff_Grid_Volt_R_X3 · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 119 | 119 | R-phase off-grid current, three-phase inverterOff_Grid_Current_R_X3 · Table gain 10. |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 120 | 120 | R-phase off-grid active power, three-phase inverterOff_Grid_Power_R_X3 |
int16 | 1 | W | 1 | R | Input (FC04) |
| 121 | 121 | R-phase off-grid apparent power, three-phase inverterOff_Grid_Power_Apparent_R_X3 |
uint16 | 1 | VA | 1 | R | Input (FC04) |
| 122 | 122 | S-phase off-grid voltage, three-phase inverterOff_Grid_Volt_S_X3 · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 123 | 123 | S-phase off-grid current, three-phase inverterOff_Grid_Current_S_X3 · Table gain 10. |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 124 | 124 | S-phase off-grid active power, three-phase inverterOff_Grid_Power_S_X3 |
int16 | 1 | W | 1 | R | Input (FC04) |
| 125 | 125 | S-phase off-grid apparent power, three-phase inverterOff_Grid_Power_Apparent_S_X3 |
uint16 | 1 | VA | 1 | R | Input (FC04) |
| 126 | 126 | T-phase off-grid voltage, three-phase inverterOff_Grid_Volt_T_X3 · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 127 | 127 | T-phase off-grid current, three-phase inverterOff_Grid_Current_T_X3 · Table gain 10. |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 128 | 128 | T-phase off-grid active power, three-phase inverterOff_Grid_Power_T_X3 |
int16 | 1 | W | 1 | R | Input (FC04) |
| 129 | 129 | T-phase off-grid apparent power, three-phase inverterOff_Grid_Power_Apparent_T_X3 |
uint16 | 1 | VA | 1 | R | Input (FC04) |
| 138 | 138 | Off-grid run timeOff_Grid_Run_Time · Table gain 10. Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | h | 0.1 | R | Input (FC04) |
| 70 | 70 | Power at the grid connection point measured by meter or CTFeedin_Power · Positive: power to the grid. Negative: power from the grid. Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | W | 1 | R | Input (FC04) |
| 130 | 130 | R-phase feed-in power (meter or CT), three-phase inverterFeedin_Power_R_Phase_X3 · Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | W | 1 | R | Input (FC04) |
| 132 | 132 | S-phase feed-in power (meter or CT), three-phase inverterFeedin_Power_S_Phase_X3 · Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | W | 1 | R | Input (FC04) |
| 134 | 134 | T-phase feed-in power (meter or CT), three-phase inverterFeedin_Power_T_Phase_X3 · Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | W | 1 | R | Input (FC04) |
| 210 | 210 | Total reactive power (meter or CT)Grid_Reactive_Power_Total_Meter · Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | Var | 1 | R | Input (FC04) |
| 222 | 222 | R-phase reactive power (meter or CT)Grid_Reactive_Power_R_Meter · Moved to this address from 0x00C0 in protocol V001.02 (changelog, p. iv). Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | Var | 1 | R | Input (FC04) |
| 224 | 224 | S-phase reactive power (meter or CT)Grid_Reactive_Power_S_Meter · Moved to this address from 0x00C2 in protocol V001.02 (changelog, p. iv). Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | Var | 1 | R | Input (FC04) |
| 212 | 212 | T-phase reactive power (meter or CT)Grid_Reactive_Power_T_Meter · Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | Var | 1 | R | Input (FC04) |
| 196 | 196 | Total grid power factor (meter or CT)Grid_Power_Factor_Total_Meter |
int16 | 1 | % | 1 | R | Input (FC04) |
| 197 | 197 | R-phase grid power factor (meter or CT)Grid_Power_Factor_R_Meter |
int16 | 1 | % | 1 | R | Input (FC04) |
| 198 | 198 | S-phase grid power factor (meter or CT)Grid_Power_Factor_S_Meter |
int16 | 1 | % | 1 | R | Input (FC04) |
| 199 | 199 | T-phase grid power factor (meter or CT)Grid_Power_Factor_T_Meter |
int16 | 1 | % | 1 | R | Input (FC04) |
| 200 | 200 | Grid frequency (meter or CT)Grid_Frequency_Meter · Table gain 100. |
uint16 | 1 | Hz | 0.01 | R | Input (FC04) |
| 201 | 201 | Total grid voltage (meter or CT)Grid_Voltage_Total_Meter · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 202 | 202 | R-phase grid voltage (meter or CT)Grid_Voltage_R_Meter · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 203 | 203 | S-phase grid voltage (meter or CT)Grid_Voltage_S_Meter · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 204 | 204 | T-phase grid voltage (meter or CT)Grid_Voltage_T_Meter · Table gain 10. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 205 | 205 | Total grid current (meter or CT)Grid_Current_Total_Meter · Table gain 10. |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 206 | 206 | R-phase grid current (meter or CT)Grid_Current_R_Meter · Table gain 10. |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 207 | 207 | S-phase grid current (meter or CT)Grid_Current_S_Meter · Table gain 10. |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 208 | 208 | T-phase grid current (meter or CT)Grid_Current_T_Meter · Table gain 10. |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 184 | 184 | Communication state of meter 1Meter1_Communication_State · 0: communication error, 1: normal. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 185 | 185 | Communication state of meter 2Meter2_Communication_State · 0: communication error, 1: normal. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 168 | 168 | Power value of meter 2 or CT2Feedin_Power_Meter2 · The table gives data format S32 and an address range of two registers but prints length 1. Treated here as two registers. Positive when used under the MicroGrid function. Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | W | 1 | R | Input (FC04) |
| 178 | 178 | R-phase power of meter 2 or CT2Feedin_Power_R_Phase_Meter2 · The table gives data format S32 and an address range of two registers but prints length 1. Treated here as two registers. Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | W | 1 | R | Input (FC04) |
| 180 | 180 | S-phase power of meter 2 or CT2Feedin_Power_S_Phase_Meter2 · The table gives data format S32 and an address range of two registers but prints length 1. Treated here as two registers. Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | W | 1 | R | Input (FC04) |
| 182 | 182 | T-phase power of meter 2 or CT2Feedin_Power_T_Phase_Meter2 · The table gives data format S32 and an address range of two registers but prints length 1. Treated here as two registers. Low word at the lower address (the table marks the first address LSB and the second MSB). |
int32 | 2 | W | 1 | R | Input (FC04) |
| 23 | 23 | BMS1 connection stateBMS1_Connect_State · 0: disconnected, 1: connected. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 31 | 31 | BMS2 connection stateBMS2_Connect_State · 0: disconnected, 1: connected. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 24 | 24 | BMS1 ambient temperatureBat1_Temperature |
int16 | 1 | degC | 1 | R | Input (FC04) |
| 305 | 305 | BMS2 ambient temperatureBat2_Temperature |
int16 | 1 | degC | 1 | R | Input (FC04) |
| 20 | 20 | BMS1 voltageBat_Voltage_Charge1 · Table gain 10. |
int16 | 1 | V | 0.1 | R | Input (FC04) |
| 21 | 21 | BMS1 currentBat_Current_Charge1 · Table gain 10. |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 22 | 22 | BMS1 powerBat_Power_Charge1 |
int16 | 1 | W | 1 | R | Input (FC04) |
| 295 | 295 | BMS2 voltageBat_Voltage_Charge2 · Table gain 10. |
int16 | 1 | V | 0.1 | R | Input (FC04) |
| 296 | 296 | BMS2 currentBat_Current_Charge2 · Table gain 10. |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 297 | 297 | BMS2 powerBat_Power_Charge2 |
int16 | 1 | W | 1 | R | Input (FC04) |
| 25 | 25 | BMS charging and discharging statusBDC_Status · 0: discharge, 1: charge, 2: stop. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 28 | 28 | BMS1 SOCBattery1_Capacity |
uint16 | 1 | % | 1 | R | Input (FC04) |
| 301 | 301 | BMS2 SOCBattery2_Capacity |
uint16 | 1 | % | 1 | R | Input (FC04) |
| 191 | 191 | BMS1 SOHBMS1_SOH |
uint16 | 1 | % | 1 | R | Input (FC04) |
| 785 | 785 | BMS2 SOHBMS2_SOH |
uint16 | 1 | % | 1 | R | Input (FC04) |
| 36 | 36 | BMS1 maximum charge currentBMS1_Charge_Max_Current · Table gain 10. |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 37 | 37 | BMS1 maximum discharge currentBMS1_Discharge_Max_Current · Table gain 10. |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 38 | 38 | BMS1 battery capacityBMS1_Battery_Capacity · Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | Wh | 1 | R | Input (FC04) |
| 186 | 186 | BMS1 cell high temperatureBMS1_Cell_Temp_High · Table gain 10. |
int16 | 1 | degC | 0.1 | R | Input (FC04) |
| 187 | 187 | BMS1 cell low temperatureBMS1_Cell_Temp_Low · Table gain 10. |
int16 | 1 | degC | 0.1 | R | Input (FC04) |
| 188 | 188 | BMS1 cell high voltageBMS1_Cell_Voltage_High · Table gain 1000. |
uint16 | 1 | V | 0.001 | R | Input (FC04) |
| 189 | 189 | BMS1 cell low voltageBMS1_Cell_Voltage_Low · Table gain 1000. |
uint16 | 1 | V | 0.001 | R | Input (FC04) |
| 777 | 777 | BMS2 maximum charge currentBMS2_Charge_Max_Current · Table gain 10. |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 778 | 778 | BMS2 maximum discharge currentBMS2_Discharge_Max_Current · Table gain 10. |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 768 | 768 | BMS2 cell high temperatureBattery2_Temp_High · Table gain 10. |
int16 | 1 | degC | 0.1 | R | Input (FC04) |
| 769 | 769 | BMS2 cell low temperatureBattery2_Temp_Low · Table gain 10. |
int16 | 1 | degC | 0.1 | R | Input (FC04) |
| 770 | 770 | BMS2 cell high voltageBat2_Cell_Voltage_High · Table gain 1000. |
uint16 | 1 | V | 0.001 | R | Input (FC04) |
| 771 | 771 | BMS2 cell low voltageBat2_Cell_Voltage_Low · Table gain 1000. |
uint16 | 1 | V | 0.001 | R | Input (FC04) |
| 162 | 162 | Battery maximum allowed charge powerBat_Max_Allowed_Chg_Power · Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | W | 1 | R | Input (FC04) |
| 164 | 164 | Battery maximum allowed discharge powerBat_Max_Allowed_Dischg_Power · Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | W | 1 | R | Input (FC04) |
| 80 | 80 | Today's on-grid output energy (inverter grid port)Etoday_Togrid · Table gain 10. |
uint16 | 1 | kWh | 0.1 | R | Input (FC04) |
| 82 | 82 | Total on-grid output energy (inverter grid port)Etotal_Togrid · Table gain 10. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | kWh | 0.1 | R | Input (FC04) |
| 145 | 145 | Today's on-grid input energy (inverter grid port)Echarge_Today · Table gain 10. |
uint16 | 1 | kWh | 0.1 | R | Input (FC04) |
| 146 | 146 | Total on-grid input energy (inverter grid port)Echarge_Total · Table gain 10. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | kWh | 0.1 | R | Input (FC04) |
| 144 | 144 | Off-grid yield (register named Today), inverter EPS portOff_Grid_Yield_Today · The description column reads 'Total On-Grid output energy (Inverter EPS Port)' although the variable name says Today. Table gain 10. |
uint16 | 1 | kWh | 0.1 | R | Input (FC04) |
| 142 | 142 | Off-grid yield (register named Total), inverter EPS portOff_Grid_Yield_Total · Table gain 10. The description column reads 'Today's Off-Grid output energy' although the variable name says Total. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | kWh | 0.1 | R | Input (FC04) |
| 152 | 152 | Today's output energy (meter 1 or CT1)Feedin_Energy_Today · Table gain 100. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | kWh | 0.01 | R | Input (FC04) |
| 72 | 72 | Total output energy (meter 1 or CT1)Feedin_Energy_Total · Table gain 100. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | kWh | 0.01 | R | Input (FC04) |
| 154 | 154 | Today's input energy (meter 1 or CT1)Consum_Energy_Today · Table gain 100. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | kWh | 0.01 | R | Input (FC04) |
| 74 | 74 | Total input energy (meter 1 or CT1)Consum_Energy_Total · Table gain 100. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | kWh | 0.01 | R | Input (FC04) |
| 176 | 176 | Today's input energy (meter 2 or CT2)Consum_Energy_Today_Meter2 · Table gain 100. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | kWh | 0.01 | R | Input (FC04) |
| 172 | 172 | Total input energy (meter 2 or CT2)Consum_Energy_Total_Meter2 · Table gain 100. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | kWh | 0.01 | R | Input (FC04) |
| 174 | 174 | Today's output energy (meter 2 or CT2)Feedin_Energy_Today_Meter2 · Table gain 100. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | kWh | 0.01 | R | Input (FC04) |
| 170 | 170 | Total output energy (meter 2 or CT2)Feedin_Energy_Total_Meter2 · Table gain 100. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | kWh | 0.01 | R | Input (FC04) |
| 148 | 148 | Total PV energy (inverter PV port)Solar_Energy_Total · Table gain 10. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | kWh | 0.1 | R | Input (FC04) |
| 150 | 150 | Today's PV energy (inverter PV port)Solar_Energy_Today · Table gain 10. |
uint16 | 1 | kWh | 0.1 | R | Input (FC04) |
| 29 | 29 | Total battery discharge energy (inverter battery port)Bat_Discharge_Energy_Total · Table gain 10. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | kWh | 0.1 | R | Input (FC04) |
| 32 | 32 | Today's battery discharge energy (inverter battery port)Bat_Discharge_Energy_Today · Table gain 10. |
uint16 | 1 | kWh | 0.1 | R | Input (FC04) |
| 33 | 33 | Total battery charge energy (inverter battery port)Bat_Charge_Energy_Total · Table gain 10. The LSB and MSB labels in the table read 0x1D and 0x1E, which looks like a copy error. Low word at the lower address (the table marks the first address LSB and the second MSB). |
uint32 | 2 | kWh | 0.1 | R | Input (FC04) |
| 35 | 35 | Today's battery charge energy (inverter battery port)Bat_Charge_Energy_Today · Table gain 10. |
uint16 | 1 | kWh | 0.1 | R | Input (FC04) |
| 218 | 218 | System on or offInverter_Output_Switch · Read at this address. Write with function 0x06 to address 0x001C (28). 1 is on, 0 is off. Marked as limited EEPROM writes. Parameter writes need the unlock password written first (p. 39 example). |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 29 | 29 | Safety codeSafety_Code · Read at this address. Write with function 0x06 to address 0x0009 (9). Codes in Appendix D (p. 93). Marked as limited EEPROM writes. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 139 | 139 | Inverter work modeInverter_Work_Mode · Read at this address. Write with function 0x06 to address 0x001F (31). 0 Self use, 1 Feed-in priority, 2 Back up, 3 Manual, 4 Peak shaving, 5 TOU. Marked as limited EEPROM writes. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 147 | 147 | Self use mode: discharge cut-off SOC (high byte) and charge from grid enable (low byte)SelfUse_Min_SOC_And_Grid_Charge · Read at this address. Write the two bytes with function 0x06 to 0x0061 (97, high byte, SOC 10 to 100 %) and 0x0062 (98, low byte, 0 disable, 1 enable). Marked as limited EEPROM writes. |
bitfield16 | 1 | 1 | RW | Holding (FC03) | |
| 148 | 148 | Self use mode: charge upper SOCSelfUse_Charge_Upper_SOC · Read at this address. Write with function 0x06 to address 0x0063 (99). Range 10 to 100 %. Enabled if the charge from grid enable is 1. |
uint16 | 1 | % | 1 | RW | Holding (FC03) |
| 149 | 149 | Feed-in mode: charging cut-off SOC (high byte) and discharging cut-off SOC (low byte)Feedin_Soc_Limits · Read at this address. Write with function 0x06 to 0x0064 (100, charging cut-off SOC) and 0x0065 (101, discharging cut-off SOC), each 10 to 100 %. |
bitfield16 | 1 | 1 | RW | Holding (FC03) | |
| 150 | 150 | Backup mode: charging cut-off SOC (high byte) and discharging cut-off SOC (low byte)BackUp_Soc_Limits · Read at this address. Write with function 0x06 to 0x0066 (102, charging cut-off SOC) and 0x0067 (103, discharging cut-off SOC), each 30 to 100 %. |
bitfield16 | 1 | 1 | RW | Holding (FC03) | |
| 140 | 140 | Manual mode commandManual_Mode · Read at this address. Write with function 0x06 to address 0x0020 (32). 0 Stop charging and discharging, 1 Force charging, 2 Force discharging. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 37 | 37 | Export power control limit percentage (inverter grid port)Export_Power_Percentage · Read at this address. Write with function 0x06 to address 0x0011 (17). Range 0 to 100 %. |
uint16 | 1 | % | 1 | RW | Holding (FC03) |
| 215 | 215 | Main breaker current limitMain_Breaker_Current_Limit · Read at this address. Write with function 0x06 to address 0x0071 (113). Range 10 to 100 A (X1) or 10 to 250 A (X3). |
uint16 | 1 | A | 1 | RW | Holding (FC03) |
| 92 | 92 | Inverter maximum battery current settingInv_Max_Set_Bat_Cur · Table gain 10. Read only (no write address listed). |
uint16 | 1 | A | 0.1 | R | Holding (FC03) |
| 144 | 144 | Battery charge maximum currentBat_Charge_Max_Current · Read at this address. Write with function 0x06 to address 0x0024 (36). Table gain 10. Range is referenced to Inv_Max_Set_Bat_Cur. |
uint16 | 1 | A | 0.1 | RW | Holding (FC03) |
| 145 | 145 | Battery discharge maximum currentBat_Discharge_Max_Current · Read at this address. Write with function 0x06 to address 0x0025 (37). Table gain 10. Range is referenced to Inv_Max_Set_Bat_Cur. |
uint16 | 1 | A | 0.1 | RW | Holding (FC03) |
| 270 | 270 | Lithium battery charger upper limitBat_Charge_Max_SOC · Read at this address. Write with function 0x06 to address 0x00E0 (224). Range 10 to 100 %. |
uint16 | 1 | % | 1 | RW | Holding (FC03) |
| 277 | 277 | Meter or CT selectionMeter_CT_Select · Read at this address. Write with function 0x06 to address 0x00AA (170). 0 Meter, 1 CT. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 265 | 265 | Meter 1 IDMeter1_ID · Read at this address. Write with function 0x06 to address 0x00A1 (161). Range 1 to 200. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 266 | 266 | Meter 2 IDMeter2_ID · Read at this address. Write with function 0x06 to address 0x00A2 (162). Range 1 to 200. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 267 | 267 | Meter or CT 1 directionDirection_Meter_CT1 · Read at this address. Write with function 0x06 to address 0x00A4 (164). 0 Positive, 1 Negative. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 268 | 268 | Meter or CT 2 directionDirection_Meter_CT2 · Read at this address. Write with function 0x06 to address 0x00A5 (165). 0 Positive, 1 Negative. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 185 | 185 | Output frequency in EPS (off-grid) modeEPS_Frequency · Read at this address. Write with function 0x06 to address 0x0045 (69). 0 is 50 Hz, 1 is 60 Hz. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 160 | 160 | SOC to charge to before restoring EPS (off-grid) modeEPS_Restart_Soc · Read at this address. Write with function 0x06 to address 0x008E (142). Between 15 and 100 %, and at least EPS_MinSoc plus 5. |
uint16 | 1 | % | 1 | RW | Holding (FC03) |
Scale is the number to multiply the raw value by to get the unit. Types with more than one register (32 and 64-bit) follow the word order above.
Open in Modbus Poll
- Download the Modbus Poll blocks file.
- Open Modbus Poll, connect to the device and set its unit ID. In Modbus Poll set Word order to CD AB.
- In the blocks panel on the right, click Import CSV and pick the file. CSV import is a Pro feature. Without Pro, Modbus Poll polls the first 20 values of your blocks.
- The wire addresses are already in the file, so there is no 0-based or 1-based conversion to do.
Once the values look right, export the tag list to Ignition, Kepware, Node-RED, Home Assistant or Voltrus SCADA.
Source and accuracy
Manufacturer document: SolaX Power Energy Storage Inverter MODBUS Communication protocols (community.symcon.de)
Version V001.02, revision dated 2026/2/10, SolaX Power Network Technology (Zhejiang) Co., Ltd. (copy hosted by a third party; a vendor-hosted copy could not be fetched, and the SolaX knowledge base tells integrators to ask SolaX for the document), p. 2-5, 11-13, 18-37, 38-54, 83-87. Read on 2026-10-24.
Addresses, types, units and scale are taken from the document above. Names and descriptions are written by Voltrus. Firmware versions can differ, so confirm a value on your own device before you rely on it.
Found a mistake? Report it by email with the register address and the manual page.