NEW PRODUCT

Intellect PPC

Power Plant Controller; Technical Reference

Architecture, control theory, and implementation details for WATTMORE's integrated PPC.

Intellect PPC Dashboard showing live readings, droop configuration, voltage control, ramp rates, SOC limits, and fleet dispatch
1

What Is a Power Plant Controller?

A Power Plant Controller (PPC) is the real time supervisory control system that sits between the grid operator (or site level energy management system) and the individual power conversion equipment (inverters, converters). Every utility scale battery energy storage system (BESS) connected to the transmission or distribution grid requires a PPC to meet interconnection requirements defined by the grid operator, typically governed by IEEE 2800, NERC reliability standards, and the specific Interconnection Agreement (IA) for the site.

The PPC is responsible for ensuring the plant behaves as a single, predictable, grid compliant resource. It accepts high level dispatch commands (MW setpoint, voltage schedule, power factor target) and translates them into individual inverter level P and Q commands while enforcing grid code requirements; frequency response (droop), voltage regulation, ramp rate limits, and protection functions.

PPC Core Responsibilities

Active power dispatch and curtailment enforcement
Frequency watt droop response (primary frequency response)
Reactive power / voltage control at the POI
Ramp rate limiting per interconnection agreement
State of charge management and energy protection
Fleet dispatch across multiple inverters
AGC (Automatic Generation Control) signal following
Emergency stop and fault ride through coordination
2

What Is an Energy Management System?

An Energy Management System (EMS) is the optimization layer that decides what the battery should do and when. It looks at electricity prices, demand charge schedules, solar forecasts, load patterns, and grid signals to determine the optimal dispatch strategy. The EMS operates on a longer time horizon (seconds to hours) and produces a power setpoint that represents the economically or operationally optimal action.

