Energy Storage – PVS

Energy Storage System

For now, the scope of this feature is limited to AC-coupled storage systems. In practice, this means that the storage is connected to the PV system at the MV level, after the MV transformers and associated cabling. The storage system (shaded in blue below) consists of: batteries, inverters and MV transformers and cabling.


Figure 1 – Single-line diagram of an AC-coupled storage system

Nodal positions 1-7 are defined for reference. Power is reported for certain nodes in the downloadable nodal data.



sdcnp Nameplate Energy Capacity [Wh]
sussoc Energy Capacity Factor unitless
sdcus Initial Usable Energy Capacity [Wh]
scaldeg Energy Capacity Calendar Degradation [%/year]
scycdeg Energy Capacity Cycling Degradation [%/cycle]
dcrte Initial Roundtrip DC Efficiency [%]
rtecaldeg Roundtrip DC Efficiency Calendar Degradation [%/year]
rtecycdeg Roundtrip DC Efficiency Cycling Degradation [%/cycle]
sac Inverter Real Power [W]
effsinv Inverter Efficiency [%]
PLoss,MV Storage MV Transformer Losses [W]
PLoss,HV Plant HV Transformer Losses [W]
PLoss,T Transmission Line Losses [W]
sauxconst HVAC Constant Loss [W/MWh]
sauxop HVAC Operating Loss [W/MW]
ic Power Output Limit [W]
Pavail Plant Power with Availability Loss Applied [W]
PAC,out,PV PV MV Transformer Output [W]
TP Target Period Hour {User True/False selection}
DM Dispatch Model {User selection}
Δt Time step [s]



PAC,out,S Net Output (high-side Storage MV Transformers) AC power [W]




Built-In Dispatch Algorithms

The dispatch logic considers the power produced by the PV plant, the interconnect capacity, and the State of Charge of the ESS, in addition to the value of energy output to the grid in each hour throughout the day. The logic takes into account energy losses and equipment power limitations.

  1. First, the ESS State of Charge at the beginning of the day is determined (initialized at full usable State of Charge). The PV power output profile for the day is collected. A target period of high-priority hours during the day is identified.

a. The charging algorithms offered are listed below:

i. Interconnect Excess Algorithm: The storage system will be charged if and only if the loss included PV output capability exceeds the Power Output Limit. It will discharge energy at its maximum capability during the target period window.

ii. Energy Available Algorithm: The storage system will be charged as and when PV energy becomes available with the sole objective of charging it to full capacity. Once the storage system is fully charged, the energy from the PV system will then be re-directed to the grid. The storage system will discharge energy at maximum capability during the target period window.

b. The maximum power by which the storage is charged is limited by the total power rating of the storage inverters, and the PV power available.

c. The maximum energy which can be stored is limited by the Usable Energy Capacity.

d. Both Usable Energy Capacity (energy the storage can hold) and Roundtrip Efficiency degrade as a function of time and # of cycles (where # of cycles is cumulative energy charged/usable energy capacity).

e. Roundtrip Efficiency is only applied when charging the storage (not when discharging), so the State of Charge shows the available dischargable DC energy.

f. Inverters associated with the storage system are modeled with flat efficiencies.

g. Transformers associated with the storage system are modeled as for the PV system, with an auxiliary consumption defined by a no-load loss and a full-load loss.

2. Next, the power that is required to meet the interconnect capacity not met by PV output during target hours is calculated, where the maximum power to be discharged is limited by the ESS power rating.

3. The ESS then discharges the amount of power required to meet the interconnect limit during each target hour, limited by the ESS power rating, until the ESS depletes the stored energy.


Custom Dispatch

The custom dispatch option allows the user more control of the storage dispatch.

The user defines a charge and discharge target profile by identifying a “Charge” or “Discharge” command and power targets as a fraction of the total inverter rated capacity, for an index corresponding to each time step in the prediction weather file. Indexes without a command will not result in any charge or discharge.

The target power is defined at the input to the storage MV transformers, and will be limited by the total power rating of the storage inverters, the State of Charge of the storage, the total PV generated, or the total power rating of the MV transformers, as relevant.

The portion of commanded power that exceeds the limitation is not diverted as commanded.

However, a command to discharge a level of power that results in the total discharged and PV generated power exceeding the interconnection capacity is followed but results in the excess power being clipped.



a) Determine the amount of power exceeding the interconnect from just the PV system. For the Interconnect Excess algorithm, this will determine how much power to divert from the PV system to charge the storage system.

PVExceedingInterconnect6 = max(Pavail ic, 0)

b) Determine the excess power available at Node 4 for charging the storage system after losses.

AvailableExcesstoCharge4 = min(sac,(PVExceedingInterconnect6  + PLoss,HV + PLoss,T – PLoss,MV) * effsinv)

