powsybl / powsybl-core

A framework to build power system oriented software
https://www.powsybl.org
Mozilla Public License 2.0
126 stars 41 forks source link

Loadflow validation: phase shifter regulation validation #698

Open sylvlecl opened 5 years ago

sylvlecl commented 5 years ago

Feature.

The regulation of phase shifters (target power or current, current limitation ... ) is not validated.

The loadflow validation could check that phase shifters in regulation mode have indeed changed tap so as to respect their target/limit. A margin needs to be computed (how?) and taken into account, since the possible difference to target will depend on the typical power or current difference between 2 taps.

Cannot find back the initial spec ...

Being able to validate the loadflow behaviour for regulating phase shifters.

massimo-ferraro commented 5 years ago

Here is what Nicolas Omont proposed to test phase shifters for which regulating="true" and RegulationMode!=”FIXED_TAP”

1. First we have to compute a nominal capacity (because the parameter is not in the model) //For the test not to send false alarms, an upper bound of nominal capacity is needed. Using the permanentLimit would be another way to perform this, but it is not always given

RegSide = Side indicated in <terminalRef "ONE"/>
Zeq = (voltage of node on RegSide)² * sin( abs( theta of node 1 – theta of node 2 ) ) / p1
Z = max( sqrt( (r at current tap)² + (x at current tap)² ) ,  Zeq )
Sn = (nominalV of node on RegSide)² / Z

2. If regulationMode="ACTIVE_POWER_CONTROL" // It is assumed that the phase-shifter is designed to control the flow between –Sn and Sn or less

StepSize = 2 * Sn / # taps
OK if abs( p on RegSide – regulationValue ) < StepSize

3. If regulationMode="CURRENT_LIMITER" // It is assumed that the phase-shifter is designed to control the flow between –In and In or less

StepSize = 2 * (Sn * 1000 / (nominalV of node on RegSide) ) / #taps                      
I = ( (p on RegSide)²+(q on RegSide)² ) / (nominalV of node on RegSide)
OK if:
- I < abs(regulationValue)
- Or I>abs(regulationValue) and (tapPosition= lowTapPosition or tapPosition=higherTapPosition)