To state the conclusion first: in a self-consumption PV plant where export is not allowed, a control that holds point-of-connection (POC) power at “zero” fails the moment its setpoint is zero. If a large load drops out during the time it takes to measure at the meter, compute, communicate, and get the inverter to respond, the difference is exported, every time. The design starts by setting target import margin = the largest single load step in kW, and then separates two layers so that any transient export that still slips through is filtered by a reverse power relay through time coordination.

Safety interlocks: keep software control and hardware tripping separate
Output limiting is an operating function that reduces generation; the final guarantee against export belongs to hardware protection. First confirm that neither layer is standing in for the other.
- □ Confirm that the emergency off (EMO) opens the PV interconnection breaker and the inverter external-stop terminals through hardwiring. The plant power controller (PPC) only monitors the EMO loop state.
- □ Install a reverse power relay at the POC and confirm that its trip output goes directly to the PV interconnection breaker trip coil without passing through the PPC.
- □ Set the reverse power relay pickup and operating time longer than the control loop’s settling time, so that the control clears normal transient export before the relay acts.
- □ If meter communication is lost, the PPC drops the inverter output limit to a predefined safe value (e.g., 0 kW or below minimum load). Do not leave it at the last limit.
- □ During commissioning, verify the meter CT polarity and location (POC main or a specific branch) against the actual power direction. With reversed polarity, the control works exactly backwards.
How to size the margin
Export happens in the window “from the moment a load drops out until inverter output comes down.” Adding up that time gives the basis for the margin. Assumptions: meter polling 200 ms, control cycle 100 ms, communication delay 100 ms, inverter output change response 500 ms, largest single load step 200 kW.
Total loop delay is 200 + 100 + 100 + 500 = 900 ms. With a 0 kW target margin, losing a 200 kW load exports up to 200 kW for 900 ms. In energy terms that is 200 kW × 0.9 s = 180 kJ, about 0.05 kWh, which is small, but if the reverse power relay is set close to instantaneous, this single event trips the plant. With a 200 kW target margin, the same load step leaves POC power stopping near zero. The price is that PV permanently covers 200 kW less of the load.
| Method | Response | Strength | Weakness |
|---|---|---|---|
| Meter + PPC closed loop | Sum of loop delays | Integrated control of many inverters | Many communication layers |
| Inverter built-in export limit (direct CT) | Relatively fast | No communication delay | One inverter or one manufacturer only |
| Reverse power relay alone | Set time | Simple, certain trip | Lost generation until reconnection |
These three are layers, not alternatives. The control methods (first and second rows) reduce export; the relay (third row) is the final trip when control fails. Running on the relay alone means tripping and reconnecting several times a day, and running on control alone means the guarantee disappears the first time communication drops.
Commissioning checklist
- □ List the plant loads with the largest single step (large motors, compressors, electric furnaces, etc.) with their kW and how they stop.
- □ Measure the loop delay from meter polling to inverter output change. Apply a step command, record the inverter output waveform, and derive the settling time.
- □ Set the target import margin at or above “largest single step kW,” estimate the monthly generation loss, and agree it with the owner.
- □ Set the reverse power relay operating time longer than the measured settling time, and document the coordination curve.
- □ Deliberately cut meter communication and confirm the switch to the safe value happens within the set time.
PPC logic example
(* IEC 61131-3 ST pseudocode - POC zero-export output limit control *)
(* %I0.0 DI_EMO_LOOP_HEALTHY : EMO hardwired loop healthy (1) - monitoring only *)
(* %I0.1 DI_RPR_32_TRIPPED : reverse power relay tripped (1) - relay trips breaker directly *)
(* %MD100 POC_P_IMPORT_KW : POC active power (kW, import +, export -) - MODBUS_TCP meter *)
(* %MD104 PV_P_TOTAL_KW : total inverter output (kW) *)
(* %MD108 PV_P_LIMIT_KW : inverter output limit command (kW) - sent via MODBUS_TCP *)
(* %Q0.3 DO_PV_LIMIT_FAILSAFE : comm-fault safe value active indicator *)
VAR CONSTANT
P_MARGIN_KW : REAL := 200.0; (* largest single load step kW *)
P_RATED_KW : REAL := 1000.0; (* PV rating *)
P_SAFE_KW : REAL := 0.0; (* safe value on comm fault *)
KP : REAL := 0.5; (* proportional gain - tune after measurement *)
END_VAR
TON_METER(IN := NOT METER_COMM_OK, PT := T#1000MS);
IF NOT DI_EMO_LOOP_HEALTHY OR DI_RPR_32_TRIPPED THEN
PV_P_LIMIT_KW := 0.0; (* follow tripped state, reconnect after manual check *)
ELSIF TON_METER.Q THEN
PV_P_LIMIT_KW := P_SAFE_KW; (* meter silent for 1000 ms - safe value *)
DO_PV_LIMIT_FAILSAFE := TRUE;
ELSE
DO_PV_LIMIT_FAILSAFE := FALSE;
ERR_KW := POC_P_IMPORT_KW - P_MARGIN_KW; (* target: import = margin *)
PV_P_LIMIT_KW := PV_P_TOTAL_KW + KP * ERR_KW; (* raise if import above margin, lower if below *)
IF PV_P_LIMIT_KW > P_RATED_KW THEN PV_P_LIMIT_KW := P_RATED_KW; END_IF;
IF PV_P_LIMIT_KW < 0.0 THEN PV_P_LIMIT_KW := 0.0; END_IF;
END_IF;
The gain of 0.5 and the 1,000 ms communication watch are examples. A higher gain speeds up the response but can cause hunting because of meter measurement noise and inverter response delay. Whether hunting occurs differs by plant; this requires waveform analysis and field measurement.
Boundary conditions
Sizing the margin to the largest load step works when the load is well above the PV rating. In periods when the load falls below the margin, such as weekends or days without a night shift, PV effectively has to stop, so if those periods make up a large share, absorbing the surplus with ESS becomes economically better than the margin approach. And if the interconnection terms tolerate brief transient export, you can reduce the margin and lean more on relay time coordination, so read the interconnection documents first.
The criterion is one sentence. Never set the target import margin below “the largest load that can drop out at once during the control loop delay.”