c) Determine the power at Node 4 that the storage system has capacity to charge in addition to the excess power. Evaluate discharge limits. Calculate the maximum amount of power that can be discharged from the storage system after considering the PV output and Power Output Limit

AvailableCapacitytoChargefromNonExcess4 = min(sac, PAC,out,PV – PLoss,MV) * effsinv

d) Evaluate discharge limits. Calculate the maximum amount of power that can be discharged from the storage system after considering the PV output and interconnect limit.

AvailableCapacitytoDischarge6,LGIALimit = max(ic Pavail, 0)

e) Calculate the maximum amount of power that can be discharged from the storage system, translated to the interconnect (Node 6), after considering the storage inverter limits

AvailableCapacitytoDischarge6,StorageLimitt = sac – PLoss,MV(full load) – PLoss,HV  – PLoss,T

The maximum power possible to discharge through the plant is the lesser of the two above constraints.

AvailableCapacitytoDischarge6 = min(AvailableCapacitytoDischarge6,LGIALimit, AvailableCapacitytoDischarge6,StorageLimitt)

Calculated at Node 2:

AvailableCapacitytoDischarge2 = AvailableCapacitytoDischarge6  + PLoss,HV  + PLoss,T

Calculated at Node 3, with MV transformer losses applicable to the power:

AvailableCapacitytoDischarge3 = AvailableCapacitytoDischarge2  + PLoss,MV( AvailableCapacitytoDischarge2)

f) Determine the maximum power that the system has capacity to discharge.

AvailableCapacitytoDischarge4 = min(AvailableCapacitytoDischarge3, sac)/ effsinv


g) Determine the charge/discharge schedule.

Evaluate whether the time step is a Target Period for discharge.

If TP=True, Discharge=1

Identify hours in which power can charge based on the selected model type.

If DM = LGIAExcess and Pavail> ic,

Charge=1 and AvailableCapacitytoCharge = AvailableExcesstoCharge4

If DM = EnergyAvailable and AvailableCapacitytoChargefromNonExcess4 >0 and if TP=False,

Charge=1 and AvailableCapacitytoCharge = AvailableCapacitytoChargefromNonExcess4


h) Calculate the maximum usable energy capacity after degradation. For each time step, reference from the previous time step: the previous System Age, assuming the it is 0 years in the first time step; the previous Battery AC Discharge at Node 3, assuming it is 0MW in the first time step; the previous Battery Maximum Capacity, assuming the Battery Maximum Capacity in the first time step is set at sac; and the previous Usable Energy Capacity Cycling-Induced Degradation, assuming it is 0% in the first time step.

UsableEnergyCap_CycleDeg = (prevBatteryACDischarge3/ effsinv)/prevBatteryMaxCapacity * scycdeg + prevUsableEnergyCap_CycleDeg

SystemAge = Δt+prevSystemAge

UsableEnergyCap_CalendarDeg = scaldeg * SystemAge

BatteryMaxCapacity = sdcus* (1- (UsableEnergyCap_CycleDeg + UsableEnergyCap_CalendarDeg))


i) Calculate the losses due to DC Roundtrip Efficiency. For each time step, reference: the previous Battery DC Roundtrip Efficiency, assuming in the first time step it is set at dcrte; and the previous Battery Roundtrip Efficiency Cycling Degradation, assuming it is 0% in the first time step.

BatteryRTE_CycleDeg = (prevBatteryACDischarge3/ effsinv)/prevBatteryDCRTE * rtecycdeg + prevBatteryRTE_CycleDeg

BatteryRTE_CalendarDeg = rtecaldeg * SystemAge

BatteryDCRTE = dcrte * (1- (BatteryRTE_CycleDeg + BatteryRTE_CalendarDeg))


j) Find the State of Charge of the storage system at each time step. For each time step, reference the previous Battery SOC, assuming the Battery SOC in the first time step is set at sdcus.

If Charge=1,

BatterySOC = min(BatteryMaxCapacity, prevBatterySOC+ AvailableCapacitytoCharge * BatteryDCRTE)

If Discharge=1,

BatterySOC =max(0, prevBatterySOC+ AvailableCapacitytoDischarge4)


BatterySOC = prevBatterySOC


k) Calculate the power throughput on the high side of the storage system transformers.

If BatterySOC – prevBatterySOC > 0,

BatteryDCPower4 = (BatterySOC – prevBatterySOC)/ BatteryDCRTE

BatteryACCharge3 = BatteryDCPower4/effsinv

PAC,out,S = BatteryACCharge3 + PLoss,MV


BatteryDCPower4 = (BatterySOC – prevBatterySOC)

BatteryACDischarge3 = BatteryDCPower4*effsinv

PAC,out,S = BatteryACDischarge3PLoss,MV