Sungrow SG CX/RT/RS String Inverters Modbus register map
Sungrow residential and commercial string inverters share one Modbus register definition. Read-only running data such as MPPT inputs, AC output, energy and working state sits in input registers; settings such as start or stop, power limits and reactive power control sit in holding registers.
- Protocol
- Modbus RTU and Modbus TCP
- Defaults
- RS485: slave address 1 by default (1 to 247), 9600 bit/s, 8 data bits, 1 stop bit, RTU. Optional Ethernet Modbus TCP on port 502 (p. 4-5).
- Addresses in the manual
- 1-based register numbers (wire address is the number minus 1)
- 32 and 64-bit values
- Low word first (CD AB)
- Registers listed
- 80
- Checked against
- Version V1.1.80, release date 2026-03-27
Address base. The manual says to read every register at its printed number minus 1. Its example reads registers 5000 to 5001 with a request addressed at 4999, shown as hex 01 04 1387 00 02 (p. 5). For example 4950 in the manual (Protocol number) is address 4949 on the wire.
Word order. The manual states that 32-bit values are little-endian by word: 0x01020304 is sent as 03 04 01 02, so the low word comes first (p. 4). Running data is read with function 04 and settings with functions 03, 06 and 10. The same numbers (5000 and up) appear in both areas with different meanings.
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 |
|---|---|---|---|---|---|---|---|---|
| 4950 | 4949 | Protocol numberProtocol_Number |
uint32 | 2 | 1 | R | Input (FC04) | |
| 4952 | 4951 | Protocol versionProtocol_Version |
uint32 | 2 | 1 | R | Input (FC04) | |
| 4954 | 4953 | ARM software versionARM_Software_Version |
string | 15 | 1 | R | Input (FC04) | |
| 4969 | 4968 | DSP software versionDSP_Software_Version |
string | 15 | 1 | R | Input (FC04) | |
| 4990 | 4989 | Serial numberSerial_Number |
string | 10 | 1 | R | Input (FC04) | |
| 5000 | 4999 | Device type codeDevice_Type_Code · Code maps to a model in the manual appendix of adaptive inverter models. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 5001 | 5000 | Nominal active powerNominal_Active_Power |
uint16 | 1 | kW | 0.1 | R | Input (FC04) |
| 5002 | 5001 | Output typeOutput_Type · 0 two-phase, 1 three-phase four-wire, 2 three-phase three-wire. Decides whether 5019 to 5021 hold phase or line voltages. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 5003 | 5002 | Daily energy yieldDaily_Energy_Yield |
uint16 | 1 | kWh | 0.1 | R | Input (FC04) |
| 5004 | 5003 | Total energy yieldTotal_Energy_Yield · Same quantity as 5144 with a coarser resolution. |
uint32 | 2 | kWh | 1 | R | Input (FC04) |
| 5006 | 5005 | Total running timeTotal_Running_Time |
uint32 | 2 | h | 1 | R | Input (FC04) |
| 5008 | 5007 | Internal temperatureInternal_Temperature |
int16 | 1 | °C | 0.1 | R | Input (FC04) |
| 5009 | 5008 | Total apparent powerTotal_Apparent_Power |
uint32 | 2 | VA | 1 | R | Input (FC04) |
| 5011 | 5010 | MPPT 1 voltageMPPT1_Voltage · Which MPPT inputs exist depends on the model. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 5012 | 5011 | MPPT 1 currentMPPT1_Current |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 5013 | 5012 | MPPT 2 voltageMPPT2_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 5014 | 5013 | MPPT 2 currentMPPT2_Current |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 5015 | 5014 | MPPT 3 voltageMPPT3_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 5016 | 5015 | MPPT 3 currentMPPT3_Current |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 5115 | 5114 | MPPT 4 voltageMPPT4_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 5116 | 5115 | MPPT 4 currentMPPT4_Current |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 5017 | 5016 | Total DC powerTotal_DC_Power |
uint32 | 2 | W | 1 | R | Input (FC04) |
| 5019 | 5018 | A-B line voltage or phase A voltageVoltage_AB_or_A · Meaning depends on the output type in register 5002. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 5020 | 5019 | B-C line voltage or phase B voltageVoltage_BC_or_B · Meaning depends on the output type in register 5002. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 5021 | 5020 | C-A line voltage or phase C voltageVoltage_CA_or_C · Meaning depends on the output type in register 5002. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 5022 | 5021 | Phase A currentCurrent_A |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 5023 | 5022 | Phase B currentCurrent_B |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 5024 | 5023 | Phase C currentCurrent_C |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 5031 | 5030 | Total active powerTotal_Active_Power |
int32 | 2 | W | 1 | R | Input (FC04) |
| 5033 | 5032 | Total reactive powerTotal_Reactive_Power |
int32 | 2 | var | 1 | R | Input (FC04) |
| 5035 | 5034 | Power factorPower_Factor · Positive means leading, negative means lagging. |
int16 | 1 | 0.001 | R | Input (FC04) | |
| 5036 | 5035 | Grid frequency, 0.1 Hz resolutionGrid_Frequency_Coarse |
uint16 | 1 | Hz | 0.1 | R | Input (FC04) |
| 5038 | 5037 | Working state 1Work_State_1 · 0x0000 run, 0x8000 stop, 0x1300 key stop, 0x1500 emergency stop, 0x1400 standby, 0x1200 initial standby, 0x1600 starting, 0x9100 alarm run, 0x8100 derating run, 0x8200 dispatch run, 0x5500 fault, 0x2500 communication fault, 0x1111 uninitialized. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 5045 | 5044 | Fault or alarm codeFault_Alarm_Code_1 · Valid only while the working state is fault (0x5500) or alarm (0x9100). The time of the event is in 5039 to 5044. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 5049 | 5048 | Nominal reactive powerNominal_Reactive_Power |
uint16 | 1 | kvar | 0.1 | R | Input (FC04) |
| 5071 | 5070 | Array insulation resistanceArray_Insulation_Resistance |
uint16 | 1 | kΩ | 1 | R | Input (FC04) |
| 5077 | 5076 | Active power regulation setpointActive_Power_Setpoint_Readback |
uint32 | 2 | W | 1 | R | Input (FC04) |
| 5079 | 5078 | Reactive power regulation setpointReactive_Power_Setpoint_Readback |
int32 | 2 | var | 1 | R | Input (FC04) |
| 5081 | 5080 | Working state 2Work_State_2 · Bit coding is in the manual appendix on working state 2. |
uint32 | 2 | 1 | R | Input (FC04) | |
| 5083 | 5082 | Meter powerMeter_Power · Only supported where a smart energy meter is connected for feed-in limitation. |
int32 | 2 | W | 1 | R | Input (FC04) |
| 5091 | 5090 | Load powerLoad_Power · Only supported where a smart energy meter is connected for feed-in limitation. |
int32 | 2 | W | 1 | R | Input (FC04) |
| 5093 | 5092 | Daily feed-in energyDaily_Feed_In_Energy · Valid only for some models listed in the manual. |
uint32 | 2 | kWh | 0.1 | R | Input (FC04) |
| 5095 | 5094 | Total feed-in energyTotal_Feed_In_Energy · Valid only for some models listed in the manual. |
uint32 | 2 | kWh | 0.1 | R | Input (FC04) |
| 5097 | 5096 | Daily purchased energyDaily_Purchased_Energy · Valid only for some models listed in the manual. |
uint32 | 2 | kWh | 0.1 | R | Input (FC04) |
| 5099 | 5098 | Total purchased energyTotal_Purchased_Energy · Valid only for some models listed in the manual. |
uint32 | 2 | kWh | 0.1 | R | Input (FC04) |
| 5113 | 5112 | Daily running timeDaily_Running_Time |
uint16 | 1 | min | 1 | R | Input (FC04) |
| 5114 | 5113 | Present country codePresent_Country |
uint16 | 1 | 1 | R | Input (FC04) | |
| 5125 | 5124 | Power factor setpointPower_Factor_Setpoint_Readback |
int16 | 1 | 0.001 | R | Input (FC04) | |
| 5128 | 5127 | Monthly energy yieldMonthly_Energy_Yield |
uint32 | 2 | kWh | 0.1 | R | Input (FC04) |
| 5144 | 5143 | Total energy yield, 0.1 kWh resolutionTotal_Energy_Yield_Fine |
uint32 | 2 | kWh | 0.1 | R | Input (FC04) |
| 5146 | 5145 | Negative voltage to groundNegative_Voltage_To_Ground |
int16 | 1 | V | 0.1 | R | Input (FC04) |
| 5147 | 5146 | Bus voltageBus_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 5148 | 5147 | Grid frequency, 0.01 Hz resolutionGrid_Frequency |
uint16 | 1 | Hz | 0.01 | R | Input (FC04) |
| 5150 | 5149 | PID work statePID_Work_State · 2 PID recover operation, 4 anti-PID operation, 8 PID abnormality. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 5151 | 5150 | PID alarm codePID_Alarm_Code |
uint16 | 1 | 1 | R | Input (FC04) | |
| 7013 | 7012 | String 1 currentString1_Current · Check that the hardware supports string current monitoring before relying on these registers. |
uint16 | 1 | A | 0.01 | R | Input (FC04) |
| 7014 | 7013 | String 2 currentString2_Current |
uint16 | 1 | A | 0.01 | R | Input (FC04) |
| 7015 | 7014 | String 3 currentString3_Current |
uint16 | 1 | A | 0.01 | R | Input (FC04) |
| 7016 | 7015 | String 4 currentString4_Current |
uint16 | 1 | A | 0.01 | R | Input (FC04) |
| 5000 | 4999 | Clock yearClock_Year · Used to synchronize the inverter clock from the monitoring system. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 5001 | 5000 | Clock monthClock_Month |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 5002 | 5001 | Clock dayClock_Day |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 5003 | 5002 | Clock hourClock_Hour |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 5004 | 5003 | Clock minuteClock_Minute |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 5005 | 5004 | Clock secondClock_Second |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 5006 | 5005 | Start or stop commandStart_Stop · 0xCF starts the inverter, 0xCE stops it. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 5007 | 5006 | Power limitation switchPower_Limit_Switch · 0xAA enable, 0x55 disable. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 5008 | 5007 | Power limitation settingPower_Limit_Setting · Range is 0 to 1000 when active power overload (5020) is enabled; otherwise see the manual appendix of adaptive models. Takes effect when 5007 is enabled. |
uint16 | 1 | % | 0.1 | RW | Holding (FC03) |
| 5010 | 5009 | Feed-in power limit switchFeed_In_Limit_Switch · 0xAA enable, 0x55 disable. Needs a smart energy meter connected to the inverter. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 5011 | 5010 | Feed-in power limit valueFeed_In_Limit_Value · Range 0 to rated active power. |
uint16 | 1 | kW | 0.01 | RW | Holding (FC03) |
| 5015 | 5014 | Feed-in power limit ratioFeed_In_Limit_Ratio · Range 0 to 1000. Valid only for some models listed in the manual. |
uint16 | 1 | % | 0.1 | RW | Holding (FC03) |
| 5019 | 5018 | Power factor settingPF_Setting · Range -1000 to -800 and 800 to 1000. Positive means leading, negative lagging. Used when 5036 is set to 0xA1. |
int16 | 1 | 0.001 | RW | Holding (FC03) | |
| 5020 | 5019 | Active power overload enableActive_Power_Overload · 0xAA enable, 0x55 disable. Enabled means the inverter dispatches against maximum apparent power rather than rated power. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 5033 | 5032 | Reactive power ratio at nightReactive_Ratio_At_Night · Range -1000 to 1000. Used when night reactive power generation (5035) is enabled. |
int16 | 1 | % | 0.1 | RW | Holding (FC03) |
| 5034 | 5033 | Local or remote control modeLocal_Remote_Control · 1 remote only (this protocol), 2 local only (app), 3 local and remote with the latest setting winning. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 5035 | 5034 | Night SVG switchNight_SVG_Switch · 0xAA enable, 0x55 disable. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 5036 | 5035 | Reactive power adjustment modeReactive_Adjustment_Mode · 0x55 off (power factor 1), 0xA1 power factor setting valid, 0xA2 reactive power percentage valid, 0xA3 Q(P) curve, 0xA4 Q(U) curve. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 5037 | 5036 | Reactive power percentage settingReactive_Percent_Setting · Range -1000 to 1000. Used when 5036 is set to 0xA2. |
int16 | 1 | % | 0.1 | RW | Holding (FC03) |
| 5039 | 5038 | Power limitation adjustmentPower_Limit_Adjustment · Range depends on model, see the manual appendix of adaptive models. |
uint16 | 1 | kW | 0.1 | RW | Holding (FC03) |
| 5040 | 5039 | Reactive power adjustmentReactive_Power_Adjustment · Range depends on model. Used when 5036 is set to 0xA2. |
int16 | 1 | kvar | 0.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: Communication Protocol of Residential & Commercial PV Grid-Connected Inverters (info-support.sungrowpower.com)
Version V1.1.80, release date 2026-03-27, p. 4-11, 30. 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.