Solis (Ginlong) Grid-connected PV inverters (RS485 protocol) Modbus register map
The Solis RS485_MODBUS protocol for its grid-connected PV inverters in all power ranges, for machines manufactured after mid-2023. It gives read access to energy counters, DC and MPPT inputs, phase values, status and fault bit fields, and read and write access to the clock, the on or off command and the active power, reactive power and power factor controls. Solis publishes its hybrid inverter Modbus table as a separate document, which this file does not cover.
- Protocol
- Modbus RTU over RS485 (function codes 0x03, 0x04, 0x06, 0x10)
- Defaults
- Slave address 1 to 99, 9600 baud, no parity, 8 data bits, 1 stop bit (p. 4). At least 300 ms between acquisition frames and 700 ms between control frames. The document recommends at most 100 bytes (50 registers) per frame (p. 5). Unimplemented registers inside the valid range read as 0x0000 without an exception, and writes to them are discarded with a normal response (p. 5). Only one write action is allowed per frame, so function 0x06 is recommended (p. 5).
- Addresses in the manual
- 0-based protocol addresses, as sent on the wire
- 32 and 64-bit values
- High word first (AB CD)
- Registers listed
- 148
- Checked against
- Ver3.7 (PDF title: ModbusRTU Communication Protocol for Grid-connected Inverters_Ver.3.7_EN), revision V000B000D001 dated 2026/6/16, Ginlong (Solis). Hosted by Solis and linked from the Solis Service Center article 'Modus table for grid and hybrid inverters'
Address base. The document prints decimal register numbers (for example 2999, 3000, 35000) and its function code table says 0x04 covers 30001-39999 and 0x03 covers 40001-49999, but the frame examples show the printed number used as the wire address with no offset: section 6.2 reads 'Reg. Start Address (2999)' as 0x0B 0xB7 (0x0BB7 is 2999) and returns the product model and DSP version, section 6.3 does the same with function 0x03, and the Appendix 4 frames write 3068, 3069 and 3070 as 0x0BFC, 0x0BFD and 0x0BFE and 3080 as 0x0C08. Registers 5.1 are read with function 0x04 (input) and 5.2 with 0x03, 0x06 and 0x10 (holding). The same number can appear in both tables as different registers (for example 3050 and 3051). Address 35000 in the manual is address 35000 on the wire.
Word order. Section 3.1 states for 32-bit values that the high word comes first and the low word second, and that the high byte precedes the low byte within a register.
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 |
|---|---|---|---|---|---|---|---|---|
| 35000 | 35000 | Inverter type codeInverter_Type · Codes in Appendix 1, for example 0x1010 single-phase inverter, 0x1020 three-phase inverter, 0x1021 three-phase grid-tied string inverter. Some entries list two values (for example 0x1010/0x3F2). |
uint16 | 1 | 1 | R | Input (FC04) | |
| 2999 | 2999 | Product model codeProduct_Model · The document gives no code table for this register. The p. 14 example reads it together with DSP_Version and returns 0x0043. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3000 | 3000 | DSP versionDSP_Version · Example format 0xAABB: AA is the major version of the slave DSP and BB the major version of the main DSP. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3001 | 3001 | HMI major versionHMI_Version_Major · Only the major version is present, in the low byte. The high byte is empty. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3003 | 3003 | DC input typeDC_Input_Type · 0 is 1 DC input, 1 is 2 DC input, 2 is 3 DC input, 3 is 4 DC input, and so on. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3004 | 3004 | Active powerActive_Power |
int32 | 2 | W | 1 | R | Input (FC04) |
| 3006 | 3006 | Total DC output powerTotal_DC_Output_Power |
uint32 | 2 | W | 1 | R | Input (FC04) |
| 3008 | 3008 | Total energyEnergy_Total |
uint32 | 2 | kWh | 1 | R | Input (FC04) |
| 3010 | 3010 | Energy this monthEnergy_This_Month |
uint32 | 2 | kWh | 1 | R | Input (FC04) |
| 3012 | 3012 | Energy last monthEnergy_Last_Month |
uint32 | 2 | kWh | 1 | R | Input (FC04) |
| 3014 | 3014 | Energy todayEnergy_Today |
uint16 | 1 | kWh | 0.1 | R | Input (FC04) |
| 3015 | 3015 | Energy yesterdayEnergy_Yesterday |
uint16 | 1 | kWh | 0.1 | R | Input (FC04) |
| 3020 | 3020 | HMI versionHMI_Version · Example format 0xAABB: AA is the minor version number and BB the major version number. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3021 | 3021 | DC voltage 1DC_Voltage_1 · The remark lists the DC voltage and current registers 3021 to 3028 as applicable to non-string inverters: 0.7 to 10K single phase, 5 to 25K series and 25 to 50K series. |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3022 | 3022 | DC current 1DC_Current_1 |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 3023 | 3023 | DC voltage 2DC_Voltage_2 |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3024 | 3024 | DC current 2DC_Current_2 |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 3025 | 3025 | DC voltage 3DC_Voltage_3 |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3026 | 3026 | DC current 3DC_Current_3 |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 3027 | 3027 | DC voltage 4DC_Voltage_4 |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3028 | 3028 | DC current 4DC_Current_4 |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 3029 | 3029 | Alarm code dataAlarm_Code_Data · Used together with register 3043 to subdivide the fault message display. Value tables are in Appendix 2. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3033 | 3033 | AB line voltage or A phase voltageGrid_Voltage_AB_Or_A |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3034 | 3034 | BC line voltage or B phase voltageGrid_Voltage_BC_Or_B |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3035 | 3035 | CA line voltage or C phase voltageGrid_Voltage_CA_Or_C |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3036 | 3036 | A phase currentPhase_Current_A |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 3037 | 3037 | B phase currentPhase_Current_B |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 3038 | 3038 | C phase currentPhase_Current_C |
uint16 | 1 | A | 0.1 | R | Input (FC04) |
| 3040 | 3040 | Standard working modeStandard_Working_Mode · 0 No response mode, 1 Volt-watt default, 2 Volt-var, 3 Fixed power factor, 4 Fix reactive power, 5 Power-PF, 6 Rule21 Volt-watt. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3041 | 3041 | Inverter temperature (AC NTC, IGBT)Inverter_Temperature |
int16 | 1 | degC | 0.1 | R | Input (FC04) |
| 3042 | 3042 | Grid frequencyGrid_Frequency |
uint16 | 1 | Hz | 0.01 | R | Input (FC04) |
| 3043 | 3043 | Inverter statusInverter_Status · Used together with register 3029 to subdivide the status display. Value tables are in Appendix 2. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3044 | 3044 | Limited active power adjustment rated power output valueLimited_Active_Power_Output |
int32 | 2 | W | 1 | R | Input (FC04) |
| 3046 | 3046 | Reactive power regulation rated power output valueReactive_Power_Regulation_Output |
int32 | 2 | Var | 1 | R | Input (FC04) |
| 3049 | 3049 | Active power percentage valueActive_Power_Percentage · The unit column prints 0.10% but the remark and the section 6.12 example (reading 3049, bytes 0x2710) read 10000 as 100 %, so one count is 0.01 %. Taking the unit column literally (0.1 %) would make 10000 equal 1000 %, so the remark is used. Section 6.13 is internally inconsistent: its frame carries 0x2710 but its parameter table shows 0x03E8 labelled 10000. |
uint16 | 1 | % | 0.01 | R | Input (FC04) |
| 3051 | 3051 | Actual power factor adjustmentPower_Factor_Adjustment · The unit column prints 0.01 but the remark ('800<-->0.8'), the section 6.8 example (reading 3051 returns 800, PF 0.8) and Appendix 4 (writing 1000 for PF 1) all give 0.001 per count. |
int16 | 1 | 0.001 | R | Input (FC04) | |
| 3052 | 3052 | Reactive power percentage valueReactive_Power_Percentage · The unit column prints 0.10% but the remark and the section 6.10 example (reading 3052 returns 10000, 100 %) give 0.01 % per count. |
int16 | 1 | % | 0.01 | R | Input (FC04) |
| 3055 | 3055 | Reactive power valueReactive_Power |
int32 | 2 | Var | 1 | R | Input (FC04) |
| 3057 | 3057 | Apparent power valueApparent_Power |
int32 | 2 | VA | 1 | R | Input (FC04) |
| 3060 | 3060 | Inverter serial number word 1 (SN_1)Inverter_Serial_Number_1 · Serial number word, shown as hexadecimal. The p. 9 example (SN 12345679ABCDEF uploads 0x4321, 0x8765, 0xCBA9, 0x0FED) labels the values 3061 to 3064, while the table lists SN_1 to SN_4 at 3060 to 3063. Check the order on the device. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3061 | 3061 | Inverter serial number word 2 (SN_2)Inverter_Serial_Number_2 |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3062 | 3062 | Inverter serial number word 3 (SN_3)Inverter_Serial_Number_3 |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3063 | 3063 | Inverter serial number word 4 (SN_4)Inverter_Serial_Number_4 |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3071 | 3071 | Working status bitsWorking_Status · Bit definitions in Appendix 3: bit 0 normal operation, 1 initial standby, 2 controlled shutdown, 3 fault shutdown, 4 standby, 5 derating operation, 6 power-limit operation, 7 over voltage reduction, 8 grid surge, 9 internal fan fault, 10 external fan fault, 11 grid surge protector abnormal, 12 DC surge protector abnormal, 14 phase-ground alarm, 15 IGBT fault. |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3072 | 3072 | System time, yearSystem_Time_Year · Year range is 0 to 99. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3073 | 3073 | System time, monthSystem_Time_Month |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3074 | 3074 | System time, daySystem_Time_Day |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3075 | 3075 | System time, hourSystem_Time_Hour |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3076 | 3076 | System time, minuteSystem_Time_Minute |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3077 | 3077 | System time, secondSystem_Time_Second |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3089 | 3089 | Power limit switchPower_Limit_Switch · 0x55 is OFF, 0xAA is ON. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3090 | 3090 | Reactive power switchReactive_Power_Switch · 0x55 is OFF. Both 0xA1 and 0xA2 are printed as ON. |
uint16 | 1 | 1 | R | Input (FC04) | |
| 3094 | 3094 | Limiting (derating) status bitsLimiting_Status · Bit definitions in Appendix 3: bit 0 over temperature derating, 1 over frequency derating, 2 over voltage derating, 3 reactive power derating, 4 under frequency derating, 5 power soft run, 6 bypass derating, 7 AC over temperature derating, 8 DRM controlling limit, 9 PLmt controlling limit. |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3095 | 3095 | Fault code 01 (fault info 1 bits)Fault_Code_01 · Bit definitions in Appendix 3. |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3096 | 3096 | Fault code 02 (fault info 2 bits)Fault_Code_02 |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3097 | 3097 | Fault code 03 (fault info 3 bits)Fault_Code_03 |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3098 | 3098 | Fault code 04 (fault info 4 bits)Fault_Code_04 |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3099 | 3099 | Fault code 05 (fault info 5 bits)Fault_Code_05 |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3100 | 3100 | Fault code 06 (fault info 6 bits)Fault_Code_06 |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3101 | 3101 | Fault code 07 (fault info 7 bits)Fault_Code_07 |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3102 | 3102 | Fault code 08 (fault info 8 bits)Fault_Code_08 |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3103 | 3103 | Warning message from the DSPWarning_Message_DSP · Bit definitions in Appendix 3. |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3104 | 3104 | Warning message from the HMIWarning_Message_HMI · Bit definitions in Appendix 3. |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3109 | 3109 | Factory rated output powerFactory_Rated_Output_Power · The unit column prints 10W, so one count is 10 W. |
uint16 | 1 | W | 10 | R | Input (FC04) |
| 3288 | 3288 | PV21 currentPV21_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3289 | 3289 | PV22 currentPV22_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3290 | 3290 | PV23 currentPV23_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3291 | 3291 | PV24 currentPV24_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3292 | 3292 | PV25 currentPV25_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3293 | 3293 | PV26 currentPV26_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3294 | 3294 | PV27 currentPV27_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3295 | 3295 | PV28 currentPV28_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3296 | 3296 | PV29 currentPV29_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3297 | 3297 | PV30 currentPV30_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3299 | 3299 | Total PV currentTotal_PV_Current · Register 3298 is also named Total PV current but with unit 0.1V and is not listed here. |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3300 | 3300 | PV1 currentPV1_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3301 | 3301 | PV2 currentPV2_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3302 | 3302 | PV3 currentPV3_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3303 | 3303 | PV4 currentPV4_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3304 | 3304 | PV5 currentPV5_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3305 | 3305 | PV6 currentPV6_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3306 | 3306 | PV7 currentPV7_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3307 | 3307 | PV8 currentPV8_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3308 | 3308 | PV9 currentPV9_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3309 | 3309 | PV10 currentPV10_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3310 | 3310 | PV11 currentPV11_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3311 | 3311 | PV12 currentPV12_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3312 | 3312 | PV13 currentPV13_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3313 | 3313 | PV14 currentPV14_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3314 | 3314 | PV15 currentPV15_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3315 | 3315 | PV16 currentPV16_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3316 | 3316 | PV17 currentPV17_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3317 | 3317 | PV18 currentPV18_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3318 | 3318 | PV19 currentPV19_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3319 | 3319 | PV20 currentPV20_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3336 | 3336 | PV31 currentPV31_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3337 | 3337 | PV32 currentPV32_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3471 | 3471 | Fault code 10 (fault info 10 bits)Fault_Code_10 · Bit definitions in Appendix 3. |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3472 | 3472 | Fault code 11 (fault info 11 bits)Fault_Code_11 |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3473 | 3473 | Fault code 12 (fault info 12 bits)Fault_Code_12 |
bitfield16 | 1 | 1 | R | Input (FC04) | |
| 3499 | 3499 | MPPT 1 voltageMPPT1_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3500 | 3500 | MPPT 2 voltageMPPT2_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3501 | 3501 | MPPT 3 voltageMPPT3_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3502 | 3502 | MPPT 4 voltageMPPT4_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3503 | 3503 | MPPT 5 voltageMPPT5_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3504 | 3504 | MPPT 6 voltageMPPT6_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3505 | 3505 | MPPT 7 voltageMPPT7_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3506 | 3506 | MPPT 8 voltageMPPT8_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3507 | 3507 | MPPT 9 voltageMPPT9_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3508 | 3508 | MPPT 10 voltageMPPT10_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3509 | 3509 | MPPT 11 voltageMPPT11_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3510 | 3510 | MPPT 12 voltageMPPT12_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3511 | 3511 | MPPT 13 voltageMPPT13_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3512 | 3512 | MPPT 14 voltageMPPT14_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3513 | 3513 | MPPT 15 voltageMPPT15_Voltage |
uint16 | 1 | V | 0.1 | R | Input (FC04) |
| 3529 | 3529 | MPPT 1 currentMPPT1_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3530 | 3530 | MPPT 2 currentMPPT2_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3531 | 3531 | MPPT 3 currentMPPT3_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3532 | 3532 | MPPT 4 currentMPPT4_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3533 | 3533 | MPPT 5 currentMPPT5_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3534 | 3534 | MPPT 6 currentMPPT6_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3535 | 3535 | MPPT 7 currentMPPT7_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3536 | 3536 | MPPT 8 currentMPPT8_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3537 | 3537 | MPPT 9 currentMPPT9_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3538 | 3538 | MPPT 10 currentMPPT10_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3539 | 3539 | MPPT 11 currentMPPT11_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3540 | 3540 | MPPT 12 currentMPPT12_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3541 | 3541 | MPPT 13 currentMPPT13_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3542 | 3542 | MPPT 14 currentMPPT14_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3543 | 3543 | MPPT 15 currentMPPT15_Current |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 3545 | 3545 | MPPT 16 currentMPPT16_Current · Register 3544 is also printed as MPPT 16 current with unit 0.1V and S16 is printed for 3545, so 3544 is not listed here. |
int16 | 1 | A | 0.1 | R | Input (FC04) |
| 2999 | 2999 | Set system time, yearSet_Time_Year · Year range is 0 to 99. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 3000 | 3000 | Set system time, monthSet_Time_Month |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 3001 | 3001 | Set system time, daySet_Time_Day |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 3002 | 3002 | Set system time, hourSet_Time_Hour |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 3003 | 3003 | Set system time, minutesSet_Time_Minutes |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 3004 | 3004 | Set system time, secondsSet_Time_Seconds |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 3006 | 3006 | Inverter on or off commandOn_Off · 0xBE is ON, 0xDE is OFF. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 3050 | 3050 | Reactive power limitationReactive_Power_Limitation_Set · Range -60 % to +60 %, default 0, only available for working mode 04. 10000 is 100 % (the 30 % example in Appendix 4 writes 3000 in frame 01 06 0B EA 0B B8, where 0x0BEA is 3050). Section 6.11 labels its frame address 3053 but the bytes 0x0BEA are 3050. The unit column printing 0.10% conflicts with the remark and is not used. Set register 3070 to 0xA1 first, see Appendix 4. |
int16 | 1 | % | 0.01 | RW | Holding (FC03) |
| 3051 | 3051 | Percentage of active powerActive_Power_Percentage_Set · Range 0 % to 110 %. 10000 is 100 % (Appendix 4 writes 10000 for 100 %, frame 01 06 0B EB 27 10). The unit column printing 0.10% conflicts with this and is not used. Section 6.13 is internally inconsistent: its frame carries 0x2710 but its parameter table shows 0x03E8 labelled 10000. Set register 3069 to 0xAA first, see Appendix 4. |
uint16 | 1 | % | 0.01 | RW | Holding (FC03) |
| 3053 | 3053 | Actual power factor adjustmentPower_Factor_Adjustment_Set · The unit column prints 0.01 but the remark ('800<-->0.800'), the section 6.9 example (writing 800 gives PF 0.8) and Appendix 4 (writing 1000 gives PF 1) give 0.001 per count. Appendix 4 says to set register 3070 to 0xA2 first, and its step 2 text names register 3082 although its example frame writes register 3053 (0x0BED). |
int16 | 1 | 0.001 | RW | Holding (FC03) | |
| 3068 | 3068 | Power-off saving function bitsPower_Off_Saving_Function · Bit 0: 1 saves register 3051 across power off. Bit 2: same for register 3050. Bit 3: same for register 3053. Bit 1 and bits 4 to 15 are reserved. |
bitfield16 | 1 | 1 | RW | Holding (FC03) | |
| 3069 | 3069 | Active power switchActive_Power_Switch · 0x55 is OFF, 0xAA enables registers 3051 and 3080. Default 0xAA. Written values are saved automatically to flash (WS), so frequent writes are not recommended. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 3070 | 3070 | Reactive power switchReactive_Power_Switch_Set · 0x55 is OFF, 0xA1 enables registers 3050 and 3082, 0xA2 enables register 3053. Default 0x55. Written values are saved automatically to flash (WS), so frequent writes are not recommended. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 3080 | 3080 | Active power set-point 1Active_Power_Set_Point_1 · The unit column prints 10W, so one count is 10 W (Appendix 4: writing 10000 gives a 100 kW limit). Range 0 to +32768 as printed. Appendix 4 uses this register for inverters under the 320K series. Set register 3069 to 0xAA first, see Appendix 4. |
int16 | 1 | W | 10 | RW | Holding (FC03) |
| 3082 | 3082 | Reactive power set-point 1Reactive_Power_Set_Point_1 · The unit column prints 10Var, so one count is 10 Var (Appendix 4: writing 6000 gives a 60 kW limit). Range -32767 to +32768 as printed. Appendix 4 uses this register for inverters under the 320K series; its step 2 text names register 3082 and its example text names register 3080, but the example frame address 0x0C0A is 3082. Set register 3070 to 0xA1 first, see Appendix 4. |
int16 | 1 | Var | 10 | RW | Holding (FC03) |
| 3222 | 3222 | Active power set-point 2Active_Power_Set_Point_2 · The unit column prints 10W, so one count is 10 W. Only for the 320K series. Set register 3069 to 0xAA first, see Appendix 4. |
int32 | 2 | W | 10 | RW | Holding (FC03) |
| 3224 | 3224 | Reactive power set-point 2Reactive_Power_Set_Point_2 · The unit column prints 10Var, so one count is 10 Var. Only for the 320K series. Set register 3070 to 0xA1 first, see Appendix 4. |
int32 | 2 | Var | 10 | 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 AB CD.
- 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: RS485_MODBUS Communication (Solis grid-connected inverters) (oss.soliscloud.com)
Ver3.7 (PDF title: ModbusRTU Communication Protocol for Grid-connected Inverters_Ver.3.7_EN), revision V000B000D001 dated 2026/6/16, Ginlong (Solis). Hosted by Solis and linked from the Solis Service Center article 'Modus table for grid and hybrid inverters', p. 4-14, 16-19, 28-43. Read on 2026-10-24.
Also used: Solis Service Center: Modus table for grid and hybrid inverters (solis-service.solisinverters.com)
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.