Appearance
Synchronous Machine (3-phase)
Three-phase synchronous machine (generator/motor) modeled in the dq0 / Park reference frame following Kundur's complete two-axis model (Power System Stability and Control, §3.4). The rotor carries a field winding plus damper windings — one d-axis damper and, for a round-rotor machine, two q-axis dampers (field + 1d + 1q + 2q); a salient-pole machine drops the second q-axis damper (field + 1d + 1q). The seven flux linkages are integrated with full stator transients (the pψd / pψq speed-and-transformer EMFs are retained), so the model is accurate for switching and fault transients, not just slow swings. Parameters are entered as the usual datasheet quantities (Xd, Xq, X'd, X'q, X''d, X''q, leakage Xl, Ra, and the open-circuit time constants T'do, T''do, T'qo, T''qo) and converted internally to Kundur's fundamental circuit parameters (Lad, Lfd, L1d, Rfd, R1d, Laq, L1q, L2q, R1q, R2q). Alternatively, the Parameter-entry mode can be switched to Fundamental to type those equivalent-circuit parameters directly (the form many textbooks tabulate), skipping the datasheet conversion. Magnetic saturation is the exponential open-circuit saturation curve acting on the d-axis magnetizing inductance (q-axis scaled by the same factor), specified either directly by its exponential coefficients (Asat, Bsat) or by the two datasheet saturation factors SE(1.0) and SE(1.2) (the GENROU/GENSAL convention SE = ΔI/Vt), which are fit to the same curve. The machine couples to the network by the EMTDC-style voltage-behind-subtransient-reactance method as a mutually-coupled three-phase stator companion: the positive/negative sequence sees Z1 = Ra + jX''avg while the zero sequence sees the machine's own Z0 = R0 + jX0 (entered in pu), plus a per-step Norton current source carrying the internal sub-transient EMF (from the rotor fluxes) and the trapezoidal history. The star point is internal (no exposed neutral terminal): the grounding mode selects ungrounded (no zero-sequence path), solidly grounded, or grounded through an impedance Rn+jXn, so the terminal zero-sequence impedance is the standard Z0 + 3·(Rn+jXn) and unbalanced faults / zero-sequence studies behave correctly. Field voltage Efd and mechanical torque Tm are wired control inputs (with constant fallbacks when unwired); rotor speed ω, field current Ifd, terminal-voltage magnitude Vt (pu, positive-sequence) and electrical power Pe (pu on the machine base, filtered) are wired control outputs — feed Vt and Ifd to an excitation system / AVR (e.g. the Type DC1A exciter), and feed ω and Pe to a turbine-governor (e.g. the GGOV1 governor, which drives Tm back). The left-edge ω / Pe / Tm ports line up with the governor's right-edge ports for a direct connection. An optional rotor lock can start the run with the shaft mechanically held (swing/torsional dynamics frozen, speed held at ω(0)) while the network settles, then release it either at a user-entered time or live under a named gate signal (0 = locked, 1 = free). Rotor angle, real power P, reactive power Q, electrical torque Te, and the three stator currents are optional observables, each with its own unit selector and name. Reactances are entered in pu on the machine's own MVA / kV base (or in Ω). The Name parameter is a display-only label drawn under the icon with the rated power. Standalone machine — wire an external step-up transformer, breaker, or loads on the canvas.
Category: Three-Phase / Machines
Overview
The Synchronous Machine models a three-phase synchronous generator (or motor) — the workhorse of bulk power generation. The stator carries the three armature windings; the rotor carries a DC field winding (fed by the excitation system) plus short-circuited damper windings that account for sub-transient behaviour. The model follows Kundur, Power System Stability and Control, §3 (the complete two-axis / dq0 model with stator transients retained).
Salient-pole vs. round rotor
Two rotor constructions are supported through the Rotor type parameter; they differ in how the air gap — and therefore the magnetic reluctance — varies with rotor position.
- Salient-pole (hydro units, low speed, many poles): the poles physically project, so the air gap is small on the direct (d) axis and large on the quadrature (q) axis. This gives
and an extra reluctance torque. Salient-pole machines have one q-axis damper winding (field + 1d + 1q). - Round / cylindrical (turbo-generators, 2–4 poles, high speed): a uniform air gap gives
. The solid steel rotor supports eddy currents modelled as a second q-axis damper (field + 1d + 1q + 2q).
The dq0 (Park) reference frame
The three stator phase quantities are transformed to a rotor-fixed reference frame by Park's transformation, giving direct (
The stator and rotor voltage equations in per-unit, with full stator transients retained, are (Kundur eqs. 3.120–3.123):
where
Equivalent circuits
Because the dq0 inductances are constant, each axis reduces to a coupled magnetic circuit sharing a common mutual (magnetizing) inductance
The flux linkages (per unit) are
with
Datasheet vs. fundamental parameter entry
Many references (and Kundur's §5 worked examples) tabulate a machine directly by its fundamental equivalent-circuit parameters rather than the operational reactances and time constants. The Parameter entry setting on the Config tab chooses which form you type:
- Datasheet (default) — enter
, the leakage , and the four open-circuit time constants. The fundamental parameters are derived from them. - Fundamental — enter
directly ( only for a round rotor). No conversion step is applied.
Both forms feed the identical machine model — only the input representation differs.
Torque and rotor dynamics
The air-gap electromagnetic torque is
The rotor accelerates per the swing equation (per unit, inertia constant
where
This single inertia is the right choice for electromechanical (swing-stability) studies. For torsional / sub-synchronous studies, switch the Shaft model to Multi-mass, which replaces this one lumped rotor with the spring-coupled mass chain described next (the single-mass model is just its one-mass special case).
Multi-mass shaft (torsional model)
Real turbine-generators are not a single rigid rotor: the HP / IP / LP turbine stages, the generator and the exciter sit on one long shaft and are coupled through finite torsional stiffness. The shaft therefore twists and oscillates, with natural frequencies typically in the 10-50 Hz range. These torsional modes can be excited by network events and, most importantly, by series-compensated lines, leading to sub-synchronous resonance (SSR) that can fatigue or break a shaft. Capturing them needs more than one inertia.
Selecting Multi-mass on the Shaft tab models the shaft as a role-based chain built around the generator: 1 to 4 turbine masses, the generator rotor, and an optional exciter mass (up to six masses in all):
Each mass carries its own inertia constant
The generator mass is the electrical rotor: it is the only one that exchanges the air-gap electrical torque
For an undamped two-mass shaft (one turbine + the generator) the twist rings at the torsional natural frequency
and the mutual damping
Per-stage mechanical torque
In multi-mass mode the single
On the canvas the icon grows to match: the electrical machine body stays on the right (keeping the three-phase terminal clear), with the generator drum at a fixed position to its left, the exciter drum (when modeled) filling the slot between them, and the turbine drums fanning out further left — each turbine with its torque pin on top and the speed output rising from the generator drum. With no exciter the gen-to-body section is simply drawn as slack shaft.
The shaft starts untwisted and synchronized; enabling Measure shaft (per-mass) publishes each mass's speed and angle as role-named observables (Generator, Turbine 1…4, Exciter), so the torsional oscillations — and the twist between any two masses — can be plotted directly.
Rotor lock (locked-rotor start)
It is often useful to hold the rotor mechanically still while the electrical network energizes and the fast transients die away, and only then let the rotor swing. The Rotor lock setting (Excitation & Mechanical tab) does exactly that.
While the rotor is locked, its mechanical dynamics are frozen: the swing equation (and, in multi-mass mode, every per-mass swing and shaft twist) is not integrated, so the speed is held at its initial value
With the usual
pu (synchronous), a locked rotor turns at exactly synchronous speed with a constant load angle — i.e. it behaves as a fixed-angle source until released. This makes it a convenient way to bring a network up to a clean operating point before arming the swing dynamics.
Three modes are offered:
| Mode | Behaviour |
|---|---|
| Off | The rotor is free from |
| Timed unlock | The rotor stays locked until the Unlock time, then runs free for the rest of the simulation. |
| Signal-controlled | A named gate signal sets the lock live: the rotor is locked while the signal is 0 (below 0.5) and free while it is 1 (at/above 0.5), and it re-locks if the signal returns to 0. |
In Signal-controlled mode, type the name of any published signal into Lock signal name — a GoTo output, a labelled wire, or any component's observable. The gate is read one step delayed (so it can never form an algebraic loop), and a blank or unresolved name reads 0, keeping the rotor locked. This lets a switch, a comparator, or a timer elsewhere on the canvas drive the release — for example, unlocking the rotor only after a breaker closes or a bus voltage crosses a threshold.
The lock applies identically to the single-mass and the multi-mass shaft models; in multi-mass mode the whole shaft (all masses and all twists) is held and then released together.
Soft-start ramp
When the machine is initialized onto a load-flow operating point, its rotor flux (and hence field) starts on that point, but the stator energizes from rest — so by default the armature takes a brief "switch closes at
The Soft-start τ setting (Excitation & Mechanical tab) removes it. With
Soft-start and Rotor lock compose well: lock the rotor, ramp the electrical side in cleanly, then release the swing dynamics once the network is settled.
Magnetic saturation
Saturation derates the magnetizing inductance as a function of the air-gap (mutual) flux
with the q-axis magnetizing inductance scaled by the same factor. The curve can be entered two equivalent ways (selected by the Definition field on the Saturation tab):
- Exponential — give
and directly. - SE points — give the two datasheet saturation factors
and . These are the GENROU/GENSAL convention : the fractional extra field current (vs. the air-gap line) needed to reach terminal voltage on the open-circuit curve. The exponential is fit through the two points:
The same saturation convention is shared across the machine models (and, in future, transformers), so an SE-point curve entered here behaves identically wherever saturation is offered.
Network interface and grounding
The machine couples to the electrical network by the EMTDC-style voltage-behind-sub-transient-reactance method, realised as a mutually-coupled three-phase stator companion. Decomposed into symmetric sequences:
- the positive / negative sequence sees the sub-transient interface impedance
, with ; - the zero sequence sees the machine's own impedance
(entered in pu on the Zero Sequence tab). Because the companion is genuinely coupled (not three independent per-phase branches), may legitimately be smaller than — the usual case for a real machine.
A per-step Norton current source carries the internal sub-transient EMF (reconstructed from the rotor fluxes) plus the trapezoidal history.
There is no exposed neutral terminal. The star (neutral) point is internal, and the Neutral grounding mode selects how it ties to ground:
| Mode | Terminal zero-sequence impedance |
|---|---|
| Ungrounded | open — no zero-sequence current path |
| Solidly grounded (default) | |
| Grounded via impedance |
The factor of 3 is the standard symmetric-component result for a neutral impedance carrying
Display label
The Name parameter (Config tab) is a display-only tag (e.g. MP-3). It is drawn beneath the icon, on the line above the machine's rated power, and has no effect on the simulation.
When to use something else
- Stiff/ideal source behind a fixed impedance (no rotor dynamics needed): use the 3-Phase Voltage Source, which is far cheaper.
- A machine on a different MVA/kV base wired to the grid: add an external step-up Transformer (3-phase) rather than re-basing the machine by hand.
Ports
| Name | Direction | Value type | Notes |
|---|---|---|---|
terminals | electrical_3ph | double | |
Efd | input | double | |
Tm | input | double | Visible when shaft_model == 0 |
Tm_turb1 | input | double | Visible when shaft_model == 1 && num_turbines >= 1 |
Tm_turb2 | input | double | Visible when shaft_model == 1 && num_turbines >= 2 |
Tm_turb3 | input | double | Visible when shaft_model == 1 && num_turbines >= 3 |
Tm_turb4 | input | double | Visible when shaft_model == 1 && num_turbines >= 4 |
speed | output | double | |
Ifd | output | double | |
Vt | output | double | |
Pe | output | double |
Parameters
Config
| Name | Label | Type | Default | Units | Description |
|---|---|---|---|---|---|
name | Name | string | (empty) | — | Display-only label for this machine (e.g. a tag like `MP-3`). Drawn under the icon above the rated power. Has no effect on the simulation. |
rotor_type | Rotor type | enum (Round-rotor (field + 1d + 1q + 2q) / Salient-pole (field + 1d + 1q)) | 0 | — | Rotor winding structure. `Round-rotor` (turbo-generator) carries a field winding, one d-axis damper and two q-axis dampers (field + 1d + 1q + 2q) and uses X'q and T'qo. `Salient-pole` (hydro) drops the second q-axis damper (field + 1d + 1q); X'q and T'qo are not used. |
param_input_mode | Parameter entry | enum (Datasheet (Xd, X'd, T'do, ...) / Fundamental (Lad, Lfd, Rfd, ...)) | 0 | — | How the electrical machine parameters are entered. `Datasheet` takes the usual operational quantities (Xd, Xq, X'd, X'q, X''d, X''q, leakage Xl, Ra and the open-circuit time constants) and converts them internally to Kundur's fundamental circuit parameters. `Fundamental` skips that conversion and lets you type the equivalent-circuit parameters directly (Lad, Laq, Ll, Lfd, L1d, L1q, L2q, Ra, Rfd, R1d, R1q, R2q) — the form many textbooks (e.g. Kundur §5) tabulate. The two modes select different parameter tabs; everything downstream (companion model, saturation, dynamics) is identical. |
shaft_model | Shaft model | enum (Single-mass (lumped) / Multi-mass (torsional)) | 0 | — | Mechanical rotor representation. `Single-mass` lumps the whole turbine-generator into one inertia governed by the scalar swing equation 2H·dω/dt = Tm − Te − D·(ω−1) — the right choice for electromechanical (swing-stability) studies. `Multi-mass` replaces it with a chain of spring-coupled rotor masses (HP / IP / LP turbine stages, generator, exciter) for torsional / sub-synchronous-resonance (SSR) studies; configure the masses, shaft stiffnesses and per-stage mechanical-torque inputs on the Shaft tab. |
s_rated | S rated | double | 100 | MVA (VA, kVA, MVA) | Machine rated apparent power. Also the per-unit power base for the reactances/resistances and the basis for the pu electrical torque Te. |
v_rated | V rated (LL rms) | double | 13.8 | kV (V, kV) | Machine rated line-to-line RMS terminal voltage. Per-unit voltage base; the internal EMF for a 1 pu field is V_rated·√(2/3) peak line-to-neutral. |
f_rated | f rated | double | 60 | — | Rated electrical frequency (Hz). Sets the base angular speed ω0 = 2πf and the pu↔SI reactance/inductance conversion. |
H | H (MWs/MVA) | double | 3.5 | — | Inertia constant in seconds (stored kinetic energy at rated speed / rated MVA). Larger H = slower speed deviations. Used by the single-mass swing equation 2H·dω/dt = Tm − Te − D·(ω−1). Single-mass shaft only — in multi-mass mode each rotor mass carries its own H on the Shaft tab. |
D | D (pu) | double | 0 | — | Per-unit mechanical damping torque coefficient (damping torque = D·(ω−1) in pu). 0 disables. Single-mass shaft only — in multi-mass mode each rotor mass carries its own self-damping on the Shaft tab. |
grounding_mode | Neutral grounding | enum (Ungrounded / Solidly grounded / Grounded via impedance) | 1 | — | How the machine's internal star point is tied to ground (there is no exposed neutral terminal). `Ungrounded`: the star point floats — no zero-sequence current path. `Solid`: star point bonded to ground (terminal zero-sequence impedance = the machine Z0 = R0 + jX0). `Impedance`: star point grounded through Rn + jXn (a neutral grounding resistor/reactor), so the terminal zero-sequence impedance is Z0 + 3·(Rn + jXn). Set the machine Z0 on the Zero Sequence tab. |
saturation | Magnetic saturation | enum (Off (linear) / On) | 0 | — | Enable the exponential open-circuit saturation curve (Kundur §3.8) acting on the d-axis magnetizing inductance Lad, with the q-axis scaled by the same factor. Define the curve directly (Asat/Bsat) or via the SE(1.0)/SE(1.2) datasheet points on the Saturation tab. |
measure_current | Measure stator current | enum (Off / On) | 0 | — | Emit the three stator phase currents as observables. Names/units on the Signal Names tab. |
measure_angle | Measure rotor angle | enum (Off / On) | 0 | — | Emit the rotor (load) angle δ as an observable, wrapped to [-180°, 180°). Name/unit on the Signal Names tab. |
measure_te | Measure elec. torque | enum (Off / On) | 0 | — | Emit the air-gap electrical torque Te as an observable. Name/unit on the Signal Names tab. |
measure_shaft | Measure shaft (per-mass) | enum (Off / On) | 0 | — | Emit each rotor mass's speed and angle as observables (multi-mass shaft only). Use the per-mass speeds and the angle twists between adjacent masses to study torsional / sub-synchronous oscillations. Names on the Shaft Signals tab. |
monitor_pq | Monitor P/Q | enum (Off / On) | 0 | — | Emit real (P) and reactive (Q) power delivered at the terminals as observables. Instantaneous Buchholz/Akagi form, low-pass filtered with pq_time_constant to reject 2ω ripple. Names/units on the Signal Names tab. |
pq_time_constant | P/Q filter τ (sec) | double | 0.02 | — | Low-pass filter time constant for P/Q (and the Te report). Smaller tracks transients; larger gives a cleaner steady state. |
Reactances
| Name | Label | Type | Default | Units | Description |
|---|---|---|---|---|---|
Xd | Xd | double | 1.8 | pu (pu, Ω) | Direct-axis synchronous reactance. Enter in pu on the machine base or in Ω. |
Xq | Xq | double | 1.7 | pu (pu, Ω) | Quadrature-axis synchronous reactance. Enter in pu on the machine base or in Ω. |
Xdp | X'd | double | 0.3 | pu (pu, Ω) | Direct-axis transient reactance. Enter in pu on the machine base or in Ω. |
Xqp | X'q | double | 0.55 | pu (pu, Ω) | Quadrature-axis transient reactance. Round-rotor machines only (a salient-pole rotor has a single q-axis damper and no transient q-axis branch). Enter in pu on the machine base or in Ω. |
Xdpp | X''d | double | 0.2 | pu (pu, Ω) | Direct-axis sub-transient reactance. Sets (averaged with X''q) the constant companion conductance that interfaces the machine to the network. Enter in pu on the machine base or in Ω. |
Xqpp | X''q | double | 0.2 | pu (pu, Ω) | Quadrature-axis sub-transient reactance. Saliency (X''d ≠ X''q) is carried in the per-step injection; the average sets the constant companion conductance. Enter in pu on the machine base or in Ω. |
Xl | Xl (leakage) | double | 0.13 | pu (pu, Ω) | Stator (armature) leakage reactance. With Xd / Xq it fixes the magnetizing inductances Lad = Xd − Xl and Laq = Xq − Xl in Kundur's fundamental model. Enter in pu on the machine base or in Ω. |
Ra | Ra | double | 0.002 | pu (pu, Ω) | Stator (armature) resistance per phase. Enter in pu on the machine base or in Ω. |
Time Constants
| Name | Label | Type | Default | Units | Description |
|---|---|---|---|---|---|
Tdop | T'do | double | 8 | s (s, ms) | Direct-axis transient open-circuit time constant. |
Tdopp | T''do | double | 0.03 | s (s, ms) | Direct-axis sub-transient open-circuit time constant. |
Tqop | T'qo | double | 0.4 | s (s, ms) | Quadrature-axis transient open-circuit time constant. Round-rotor machines only. |
Tqopp | T''qo | double | 0.05 | s (s, ms) | Quadrature-axis sub-transient open-circuit time constant. |
Fundamental Params
| Name | Label | Type | Default | Units | Description |
|---|---|---|---|---|---|
Lad | Lad | double | 1.66 | pu (pu, Ω) | Direct-axis mutual (magnetizing) inductance — the unsaturated air-gap inductance shared by the stator and the d-axis rotor windings. With the leakage gives Xd = Lad + Ll. Enter in pu on the machine base or as a reactance in Ω. |
Laq | Laq | double | 1.61 | pu (pu, Ω) | Quadrature-axis mutual (magnetizing) inductance, shared by the stator and the q-axis rotor windings. With the leakage gives Xq = Laq + Ll. Enter in pu on the machine base or as a reactance in Ω. |
Ll | Ll (leakage) | double | 0.15 | pu (pu, Ω) | Stator (armature) leakage inductance. Synchronous inductances are Ld = Ll + Lad and Lq = Ll + Laq. Enter in pu on the machine base or as a reactance in Ω. |
Ra_fund | Ra | double | 0.003 | pu (pu, Ω) | Stator (armature) resistance per phase. Enter in pu on the machine base or in Ω. |
Lfd | Lfd (field leakage) | double | 0.165 | pu (pu, Ω) | Field-winding leakage inductance (d-axis rotor), referred to the stator. With Lad sets the d-axis transient inductance L'd = Ll + Lad‖Lfd. Enter in pu on the machine base or as a reactance in Ω. |
Rfd | Rfd (field) | double | 0.0006 | pu (pu, Ω) | Field-winding resistance (d-axis rotor), referred to the stator. Sets the d-axis transient open-circuit time constant T'do = (Lad + Lfd)/(ω0·Rfd). Enter in pu on the machine base or in Ω. |
L1d | L1d (damper leakage) | double | 0.1713 | pu (pu, Ω) | d-axis damper-winding leakage inductance, referred to the stator. With Lad and Lfd sets the d-axis sub-transient inductance L''d = Ll + Lad‖Lfd‖L1d. Enter in pu on the machine base or as a reactance in Ω. |
R1d | R1d (damper) | double | 0.0284 | pu (pu, Ω) | d-axis damper-winding resistance, referred to the stator. Sets the d-axis sub-transient open-circuit time constant T''do = (L1d + Lad‖Lfd)/(ω0·R1d). Enter in pu on the machine base or in Ω. |
L1q | L1q (damper leakage) | double | 0.7252 | pu (pu, Ω) | First q-axis damper-winding leakage inductance, referred to the stator. On a salient-pole machine this is the only q-axis damper. Enter in pu on the machine base or as a reactance in Ω. |
R1q | R1q (damper) | double | 0.00619 | pu (pu, Ω) | First q-axis damper-winding resistance, referred to the stator. Enter in pu on the machine base or in Ω. |
L2q | L2q (2nd damper leakage) | double | 0.125 | pu (pu, Ω) | Second q-axis damper-winding leakage inductance (round-rotor only — models the solid-rotor eddy-current path). Enter in pu on the machine base or as a reactance in Ω. |
R2q | R2q (2nd damper) | double | 0.02368 | pu (pu, Ω) | Second q-axis damper-winding resistance (round-rotor only), referred to the stator. Enter in pu on the machine base or in Ω. |
Saturation
| Name | Label | Type | Default | Units | Description |
|---|---|---|---|---|---|
sat_definition | Definition | enum (Exponential (Asat/Bsat) / SE points (SE1.0/SE1.2)) | 0 | — | How the saturation curve is specified. `Exponential` enters the coefficients Asat / Bsat directly. `SE points` enters the two datasheet saturation factors SE(1.0) and SE(1.2); the exponential is fit through them. Both end up as the same Ssat(ψ) = Asat·exp(Bsat·(ψ − ψT1)) curve internally. |
Asat | Asat | double | 0.03 | — | Exponential saturation coefficient A (Kundur eq. 3.187): the saturation function is Ssat(ψat) = Asat·exp(Bsat·(ψat − ψT1)) for air-gap flux ψat above the threshold ψT1, else 0. The saturated magnetizing inductance is Lad = Ladu / (1 + Ssat). 0 disables saturation. |
Bsat | Bsat | double | 7 | — | Exponential saturation coefficient B (1/pu-flux): controls how sharply saturation increases with air-gap flux above ψT1. |
SE10 | SE(1.0) | double | 0.1 | — | Open-circuit saturation factor at Vt = 1.0 pu: SE(1.0) = ΔI(1.0)/1.0, the fractional extra field current (vs. the air-gap line) needed to reach 1.0 pu terminal voltage. Typical 0.05–0.15. |
SE12 | SE(1.2) | double | 0.3 | — | Open-circuit saturation factor at Vt = 1.2 pu: SE(1.2) = ΔI(1.2)/1.2. Must exceed SE(1.0). Typical 0.2–0.5. With SE(1.0) it fixes Bsat = ln(SE12/SE10)/0.2 and Asat = SE10/exp(Bsat·(1.0 − ψT1)). |
psiT1 | ψT1 (pu) | double | 0.8 | — | Air-gap flux threshold (pu) below which the iron is unsaturated (Ssat = 0). |
Zero Sequence
| Name | Label | Type | Default | Units | Description |
|---|---|---|---|---|---|
X0 | X0 | double | 0.1 | pu (pu, Ω) | Machine zero-sequence reactance. Sets the zero-sequence stator impedance Z0 = R0 + jX0 (carried by a true mutually-coupled stator companion, so X0 may be smaller than the sub-transient X''). Leave at/near 0 to default to the average sub-transient reactance X''avg. Enter in pu on the machine base or in Ω. |
R0 | R0 | double | 0 | pu (pu, Ω) | Machine zero-sequence resistance. Defaults to the armature resistance Ra when left at 0. Enter in pu on the machine base or in Ω. |
Grounding
| Name | Label | Type | Default | Units | Description |
|---|---|---|---|---|---|
Rn | Rn (neutral) | double | 0 | pu (pu, Ω) | Neutral grounding resistance, between the internal star point and ground. Adds 3·Rn to the terminal zero-sequence impedance. Enter in pu on the machine base or in Ω. |
Xn | Xn (neutral) | double | 0 | pu (pu, Ω) | Neutral grounding reactance, between the internal star point and ground. Adds 3·Xn to the terminal zero-sequence impedance. Enter in pu on the machine base or in Ω. |
Excitation & Mechanical
| Name | Label | Type | Default | Units | Description |
|---|---|---|---|---|---|
efd0 | Efd (fallback, pu) | double | 1 | — | Constant per-unit field voltage used when the Efd control input is left unwired. 1.0 ≈ rated open-circuit terminal voltage at no load (unsaturated). |
tm0 | Tm (fallback, pu) | double | 0 | — | Constant per-unit mechanical torque used when the Tm control input is left unwired. Positive drives the machine as a generator. |
init_speed | ω(0) (pu) | double | 1 | — | Initial rotor speed in pu of synchronous speed. 1.0 starts synchronized. |
init_angle | δ(0) | double | 0 | deg (deg, rad) | Initial rotor (load) angle δ(0) = arg(Eq) relative to the synchronous reference at t=0 — the q-axis EMF angle that every stability text reports. Overwritten by an applied load-flow result when the machine participates in power flow. (Internally the engine seeds the Park rotor state 180° from δ — the network is sine-referenced — and the reported angle adds the offset back, so you set and read the textbook δ.) |
id0 | id(0) (pu) | double | 0 | — | Initial d-axis stator current (pu, generator convention) used to seed the loaded steady-state rotor flux so the machine relaxes onto its operating point (a short armature transient rings down; the stator current is not pre-charged). Managed by the load-flow apply pass; leave at 0 for the open-circuit / standalone start. |
iq0 | iq(0) (pu) | double | 0 | — | Initial q-axis stator current (pu, generator convention) used to seed the loaded steady-state rotor flux so the machine relaxes onto its operating point (a short armature transient rings down; the stator current is not pre-charged). Managed by the load-flow apply pass; leave at 0 for the open-circuit / standalone start. |
rotor_lock | Rotor lock | enum (Off (free from t=0) / Timed unlock / Signal-controlled) | 0 | — | Start the run with the rotor mechanically locked and release it later, so the electrical transients can settle before the rotor is allowed to swing. While locked, the rotor's mechanical dynamics are frozen: speed is held at ω(0) and the load angle δ (and, in multi-mass mode, every shaft twist) is held constant. The electrical model keeps running normally throughout — the EMF still rotates at the held speed, currents and fluxes evolve — only the mechanical acceleration is suppressed. `Off`: rotor is free from t=0 (default behaviour). `Timed unlock`: rotor stays locked until the Unlock time, then runs free for the rest of the simulation. `Signal-controlled`: a named signal gates the lock live — the rotor is locked while the signal is 0 (below 0.5) and free while it is 1 (at/above 0.5), and it re-locks if the signal returns to 0. Applies to both the single-mass and the multi-mass shaft model. |
unlock_time | Unlock time | double | 1 | s (s, ms) | Simulation time at which the locked rotor is released into free dynamics. The rotor is locked for t < unlock time and free for t ≥ unlock time. |
unlock_signal_name | Lock signal name | string | (empty) | — | Name of a published signal that gates the rotor lock: the rotor is locked while the signal is below 0.5 (0 = locked) and free at/above 0.5 (1 = free), re-locking live if the signal returns to 0. Resolved by name through the same registry as a GoTo output, a labelled wire, or another component's observable, and read 1-step delayed. Leave blank to keep the rotor locked for the whole run. |
startup_tau | Soft-start τ | double | 0 | s (s, ms) | Optional soft-start time constant. The rotor flux seed places the machine on its operating point, but the stator energises from rest, so by default the armature takes a brief 'switch closes at t=0' inrush that rings down over the armature time constant. Set a positive value to ramp the internal EMF (and stator current) in smoothly with this first-order time constant — the network energises with no inrush and is exactly on the operating point once the ramp completes (a few τ). While ramping, the field is held at its fallback so a wired AVR cannot wind up against the low ramp-time terminal voltage. A few cycles (≈ 0.03–0.1 s at 60 Hz) is typically enough. Leave at 0 to disable (legacy gentle start). |
Signal Names
| Name | Label | Type | Default | Units | Description |
|---|---|---|---|---|---|
current_name_a | Phase A current name | string | Ia | A (A, kA) | Signal name for the Phase A stator current. Blank = skip. Value scaled to the chosen unit. |
current_name_b | Phase B current name | string | Ib | A (A, kA) | Signal name for the Phase B stator current. Blank = skip. Value scaled to the chosen unit. |
current_name_c | Phase C current name | string | Ic | A (A, kA) | Signal name for the Phase C stator current. Blank = skip. Value scaled to the chosen unit. |
angle_name | Rotor angle name | string | delta | deg (deg, rad) | Signal name for the rotor (load) angle δ. Blank = skip. Wrapped to [-180°, 180°) and scaled to the chosen unit. |
te_name | Elec. torque name | string | Te | pu (pu, N·m) | Signal name for the air-gap electrical torque Te. Blank = skip. Value scaled to the chosen unit. |
p_signal_name | P signal name | string | P | MW (W, kW, MW) | Signal name for filtered real-power output P. Blank = skip. Value scaled to the chosen unit. |
q_signal_name | Q signal name | string | Q | MVAr (VAr, kVAr, MVAr) | Signal name for filtered reactive-power output Q. Blank = skip. Value scaled to the chosen unit. |
Shaft
| Name | Label | Type | Default | Units | Description |
|---|---|---|---|---|---|
num_turbines | Number of turbines | enum (1 / 2 / 3 / 4) | 1 | — | How many turbine masses drive the shaft (1 to 4). Each turbine is a spring-coupled rotor mass with its own mechanical-torque input pin; Turbine 1 sits next to the generator and higher-numbered turbines extend outward. With the generator (and optional exciter) this gives a 2- to 6-mass torsional chain — a large turbo-set is HP, IP, LP-A, LP-B (4 turbines), generator, exciter. |
model_exciter | Model exciter mass | enum (Off / On) | 0 | — | Add a separate exciter rotor mass on the far side of the generator from the turbines, coupled to the generator by its own shaft section. The exciter is an undriven inertia — it has no torque-input pin; its small steady mechanical torque is set by its fallback below. Off lumps the exciter into the generator mass. |
H_gen | Generator: H (MWs/MVA) | double | 3.5 | — | Inertia constant of the generator rotor mass — the electrical rotor that exchanges the air-gap torque Te with the network and whose speed/angle drive the dq frame. |
D_gen | Generator: D (pu) | double | 0 | — | Self (absolute) damping torque coefficient of the generator mass (damping torque = D·(ω−1), pu). Models windage/load damping against the stationary frame. 0 disables. |
K_t1_gen | Turbine 1 - Generator: K (pu torque/rad) | double | 30 | — | Torsional stiffness of the shaft section between Turbine 1 and the generator (per-unit torque per electrical radian of twist). Larger K = stiffer shaft, higher torsional natural frequency. |
Dmut_t1_gen | Turbine 1 - Generator: Dmut (pu) | double | 0 | — | Mutual (relative) damping of the Turbine 1 - generator shaft section (damping torque = Dmut·(ω1−ωgen), pu). Damps the torsional mode. 0 disables. |
H_turb1 | Turbine 1: H (MWs/MVA) | double | 1 | — | Inertia constant of Turbine 1 (the turbine stage adjacent to the generator). |
D_turb1 | Turbine 1: D (pu) | double | 0 | — | Self (absolute) damping torque coefficient of Turbine 1. Models steam/windage damping. 0 disables. |
tm_turb1_fb | Turbine 1: Tm (fallback, pu) | double | 0 | — | Constant per-unit mechanical torque applied to Turbine 1 when its Tm_turb1 input is left unwired. Positive accelerates the shaft. |
K_t1_t2 | Turbine 1 - Turbine 2: K (pu torque/rad) | double | 30 | — | Torsional stiffness of the shaft section between Turbine 1 and Turbine 2 (pu torque per electrical radian). |
Dmut_t1_t2 | Turbine 1 - Turbine 2: Dmut (pu) | double | 0 | — | Mutual damping of the Turbine 1 - Turbine 2 shaft section (pu). 0 disables. |
H_turb2 | Turbine 2: H (MWs/MVA) | double | 1 | — | Inertia constant of Turbine 2. |
D_turb2 | Turbine 2: D (pu) | double | 0 | — | Self (absolute) damping torque coefficient of Turbine 2. 0 disables. |
tm_turb2_fb | Turbine 2: Tm (fallback, pu) | double | 0 | — | Constant per-unit mechanical torque applied to Turbine 2 when its Tm_turb2 input is left unwired. |
K_t2_t3 | Turbine 2 - Turbine 3: K (pu torque/rad) | double | 30 | — | Torsional stiffness of the shaft section between Turbine 2 and Turbine 3 (pu torque per electrical radian). |
Dmut_t2_t3 | Turbine 2 - Turbine 3: Dmut (pu) | double | 0 | — | Mutual damping of the Turbine 2 - Turbine 3 shaft section (pu). 0 disables. |
H_turb3 | Turbine 3: H (MWs/MVA) | double | 1 | — | Inertia constant of Turbine 3. |
D_turb3 | Turbine 3: D (pu) | double | 0 | — | Self (absolute) damping torque coefficient of Turbine 3. 0 disables. |
tm_turb3_fb | Turbine 3: Tm (fallback, pu) | double | 0 | — | Constant per-unit mechanical torque applied to Turbine 3 when its Tm_turb3 input is left unwired. |
K_t3_t4 | Turbine 3 - Turbine 4: K (pu torque/rad) | double | 30 | — | Torsional stiffness of the shaft section between Turbine 3 and Turbine 4 (pu torque per electrical radian). |
Dmut_t3_t4 | Turbine 3 - Turbine 4: Dmut (pu) | double | 0 | — | Mutual damping of the Turbine 3 - Turbine 4 shaft section (pu). 0 disables. |
H_turb4 | Turbine 4: H (MWs/MVA) | double | 1 | — | Inertia constant of Turbine 4 (the outermost turbine stage). |
D_turb4 | Turbine 4: D (pu) | double | 0 | — | Self (absolute) damping torque coefficient of Turbine 4. 0 disables. |
tm_turb4_fb | Turbine 4: Tm (fallback, pu) | double | 0 | — | Constant per-unit mechanical torque applied to Turbine 4 when its Tm_turb4 input is left unwired. |
K_gen_exc | Generator - Exciter: K (pu torque/rad) | double | 30 | — | Torsional stiffness of the shaft section between the generator and the exciter mass (pu torque per electrical radian). |
Dmut_gen_exc | Generator - Exciter: Dmut (pu) | double | 0 | — | Mutual damping of the generator - exciter shaft section (pu). 0 disables. |
H_exc | Exciter: H (MWs/MVA) | double | 0.1 | — | Inertia constant of the exciter rotor mass. |
D_exc | Exciter: D (pu) | double | 0 | — | Self (absolute) damping torque coefficient of the exciter mass. 0 disables. |
tm_exc_fb | Exciter: Tm (fallback, pu) | double | 0 | — | Constant per-unit mechanical torque applied to the exciter mass. The exciter has no torque-input pin, so this fallback is always in effect (normally 0 — the exciter is an undriven inertia). |
Shaft Signals
| Name | Label | Type | Default | Units | Description |
|---|---|---|---|---|---|
gen_speed_name | Generator speed name | string | w_gen | — | Signal name for the generator mass speed (pu). Blank = skip. |
gen_angle_name | Generator angle name | string | (empty) | — | Signal name for the generator mass angle (electrical radians, relative to the synchronous reference). Blank = skip. |
turb1_speed_name | Turbine 1 speed name | string | w_turb1 | — | Signal name for the Turbine 1 speed (pu). Blank = skip. |
turb1_angle_name | Turbine 1 angle name | string | (empty) | — | Signal name for the Turbine 1 angle (electrical radians). Blank = skip. |
turb2_speed_name | Turbine 2 speed name | string | (empty) | — | Signal name for the Turbine 2 speed (pu). Blank = skip. |
turb2_angle_name | Turbine 2 angle name | string | (empty) | — | Signal name for the Turbine 2 angle (electrical radians). Blank = skip. |
turb3_speed_name | Turbine 3 speed name | string | (empty) | — | Signal name for the Turbine 3 speed (pu). Blank = skip. |
turb3_angle_name | Turbine 3 angle name | string | (empty) | — | Signal name for the Turbine 3 angle (electrical radians). Blank = skip. |
turb4_speed_name | Turbine 4 speed name | string | (empty) | — | Signal name for the Turbine 4 speed (pu). Blank = skip. |
turb4_angle_name | Turbine 4 angle name | string | (empty) | — | Signal name for the Turbine 4 angle (electrical radians). Blank = skip. |
exc_speed_name | Exciter speed name | string | (empty) | — | Signal name for the exciter mass speed (pu). Blank = skip. |
exc_angle_name | Exciter angle name | string | (empty) | — | Signal name for the exciter mass angle (electrical radians). Blank = skip. |
Power Flow
| Name | Label | Type | Default | Units | Description |
|---|---|---|---|---|---|
pf_p_mw | Pset (MW) | double | 0 | — | Scheduled real-power setpoint (MW). PSSE GENERATOR PG column. Positive = inject. Used by the solver as the real-power schedule on a PV or PQ bus; ignored on a slack bus (the machine swings to balance the system). Power-flow only — separate from the EMT settings. The regulated voltage is NOT set here: it comes from the connected bus's voltage (set on the bus, by type — slack / PV). |
pf_q_mvar | Qset (MVAr) | double | 0 | — | Scheduled reactive-power setpoint (MVAr). PSSE GENERATOR QG column. Positive = inject (over-excited). Used by the solver as the reactive-power schedule on a PQ bus; on a PV bus Q is solved (this is only a starting estimate), and on a slack bus it is ignored (the machine swings). |
pf_q_max_mvar | Q max (MVAr) | double | 9999 | — | Max reactive output (PSSE QT). 9999 = effectively unconstrained. On a PV bus the solver clamps the machine's reactive output to [Q min, Q max], switching the bus to PQ at the hit limit. |
pf_q_min_mvar | Q min (MVAr) | double | -9999 | — | Min reactive output (PSSE QB). -9999 default (effectively unconstrained). |
pf_p_max_mw | P max (MW) | double | 9999 | — | Max real output (PSSE PT). 9999 default (effectively unconstrained). |
pf_p_min_mw | P min (MW) | double | -9999 | — | Min real output (PSSE PB). -9999 default (effectively unconstrained). |
pf_p_solved_mw | P (MW) | double | 0 | — | Solved real-power output (MW) from the most recent load flow — the machine's actual dispatch, written by 'Apply load-flow results'. Read-only result: overwritten on the next apply, and not exported to PSSE (the schedule lives in Pset). |
pf_q_solved_mvar | Q (MVAr) | double | 0 | — | Solved reactive-power output (MVAr) from the most recent load flow — the machine's actual dispatch, written by 'Apply load-flow results'. Read-only result: overwritten on the next apply, and not exported to PSSE (the schedule lives in Qset). |
pf_ef0 | Ef0 (pu) | double | 1 | — | Initial field voltage Efd (pu) back-calculated from the load-flow operating point by 'Apply load-flow results' — the steady-state excitation that holds the solved terminal voltage and reactive output (|Eq| + (Xd − Xq)·id). Read-only result: the same value seeds the machine's Efd fallback (Excitation & Mechanical → Efd) so the EMT run flat-starts on the power-flow point. |
pf_delta0 | δ0 (deg) | double | 0 | — | Initial rotor (load) angle δ(0) = arg(Eq) in degrees, back-calculated from the load-flow operating point by 'Apply load-flow results' (the q-axis EMF angle relative to the system reference). Read-only result: the same value seeds the machine's δ(0) (Excitation & Mechanical) so the EMT run flat-starts on the power-flow point. |
Observables
| Signal | Type | Default name | Enable | Description |
|---|---|---|---|---|
branchCurrent_a | signal | from current_name_a | measure_current | Phase A stator current (out of the machine into the network), scaled to the chosen current unit (A / kA). |
branchCurrent_b | signal | from current_name_b | measure_current | Phase B stator current (out of the machine into the network), scaled to the chosen current unit (A / kA). |
branchCurrent_c | signal | from current_name_c | measure_current | Phase C stator current (out of the machine into the network), scaled to the chosen current unit (A / kA). |
delta | signal | from angle_name | measure_angle | Rotor (load) angle δ relative to the synchronous reference, wrapped to [-180°, 180°) and scaled to the chosen unit (deg / rad). A pole-slipping rotor reads as a sawtooth across the wrap rather than an unbounded ramp. |
te | signal | from te_name | measure_te | Air-gap electrical torque Te, scaled to the chosen unit (pu / N·m). |
p_elec | signal | from p_signal_name | monitor_pq | Filtered real-power output P at the terminals, scaled to the chosen unit (W / kW / MW). |
q_elec | signal | from q_signal_name | monitor_pq | Filtered reactive-power output Q at the terminals, scaled to the chosen unit (VAr / kVAr / MVAr). |
speed_gen | signal | from gen_speed_name | measure_shaft | Multi-mass shaft: speed of the generator rotor mass (pu). |
angle_gen | signal | from gen_angle_name | measure_shaft | Multi-mass shaft: angle of the generator rotor mass (electrical radians, relative to the synchronous reference). |
speed_turb1 | signal | from turb1_speed_name | measure_shaft | Multi-mass shaft: speed of Turbine 1 (pu). |
angle_turb1 | signal | from turb1_angle_name | measure_shaft | Multi-mass shaft: angle of Turbine 1 (electrical radians, relative to the synchronous reference). |
speed_turb2 | signal | from turb2_speed_name | measure_shaft | Multi-mass shaft: speed of Turbine 2 (pu). |
angle_turb2 | signal | from turb2_angle_name | measure_shaft | Multi-mass shaft: angle of Turbine 2 (electrical radians, relative to the synchronous reference). |
speed_turb3 | signal | from turb3_speed_name | measure_shaft | Multi-mass shaft: speed of Turbine 3 (pu). |
angle_turb3 | signal | from turb3_angle_name | measure_shaft | Multi-mass shaft: angle of Turbine 3 (electrical radians, relative to the synchronous reference). |
speed_turb4 | signal | from turb4_speed_name | measure_shaft | Multi-mass shaft: speed of Turbine 4 (pu). |
angle_turb4 | signal | from turb4_angle_name | measure_shaft | Multi-mass shaft: angle of Turbine 4 (electrical radians, relative to the synchronous reference). |
speed_exc | signal | from exc_speed_name | measure_shaft | Multi-mass shaft: speed of the exciter rotor mass (pu). |
angle_exc | signal | from exc_angle_name | measure_shaft | Multi-mass shaft: angle of the exciter rotor mass (electrical radians, relative to the synchronous reference). |
