This document provides a comprehensive overview of the VPP functions of Solax energy storage inverters. Please note that not each type of energy storage inverters contains each of the following VPP control modes, please contact service support to find out which VPP control modes are included in a specific type of energy storage inverters.
For parameter writing operation, unlocking process is required first. This unlock password is the same as the unlock password required before doing parameter setting locally on the inverter, and the default is "2014". After unlocking, the system will always be in the unlocked state unless an invalid password is written again or the system is rebooted.
Unlock Address:
Function code 0x06, register 0x0000
You can also query the lock status of the device.
Query Address:
Function code 0x04, register 0x0054
0x007C~0x008A is the index of Remote Control (VPP function) multi-write control (function code 0x10). When using it, please select the corresponding parameter to fill and write according to the required mode. For mode 1-7, depending on the current device mechanism, it is necessary to fill values for all registers in this mode. For mode 1-3, the registers that need to be filled with values are 0x007C~0x0088. For mode 4-7, the registers that need to be filled with values are 0x007C~0x008A. Filling any values in the registers that are not related to the current mode will not affect the current mode, and "0" is the necessary value for irrelevant registers. The feature to fill only the required registers is not supported yet, but it will be available soon. Please stay tuned.
Further details on how to set each parameter to realize various types of control can be found in Section 2.3 "Details of each mode" below, where for mode 1-7 only the registers needed for each mode are listed, the rest of the irrelevant registers need to be filled in as “0” as well.
Model 1 Description:
This mode controls the active and reactive power at the AC port of the inverter for a period of time. In this mode the PV runs at the highest possible power and the system can feed/take power to/from the grid.
Exit logic: The exit of mode 1 based on the two limit values, “Time_of_Duration” and “RemoteCtrlTimeOut”. That is, the “Time_of_Duration” is judged first, if during this period there is no new power target command, then continue to wait for the time of “RemoteCtrlTimeOut”, if “RemoteCtrlTimeOut” is satisfied, then the mode 1 is exited to the regular work mode of the inverter.
The key of the model is that the system will try to meet the target power as much as possible.
In this mode the AC port power target is positive for charging and negative for discharging; the battery input represents charging and the output represents discharging; the PV is always the input to the inverter.
Control Mode |
Register |
Variable |
Unit |
mode 1 (power control mode) |
0x007C |
ModbusPowerControl |
1 |
0x007D |
TargetSetType |
1 |
|
0x007E |
RemoteControl ActivePower |
1W |
|
0x007F |
|||
0x0080 |
RemoteControl ReactivePower |
1W |
|
0x0081 |
|||
0x0082 |
Time_of_Duration |
1s |
|
0x0088 |
RemoteCtrlTimeOut |
1s |
Case study 1.1:
Inverter work mode: Self-Use Mode
P(PV) = 2000W
P(BAT) = 1000W (battery charging)
P(AC) = -1000W (inverter output)
P(Load) = 1000W (load consumption)
Grid Meter = 0
Inverter AC port output active power 5000W;
PV runs at maximum power if possible;
The above state lasts for 5 minutes;
Register |
Variable |
Unit |
Case Study 1.1 (decimal) |
Write Value (hexadecimal) |
0x007C |
ModbusPowerControl |
1 |
1 |
0x0001 |
0x007D |
TargetSetType |
1 |
1 |
0x0001 |
0x007E |
RemoteControl ActivePower |
1W |
-5000 |
0xEC78 |
0x007F |
0xFFFF |
|||
0x0080 |
RemoteControl ReactivePower |
1W |
0 |
0x0000 |
0x0081 |
0x0000 |
|||
0x0082 |
Time_of_Duration |
1s |
300 |
0x012C |
0x0088 |
RemoteCtrlTimeOut |
1s |
600 |
0x0258 |
Power Control Mode
P(PV) = P(PV max) = 2000W (This is the maximum value in the example environment.)
P(BAT) = -3000W (battery discharging)
P(AC) = -5000W (inverter output)
P(Load) = 1000W (load consumption)
Grid Meter = 4000W (feed into grid)
The above condition lasts for 300s and then the AC port stops outputting. After this continues for 600s, the inverter returns to Self-Use mode.
Case study 1.2:
Remote Control Mode 1 (VPP control); before entering this remote control mode 1, the inverter’s work mode is Backup mode.
P(PV) = 4000W
P(BAT) = 1000W (battery charging)
P(AC) = -3000W (inverter output)
P(Load) = 3000W (load consumption)
Grid Meter = 0
Remote Control Mode 1 + Updated target
Inverter AC port input active power 1000W;
PV runs at maximum power if possible;
The above state lasts for 5 minutes;
Register |
Variable |
Unit |
Case Study 1.2 (decimal) |
Write Value (hexadecimal) |
0x007C |
ModbusPowerControl |
1 |
1 |
0x0001 |
0x007D |
TargetSetType |
1 |
2 |
0x0002 |
0x007E |
RemoteControl ActivePower |
1W |
1000 |
0x03E8 |
0x007F |
0x0000 |
|||
0x0080 |
RemoteControl ReactivePower |
1W |
0 |
0x0000 |
0x0081 |
0x0000 |
|||
0x0082 |
Time_of_Duration |
1s |
300 |
0x012C |
0x0088 |
RemoteCtrlTimeOut |
1s |
600 |
0x0258 |
Power Control Mode
P(PV) = P(PV max) = 4000W
P(BAT) = P(BAT max) = 4500W (battery charging) (It is the maximum charging power of the battery under this example conditions.)
P(AC) = 500W (inverter input)
P(Load) = 3000W (load consumption)
Grid Meter = -3500W (take from grid)
The above condition lasts for 300s and then the AC port stops inputting. After this continues for 600s, the inverter returns to Backup mode.
Model 2 Description:
This mode controls the AC port of the inverter to input/output a certain amount of electric energy with a certain power. In this mode the PV runs at the highest possible power and the system can feed/take power to/from the grid.
Exit logic: if the energy target value (0x0084 & 0x0085) is not updated within the set time (0x0088) after completing the commands, then this mode exits. When the energy target value is not reached, the mode runs until the next command is entered.
Control Mode |
Register |
Variable |
Unit |
mode 2 (electric quantity target control mode) |
0x007C |
ModbusPowerControl |
1 |
0x007D |
TargetSetType |
1 |
|
0x0084 |
TargetEnergy |
1Wh |
|
0x0085 |
|||
0x0086 |
Charge_Discharg_Power |
1W |
|
0x0087 |
|||
0x0088 |
RemoteCtrlTimeOut |
1s |
Like mode 1, here in Mode 2, when AC port input power, it contains exactly the same three categorized discussion scenarios. Therefore, for details on these scenarios please refer to the “Model 1 Description”.
Like mode 1, here in Mode 2, when AC port output power, it also contains exactly the same three categorized discussion scenarios. Therefore, for details on these scenarios please refer to the “Model 1 Description”.
Case study 2.1:
X3-Hybrid G4 + 4*T30, Inverter work mode: Self-Use Mode, Battery SOC: 20%
P(PV) = 1000W
P(BAT) = 0
P(AC) = -1000W (inverter output)
P(Load) = 1000W (load consumption)
Grid Meter = 0
Let the AC port of the inverter input 2000Wh into the system with a power of 1000W.
Register |
Variable |
Unit |
Case Study 2.1 (decimal) |
Write Value (hexadecimal) |
|
0x007C |
ModbusPowerControl |
1 |
2 |
0x0002 |
|
0x007D |
TargetSetType |
1 |
1 |
0x0001 |
|
0x0084 |
TargetEnergy |
1Wh |
2000 |
0x07D0 |
|
0x0085 |
0x0000 |
||||
0x0086 |
Charge_Discharg_Power |
1W |
1000 |
0x03E8 |
|
0x0087 |
0x0000 |
||||
0x0088 |
RemoteCtrlTimeOut |
1s |
600 |
0x0258 |
Electric Quantity Target Control Mode
P(PV) = P(PV max) = 1000W
P(BAT) = 1500W (battery charging) (It is the maximum charging power of the battery under this example conditions.)
P(AC) = 500W (inverter input) (The request for the command was not achieved, but the system will not report an error.)
P(Load) = 1000W (load consumption)
Grid Meter = -1500W (take from grid)
The Electric Quantity Target Control Mode will exit after 600 seconds after 2000Wh is input to the AC port of the inverter and the inverter will return to Self-Use mode.
Case study 2.2:
X3-Hybrid G4 + 2*T30, Remote Control Mode 2, Battery SOC: 31%
Before entering this remote control mode 2, the inverter’s work mode is Backup mode.
P(PV) = 2000W
P(BAT) = 1000W (battery charging)
P(AC) = -1000W (inverter output)
P(Load) = 1000W (load consumption)
Grid Meter = 0
Update the target value in Mode 2, and let the AC port of the inverter output 9000Wh of electric energy with a power of 3000W.
Register |
Variable |
Unit |
Case Study 2.2 (decimal) |
Write Value (hexadecimal) |
0x007C |
ModbusPowerControl |
1 |
2 |
0x0002 |
0x007D |
TargetSetType |
1 |
2 |
0x0001 |
0x0084 |
TargetEnergy |
1Wh |
2000 |
0x07D0 |
0x0085 |
0x0000 |
|||
0x0086 |
Charge_Discharg_Power |
1W |
-3000 |
0xF448 |
0x0087 |
0xFFFF |
|||
0x0088 |
RemoteCtrlTimeOut |
1s |
600 |
0x0258 |
Electric Quantity Target Control Mode
P(PV) = P(PV max) = 2000W
P(BAT) = -1000W (battery discharging)
P(AC) = -3000W (inverter output)
P(Load) = 1000W (load consumption)
Grid Meter = 2000W (feed into grid)
After some time, the battery SOC will drop to the system default minimum SOC, 10%. At this time, the battery is no longer discharged, so the output of the system is only provided by the PV. If the current PV power can meet the requirements of the command, then the system outputs according to the requirements of the command; if the current PV power cannot meet the requirements of the command, then the system outputs according to the maximum power at the moment.
The Electric Quantity Target Control Mode will exit after 600 seconds after the AC port of the inverter output 9000Wh and the inverter will return to Backup mode.
Model 3 Description:
This mode controls the AC port of the inverter to input/output with a certain power and takes the battery SOC as the target value. In this mode the PV runs at the highest possible power and the system can feed/take power to/from the grid.
Exit logic: if the SOC target value (0x0083) is not updated within the set time (0x0088) after completing the commands, then this mode exits. When the SOC target value is not reached, the mode runs until the next command is entered.
Note: This mode can only work when the current battery SOC has not reached the target SOC. For example, if the current battery SOC is 50% and the command requires a certain power input from the AC port and the target SOC is 40%, then the system will directly exit the SOC target control mode.
Control Mode |
Register |
Variable |
Unit |
mode 3 (SOC target control mode) |
0x007C |
ModbusPowerControl |
1 |
0x0083 |
TargetSoc |
1% |
|
0x0086 |
Charge_Discharg_Power |
1W |
|
0x0087 |
|||
0x0088 |
RemoteCtrlTimeOut |
1s |
Case study 3:
X3-Hybrid G4 + 2*T30, Inverter work mode: Self-Use Mode, Battery SOC: 60%
P(PV) = 3000W
P(BAT) = 1000W (battery charging)
P(AC) = -2000W (inverter output)
P(Load) = 2000W (load consumption)
Grid Meter = 0
Set the output power of the AC port of the inverter to 4000W and discharge the battery to 30% SOC.
Register |
Variable |
Unit |
Case study 3 (decimal) |
Write Value (hexadecimal) |
0x007C |
ModbusPowerControl |
1 |
3 |
0x0003 |
0x0083 |
TargetSoc |
1% |
30 |
0x001E |
0x0086 |
Charge_Discharg_Power |
1W |
-4000 |
0xF060 |
0x0087 |
0xFFFF |
|||
0x0088 |
RemoteCtrlTimeOut |
1s |
600 |
0x0258 |
SOC Target Control Mode
P(PV) = P(PV max) = 3000W
P(BAT) = -1000W (battery discharging)
P(AC) = -4000W (inverter output)
P(Load) = 2000W (load consumption)
Grid Meter = 2000W (feed into grid)
If the above working conditions are constant, then the SOC target (down to 30% SOC) will be completed in about 1.8 hours.
Model 4 Description:
This mode directly controls the battery charging/discharging power, the PV power is as high as possible and the system can feed/take power to/from the grid.
The positive and negative values of the data in this model are defined as: positive means battery discharge, negative means battery charge.
Control Mode |
Register |
Variable |
Unit |
mode 4 (Push Power - Positive/Negative Mode) |
0x007C |
ModbusPowerControl |
1 |
0x0089 |
PushModePower (Positive means battery discharge; Negative means battery charge) |
1W |
|
0x008A |
Case study 4.1:
X3-Hybrid G4 + 4*T58, Inverter work mode: Self-Use Mode, Battery SOC: 70%
P(PV) = 2000W
P(BAT) = 0
P(AC) = -2000W (inverter output)
P(Load) = 2000W (load consumption)
Grid Meter = 0
Battery discharging power 1000W;
PV runs at maximum power if possible;
Register |
Variable |
Unit |
Case study 4.1 (decimal) |
Write Value (hexadecimal) |
0x007C |
ModbusPowerControl |
1 |
4 |
0x0004 |
0x0089 |
PushModePower |
1W |
+1000 |
0x03E8 |
0x008A |
0x0000 |
Push Power – Positive/Negative Mode
P(PV) = P(PV max) = 2000W
P(BAT) = -1000W (battery discharging)
P(AC) = -3000W (inverter output)
P(Load) = 2000W (load consumption)
Grid Meter = 1000W (feed into grid)
Case study 4.2:
Inverter work mode: Self-Use Mode
P(PV) = 2000W
P(BAT) = 0
P(AC) = -2000W (inverter output)
P(Load) = 2000W (load consumption)
Grid Meter = 0
Battery charging power 1000W;
PV runs at maximum power if possible;
Register |
Variable |
Unit |
Case study 4.2 (decimal) |
Write Value (hexadecimal) |
0x007C |
ModbusPowerControl |
1 |
4 |
0x0004 |
0x0089 |
PushModePower (negative means battery charge) |
1W |
-1000 |
0XFC18 |
0x008A |
0XFFFF |
Push Power – Positive/Negative Mode
P(PV) = P(PV max) = 2000W
P(BAT) = 1000W (battery charging)
P(AC) = -1000W (inverter output)
P(Load) = 2000W (load consumption)
Grid Meter = -1000W (take from grid)
Model 5 Description:
The battery does not charge or discharge, the PV power is as high as possible, and the system can feed/take power to/from the grid. The batteries remain powered but do not work, and the hybrid inverter is working similar to an on-grid inverter (string inverter).
Control Mode |
Register |
Variable |
Unit |
mode 5 (Push Power – Zero Mode) |
0x007C |
ModbusPowerControl |
1 |
Case study 5:
Inverter work mode: Self-Use Mode
P(PV) = 2000W
P(BAT) = 1000W (battery charging)
P(AC) = -1000W (inverter output)
P(Load) = 1500W (load consumption)
Grid Meter = -500W (take from grid)
The battery does not charge or discharge, the PV power is as high as possible, and the system is allowed to feed/take power into/from the grid.
Register |
Variable |
Unit |
Case study 5 (decimal) |
Write Value (hexadecimal) |
0x007C |
ModbusPowerControl |
1 |
5 |
0x0005 |
Push Power - Zero Mode
P(PV) = P(PV max) = 2000W
P(BAT) = 0
P(AC) = -2000W (inverter output)
P(Load) = 1500W (load consumption)
Grid Meter = 500W (feed into grid)
Model 6 Description:
The battery can be charged from PV only, no charge from grid. Battery discharge depending on the load and PV. If the PV input power cannot cover the consumption of the load, then the battery can be discharged; if the battery is fully charged, then the excess PV power can be fed to the grid. The priority of the PV input is: load > battery > grid. This is like Self-Use mode.
Control Mode |
Register |
Variable |
Unit |
mode 6 (Self-Consume-Charge/Discharge Mode) |
0x007C |
ModbusPowerControl |
1 |
Case study 6:
X3-Hybrid G4 + 4*T58, Inverter work mode: Self-Use Mode, Battery SOC: 40%.
A forced charging period has been set, during which the inverter is allowed to charge from the grid.
P(PV) = 1000W
P(BAT) = 5000W (battery charging)
P(AC) = 4000W (inverter input)
P(Load) = 3000W (load consumption)
Grid Meter = -7000W (take from grid)
It's just like the description of mode 6.
Register |
Variable |
Unit |
Case study 6 (decimal) |
Write Value (hexadecimal) |
0x007C |
ModbusPowerControl |
1 |
6 |
0x0006 |
Self-Consume - Charge/Discharge Mode
P(PV) = P(PV max) = 1000W
P(BAT) = -2000W (battery discharging)
P(AC) = -3000W (inverter output)
P(Load) = 3000W (load consumption)
Grid Meter = 0
Model 7 Description:
The battery can be charged from PV only, no charge from grid. Battery discharge is not allowed. Import from grid if necessary, export to grid if battery full.
Control Mode |
Register |
Variable |
Unit |
mode 7 (Self-Consume-Charge Only Mode) |
0x007C |
ModbusPowerControl |
1 |
Case study 7:
Inverter work mode: Self-Use Mode
A forced charging period has been set, during which the inverter is allowed to charge from the grid.
P(PV) = 1000W
P(BAT) = 5000W (battery charging)
P(AC) = 4000W (inverter input)
P(Load) = 3000W
Grid Meter = -7000W (take from grid)
It's just like the description of mode 7.
Register |
Variable |
Unit |
Case study 7 (decimal) |
Write Value (hexadecimal) |
0x007C |
ModbusPowerControl |
1 |
7 |
0x0007 |
Self-Consume - Charge Only Mode
P(PV) = P(PV max) = 1000W
P(BAT port) = 0
P(AC) = -1000W (inverter output)
P(Load) = 3000W
Grid Meter = -2000W (take from grid)
Mode 8 Description:
The battery can be charged from PV and grid simultaneously, and PV power and BAT power can be set independently. In addition, the photovoltaic power generation can be limited to zero, ensuring that the inverter can absorb power from the grid at its maximum capacity.
Exit: This mode is exited via Time of Duration(0X00A6).
Control Mode |
Register |
Variable |
Unit |
mode 8 (PV&BAT Individual Setting – Duration Mode) |
0x00A0 |
PowerControlMode |
1 |
0x00A1 |
TargetSetType |
1 |
|
0x00A2 |
PVPowerLimit(LSB) |
1W |
|
0x00A3 |
PVPowerLimit(MSB) |
1W |
|
0x00A4 |
PushModePower(LSB) |
1W |
|
0x00A5 |
PushModePower(MSB) |
1W |
|
0x00A6 |
Time of Duration |
1s |
|
0x00A7 |
RemoteControlTimeOut |
1s |
Case Study 8:
Work Mode = self-use
Max Discharge current = 30.0
Max charge current = 30.0
No limit in Export Control / Power Limit / Main Breaker Limit
A forced charging period has been set, during which the inverter is allowed to charge from the grid.
P(PV) = 1000 W
P(BAT) = 5000 W (battery charging)
P(AC) = 4000 W (inverter take-in)
P(Load)= 3000W
Grid Meter = -7000W (absorb from grid)
PV Power can be restricted to 0 W.
Maximal absorption of grid power during negative-tariff period.
According to negative-tariff period, inverter can execute for a certain period of time. (For example, 30 minutes)
Register |
Variable |
Unit |
Write Value (decimal) |
Write Value (hexadecimal) |
0x00A0 |
PowerControlMode |
1 |
8 |
0x0008 |
0x00A1 |
TargetSetType |
1 |
1 |
0x0001 |
0x00A2 |
PVPowerLimit(LSB) |
1W |
0 |
0x0000 |
0x00A3 |
PVPowerLimit(MSB) |
1W |
0 |
0x0000 |
0x00A4 |
PushModePower(LSB) |
1W |
-5000 |
0xEC78 |
0x00A5 |
PushModePower(MSB) |
1W |
0xFFFF |
|
0x00A6 |
Time of Duration |
1s |
1800 |
0x0708 |
0x00A7 |
RemoteControlTimeOut |
1s |
2000 |
0x07D0 |
**If TargetSetType == 2, this command will execute for 30min. (Based on the start time of the former command)
P(PV) = 0 W
P(BAT) = 5000 W (battery charging)
P(AC) = 4000 W (inverter take-in)
P(Load)= 3000W
Grid Meter = -8000W (absorb from grid)
You will take in more electric energy (Approximately 0.5kWh, if BAT power is higher than 1000W at any time) from Grid, and earn more during negative-tariff period.
Mode 9 Description:
The battery can be charged from PV and grid simultaneously, and PV power and BAT power can be set independently. In addition, the photovoltaic power generation can be limited to zero, ensuring that the inverter can absorb power from the grid at its maximum capacity.
Exit: This mode is exited via Target SOC.
Control Mode |
Register |
Variable |
Unit |
mode 9 (PV&BAT Individual Setting – Target SOC Mode) |
0x00A0 |
PowerControlMode |
1 |
0x00A1 |
TargetSetType |
1 |
|
0x00A2 |
PVPowerLimit(LSB) |
1W |
|
0x00A3 |
PVPowerLimit(MSB) |
1W |
|
0x00A4 |
PushModePower(LSB) |
1W |
|
0x00A5 |
PushModePower(MSB) |
1W |
|
0x00A6 |
Target SOC |
1% |
|
0x00A7 |
RemoteControlTimeOut |
1s |
Case Study 9:
Work Mode = self-use
Max Discharge current = 30.0
Max charge current = 30.0
No limit in Export Control / Power Limit / Main Breaker Limit
A forced charging period has been set, during which the inverter is allowed to charge from the grid.
P(PV) = 1000 W
P(BAT) = 5000 W (battery charging)
SOC(BAT) = 30% (T30*2)
P(AC) = 4000 W (inverter take-in)
P(Load)= 3000W
Grid Meter = -7000W (absorb from grid)
PV Power can be restricted to 0 W.
Maximal absorption of grid power during negative-tariff period.
Set a certain Target SOC. (For example, 80%)
Register |
Variable |
Unit |
Write Value (decimal) |
Write Value (hexadecimal) |
0x00A0 |
PowerControlMode |
1 |
8 |
0x0008 |
0x00A2 |
PVPowerLimit(LSB) |
1W |
0 |
0x0000 |
0x00A3 |
PVPowerLimit(MSB) |
1W |
0 |
0x0000 |
0x00A4 |
PushModePower(LSB) |
1W |
-5000 |
0xEC78 |
0x00A5 |
PushModePower(MSB) |
1W |
0xFFFF |
|
0x00A6 |
Target SOC |
1% |
80 |
0x0050 |
0x00A7 |
RemoteControlTimeOut |
1s |
3600 |
0x0E10 |
P(PV) = 0 W
P(BAT) = 5000 W (battery charging)
SOC(BAT) = 80% (T30*2)
P(AC) = 5000 W (inverter take-in)
P(Load)= 3000W
Grid Meter = -8000W (absorb from grid)
You will take in more electric energy (Approximately 0.6kWh, if BAT power is higher than 1000W at any time) from Grid, and earn more during negative-tariff period.
This section is used to verify that the currently running remote control mode is working as expected according to the set parameter values.
The query of related set parameters and the reference of the target setting range in the first, second and third modes, are provided in the function code 0x04 (Read Input Register) register, address 0x0100~0x011E, as shown below.