pydynamicestimator.tests.test_pss

Pluggable-PSS test (the inter-strategy coupling case).

The power system stabilizer is a pluggable strategy whose output ‘Vs’ is summed into the AVR voltage error – a strategy-to-strategy coupling kept host-mediated (Synchronous.pss_signal returns the ‘Vs’ symbol, or 0 when no PSS is present; each AVR reads it). ‘Vs’ is a device-private algebraic (washout + lead-lag has direct feedthrough on the speed deviation). This validates:

  1. The PSSKundur output satisfies its defining equation along the trajectory.

  2. The washout blocks DC: ‘Vs’ is ~0 at steady state and only acts on the post-disturbance transient.

  3. The PSS measurably changes the machine dynamics versus no PSS (the host-mediated PSS -> AVR -> machine coupling works), and adds exactly its three states + one private algebraic.

(Byte-equivalence of the no-PSS path is covered by the unchanged positional baselines in test_recur_sim/test_recur_est/test_run_ideal.)

See docs/algebraic_equations_design.md and CHANGELOG_algebraic_equations.md.

Attributes

_T_DIST

Functions

test_pss_constraint_holds()

The PSS's algebraic output must satisfy its defining equation along the

test_pss_washout_and_coupling()

The PSS adds its three states + one private algebraic; its washout blocks

test_pss_per_machine_vectorization()

With multiple machines in one vectorized device group, each PSS must use

Module Contents

pydynamicestimator.tests.test_pss._T_DIST = 3.0
pydynamicestimator.tests.test_pss.test_pss_constraint_holds()[source]

The PSS’s algebraic output must satisfy its defining equation along the whole trajectory: Vs == vl2*(1-T3/T4) + (T3/T4)*y1, with y1 = vl1*(1-T1/T2) + (T1/T2)*w and washout output w = K_stab*(omega-1) - vw. Note omega is the ABSOLUTE per-unit speed, so the PSS input is the deviation omega - omega_net (omega_net = 1 p.u.).

pydynamicestimator.tests.test_pss.test_pss_washout_and_coupling()[source]

The PSS adds its three states + one private algebraic; its washout blocks DC (Vs ~ 0 at the pre-disturbance steady state, active afterwards); and it measurably changes the machine dynamics versus the no-PSS reference.

pydynamicestimator.tests.test_pss.test_pss_per_machine_vectorization()[source]

With multiple machines in one vectorized device group, each PSS must use its OWN absolute speed minus the common nominal (omega_i - omega_net) and its OWN parameters – not machine 0’s. Two SGs carry PSSKundur with different K_stab/Tw/T*; each machine’s Vs must satisfy its own defining equation.