pydynamicestimator.devices.pss
Attributes
Classes
Abstract base class for Power System Stabilizer models (pluggable strategy). |
|
Single-input (speed) power system stabilizer: gain, washout, and two |
Module Contents
- class pydynamicestimator.devices.pss.PSS[source]
Bases:
abc.ABCAbstract base class for Power System Stabilizer models (pluggable strategy).
A PSS adds a supplementary stabilizing signal ‘Vs’ to the AVR’s voltage summing junction (the regulator error becomes
Vf_ref - Vt + Vs). Unlike the AVR and governor, whose outputs couple directly into the machine, the PSS couples into another strategy (the AVR). This is kept host-mediated: the PSS declares ‘Vs’ as its coupling variable, the host exposes it viaSynchronous.pss_signal(which returns 0 when no PSS is present), and each AVR readshost.pss_signal(dae)at its summing junction. The PSS never references the AVR directly – the host is the wiring hub.‘Vs’ may be a differential state or, more typically, a device-private algebraic (a washout + lead-lag chain has direct feedthrough on the input, so its output is algebraic). Symmetric to
AVRandGovernor: the PSS declares what states / private algebraics / parameters it needs and the host registers them on itself. It reads the machine’s absolute per-unit speed viahost.omega(1.0 at synchronism) and forms the deviation from nominal (dae.omega_net= 1 p.u.) itself.There is NO default PSS: a machine without one supplies no signal to its AVR.
- abstract states() List[str][source]
Return ordered list of differential-state names.
- Return type:
List[str]
- algebs() List[str][source]
Return ordered list of device-private algebraic variable names.
A washout + lead-lag PSS returns [‘Vs’] here (its output has direct feedthrough on the speed deviation, hence is algebraic) and writes the defining residual
0 = -Vs + <expr>intodae.ginfgcall().- Return type:
List[str]
- algebs_units() Dict[str, str][source]
Units for each private algebraic (mirrors
units()).- Return type:
Dict[str, str]
- algebs_noise() Dict[str, float][source]
Relative process-noise weight for each private algebraic.
- Return type:
Dict[str, float]
- algebs_x0() Dict[str, float][source]
Initial guess for each private algebraic (Newton guess in finit).
- Return type:
Dict[str, float]
- abstract units() List[str][source]
Return units for each state, same length as states().
- Return type:
List[str]
- abstract params() Dict[str, float][source]
Return dict of parameter names -> default values.
- Return type:
Dict[str, float]
- abstract states_noise() Dict[str, float][source]
Return noise specification for each state.
- Return type:
Dict[str, float]
- abstract states_init_error() Dict[str, float][source]
Return initial error for each state.
- Return type:
Dict[str, float]
- abstract x0() Dict[str, float][source]
Return default initial guess for each state.
- Return type:
Dict[str, float]
- abstract descriptions() Dict[str, str][source]
Return descriptions for states and params.
- Return type:
Dict[str, str]
- setpoints() Dict[str, float][source]
Return setpoint names -> defaults. A speed-input PSS has none.
- Return type:
Dict[str, float]
- abstract fgcall(host, dae: pydynamicestimator.system.Dae) None[source]
Write the PSS’s differential equations into
dae.fand, if it declares private algebraics (e.g. an algebraic ‘Vs’), their defining residuals intodae.g.- Parameters:
host – The Synchronous machine instance. Access state/algebraic indices via host.vw, host.Vs, etc., parameters via host.K_stab, host.Tw, …, and the absolute per-unit speed via host.omega (form the deviation as host.omega - dae.omega_net).
dae (pydynamicestimator.system.Dae) – The DAE system object.
- Return type:
None
- class pydynamicestimator.devices.pss.PSSKundur[source]
Bases:
PSSSingle-input (speed) power system stabilizer: gain, washout, and two lead-lag stages, as in Kundur (Power System Stability and Control, 1994).
- Vs(s) = K_stab * [ s*Tw / (1 + s*Tw) ] # washout (DC block)
[ (1 + s*T1) / (1 + s*T2) ] # lead-lag 1
[ (1 + s*T3) / (1 + s*T4) ] # lead-lag 2
domega # input: SPEED DEVIATION
IMPORTANT:
host.omegais the absolute per-unit rotor speed (= 1.0 at synchronism), NOT the deviation. The PSS input is the deviation from nominal,domega = omega - omega_netwithomega_net = 1p.u. (dae.omega_net); it is formed explicitly here so the model does not rely on the washout to subtract the DC offset.The output ‘Vs’ is summed into the AVR voltage error. Each block contributes one lag-pole state; the two lead-lags (and the washout’s high-pass) give the output a direct feedthrough on
domega, so ‘Vs’ is declared as a private ALGEBRAIC variable (read by the AVR viaSynchronous.pss_signal->var_sym('Vs')). This is the PSS-side counterpart of the algebraic-Efdlead-lag exciter and the algebraic-pmdroop governor.Realization (vw, vl1, vl2 are the three lag-pole states):
domega = omega - omega_net ; speed deviation (omega_net = 1 p.u.) u = K_stab * domega vw_dot = (u - vw) / Tw ; washout output w = u - vw vl1_dot = (w - vl1) / T2 ; lead-lag 1 out y1 = vl1(1-T1/T2) + (T1/T2) w vl2_dot = (y1 - vl2) / T4 0 = -Vs + vl2(1-T3/T4) + (T3/T4) y1
At equilibrium
omega = omega_netsodomega = 0andvw = vl1 = vl2 = Vs = 0: the washout blocks DC, hence the PSS does not shift the operating point.- units() List[str][source]
Return units for each state, same length as states().
- Return type:
List[str]
- algebs() List[str][source]
Return ordered list of device-private algebraic variable names.
A washout + lead-lag PSS returns [‘Vs’] here (its output has direct feedthrough on the speed deviation, hence is algebraic) and writes the defining residual
0 = -Vs + <expr>intodae.ginfgcall().- Return type:
List[str]
- algebs_units() Dict[str, str][source]
Units for each private algebraic (mirrors
units()).- Return type:
Dict[str, str]
- algebs_noise() Dict[str, float][source]
Relative process-noise weight for each private algebraic.
- Return type:
Dict[str, float]
- algebs_x0() Dict[str, float][source]
Initial guess for each private algebraic (Newton guess in finit).
- Return type:
Dict[str, float]
- params() Dict[str, float][source]
Return dict of parameter names -> default values.
- Return type:
Dict[str, float]
- states_noise() Dict[str, float][source]
Return noise specification for each state.
- Return type:
Dict[str, float]
- states_init_error() Dict[str, float][source]
Return initial error for each state.
- Return type:
Dict[str, float]
- x0() Dict[str, float][source]
Return default initial guess for each state.
- Return type:
Dict[str, float]
- descriptions() Dict[str, str][source]
Return descriptions for states and params.
- Return type:
Dict[str, str]
- fgcall(host, dae: pydynamicestimator.system.Dae) None[source]
Write the PSS’s differential equations into
dae.fand, if it declares private algebraics (e.g. an algebraic ‘Vs’), their defining residuals intodae.g.- Parameters:
host – The Synchronous machine instance. Access state/algebraic indices via host.vw, host.Vs, etc., parameters via host.K_stab, host.Tw, …, and the absolute per-unit speed via host.omega (form the deviation as host.omega - dae.omega_net).
dae (pydynamicestimator.system.Dae) – The DAE system object.
- Return type:
None
- pydynamicestimator.devices.pss.PSS_REGISTRY: Dict[str, type]