Sungrow SG string inverters (RT / CX) Modbus register map
Also covers SG100CX / SG100CX-JP, SG10RT, SG10RT-P2, SG110CX, SG110CX-P2, SG125CX-P2, SG12RT, SG12RT-P2, SG15RT, SG15RT-P2, SG17RT, SG17RT-P2, SG20RT, SG20RT-P2, SG22RT, SG23RT, SG23RT-P2, SG25CX-P2, SG25CX-SA, SG25RT, SG25RT-P2, SG3.0RT, SG3.0RT-P2, SG30CX, SG30CX-P2, SG33CX, SG33CX-P2, SG36CX-P2, SG36CX-US, SG4.0RT, SG4.0RT-P2, SG40CX, SG40CX-P2, SG49.5CX-JP, SG5.0RT, SG5.0RT-P2, SG50CX, SG50CX-P2, SG6.0RT, SG6.0RT-P2, SG60CX-US, SG7.0RT, SG7.0RT-P2, SG75CX, SG75CX-P2, SG8.0RT, SG8.0RT-P2
Three-phase and single-phase PV string inverters, SG RT and SG CX series (and P2 variants)
- Official
- 98 registers
- Modbus TCP and RTU
- Revision 1 · 2026-11-10
- Identity: model, firmware, serial number
Official: Written from the manufacturer's documentation, but not tested on a device yet. Check the map against the manufacturer's documentation before you write to a live device. Tested it? Report a test.
Communication
- Protocol
- Modbus TCP and RTU
- Unit ID
- 1
- TCP port
- 502
- Serial
- 9600 8N1 · 9600 baud, 8 data bits, none parity, 1 stop bit
- Byte / word order
- CDAB · bytes big-endian, words low first (word swap)
- Addresses
- 1-based · wire address = address − 1
Connection values are defaults: the device may be configured differently.
Map
- Registers
- 16 holding registers, 82 input registers
- Groups
- 8
- Revision
- 1 · 2026-11-10
- Added
- ()
- File
- maps/sungrow/sg-string.mbmap.json · 24 KB · history
- SHA-256
- 9ffa85c002c9c43dea1ca833c142a2311cde45e80bf4b1def1bfd201799b2081
- Manufacturer
- sungrowpower.com
Device identity
What a tool can read to check that this map fits the connected device (SPEC.md section 4.7). Registers with a role are read like any other register.
| Role | Register | Address | Type | Values |
|---|---|---|---|---|
| Firmware | ARM software version | input 4954 | string[15] | |
| Serial number | Serial number | input 4990 | string[10] | |
| Model | Device type code | input 5000 | uint16 | 0x2430 = SG5.0RT, 0x2431 = SG6.0RT, 0x2432 = SG8.0RT, +44 more |
Sources and notes
- Communication Protocol of PV Grid-Connected String Inverters · version V1.1.53, 2023-01-17 sections 3.1, 3.2 and appendices 1 and 5; document marked Public; linked in issue #185
Source: Sungrow, Communication Protocol of PV Grid-Connected String Inverters V1.1.53 (TI_20230117)
- Addresses are the protocol addresses of the manual; the wire address is one less (address_base 1).
- Read-only data are input registers (FC04); settings are holding registers (FC03/06/16). Input 5000 and holding 5000 are different registers.
- 32-bit values are sent low word first.
- A register the model does not have returns 0xFFFF (16-bit) or 0xFFFFFFFF (32-bit).
- Only the registers common to the RT and CX series are listed. Meter, MPPT 13-16, strings 25-32, fault time, country, curve and dispatch registers are not included.
- Which MPPT inputs and strings exist, and the setting ranges, depend on the model (appendix 5 of the manual).
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| IR | 4950 | uint32 CDAB | R | ||||
| IR | 4952 | uint32 CDAB | R | ||||
| IR | 4954 | string[15] | R | ||||
| IR | 4969 | string[15] | R | ||||
| IR | 4990 | string[10] | R | ||||
| IR | 5000 | uint16 | R | Model code from the protocol's device table | |||
| IR | 5001 | uint16 | R | kW | ×0.1 | ||
| IR | 5002 | uint16 | R | Tells whether registers 5019-5021 hold phase voltages (1) or line voltages (2) | |||
| IR | 5003 | uint16 | R | kWh | ×0.1 | ||
| IR | 5004 | uint32 CDAB | R | kWh | Whole kWh; 5144 has 0.1 kWh resolution on newer models | ||
| IR | 5006 | uint32 CDAB | R | h | |||
| IR | 5008 | int16 | R | °C | ×0.1 | ||
| IR | 5009 | uint32 CDAB | R | VA | Only on models that support it; 0xFFFFFFFF otherwise | ||
| IR | 5011 | uint16 | R | V | ×0.1 | ||
| IR | 5012 | uint16 | R | A | ×0.1 | ||
| IR | 5013 | uint16 | R | V | ×0.1 | 0xFFFF when the model has no such input | |
| IR | 5014 | uint16 | R | A | ×0.1 | ||
| IR | 5015 | uint16 | R | V | ×0.1 | 0xFFFF when the model has no such input | |
| IR | 5016 | uint16 | R | A | ×0.1 | ||
| IR | 5115 | uint16 | R | V | ×0.1 | 0xFFFF when the model has no such input | |
| IR | 5116 | uint16 | R | A | ×0.1 | ||
| IR | 5117 | uint16 | R | V | ×0.1 | 0xFFFF when the model has no such input | |
| IR | 5118 | uint16 | R | A | ×0.1 | ||
| IR | 5119 | uint16 | R | V | ×0.1 | 0xFFFF when the model has no such input | |
| IR | 5120 | uint16 | R | A | ×0.1 | ||
| IR | 5121 | uint16 | R | V | ×0.1 | 0xFFFF when the model has no such input | |
| IR | 5122 | uint16 | R | A | ×0.1 | ||
| IR | 5123 | uint16 | R | V | ×0.1 | 0xFFFF when the model has no such input | |
| IR | 5124 | uint16 | R | A | ×0.1 | ||
| IR | 5130 | uint16 | R | V | ×0.1 | 0xFFFF when the model has no such input | |
| IR | 5131 | uint16 | R | A | ×0.1 | ||
| IR | 5132 | uint16 | R | V | ×0.1 | 0xFFFF when the model has no such input | |
| IR | 5133 | uint16 | R | A | ×0.1 | ||
| IR | 5134 | uint16 | R | V | ×0.1 | 0xFFFF when the model has no such input | |
| IR | 5135 | uint16 | R | A | ×0.1 | ||
| IR | 5136 | uint16 | R | V | ×0.1 | 0xFFFF when the model has no such input | |
| IR | 5137 | uint16 | R | A | ×0.1 | ||
| IR | 5017 | uint32 CDAB | R | W | |||
| IR | 5019 | uint16 | R | V | ×0.1 | Phase voltage or line voltage, depending on output type (5002) | |
| IR | 5020 | uint16 | R | V | ×0.1 | Phase voltage or line voltage, depending on output type (5002) | |
| IR | 5021 | uint16 | R | V | ×0.1 | Phase voltage or line voltage, depending on output type (5002) | |
| IR | 5022 | uint16 | R | A | ×0.1 | ||
| IR | 5023 | uint16 | R | A | ×0.1 | ||
| IR | 5024 | uint16 | R | A | ×0.1 | ||
| IR | 5031 | uint32 CDAB | R | W | |||
| IR | 5033 | int32 CDAB | R | var | |||
| IR | 5035 | int16 | R | ×0.001 | Positive leading, negative lagging | ||
| IR | 5036 | uint16 | R | Hz | ×0.1 | Older models; RT and newer models use 5148 with finer resolution | |
| IR | 5038 | uint16 | R | ||||
| IR | 5045 | uint16 | R | Valid only while the work state is Fault or Alarm run; code list is in the manufacturer's appendix | |||
| IR | 5049 | uint16 | R | kvar | ×0.1 | ||
| IR | 5071 | uint16 | R | kΩ | 0xFFFF means invalid | ||
| IR | 5113 | uint16 | R | min | |||
| IR | 5128 | uint32 CDAB | R | kWh | ×0.1 | ||
| IR | 5144 | uint32 CDAB | R | kWh | ×0.1 | RT series and some other models | |
| IR | 5146 | int16 | R | V | ×0.1 | ||
| IR | 5147 | uint16 | R | V | ×0.1 | ||
| IR | 5148 | uint16 | R | Hz | ×0.01 | RT series and some other models | |
| IR | 7013 | uint16 | R | A | ×0.01 | Available only if the hardware reports string currents; the number of strings depends on the model | |
| IR | 7014 | uint16 | R | A | ×0.01 | ||
| IR | 7015 | uint16 | R | A | ×0.01 | ||
| IR | 7016 | uint16 | R | A | ×0.01 | ||
| IR | 7017 | uint16 | R | A | ×0.01 | ||
| IR | 7018 | uint16 | R | A | ×0.01 | ||
| IR | 7019 | uint16 | R | A | ×0.01 | ||
| IR | 7020 | uint16 | R | A | ×0.01 | ||
| IR | 7021 | uint16 | R | A | ×0.01 | ||
| IR | 7022 | uint16 | R | A | ×0.01 | ||
| IR | 7023 | uint16 | R | A | ×0.01 | ||
| IR | 7024 | uint16 | R | A | ×0.01 | ||
| IR | 7025 | uint16 | R | A | ×0.01 | ||
| IR | 7026 | uint16 | R | A | ×0.01 | ||
| IR | 7027 | uint16 | R | A | ×0.01 | ||
| IR | 7028 | uint16 | R | A | ×0.01 | ||
| IR | 7029 | uint16 | R | A | ×0.01 | ||
| IR | 7030 | uint16 | R | A | ×0.01 | ||
| IR | 7031 | uint16 | R | A | ×0.01 | ||
| IR | 7032 | uint16 | R | A | ×0.01 | ||
| IR | 7033 | uint16 | R | A | ×0.01 | ||
| IR | 7034 | uint16 | R | A | ×0.01 | ||
| IR | 7035 | uint16 | R | A | ×0.01 | ||
| IR | 7036 | uint16 | R | A | ×0.01 | ||
| HR | 5000 | uint16 | RW | ||||
| HR | 5001 | uint16 | RW | ||||
| HR | 5002 | uint16 | RW | ||||
| HR | 5003 | uint16 | RW | ||||
| HR | 5004 | uint16 | RW | ||||
| HR | 5005 | uint16 | RW | ||||
| HR | 5006 | uint16 | RW | ||||
| HR | 5007 | uint16 | RW | ||||
| HR | 5008 | uint16 | RW | % | ×0.1 | Percent of nominal power; used when the limitation switch is enabled; range depends on the model | |
| HR | 5016 | uint16 | RW | kW | ×0.01 | ||
| HR | 5019 | int16 | RW | ×0.001 | Range -1.000 to -0.800 or 0.800 to 1.000; used when reactive mode (5036) is 0xA1 | ||
| HR | 5020 | uint16 | RW | ||||
| HR | 5036 | uint16 | RW | ||||
| HR | 5037 | int16 | RW | % | ×0.1 | -100.0 to 100.0; used when reactive mode is 0xA2 | |
| HR | 5039 | uint16 | RW | kW | ×0.1 | Power limit in kW; range depends on the model | |
| HR | 5040 | int16 | RW | kvar | ×0.1 | Reactive power in kvar; range depends on the model |
Help improve this map
- I tested it on a deviceReport whether it worked, even if you did not write the map.
- Suggest a correctionEdit the file on GitHub; it opens a pull request.
- Report a problemA wrong address, type, scale or byte order.
- Read the formatWhat each key of the file means (SPEC.md).