Huawei SUN2000 Modbus register map
The Huawei SUN2000 family of string solar inverters share one Modbus interface definition. It gives read access to PV string, grid and energy values, plus status and alarm words, and write access to grid scheduling and start or stop commands.
- Protocol
- Modbus RTU and Modbus TCP
- Defaults
- Serial slave addresses 1 to 247 are allowed, 0 is broadcast. Over TCP the logical device ID 0 is used by default (p. 98, 102, 105). Baud rate is not stated in this document.
- Addresses in the manual
- 0-based protocol addresses, as sent on the wire
- 32 and 64-bit values
- Not stated in the manual
- Registers listed
- 66
- Checked against
- Issue 04, 2023-01-10, Huawei Technologies Co., Ltd. (copy hosted by a third party; Huawei-hosted copies could not be fetched)
Address base. The worked read example on p. 104-105 sends register address 32306 as 0x7E32 on the wire, so printed addresses are the protocol addresses with no offset. Address 30000 in the manual is address 30000 on the wire.
Word order. The document does not state the order of the two words in 32-bit registers.
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 |
|---|---|---|---|---|---|---|---|---|
| 30000 | 30000 | Inverter model nameModel |
string | 15 | 1 | R | Holding (FC03) | |
| 30015 | 30015 | Serial numberSerialNumber |
string | 10 | 1 | R | Holding (FC03) | |
| 30025 | 30025 | Part numberPartNumber |
string | 10 | 1 | R | Holding (FC03) | |
| 30070 | 30070 | Model ID codeModelID · Code from the supported model table in section 1.1. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 30071 | 30071 | Number of PV stringsPV_String_Count |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 30072 | 30072 | Number of MPP trackersMPPT_Count |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 30073 | 30073 | Rated power (Pn)Rated_Power |
uint32 | 2 | kW | 0.001 | R | Holding (FC03) |
| 30075 | 30075 | Maximum active power (Pmax)Max_Active_Power |
uint32 | 2 | kW | 0.001 | R | Holding (FC03) |
| 30077 | 30077 | Maximum apparent power (Smax)Max_Apparent_Power |
uint32 | 2 | kVA | 0.001 | R | Holding (FC03) |
| 30079 | 30079 | Maximum reactive power fed to the grid (Qmax)Max_Reactive_Power_Fed |
int32 | 2 | kvar | 0.001 | R | Holding (FC03) |
| 30081 | 30081 | Maximum reactive power absorbed from the grid (Qmax)Max_Reactive_Power_Absorbed |
int32 | 2 | kvar | 0.001 | R | Holding (FC03) |
| 32000 | 32000 | Operating state word 1State_1 · Bits cover standby, grid-connected, grid-connected normally, derating from power rationing, derating from internal causes, normal stop, stop due to faults, stop due to power rationing, shutdown and spot check (bits 0 to 9). |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 32002 | 32002 | Operating state word 2State_2 · Bit 0 locked or unlocked, bit 1 PV connected or disconnected, bit 2 DSP data collection. |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 32003 | 32003 | Operating state word 3State_3 · Two registers, bit field. Bit 0 off-grid, bit 1 off-grid switch enabled. |
uint32 | 2 | 1 | R | Holding (FC03) | |
| 32008 | 32008 | Alarm word 1Alarm_1 · Bit meanings are in section 5.1 of the manual. |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 32009 | 32009 | Alarm word 2Alarm_2 · Bit meanings are in section 5.1 of the manual. |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 32010 | 32010 | Alarm word 3Alarm_3 · Bit meanings are in section 5.1 of the manual. |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 32016 | 32016 | PV string 1 voltagePV1_Voltage · Up to 24 strings. For string n, voltage is at 32014 + 2n and current at 32015 + 2n. |
int16 | 1 | V | 0.1 | R | Holding (FC03) |
| 32017 | 32017 | PV string 1 currentPV1_Current |
int16 | 1 | A | 0.01 | R | Holding (FC03) |
| 32018 | 32018 | PV string 2 voltagePV2_Voltage |
int16 | 1 | V | 0.1 | R | Holding (FC03) |
| 32019 | 32019 | PV string 2 currentPV2_Current |
int16 | 1 | A | 0.01 | R | Holding (FC03) |
| 32020 | 32020 | PV string 3 voltagePV3_Voltage |
int16 | 1 | V | 0.1 | R | Holding (FC03) |
| 32021 | 32021 | PV string 3 currentPV3_Current |
int16 | 1 | A | 0.01 | R | Holding (FC03) |
| 32022 | 32022 | PV string 4 voltagePV4_Voltage |
int16 | 1 | V | 0.1 | R | Holding (FC03) |
| 32023 | 32023 | PV string 4 currentPV4_Current |
int16 | 1 | A | 0.01 | R | Holding (FC03) |
| 32064 | 32064 | DC input powerInput_Power |
int32 | 2 | kW | 0.001 | R | Holding (FC03) |
| 32066 | 32066 | Grid voltage, or line voltage phases A to BGrid_Voltage_AB · For single-phase and split-phase output modes this is the grid voltage. |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 32067 | 32067 | Line voltage phases B to CLine_Voltage_BC · Not valid for L/N, L1/L2/N or L1/L2 output modes. |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 32068 | 32068 | Line voltage phases C to ALine_Voltage_CA · Not valid for L/N, L1/L2/N or L1/L2 output modes. |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 32069 | 32069 | Phase A voltagePhase_A_Voltage · Not valid for L/N, L1/L2/N or L1/L2 output modes. |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 32070 | 32070 | Phase B voltagePhase_B_Voltage · Not valid for L/N, L1/L2/N or L1/L2 output modes. |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 32071 | 32071 | Phase C voltagePhase_C_Voltage · Not valid for L/N, L1/L2/N or L1/L2 output modes. |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 32072 | 32072 | Grid current, or phase A currentGrid_Current_A · For single-phase and split-phase output modes this is the grid current. |
int32 | 2 | A | 0.001 | R | Holding (FC03) |
| 32074 | 32074 | Phase B currentPhase_B_Current · Not valid for L/N, L1/L2/N or L1/L2 output modes. |
int32 | 2 | A | 0.001 | R | Holding (FC03) |
| 32076 | 32076 | Phase C currentPhase_C_Current · Not valid for L/N, L1/L2/N or L1/L2 output modes. |
int32 | 2 | A | 0.001 | R | Holding (FC03) |
| 32078 | 32078 | Peak active power of the current dayPeak_Active_Power_Today |
int32 | 2 | kW | 0.001 | R | Holding (FC03) |
| 32080 | 32080 | Active powerActive_Power |
int32 | 2 | kW | 0.001 | R | Holding (FC03) |
| 32082 | 32082 | Reactive powerReactive_Power |
int32 | 2 | kvar | 0.001 | R | Holding (FC03) |
| 32084 | 32084 | Power factorPower_Factor |
int16 | 1 | 0.001 | R | Holding (FC03) | |
| 32085 | 32085 | Grid frequencyGrid_Frequency |
uint16 | 1 | Hz | 0.01 | R | Holding (FC03) |
| 32086 | 32086 | EfficiencyEfficiency |
uint16 | 1 | % | 0.01 | R | Holding (FC03) |
| 32087 | 32087 | Internal temperatureInternal_Temperature |
int16 | 1 | °C | 0.1 | R | Holding (FC03) |
| 32088 | 32088 | Insulation resistanceInsulation_Resistance |
uint16 | 1 | MΩ | 0.001 | R | Holding (FC03) |
| 32089 | 32089 | Device status codeDevice_Status · Codes include 0x0000 standby initializing, 0x0100 starting, 0x0200 on-grid, 0x0201 power limited, 0x0202 self-derating, 0x0300 shutdown due to a fault, 0x0301 shutdown by command and 0xA000 standby with no irradiation. The full list is in the manual. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 32090 | 32090 | Fault codeFault_Code |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 32091 | 32091 | Last startup timeStartup_Time · Epoch seconds, local time. |
uint32 | 2 | 1 | R | Holding (FC03) | |
| 32093 | 32093 | Last shutdown timeShutdown_Time · Epoch seconds, local time. |
uint32 | 2 | 1 | R | Holding (FC03) | |
| 32106 | 32106 | Accumulated energy yieldAccumulated_Energy_Yield |
uint32 | 2 | kWh | 0.01 | R | Holding (FC03) |
| 32114 | 32114 | Daily energy yieldDaily_Energy_Yield |
uint32 | 2 | kWh | 0.01 | R | Holding (FC03) |
| 35300 | 35300 | Active power adjustment mode in effectActive_Adjustment_Mode · 0 percentage, 1 fixed value. Registers 35300 to 35303 must be read in one request. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 35302 | 35302 | Active power adjustment value in effectActive_Adjustment_Value · Percentage mode in 0.1 %, fixed-value mode in 0.001 kW. |
uint32 | 2 | 1 | R | Holding (FC03) | |
| 35304 | 35304 | Reactive power adjustment mode in effectReactive_Adjustment_Mode · 0 power factor, 1 absolute value, 2 Q/S, 3 Q-U curve, 4 cosphi-P/Pn curve, 5 PF-U curve, 6 Q-P curve. Registers 35304 to 35306 must be read in one request. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 35305 | 35305 | Reactive power adjustment value in effectReactive_Adjustment_Value · Power factor in 0.001, absolute value in 0.001 kvar, Q/S in 0.001. |
uint32 | 2 | 1 | R | Holding (FC03) | |
| 37113 | 37113 | Power meter active powerMeter_Active_Power · Positive means feeding the grid, negative means drawing from the grid. Only on models that support it. |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 40000 | 40000 | System timeSystem_Time · Epoch seconds, local time. Allowed range 946684800 to 3155759999. |
uint32 | 2 | 1 | RW | Holding (FC03) | |
| 40120 | 40120 | Fixed active power deratingFixed_Active_Power_Derate · Allowed range 0 to Pmax. |
uint16 | 1 | kW | 0.1 | RW | Holding (FC03) |
| 40122 | 40122 | Reactive power compensation as power factorReactive_Compensation_PF · Allowed range (-1, -0.8] and [0.8, 1]. |
int16 | 1 | 0.001 | RW | Holding (FC03) | |
| 40123 | 40123 | Reactive power compensation as Q/SReactive_Compensation_QS · Allowed range -1 to 1; S is Smax. |
int16 | 1 | 0.001 | RW | Holding (FC03) | |
| 40125 | 40125 | Active power derating percentageActive_Power_Derate_Percent · Allowed range 0 to 100 percent; fine adjustment interface. |
uint16 | 1 | % | 0.1 | RW | Holding (FC03) |
| 40126 | 40126 | Fixed active power derating in wattsFixed_Active_Power_Derate_W · Allowed range 0 to Pmax. |
uint32 | 2 | W | 1 | RW | Holding (FC03) |
| 40129 | 40129 | Reactive power compensation at nightReactive_Compensation_Night · Allowed range -Qmax to Qmax. |
int32 | 2 | kvar | 0.001 | RW | Holding (FC03) |
| 40200 | 40200 | Startup commandStartup_Command |
uint16 | 1 | 1 | W | Holding (FC03) | |
| 40201 | 40201 | Shutdown commandShutdown_Command |
uint16 | 1 | 1 | W | Holding (FC03) | |
| 42000 | 42000 | Grid codeGrid_Code · Values are listed in section 5.3 of the manual. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 42017 | 42017 | Active power change gradientActive_Power_Gradient · Allowed range 0.1 to 1000. |
uint32 | 2 | %/s | 0.001 | RW | Holding (FC03) |
| 43006 | 43006 | Time zone offsetTime_Zone · Allowed range -720 to 840. |
int16 | 1 | min | 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. The manual does not state the word order for 32-bit values. Check one known value (a voltage or a counter) and switch the setting if it reads wrong.
- 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: Solar Inverter Modbus Interface Definitions (Huawei SUN2000 series) (akkudoktor.net)
Issue 04, 2023-01-10, Huawei Technologies Co., Ltd. (copy hosted by a third party; Huawei-hosted copies could not be fetched), p. 10-22, 97-105. 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.