The EMS handles applications like peak demand shaving (reducing the facility's highest 15 minute power draw to lower demand charges), energy arbitrage (charging when electricity is cheap, discharging when expensive), solar self consumption, backup power management, and participation in wholesale energy markets.

EMS vs PPC; Division of Responsibility

EMS (Optimization Layer)
  • Determines optimal MW setpoint
  • Reads electricity prices and tariffs
  • Forecasts load and solar generation
  • Manages schedules and time of use windows
  • Calculates economic value of dispatch
  • Operates on 1s to 15min timescales
PPC (Grid Compliance Layer)
  • Enforces grid code on EMS setpoint
  • Reads POI frequency and voltage
  • Applies droop and voltage response
  • Limits ramp rates to IA requirements
  • Protects battery SOC boundaries
  • Operates on 10ms to 100ms timescales
3

How the EMS and PPC Work Together

The EMS and PPC run as independent processes connected through Redis. The EMS writes a power setpoint; the PPC reads it, applies all grid compliance transformations, and dispatches the result to inverters. This separation ensures the PPC can always enforce safety and grid code requirements regardless of what the EMS requests. If the grid needs emergency frequency support, the PPC overrides the EMS setpoint immediately without waiting for the optimization layer.

System Architecture

Grid Operator
AGC / Curtailment
Market Prices
TOU / LMP / Tariff
POI Meter
f, V, P, Q
BMS
SOC, V, T, Limits
DAQ Service
Modbus polling → Redis canonical keys
Redis
Real time data bus; canonical names, setpoints, status
EMS Controller
PI control loop @ 20 Hz
Peak shaving, arbitrage, scheduling
P_setpoint (MW) →
Power Plant Controller
Control loop @ 10 Hz (configurable)
Droop + Voltage + Ramp + SOC + Fleet
P_cmd (MW)Q_cmd (MVAR)
INV 1
P, Q
INV 2
P, Q
INV 3
P, Q
INV N
P, Q
4

PPC Internal Signal Chain

Each control loop iteration, the PPC reads inputs from Redis, processes the setpoint through a fixed sequence of control stages, and writes per inverter commands back to Redis. The stages execute in order; each one transforms the power command before passing it to the next. This cascade architecture ensures grid code compliance is applied deterministically regardless of the upstream dispatch source.

PPC Control Pipeline (per loop iteration)

Stage 1
EMS Setpoint
P_base
Stage 2
Droop
+ P_droop
Stage 3
Curtailment
min(P, limit)
Stage 4
SOC Limit
derate(P, SOC)
Stage 5
Ramp Limit
clamp(dP/dt)
Stage 6
Voltage/Q
Q_cmd
Stage 7
Fleet Alloc
P₁..Pₙ
Positive P = discharge (inject power to grid)  |  Negative P = charge (absorb from grid)  |  Positive Q = leading (capacitive)
5

Frequency Watt Droop Response

Droop control is the primary frequency response mechanism required by virtually all grid codes for utility scale storage. When grid frequency deviates from nominal (60 Hz in North America, 50 Hz elsewhere), the battery injects or absorbs power proportionally to the deviation. This is a fast, autonomous response that does not wait for dispatch commands; it activates within the PPC control loop cycle time (100 ms default).

The droop percentage defines the sensitivity; a 5% droop on a 50 MW plant means the plant delivers full rated power when frequency drops by 5% of nominal (3 Hz on a 60 Hz system). A smaller droop percentage means more aggressive response. The deadband prevents the system from chasing normal frequency noise; the IEEE 2800 default deadband is ±36 mHz.

Droop Calculation

Droop gain (MW per Hz of deviation after deadband);
Kdroop = Prated / (fnom × droop% / 100)
Example; 50 MW / (60 Hz × 5 / 100) = 50 / 3 = 16.67 MW/Hz
Effective frequency error (after deadband);
feff = (|fmeasured − fnom| > deadband) ? ferror − sign(ferror) × deadband : 0
Droop power output (additive to EMS setpoint);
Pdroop = −feff × Kdroop
Negative feff (under frequency) produces positive P (discharge/inject). The battery supports the grid when frequency drops.

Droop Characteristic Curve

+Pmax0−Pmax
deadband
fnom−3Hz
fnom
fnom+3Hz
Discharge
Charge

Inside the deadband the plant does not respond to frequency deviations (normal grid noise). Outside the deadband, response is linear with slope Kdroop.

Droop Configuration Parameters

droop_percent

Droop slope as a percentage of rated power per nominal frequency. 5% is standard for BESS. Lower values give more aggressive response.

deadband_hz

Frequency deviation threshold before response activates. IEEE 2800 default is 0.036 Hz (36 mHz). Prevents response to normal grid frequency noise.

max_response_mw

Optional cap on droop output. If unset, defaults to plant rated power. Useful for limiting frequency response to a contracted capacity.

bypass_ramp_limiter

When true, droop response bypasses the ramp rate limiter for fastest possible frequency support. Most grid codes require this.

6

Voltage and Reactive Power Control

Reactive power (Q, measured in MVAR) controls voltage at the point of interconnection. Unlike active power which transfers real energy, reactive power manages the electromagnetic field relationships in AC systems. Grid operators require BESS plants to support POI voltage through one of three modes, selectable based on the interconnection agreement.

Mode 1; Constant Power Factor

Q follows P to maintain a fixed power factor. Leading (capacitive) Q injects reactive power; lagging (inductive) absorbs it.

Q = |P| × tan(arccos(PF))
Example; P = 25 MW, PF = 0.95 leading → Q = 25 × tan(arccos(0.95)) = +8.2 MVAR

Mode 2; Voltage Regulation (PI)

A PI controller adjusts Q to hold POI voltage at a setpoint (typically 1.0 pu). A deadband prevents hunting around the target.

Verr = Vset − Vmeas
Q = Kp·Verr + Ki·∫Verr·dt
Default gains; Kp = 20, Ki = 10. Integral is anti windup clamped to Qmax.

Mode 3; Volt VAR Curve

A piecewise linear Q(V) characteristic curve. Four voltage breakpoints define the shape. Q is positive (inject) at low voltage, zero in the deadband, negative (absorb) at high voltage.

V1=0.92 → +Qmax | V2=0.98 → 0 | V3=1.02 → 0 | V4=1.08 → −Qmax
Linear interpolation between breakpoints. IEEE 1547 Category B default curve.

Q Rate Limiting

All three voltage modes share a common output rate limiter. The Q command is slew rate limited to prevent sudden reactive power swings that could cause POI voltage transients. Default limit is 5 MVAR/s, configurable per interconnection agreement. The rate limiter applies after mode calculation but before the command is written to inverters.

7

Ramp Rate Limiting

Interconnection agreements specify maximum rates of change for active power, typically in MW/min. This prevents the BESS from causing sudden power swings on the grid that could affect power quality for other connected customers. Separate up and down rates can be configured since some grid codes have asymmetric requirements (e.g., faster ramp down for safety, slower ramp up to prevent voltage sags).

Ramp Limiter Algorithm

// Each control loop iteration (dt seconds);
max_step_up = ramp_up_mw_per_min / 60 × dt
max_step_down = ramp_down_mw_per_min / 60 × dt
delta = P_requested − P_previous
// Clamp the change
if delta > max_step_up: P_out = P_previous + max_step_up
elif delta < −max_step_down: P_out = P_previous − max_step_down
else: P_out = P_requested

When droop response is active and bypass_ramp_limiter is enabled, the ramp limiter is bypassed entirely so the plant can deliver full speed frequency support. This is standard practice; grid frequency events require sub second response, and the interconnection ramp limit is intended for economic dispatch changes, not emergency grid support.

8

State of Charge Protection

The SOC limiter protects the battery from over discharge and over charge by smoothly derating power commands as SOC approaches the configured boundaries. This uses a soft/hard limit system; between the soft and hard limit, available power ramps linearly from 100% to 0%. This prevents sudden power cutoffs that would violate ramp rate requirements and provides a smooth degradation curve.

SOC Limit Regions

STOP
DERATE
FULL POWER AVAILABLE
DERATE
STOP
0%hard_min (5%)soft_min (10%)soft_max (90%)hard_max (95%)100%

Derating Formulas

Discharge factor (low SOC protection);
SOC ≤ hard_min: df = 0.0
hard_min < SOC ≤ soft_min:
df = (SOC − hard_min) / (soft_min − hard_min)
SOC > soft_min: df = 1.0
Charge factor (high SOC protection);
SOC ≥ hard_max: cf = 0.0
soft_max ≤ SOC < hard_max:
cf = (hard_max − SOC) / (hard_max − soft_max)
SOC < soft_max: cf = 1.0
P > 0 (discharge): Pout = min(P, Prated × df)   |   P < 0 (charge): Pout = max(P, −Prated × cf)
9

Fleet Dispatch and Inverter Allocation

After the PPC computes the final plant level P and Q commands, the fleet allocator distributes these across all online inverters. Faulted inverters are excluded from allocation, and their commands are set to zero. Three allocation strategies are available.

Equal Distribution

Divides plant command equally among all online inverters, clamped to each inverter's rating. Simplest strategy; works well when all inverters are identical.

Pi = clamp(Ptotal / N, ±Prated,i)

Proportional Distribution

Allocates proportionally to each inverter's rated capacity. Useful for mixed fleets with different inverter sizes.

Pi = Ptotal × Prated,i / ΣPrated

Priority Distribution

Fills inverters sequentially to capacity before moving to the next. Minimizes active inverters; useful for maintenance windows or efficiency optimization.

P1 = min(Prem, Prated,1); ...
10

Redis Data Flow and Key Map

The PPC reads all inputs from Redis (published by the DAQ service) and writes all outputs to Redis (consumed by the PCS actuator and monitoring). It never connects directly to any hardware device. This architecture means the PPC can be stopped, started, or restarted without affecting data acquisition or device communication.

Redis Keys Used by PPC

KeyDirectionDescription
{poi_meter}:latestReadPOI frequency, voltage, power (from DAQ)
{bms}:latestReadBattery SOC, voltage, temperature (from DAQ)
controller:power_setpointReadEMS active power setpoint in watts
ppc:p_setpoint_wReadPPC specific setpoint override (optional)
ppc:curtailment_mwReadGrid operator curtailment ceiling
ppc:p_cmd_wWritePlant level active power command
ppc:q_cmd_varWritePlant level reactive power command
ppc:inverter:{id}WritePer inverter P/Q commands (fleet dispatch)
ppc:statusWriteService status, live readings, loop count
11

Glossary of Terms

PPC

Power Plant Controller. The real time supervisory controller for the entire BESS plant.

EMS

Energy Management System. Optimization layer that determines what the battery should do.

POI

Point of Interconnection. The electrical boundary where the plant connects to the grid.

BESS

Battery Energy Storage System. The complete storage plant including batteries, inverters, and controls.

PCS

Power Conversion System. The inverter/converter that converts DC battery power to AC grid power.

BMS

Battery Management System. Monitors cell voltages, temperatures, and SOC; enforces battery safety limits.

SOC

State of Charge. Battery energy level as a percentage (0% = empty, 100% = full).

MW

Megawatt. Unit of active (real) power. 1 MW = 1,000 kW.

MVAR

Mega Volt Ampere Reactive. Unit of reactive power, which controls voltage.

pu

Per unit. Normalized value where 1.0 = nominal. Used for voltage (1.0 pu = rated voltage).

Droop

Proportional frequency response characteristic. Slope defines MW response per Hz deviation.

Deadband

Frequency range around nominal where no droop response occurs (filters grid noise).

PF

Power Factor. Ratio of real power to apparent power. PF = P / sqrt(P² + Q²). Range 0 to 1.

AGC

Automatic Generation Control. Grid operator signal that dynamically adjusts plant output for area frequency regulation.

IA

Interconnection Agreement. Contract between plant owner and utility defining technical requirements.

IEEE 2800

Standard for interconnection of inverter based resources. Defines frequency/voltage response requirements.

Ready to Deploy Intellect PPC?

Intellect Operate integrates EMS, SCADA, and PPC in a single platform. One deployment, one interface, one support team.

Call UsRequest Demo