Electrisim documentation
Electrisim is a free, open-source web app for power system analysis. You draw a single-line diagram in the browser, set parameters in dialogs, and run studies from the Simulate menu. Nothing needs to be installed, and you do not need to write scripts to get results on the diagram.
This page is the in-app reference. Start with First Steps if you are new, then pick a study under Simulation. Parameter tables for each network element are in Elements.
Prefer a video walkthrough? See the Tutorials page. Technical solver options that Electrisim does not expose are in the engine documentation at the end of this page.
First Steps
Build a tiny network, run load flow, and read voltages on the diagram. That is the loop you will reuse for every other study.
- Open the app — Go to app.electrisim.com and create or open a project.
- Place two buses — From the palette, drop two Bus elements. Set the rated voltage (
vn_kv) on each, for example 20 kV. - Add a grid connection — Connect an External Grid to the first bus. This is the slack / voltage source.
- Add a load — Connect a Load to the second bus and enter P and Q (MW / Mvar).
- Draw a line — Draw a Line between the two buses (an edge, not a palette shape). Check length and impedance, or leave the defaults for a first test.
- Run load flow — Click Simulate → Load Flow. Leave the pandapower tab and defaults, then click Run.
- Read the result — Voltage magnitude and angle appear on the buses. Line loading appears on the line. The Network Health Dashboard summarises the same solve.
Every study starts from the toolbar Simulate button. Choose the analysis, set a few options, click Run. Results paint onto the diagram; most studies also open a results dialog.
Where to go next
.py script or an OpenDSS .dss file.
Step-by-step videos and worked examples: Tutorials.
Simulation
Click Simulate in the toolbar, pick a study, set the dialog options, and click Run. Results appear on the diagram and, for most studies, in a results window.
Start with Load Flow unless you already know you need a specialist study. After a successful load flow you also get the Network Health Dashboard, line current vs distance, Engineering Report (PDF), and Scenario Compare — these reuse the same solve; they are not extra analysis types.
Load Flow and Short Circuit dialogs have Pandapower and OpenDSS tabs. Use pandapower for balanced transmission-style models and IEC 60909. Use OpenDSS for unbalanced feeders, harmonics, Monte Carlo, and DG screening. Transient Stability and Eigenvalue Analysis use ANDES only.
Choose a study
Everyday network checks
Confirm voltages, loadings, and what happens if equipment is out.
Protection and safety
Fault levels, arc-flash incident energy, and device grading.
Dynamics
Need at least one synchronous Generator with dynamics data.
Distribution (OpenDSS)
Unbalanced feeders, DER, and harmonics. Use the OpenDSS tab or the dedicated Simulate entries.
Economics and grid code
Connection studies and project cost from the same diagram.
Engine coverage (pandapower, OpenDSS, ANDES)
- pandapower — Power flow, OPF, short-circuit (IEC 60909), arc flash (IEEE 1584), motor starting (steady-state), protection coordination, contingency analysis, tap/shunt controllers (via Load Flow Include controller), time-series, economic analysis, grid-code PQ studies, and battery sizing. See pandapower documentation.
- OpenDSS — Unbalanced multi-phase power flow (Snapshot, Daily, Yearly, Dutycycle, Monte Carlo M1/M2/M3), InvControl on PV/Storage, Controls (RegControl / CapControl / StorageController), Wind Turbine Pref, DG interconnection screening, fault studies, and harmonic analysis. See OpenDSS documentation.
- ANDES — Transient stability (time-domain), eigenvalue analysis (small-signal), and dynamic motor starting. See Transient Stability and Eigenvalue Analysis.
Park Controller is pandapower-only and is not gated by the tap/shunt Include controller checkboxes. Harmonic analysis, Monte Carlo, InvControl, RegControl/CapControl/StorageController, and DG Interconnection Screening use OpenDSS. OPF, protection, contingency, time-series, economic analysis, both Grid Code studies, and Battery Sizing use pandapower only.
Load Flow (Power Flow)
pandapower OpenDSS
Load Flow (power flow) computes steady-state voltages, currents, and power flows on your diagram. Run this first; most other studies assume a network that already solves.
Simulate → Load Flow. Use the Pandapower tab for balanced networks, or the OpenDSS tab for unbalanced feeders and time-varying modes.
When to use
- Check that bus voltages stay inside a sensible band
- See line and transformer loading and system losses
- Test a dispatch or load change before running short-circuit or OPF
How to run
- Build a connected network with a slack (External Grid or slack generator).
- Click Simulate → Load Flow and pick an engine tab.
- Keep the defaults for a first run, then click Run.
- Read voltages and loadings on the diagram. The Network Health Dashboard opens after a successful solve.
What you will see
Bus voltage (pu and angle), line and transformer loading, and P/Q at generators, loads, and the external grid. You can then export a PDF report, compare two runs, or plot line current vs distance — those tools reuse this solve.
How the solvers work
Pandapower offers Newton-Raphson (default), Iwamoto, Backward Forward Sweep, Gauss-Seidel, FDBX, and FDXB. OpenDSS supports snapshot, daily, yearly, dutycycle, and Monte Carlo modes. The solver iterates the power-balance equations until the mismatch is below the tolerance. Heavily compensated cable networks (for example a large offshore farm with OLTCs and variable shunt reactors) may need more than a single Newton run — see solver fallback.
Dialog parameters (Pandapower)
| Parameter | Description | Type | Options/Value Range | Default |
|---|---|---|---|---|
| Frequency | System frequency | radio | 50 Hz, 60 Hz | 50 Hz |
| Algorithm | Power flow solution algorithm | radio | Newton-Raphson (nr), Iwamoto (iwamoto_nr), Backward Forward Sweep (bfsw), Gauss-Seidel (gs), FDBX (fdbx), FDXB (fdxb) | Newton-Raphson |
| Calculate Voltage Angles | Whether to calculate voltage angles (required for accurate active power flow) | radio | Auto, True, False | Auto |
| Initialization | Initial voltage guess strategy | radio | Auto, Flat (1.0 pu), DC | Auto |
| Max Iterations | Maximum number of iterations before stopping | number | 1-1000 | 100 |
| Tolerance | Convergence tolerance (power mismatch) | number | > 0 | 1e-6 |
| Enforce Q Limits |
Maps to pandapower If Yes, the reactive power limits in For Note: |
checkbox | Yes/No | No |
| Export Pandapower Python Code | Download generated Python code for the network | checkbox | Yes/No | No |
| Export Pandapower Results | Download results in text format | checkbox | Yes/No | No |
| Include controller | Three independent checkboxes (see Include controller): two-winding DiscreteTapControl, three-winding DiscreteTapControl, and shunt step control (DiscreteShuntController and Line P→shunt step). Park Controller is not gated here. | checkbox | Yes/No each | No |
Include controller (Pandapower)
The Load Flow dialog (Pandapower tab) and Grid Code Compliance (P-Q & U-Q) each have three independent checkboxes under Include controller. Tick only the families you want to move during that run. Grid Code Compliance (P-Q) does not use this block; it uses Transformer tap control and Shunt control instead.
- Two-winding transformer tap changer — pandapower
DiscreteTapControlon two-winding transformers that have discrete tap control enabled in the transformer dialog. - Three-winding transformer tap changer — the same, for three-winding transformers.
- Shunt reactor tap changer — pandapower
DiscreteShuntController(voltage / target step) and Line P→shunt step lookup from the shunt Control tab. Both shunt modes require this checkbox; they no longer run from the shunt dialog alone.
Park Controller is a separate diagram element with its own enable toggle. It is not gated by these three checkboxes.
Discrete Tap Control (DiscreteTapControl)
For pandapower load flow only, you can model discrete OLTC/NLTC behaviour with pandapower’s DiscreteTapControl controller:
- Open the Transformer or Three Winding Transformer dialog for each unit that should regulate voltage.
- Enable discrete tap control, choose control side, and set vm_lower_pu / vm_upper_pu (deadband).
- Run Load Flow, stay on the Pandapower tab, and tick the matching Include controller checkbox (two-winding and/or three-winding).
Electrisim sends discrete tap settings and the matching run_control_trafo2w / run_control_trafo3w flags to the backend; the solver may change tap_pos within tap_min…tap_max to keep the controlled bus inside the band.
Seeing the tap position after the run: For transformers that used DiscreteTapControl, the on-diagram transformer result box shows the tap position after the controlled load flow (and initial → final if it moved). If you export Pandapower results to a text file, the transformer table includes a Tap (control) column and a DISCRETE TAP CONTROL (summary) section. The JSON API also returns a tap_control_results array (tap limits, controlled-side voltage, band, etc.) for tooling or future UI.
Solver fallback (Pandapower)
If the requested algorithm does not converge, the backend retries a short sequence of more robust settings rather than failing after the first Newton-Raphson divergence. Typical later plans:
- Same algorithm and initialisation, but without transformer/shunt controllers (setpoints restored to the values from the diagram).
- More Newton iterations (e.g. 50).
- Flat start with a higher iteration limit.
- Iwamoto Newton-Raphson (step-size multiplier) with a flat start — intended for ill-conditioned, heavily compensated cases that plain Newton overshoots.
If a fallback plan succeeds, results are still shown on the diagram. When controllers were dropped to obtain a solution, Electrisim shows an alert with the plan that worked and the failed attempts. Treat those voltages and flows as a diagnostic solve, then either relax tap/shunt targets, check data, or run again with controllers off on purpose.
The JSON result may include controller_fallback_warning with the same text (see Advanced notes in exported results).
Dialog parameters (OpenDSS)
| Parameter | Description | Type | Options | Default |
|---|---|---|---|---|
| Base Frequency | System frequency | radio | 50 Hz, 60 Hz | 50 Hz |
| Solution Mode | Type of simulation to perform | radio | Snapshot (single solution), Daily (24-hour cycle), Yearly (8760 hours), Dutycycle (sub-hourly time-varying), M1/M2/M3 (Monte Carlo / probabilistic) | Snapshot |
| Algorithm | Power flow solution algorithm used by OpenDSS | radio | Normal (fixed-point iteration), Newton (Newton-Raphson) | Normal |
| Load Model | How loads are represented in the power flow solution | radio | Powerflow (standard power balance), Admittance (constant admittance model) | Powerflow |
| Max Iterations | Maximum number of iterations for power flow convergence | number | 1-1000 | 15 |
| Tolerance | Convergence tolerance for the power flow solution | number | > 0 | 0.0001 |
| Control Mode | How control devices (regulators, capacitor controls) are solved | radio | Static (iterates controls to steady state), Event (event-driven), Time (time-driven) | Static |
| Export OpenDSS Commands | Download the generated OpenDSS command script (.txt) for use outside Electrisim | checkbox | Yes/No | No |
| Export OpenDSS Results | Download the OpenDSS results as text | checkbox | Yes/No | No |
OpenDSS snapshot notes (shunts and generator models)
Snapshot OpenDSS load flow uses the same shunt characteristic table, discrete voltage control, and Line P→shunt step settings as pandapower (see Capacitor & Shunt Reactor). After each solve, Electrisim may iterate shunt steps until the voltage or line-P band is met.
Generator models: Static generators and wind turbines are created as OpenDSS Generator Model=1 (constant kW and kvar). Synchronous / voltage-controlled generators use Model=3 (constant kW / constant kV), matching pandapower gen as a PV bus. Do not expect a wind turbine to hold 1.0 pu at its terminal in OpenDSS — that would be Model=3.
If the requested algorithm does not produce a usable solution, OpenDSS retries a short sequence of snapshot plans (more iterations, Newton, and a wider generator Vminpu so P is not converted to constant-Z). If no plan converges, the error message suggests trying Algorithm=Newton in the dialog or comparing with pandapower on the same case.
Output results
Values are written onto the diagram. The table below lists the quantities for export and for the health dashboard.
Tap / shunt control export and API fields
When the matching Include controller checkbox is on, transformer result labels show the final tap position (and initial→final if it moved). Exported results include a Tap (control) column and a DISCRETE TAP CONTROL (summary) section; the JSON API returns tap_control_results and, when used, shunt_control_results. There is no separate results dialog only for tap or shunt control.
| Output Category | Parameters | Units |
|---|---|---|
| Buses | Voltage magnitude (pu), Voltage angle (degrees) | pu, degrees |
| External Grids | Active power (P), Reactive power (Q), Power factor (PF), Q/P ratio | MW, Mvar, -, - |
| Lines | P_from, Q_from, I_from, P_to, Q_to, I_to, Loading percentage | MW, Mvar, kA, MW, Mvar, kA, % |
| Transformers | P_HV, Q_HV, P_LV, Q_LV, I_HV, I_LV, Loading percentage, Losses; plus tap_pos after control (and initial→final) when DiscreteTapControl was active | MW, Mvar, MW, Mvar, kA, kA, %, MW; tap steps (unitless) |
| Loads | P, Q, S, I, Power factor | MW, Mvar, MVA, kA, - |
| Generators | P, Q, S, I, Power factor | MW, Mvar, MVA, kA, - |
| Storage | P, Q, S, I, SOC (if applicable) | MW, Mvar, MVA, kA, % |
Post–load-flow results and tools
The features below are part of the Load Flow workflow. They do not run a separate simulation; they interpret, visualise, compare, or export the output of the most recent successful load flow solve (Pandapower or OpenDSS).
Network Health Dashboard
After a successful load flow run (Pandapower or OpenDSS), Electrisim opens the Network Health Dashboard: a floating, draggable summary panel computed entirely in the browser from the simulation JSON. It complements the usual on-diagram result boxes by aggregating KPIs at system level.
What you see:
- Health score (0–100) — composite status from convergence-quality signals, voltage band compliance, thermal headroom on lines/transformers, and relative losses versus generation.
- KPI cards — total generation and total load (with hover tooltips listing how each category contributed: synchronous and static generators, asymmetric static generators, PV systems where applicable, storage charge/discharge, and external-grid import/export split).
- Top loaded equipment — horizontal bars for the five highest line or transformer loadings; click a row to scroll to and select that element on the schematic.
- Voltage profile — small histogram of bus voltages (about 0.85–1.15 pu) with band colouring consistent with diagram colour rules.
- Critical issues — ranked list of overloads and bus voltages outside normal bands; click to focus the corresponding shape on the canvas.
- Highlight Hot Spots — briefly flashes each issue location in sequence.
- Copy Summary — copies a plain-text snapshot of the headline numbers for email or reporting.
- Save as Baseline — stores the latest run snapshot and pins it so later runs can be compared.
- Compare to Baseline — opens the Scenario Compare panel (see below) against the pinned baseline.
- Line current vs km… — opens a characteristic plot of branch current magnitude (or signed scalar) versus cumulative distance along a simple chain of AC lines; see Line current vs distance.
Closing the panel or running another simulation replaces it automatically when the next run completes. For auditing, expand the collapsible group [Network Health] … in the browser developer console after a run to see the same generation and load breakdowns logged as structured lists.
Line current vs distance along a path
After a successful pandapower or OpenDSS load flow, the Network Health Dashboard includes Line current vs km…. It builds a staircase chart of current (kA) against cumulative route length (km) for a simple path made only of AC Line segments: consecutive lines with no branching (every intermediate bus along the traced set must have degree two in terms of those selected edges). Branching paths, meshes, DC lines, and transformers in series are outside this tool's intended use; for mixed equipment, inspect per-element results on the diagram instead.
How to use it:
- Run load flow and open the Network Health Dashboard when it appears.
- On the canvas, select the line edges that form your route (multi-select).
- Click Line current vs km…. Electrisim orders segments by connectivity, uses each line's length_km from the diagram, and takes branch currents from the solver output (
i_from_ka/i_to_ka), matching diagram orientation to from/to.
What you get: a coloured staircase plot with segment bands, junction markers at cumulative kilometres, a legend, and an HTML table (segment length, km from/to, current at each end, and change along the segment). You can switch between absolute |I| and a signed scalar along the path.
Scale and spikes: optional Amplify plateau relaxes the vertical axis when a single segment would otherwise flatten the rest of the profile (one dominant outlier is dropped only for axis limits). Values that fall outside the displayed Y range are still listed in the table and shown on the chart as orange triangle markers at the correct kilometre with a short explanation in the tooltip.
Prerequisite: results for the latest run must be available in the session (normally automatic after load flow).
Engineering Report (PDF)
After a successful load flow (Pandapower or OpenDSS), you can download a multi-page PDF built in the browser from the same result data the Network Health Dashboard uses. The report is for handover: cover page with project fields, executive summary, single-line diagram pages (overview plus zoomed detail tiles on large schematics), voltage and loading sections, issues, and tables by element type.
How to run it:
- In the Load Flow dialog, tick Export PDF Engineering Report (Pandapower or OpenDSS tab) before you run; the file is offered when the run finishes.
- Or open the Network Health Dashboard after a run and click Export Report.
- Project name, engineer, company, and notes are stored in the browser for the next export if you choose to remember them.
Scope: load-flow results only. The PDF does not replace dedicated short-circuit or OPF study packs.
Scenario Compare
After two load flow solves on the same project (same engine: Pandapower with Pandapower, or OpenDSS with OpenDSS), Electrisim can compare the current result against a pinned baseline without juggling two tabs or spreadsheets. Comparison is computed in your browser using the same KPI logic as the Network Health Dashboard.
How it works:
- Each successful load flow saves a lightweight snapshot locally (typically the last ten non-baseline runs are kept).
- Open the dashboard after the run you want as reference and click Save as Baseline; that pins one snapshot.
- Change the model, run load flow again, open the dashboard, and click Compare to Baseline. You get KPI deltas (generation, load, losses, score, violations, voltage extremes, max loading), top bus voltage movers, top branch loading movers, band migrations (good to warn or overload style changes), and a list of elements that appear only in one run.
- Highlight Differences places small coloured labels on the live single-line diagram next to matched elements so you see where magnitude or status shifted; clear them from the same panel.
- With a baseline pinned, an extra Comparison vs Baseline page can be appended to the Engineering Report (PDF) when you export.
Limits: Baselines live in this browser profile only — not on the cloud and not shared with other users or devices. Comparing Pandapower output to OpenDSS output in one step is outside the intended scope.
Algorithm Details
Newton-Raphson Method (Default): This is the most widely used power flow algorithm, providing fast convergence for well-conditioned networks. It linearizes the power balance equations using the Jacobian matrix and iteratively solves for voltage corrections.
Other Algorithms:
- Iwamoto: Enhanced Newton-Raphson with improved convergence for ill-conditioned systems
- Backward Forward Sweep: Suitable for radial distribution networks
- Gauss-Seidel: Simpler iterative method, slower convergence but more robust for some cases
- FDBX/FDXB: Fast decoupled variants for transmission networks
Limitations and Considerations
Important Notes:
- Load flow assumes balanced three-phase conditions (single-phase equivalent)
- The network must have at least one external grid (slack bus) to provide power balance
- Convergence may fail if the network is too heavily loaded or has numerical issues
- Some algorithms may not be suitable for all network topologies (e.g., BFSW for radial networks only)
- Results are steady-state and do not consider dynamic or transient behavior
- The Network Health Dashboard is a read-only interpretation of the solver output it receives; totals follow the JSON returned by the backend (including asymmetric static generators, storages and PV elements when present).
- The Engineering Report PDF uses the same KPI logic as the dashboard and the same diagram snapshot as the editor; it is generated client-side and depends on a normal browser session (cached script and network access for the PDF libraries).
- Scenario Compare snapshots and pinned baselines are stored locally (IndexedDB with a fallback if storage is unavailable); clearing site data removes them.
Technical References
Based on: pandapower Power Flow Documentation and OpenDSS.
Algorithm Type: Iterative solution of power balance equations using various numerical methods.
Documentation References: 📘 pandapower Power Flow 📘 pandapower runpp() 📗 OpenDSS Power Flow
Controllers
pandapower OpenDSS
There is no separate Simulate → Controller Simulation command anymore. Enable tap and shunt control on the equipment, then run Load Flow.
Discrete transformer tap and shunt step controls are exercised by running Load Flow:
- Pandapower: enable the matching Include controller checkbox (two-winding tap, three-winding tap, and/or shunt), together with the settings on each transformer or shunt.
- OpenDSS snapshot: discrete shunt voltage control and Line P→shunt step run from the same shunt dialog (no extra Include-controller tick). Transformer DiscreteTapControl remains pandapower-only.
For Grid Code Compliance (P-Q & U-Q), the same three pandapower Include-controller checkboxes apply when you enable them in that dialog. Grid Code Compliance (P-Q) uses its own Transformer tap control and Shunt control options instead.
Technical reference: pandapower Controller / run_control.
If you bookmarked this page previously as “Controller Simulation,” use Load Flow with “Include controller” instead.
Short Circuit
pandapower OpenDSS
Short Circuit calculates fault currents on the network so you can size breakers, check withstand, and feed protection studies. The two engine tabs are not interchangeable: pandapower follows IEC 60909; OpenDSS runs a native fault study.
Simulate → Short Circuit. Pick the Pandapower or OpenDSS tab before you run.
When to use
- Breaker and fuse interrupting ratings
- Relay pickup and protection coordination
- Grid-code style IEC 60909 studies (pandapower tab)
How to run
- Confirm the diagram already solves in Load Flow with the same engine you will use for faults.
- Click Simulate → Short Circuit and choose the engine tab.
- Set fault type (3-phase, 2-phase, or 1-phase) and run.
- Read currents on the buses and branches. Use those values for Arc Flash if you need incident energy next.
Pandapower is IEC 60909. OpenDSS is a Thévenin fault study and is not IEC 60909. Compare numbers only within the same engine.
How the calculation is set up
The study uses sequence impedances, applies a fault impedance at the chosen location, builds a Thévenin equivalent, computes the fault current for the selected fault type, and distributes branch contributions through the network.
- Pandapower tab — IEC 60909 via pandapower short-circuit calculation. Use for balanced three-phase networks and grid-code style studies.
- OpenDSS tab — native OpenDSS fault study. Computes symmetrical, peak, and thermal currents per bus. Assumptions differ from the pandapower path.
Fault types
Electrisim supports three types of short circuit faults:
- Three-Phase Fault (3ph): Symmetrical fault affecting all three phases. Typically produces the highest fault current. Used for symmetrical interrupting capacity rating.
- Two-Phase Fault (2ph): Fault between two phases. Produces lower fault current than three-phase. Used for phase-to-phase protection.
- Single-Phase Fault (1ph): Fault between one phase and neutral/ground. Includes zero sequence impedance. Critical for ground fault protection and neutral sizing.
Input Parameters
| Parameter | Description | Type | Options/Value Range | Default |
|---|---|---|---|---|
| Fault | Type of short circuit fault | radio | Three Phase (3ph), Two Phase (2ph), Single Phase (1ph) | Three Phase |
| Case | Fault current calculation case | radio | Maximum (max), Minimum (min) | Maximum |
| Voltage Tolerance in LV Grids | Voltage tolerance factor for low voltage networks | radio | 6%, 10% | 6% |
| Topology | Network topology classification | radio | Auto, Radial, Meshed | Auto |
| Failure Clearing Time (s) | Fault duration for thermal rating (ith calculation) | number | > 0 | 1.0 |
| Fault Resistance (Ohm) | Resistance at fault location (for arc fault modeling) | number | ≥ 0 | 0 |
| Fault Reactance (Ohm) | Reactance at fault location | number | ≥ 0 | 0 |
| Inverse Should Be Used Instead of LU Factorization | Solution method preference | radio | True, False | True |
Calculation Cases
According to DIN/IEC EN 60909, different calculation cases are used:
- Maximum Case (Ik"): Highest fault current (typically for breaker sizing). Assumes maximum generation, minimum impedances, voltage = 1.1 pu (cmax).
- Minimum Case (Ik'): Lowest fault current (typically for protection coordination). Assumes minimum generation, maximum impedances, voltage = 0.9 pu (cmin).
Output Results
The short circuit analysis provides detailed fault current information:
| Output Category | Parameters | Description | Units |
|---|---|---|---|
| Fault Location | Bus name, Fault type | Location and type of applied fault | - |
| Initial Symmetrical Current | Ik" (initial symmetrical short-circuit current) | Fault current at t=0 (symmetrical component) | kA |
| Peak Current | ip (peak short-circuit current) | Maximum instantaneous fault current including DC offset | kA |
| Breaking Current | Ib (breaking current) | Fault current at breaker opening time (symmetrical) | kA |
| Steady-State Current | Ik (steady-state short-circuit current) | Fault current after transients decay | kA |
| Thermal Current | Ith (thermal equivalent current) | Equivalent RMS current for thermal rating based on fault duration | kA |
| Branch Contributions | I_from, I_to for each branch | Fault current contribution from each line/transformer | kA |
| Generator Contributions | I_gen for each generator | Fault current contribution from each generator | kA |
| Voltage Profile | V_fault at all buses | Voltage magnitude at all buses during fault | kV or pu |
Algorithm Details
The short circuit calculation follows DIN/IEC EN 60909 standard:
- Voltage Factor (c): cmax = 1.1 for maximum case, cmin = 0.9 for minimum case (low voltage)
- Impedance Correction: Generator and transformer impedances are corrected according to the standard
- Far-from-Generator Approximation: Used when fault is far from generators (symmetrical current decays quickly)
- Near-to-Generator: Special handling when fault is close to generators (asynchronous contribution)
- Solution Method: Matrix inversion or LU factorization of network admittance matrix
Limitations and Considerations
Important Notes:
- Calculations assume balanced pre-fault conditions and symmetrical source impedances
- Fault resistance/reactance can be specified but arc fault modeling may require additional considerations
- Results are based on steady-state fault analysis - dynamic transients are approximated
- Motor contributions to fault current may require special modeling
- Grounding system impedance significantly affects single-phase fault currents
- Results are valid for the specified fault location - multiple fault locations require separate calculations
- Protection device characteristics (opening time, arcing) are not modeled in the base calculation
Short Circuit based on OpenDSS
In addition to the Pandapower (IEC 60909) short circuit analysis, Electrisim offers short circuit calculation based on OpenDSS. In the Short Circuit dialog, select the OpenDSS tab to run a conventional fault study using the Open-Source Distribution System Simulator.
OpenDSS fault study (Solve Mode=FaultStudy) computes for every bus:
- Initial symmetrical short-circuit current (I''k, ikss) in kA
- Peak short-circuit current (ip, ip) in kA
- Thermal short-circuit current (Ith, ith) in kA
- Positive-sequence short-circuit resistance (Rk, rk_ohm) and reactance (Xk, xk_ohm) in ohms
Fault type (e.g. 3-phase) and frequency can be set in the OpenDSS tab. Results are shown on the diagram at each busbar. This option uses the same network model as OpenDSS load flow (buses, lines, loads, generators, external grid).
OpenDSS references: Fault Studies, Fault Study Mode, Bus.Isc().
Technical References
Based on: pandapower Short-Circuit and DIN/IEC EN 60909 (Pandapower); OpenDSS Fault Studies (OpenDSS).
Algorithm Type: Pandapower: symmetrical components method with impedance-based fault calculation following international standards. OpenDSS: conventional fault study with Thévenin equivalent and open-circuit voltage per bus.
Documentation References: 📘 pandapower Short-Circuit 📘 Running a Short-Circuit Calculation 📗 OpenDSS Fault Studies
Standards: IEC 60909: Short-circuit currents in three-phase a.c. systems (Pandapower).
Arc Flash Analysis (IEEE 1584)
pandapower
Arc Flash estimates thermal hazard at each bus: Electrisim runs a 3-phase maximum short-circuit (IEC 60909), then IEEE 1584-2018 for arcing current, incident energy, arc-flash boundary, and an NFPA 70E–style PPE category. Results are painted on the diagram.
Simulate → Arc Flash (IEEE 1584). Requires an active subscription.
When to use
- PPE selection from incident energy
- Arc-flash boundary for labelling and approach
- Comparing LV feeder hazard (for example MCC vs a remote panel)
How to run
- Build the network and confirm short-circuit data (source impedances, transformer ratings) is filled in.
- Click Simulate → Arc Flash (IEEE 1584).
- Set working distance, electrode configuration, and clearing times, then run.
- Read incident energy, AFB, and PPE category on each applicable bus.
How it is calculated
- Short circuit: 3-phase max fault currents (Ikss) are calculated for all buses.
- Arcing current (Iarc): IEEE 1584-2018 converts bolted fault current to arcing current using electrode configuration, gap, and voltage.
- Reduced arcing current: Iarc-min is evaluated (variation factor); both clearing times are considered and the worst-case energy is kept.
- Incident energy (IE): Energy at the working distance in cal/cm², including enclosure correction factor where applicable.
- Arc-flash boundary (AFB): Distance where IE equals 1.2 cal/cm².
- PPE category: Mapped from IE using NFPA 70E thresholds (Cat 0–4 / Dangerous).
Voltage range and methods
- 208 V – 15 kV: IEEE 1584-2018 empirical model (verified open-source coefficients via
arcflash-calc). - Above 15 kV: Ralph Lee method; the result box is tagged
method: RalphLeeso HV estimates are not confused with IEEE 1584 LV/MV results. - Below 0.208 kV: Bus is skipped as outside the IEEE 1584 applicability range.
Input Parameters
| Parameter | Description | Type | Options / typical values | Default |
|---|---|---|---|---|
| Electrode Configuration | IEEE 1584 electrode geometry at the equipment | radio | VCB, VCBB, HCB, VOA, HOA | VCB |
| Working Distance (mm) | Distance from arc to worker (face/chest) | number | ≥ 305 (typical LV 455 mm, MV 610 mm) | 455 |
| Conductor Gap (mm) | Gap between electrodes | number | Typical LV ~25 mm; MV larger | 25 |
| Enclosure Height / Width / Depth (mm) | Enclosure size for correction factor (VCB, VCBB, HCB). Ignored conceptually for open-air VOA/HOA (CF = 1) | number | Typical 508 × 508 × 508 | 508 |
| Clearing Time at Iarc (s) | Protective-device clearing time at nominal arcing current | number | > 0 | 0.2 |
| Clearing Time at Iarc-min (s) | Clearing time at reduced arcing current (often longer on inverse curves) | number | > 0 | 0.2 |
Electrode configurations
- VCB — Vertical conductors in a metal box (typical switchgear / MCC)
- VCBB — Vertical conductors terminated in an insulating barrier inside a box
- HCB — Horizontal conductors in a metal box (often higher IE)
- VOA — Vertical conductors in open air
- HOA — Horizontal conductors in open air
Output Results
Each bus result box typically shows:
| Output | Description | Units |
|---|---|---|
| IE | Worst-case incident energy at the working distance | cal/cm² |
| AFB | Arc-flash boundary (IE = 1.2 cal/cm²) | mm |
| PPE | Category from IE (<1.2 → 0; 1.2–4 → 1; 4–8 → 2; 8–25 → 3; 25–40 → 4; ≥40 → Dangerous) | — |
| Ia | Arcing current used for the reported case | kA |
| Ikss | Bolted initial symmetrical short-circuit current | kA |
| method | IEEE1584-2018 or RalphLee (shown when not IEEE 1584) |
— |
Demo model
Import the industrial example arc_flash_industrial_demo.py (File → Import) to see a clear LV gradient: short cables (MCC Near) show higher IE / PPE than long feeders (Panel Far). Buses at 20 kV are labeled with the Ralph Lee method.
Limitations and Considerations
Important notes:
- Clearing times are user inputs — Electrisim does not yet read relay/fuse TCC curves automatically for this study
- Electrode configuration and enclosure dimensions are global for the run (same settings applied to all buses)
- IEEE 1584 applicability limits (voltage, Ibf, gap) are enforced with clamping/warnings where needed
- Ralph Lee results above 15 kV are conservative estimates, not IEEE 1584 PPE labels
- Always apply engineering judgment and site-specific PPE programs (NFPA 70E / local standards)
Technical References
Based on: IEEE Std 1584-2018 (Guide for Performing Arc-Flash Hazard Calculations); short-circuit currents from pandapower short-circuit; calculation library arcflash-calc (IEEE 1584-2018 implementation).
Related: Short Circuit documentation · IEEE 1584 standard
Motor Starting Analysis
pandapower ANDES
Motor Starting checks voltage dip and loading when asynchronous motors start. Use the steady-state study for three snapshots (before / locked-rotor / after), or the dynamic study for a time-domain startup. Methods include DOL, soft-start, star-delta, autotransformer, and reactor.
Simulate → Motor Starting. Requires a subscription. Each motor needs locked-rotor current, R/X, and rated voltage set in the Motor dialog.
When to use
- Voltage dip vs a limit (for example 10–15%) during DOL or soft-start
- Comparing starter methods in steady-state
- Start time and voltage recovery in dynamic mode
How to run
- Place Motor elements and fill locked-rotor data.
- Click Simulate → Motor Starting.
- Choose steady-state or dynamic, the motors to start, and the starter method.
- Run and review bus dip, branch loading, and (in dynamic mode) the time plots.
How the two study modes work
Steady-state (pandapower)
- Before: motors to start are taken out of service; AC load flow gives pre-start voltages.
- During: each starting motor is replaced by a locked-rotor PQ load. Starting current is \(I_{lr} = lrc\_pu \cdot I_n\), scaled by method factor \(k_m\) (DOL = 1, soft-start = \(I_{limit}/lrc\), star-delta = 1/3, autotransformer = \(tap^2\), reactor = \(1/(1+x_r)\)).
- After: motors return at their loading; post-start voltages are computed.
- Checks: dip % vs limit on every bus; branch loading during start vs thermal limit.
Dynamic (ANDES)
- Network is mapped to ANDES; selected motors become
Motor3devices withu=0. - A
Toggleconnects each motor at \(t_{start}\). - TDS returns bus voltage, motor current, slip, and torque vs time; start time is when slip falls below threshold.
- Soft-start in dynamic mode is approximated by scaling motor Sn so initial current ≈ \(I_{limit}\).
Input Parameters
| Parameter | Description | Type | Options / typical values | Default |
|---|---|---|---|---|
| Calculation Mode | Steady-state voltage dip or dynamic ANDES startup | radio | steady, dynamic | steady |
| Motor(s) to Start | Which motors start in this study | select | All in-service motors, or one motor | All |
| Starting Method | Starter type (exact factors in steady-state; DOL / approx. soft-start in dynamic) | select | DOL, soft-start, star-delta, autotransformer, reactor | DOL |
| Soft-start Current Limit (p.u.) | Current limit as multiple of rated current | number | Typical 2–4 | 3 |
| Autotransformer Tap (p.u.) | Starting tap for AT method | number | 0.1–1.0 | 0.8 |
| Reactor Reactance (p.u.) | Series reactor for reactor start | number | ≥ 0 | 0.25 |
| Max Voltage Dip Limit (%) | Pass/fail threshold for (Vbefore − Vduring) / Vbefore | number | Typical 10–15 | 15 |
| Max Branch Loading Limit (%) | Thermal check during start | number | Typical 100 | 100 |
| Dynamic t_start / t_end | Motor connect time and simulation end (dynamic mode) | number | seconds | 0.1 / 5 |
Results
- SLD boxes: bus V before/during/after and dip % (green PASS / red FAIL); motor Istart and method
- Results dialog: tables for motors, buses, branches; CSV download; Chart.js plots for dynamic mode
- Summary: worst dip, voltage/thermal fail counts
Limitations and Considerations
Important notes:
- Steady-state locked-rotor model is a snapshot, not a full torque–speed acceleration curve
- Dynamic soft-start is an approximation (Sn scaling), not a thyristor softstarter controller model
- Star-delta / autotransformer / reactor factors apply exactly in steady-state; dynamic mode uses DOL (or approx. soft-start)
- No vendor-specific DSL controllers, synchronous-motor excitation start, or variable rotor resistance
- Dynamic mode requires a network suitable for ANDES (synchronous generator / slack as for Transient Stability)
Technical References
Based on: pandapower load flow and motor element (lrc_pu, rx); ANDES Motor3 + Toggle for time-domain startup. Typical study outputs include voltage drop before/during/after start, start time, and grid loading.
Related: Motor element · Short Circuit · Transient Stability (ANDES)
Transient Stability (ANDES Time-Domain Simulation)
ANDES
Transient Stability shows how the network responds over time to a bus fault or line trip: rotor swings, voltage recovery, and whether machines stay in synchronism.
Simulate → Transient Stability (ANDES). Requires a subscription. You need at least one Generator with dynamics. An External Grid alone is not enough.
When to use
- Synchronism after a fault (speed and angle swings)
- Comparing clearing times and fault locations
- Voltage recovery after a clear or line trip
How to run
- Place a synchronous Generator and fill the Dynamics tab (defaults are applied if fields are empty).
- Click Simulate → Transient Stability (ANDES).
- Set end time, optional fault bus and clear times, and optional line outage.
- Run and inspect generator speed/angle and bus voltage vs time.
How Electrisim maps the diagram to ANDES
- Electrisim serialises the diagram (buses, lines, transformers, loads, generators) to the backend.
- The backend builds an ANDES system: static models (Bus, Line, PQ, PV/Slack) plus dynamic models (GENROU or GENCLS, exciters, governors).
- Missing Dynamics-tab fields receive textbook defaults (reported in the result).
- Optional disturbances from the study dialog: bus fault (apply/clear times) and/or a line outage at a given time.
PFlow.run()establishes the operating point;TDS.run()integrates totf.- Results return as time series: generator
ω,δ, bus voltages, and an approximate system frequency from meanω.
Input Parameters
| Parameter | Description | Type | Typical values | Default |
|---|---|---|---|---|
| Frequency | System base frequency | number | 50 or 60 Hz | 50 |
| System Base (MVA) | ANDES system MVA base for per-unit conversion | number | 100 | 100 |
| tf | Simulation end time (s) | number | 5–20 | 10 |
| Fault Bus | Bus where a three-phase fault is applied (optional) | select | Any bus on the diagram | (none) |
| fault_tf / fault_tc | Fault apply and clear times (s) | number | 1.0 / 1.1 | 1.0 / 1.1 |
| Line Outage | Optional line to trip via ANDES Toggle | select | Any AC line | (none) |
| toggle_t | Line outage time (s) | number | 2.0 | 2.0 |
Results
- Multi-series charts: generator speed
ω(pu), rotor angleδ(rad), bus voltage (pu), mean frequency (Hz) - Summary:
tf, point count, generator/bus counts, event settings - List of applied dynamic defaults and mapping warnings (e.g. skipped DC lines, static generators)
- CSV export of the time series
Requirements & Limitations (MVP)
- At least one synchronous Generator; mark one generator as slack (or include an External Grid plus generators)
- Static generators are not modelled as SynGen in this MVP (warned in results)
- Three-winding transformers and DC lines are skipped
- Full ANDES model catalogue (100+ models) is not exposed — GENROU/GENCLS, EXDC2/SEXS, TGOV1 only
Technical References
Based on: ANDES PFlow + TDS. Demo model: transient_stability_two_machine_demo.py (File → Import).
Related: Eigenvalue Analysis · Generator Dynamics tab · Motor Starting (dynamic)
Eigenvalue Analysis (ANDES Small-Signal Stability)
ANDES
Eigenvalue analysis linearises the system around the current operating point and plots modes in the complex plane: damping and oscillation frequency. Negative real parts are stable; positive real parts grow.
Simulate → Eigenvalue Analysis (ANDES). Same requirement as Transient Stability: at least one Generator with dynamics.
When to use
- Small-signal stability at the current dispatch
- Poorly damped local or inter-area modes
- Effect of inertia, droop, or exciter gains (Generator Dynamics tab)
How to run
- Use the same dynamic network as for transient stability (no fault is required).
- Click Simulate → Eigenvalue Analysis (ANDES).
- Run and inspect the s-plane plot, damping ratios, and optional participation factors.
Solver steps
- Build the ANDES system as for time-domain simulation (no fault or line-trip disturbances).
- Run power flow, then the eigenvalue study.
- Return all eigenvalues plus the least-damped oscillatory modes (frequency and damping ratio).
- Optionally include participation factors for the top modes.
Input Parameters
| Parameter | Description | Default |
|---|---|---|
| Frequency / System Base | Same as TDS (Hz / MVA) | 50 / 100 |
| n_modes | Number of least-damped oscillatory modes to highlight | 10 |
Results
- Stability verdict: stable, marginally_stable, or unstable
- Counts: positive / zero / negative eigenvalues
- s-plane scatter plot and table of σ, ω, f (Hz), damping ratio ζ
- Participation factors for highlighted modes (when available)
Technical References
Based on: ANDES eigenvalue tutorial.
Related: Transient Stability · Generator Dynamics tab
Protection Coordination Study
pandapower
Protection coordination checks whether devices operate in the right order for a chosen fault. Electrisim runs IEC 60909 short-circuit, then evaluates fuses and overcurrent (and related) devices. You get trip or melt times, I–t curves, and miscoordination warnings.
Simulate → Protection Coordination. Devices are assigned on the Protection tab of each Switch.
When to use
- Fuse melt and relay trip times for a fault at a bus or along a line
- Time-current grading between upstream and downstream devices
- A first miscoordination screen on a radial feeder
Fuse; OCR DTOC / IDMT / IDTOC (IEC and IEEE/ANSI); earth-fault OCR; directional OCR; differential (87) and distance (21). Fuse currents near transformers follow pandapower short-circuit limits.
How to run
- Place switches on lines, transformers, or bus connections in your diagram (switches are required for protection assignment).
- Open each switch’s dialog → Protection tab. Choose Fuse (library or custom I–t curve) or OC relay (DTOC, IDMT, or IDTOC) and set pickup / grading parameters.
- Click Simulate → Protection Coordination.
- In the dialog, choose fault location (along a line or at a busbar), fault type (3ph / 2ph / 1ph), and case (max / min). Configure grading defaults on the Grading tab if switches leave fields empty.
- Review the results dialog: short-circuit summary, tripping table (including melting time for fuses), I–t chart, and miscoordination list. Optionally export a
.txtreport.
Fault location modes
| Mode | Description |
|---|---|
| Along a line | pandapower create_sc_bus inserts an intermediate fault bus on the selected line at fraction 0–1 (0.5 = mid-line). Set sc_line_id to a line index or all to sweep every in-service line. |
| At selected busbar | sc.calc_sc runs directly at the chosen bus with branch_results=True so fuse currents are available on adjacent branches. |
Dialog parameters
These fields are sent as ProtectionCoordinationPandaPower in the POST body together with network elements.
| Parameter | Description |
|---|---|
fault_location_mode |
line or bus |
fault_bus_id |
Diagram cell ID of the fault busbar (required when mode is bus) |
sc_line_id, sc_fraction |
Line index (or all) and fault position 0–1 (line mode) |
fault_type, case |
3ph / 2ph / 1ph and max / min short-circuit case |
grading_mode |
auto (pandapower topological grading) or manual (per-switch values from the Switch dialog) |
curve_type, tms, t_grade, t_g, t_gg, t_diff |
Default IEC inverse curve and timing settings for relays without explicit values |
overload_factor, ct_current_factor, safety_factor |
Defaults for automatic OCR pickup current calculation |
show_curves, show_table, show_miscoordination, export_results |
Results display and export options |
Switch protection settings
Per-switch parameters are configured on the Switch dialog Protection tab (see also Switch):
- Fuse — library type (e.g. Siemens NH-2 series) or custom JSON curve (
t_min,t_total,x_min,x_total) plus rated current. - OC relay — DTOC, IDMT, or IDTOC; IEC inverse curve; TMS, grading delay, instantaneous and backup trip times; automatic or manual pickup currents.
At least one switch with a fuse or OCR assigned is required; otherwise the study returns an error.
Outputs
- Short-circuit summary — e.g. Ikss at the fault bus (kA).
- Tripping table — per switch: device type, tripped/melted flag, activation current (
activation_parameter_value, kA), trip/melt time (trip_melt_time_s, s). - Time-current chart — log-log grading curves (Chart.js) when enabled.
- Miscoordination warnings — pairs of devices whose trip times are closer than the grading margin (
t_diff). - Export — optional
.txtdownload with the same summary fields.
Prerequisites and tips
- Valid network topology with external grid (or slack) and in-service switches on protected branches.
- For results comparable to pandapower fuse examples, match fuse types per feeder, avoid duplicate fuses on both ends of the same line unless intended, and align external-grid short-circuit strength (
s_sc_max_mva) with your reference case. - OCR relays require matplotlib in the backend environment (
pip install matplotlib).
Limitations
- Primary path is short-circuit based; overload (
scenario=pp) is optional when enabled in the study dialog. For motor-start voltage dip studies, use Motor Starting Analysis. - Differential (87) and distance (21) use Electrisim evaluators on SC results (not native pandapower device classes).
- Line-end duplicate switches report identical branch currents by design.
- Subscription required in the cloud app (same gating as other premium analyses).
Technical references
DG Interconnection Screening (OpenDSS)
OpenDSS
Screens a proposed DER (PVSystem, Storage, or Generator) at the point of connection for voltage band, thermal loading, and reverse power. You can compare Volt-VAR inverter control and estimate hosting capacity.
Simulate → DG Interconnection Screening (OpenDSS).
When to use
- A first interconnection check before a full impact study
- Whether Volt-VAR or feeder controls would fix a voltage/thermal fail
- An estimate of hosting capacity at the POC
Enable Volt-VAR on the DER inverter, or add feeder controls from the Controls palette (RegControl, CapControl).
How to run
- Place a DER on the feeder and note the POC bus.
- Click Simulate → DG Interconnection Screening (OpenDSS).
- Select POC bus, DER, proposed kW, voltage/thermal limits; optionally enable hosting-capacity search and InvControl compare.
- Review pass/fail checks, mitigations, and hosting capacity kW.
Related studies: Battery Sizing for Busbar Requirements; Grid Code Compliance (P-Q & U-Q).
Monte Carlo Load Flow (OpenDSS)
OpenDSS
Monte Carlo load flow samples load variation over many trials and reports bus voltage and line loading statistics (min, mean, max, and percentiles).
Open the Load Flow dialog, OpenDSS tab, and set Solution Mode to M1, M2, or M3 — or use the dedicated Monte Carlo results path after that run.
When to use
- Voltage and loading risk when load is uncertain
- A distribution of results instead of a single snapshot
- M1 — Monte Carlo with loadshapes (Gaussian or Uniform multipliers).
- M2 — Daily / yearly style sampling.
- M3 — Monte Carlo at a selected hour.
How to run
- Build a network suitable for OpenDSS load flow (include loadshapes for Gaussian M1 where required by OpenDSS).
- Open Simulate → OpenDSS Load Flow (or the OpenDSS tab of Load Flow).
- Set Solution Mode to M1, M2, or M3; choose sample Number, Random (Uniform / Gaussian), and hour for M3.
- Review the Monte Carlo results dialog: bus V percentiles, line loading stats, and summary convergence count.
Wind Turbines contribute with their curve-derived p_mw (and optional controller Pref) on each sampled solve the same way as in snapshot load flow.
Harmonic Analysis
OpenDSS
Harmonic Analysis computes voltage and current THD: how non-linear equipment injects harmonic currents and how they propagate. Assign spectra on the Harmonic tab of the relevant elements, then run this study.
Simulate → Harmonic Analysis (OpenDSS). Set spectra on each source or non-linear element first.
When to use
- Voltage and current THD at each bus
- Checks against power-quality limits (for example IEEE 519)
- Filter design and harmonic propagation from converters or VFDs
How to run
- Build the fundamental model: buses with rated voltage, lines, transformers, shunts, and an External Grid.
- On each non-linear element, open the Harmonic tab and set the spectrum.
- Click Simulate → Harmonic Analysis. Set base frequency and the harmonic orders (for example 3, 5, 7, 11, 13).
- Review bus VTHD, per-order voltages, line harmonic currents, and the spectrum chart.
OpenDSS modelling notes
OpenDSS harmonic studies in Electrisim follow the same logical steps as in standalone DSS: assign spectra, define which orders to solve, then run a harmonic power flow. Electrisim automates the command sequence.
- The slack is an External Grid (Vsource in OpenDSS).
- NeglectLoadY neglects load shunt admittance in the harmonic solution (common in OpenDSS tutorials).
- Bus rows in results use the Name from the Bus dialog when you have set it.
Where harmonics are defined (Harmonic tab)
| Element | Typical use | Key parameters |
|---|---|---|
| Load | Nonlinear or equivalent harmonic current injection (drives, rectifiers, aggregated customer distortion) | Spectrum (Default / Linear / Custom / None), spectrum_csv, pctSeriesRL, conn, puXharm, XRharm |
| External Grid | Voltage distortion at the grid or stiff source (often small; use Default or Custom) | Spectrum for Vsource (defaultvsource or Custom CSV) |
| Generator, Static Generator | Synchronous machine or equivalent source with subtransient impedance for harmonic interaction | Spectrum, spectrum_csv, Xdpp, XRdp |
| PVSystem | Inverter-based resource harmonic current spectrum | Spectrum, spectrum_csv; other PV properties as in OpenDSS |
| Storage | Battery inverter spectrum (named spectrum for OpenDSS Storage) | Spectrum name (e.g. default) |
Parameters from these tabs are included in the payload sent to the solver so the backend can build matching OpenDSS commands.
Spectrum modes (UI)
| Mode | Meaning for the engineer | OpenDSS behaviour (summary) |
|---|---|---|
| Default | Use the EPRI/OpenDSS built-in spectrum for that element class (e.g. defaultload, defaultvsource, defaultgen). |
Reference spectra with predefined harmonic content. |
| Linear | Simple “decay with order” teaching or screening case: magnitudes scale roughly as 100/h % on odd harmonics 3, 5, 7, 11, 13 (angles 0°). Not a substitute for device-specific spectra. | Electrisim creates an explicit Spectrum object so injection is non-zero; OpenDSS itself does not define a single global spectrum named “Linear” for all elements. |
| Custom | Your measured or manufacturer spectrum (IEC-style table, field survey, or EMTP export). | Backend issues New Spectrum.<name> from CSV then references it. |
| None | This element does not inject harmonics for the study (still present at fundamental). | No harmonic spectrum on that element. |
Load harmonic impedance (OpenDSS)
For loads, %SeriesRL, conn, puXharm, and XRharm control how the load’s harmonic-frequency model splits between parallel and series R–L paths. This matches the EPRI discussion of harmonic load modelling. Always cross-check sensitivity (e.g. %SeriesRL 0 vs 100%) if results are borderline for compliance.
OpenDSS — Harmonics Load Modeling
Harmonic Analysis Results window
- Summary line — Base frequency, solved orders, NeglectLoadY flag.
- Voltage spectrum chart — Per selected bus: harmonic voltage magnitudes as percent of fundamental line-to-line voltage (useful for relative distortion at the bus).
- Table — Name (bus user name when set), VTHD [%], and columns V_h [kV] per order (line-to-line harmonic magnitudes in kV).
If VTHD or harmonic kV are near zero, check that at least one injection source has a non-None spectrum with content at the orders you are solving, and that the network is connected to the slack.
Standards and planning context
Voltage THD and harmonic levels are often compared to limits in IEEE Std 519, IEC 61000, or local grid codes. Limits depend on the agreed PCC, system strength, voltage level, and jurisdiction. Electrisim provides engineering quantities (THD, harmonic voltages and currents); compliance assessment remains your interpretation against the applicable standard and contract.
How it works (solver)
Electrisim drives OpenDSS harmonic flow: the circuit is solved in fundamental mode first, then mode=harmonics is applied with the requested order list. Monitors capture bus-related voltages and line currents per harmonic; results are aggregated into bus VTHD and per-order magnitudes for the JSON response and the UI.
Configuration checklist
Open Simulate, set Analysis type: Harmonic, enter orders (comma-separated), and confirm frequency. Configure each injecting element’s Harmonic tab. For filters, use shunt reactors/capacitors (and lines/transformers) as in the fundamental model. Export OpenDSS commands from the flow dialog if you need to reproduce the case outside Electrisim.
Based on: OpenDSS Harmonic Flow Analysis; OpenDSS Load (spectrum, %SeriesRL); OpenDSS Vsource (external equivalent).
Optimal Power Flow (OPF)
pandapower
Optimal Power Flow finds a least-cost generation dispatch that still respects voltage limits, thermal limits, and generator capability. Unlike load flow, the solver is allowed to change dispatch (within your costs and limits).
Simulate → Optimal Power Flow (pandapower). Set costs and limits on generators, and voltage bands on buses, before you run.
When to use
- Least-cost dispatch while serving load
- Checking whether a target dispatch is feasible with voltage and thermal limits
- Comparing AC OPF (more accurate) with DC OPF (faster, active power only)
How to run
- Fill generator costs (or accept dialog defaults) and bus/line limits used by OPF.
- Click Simulate → Optimal Power Flow.
- Choose AC or DC OPF and run.
- Read the new dispatch on generators and the flows that result.
AC vs DC OPF
AC OPF is a full nonlinear optimisation (P, Q, voltage magnitude and angle). DC OPF is a linearised active-power approximation, faster and typical for transmission screening. The solver uses mathematical programming (interior point / SQP-style methods) to minimise cost subject to the network constraints.
Dialog parameters
| Parameter | Description | Type | Options/Value Range | Default |
|---|---|---|---|---|
| OPF Type | Type of optimal power flow calculation | radio | AC Optimal Power Flow (runopp), DC Optimal Power Flow (rundcopp) | AC OPF |
| Frequency | System frequency | radio | 50 Hz, 60 Hz | 50 Hz |
| AC Algorithm | Solver for AC OPF | radio | PYPOWER | PYPOWER |
| DC Algorithm | Solver for DC OPF | radio | PYPOWER | PYPOWER |
| Calculate Voltage Angles | Whether to calculate voltage angles | radio | Auto, True, False | Auto |
| Initialization | Initial guess strategy | radio | Power Flow, Flat, Previous Results | Power Flow |
| Delta (Convergence Tolerance) | Optimization convergence tolerance | number | > 0 | 1e-8 |
| Transformer Model | Transformer representation in optimization | radio | Exact Model (t), Pi Model (pi) | Exact Model |
| Cost function type | Generator cost model for the objective | radio | Polynomial, Piecewise linear, No cost function | No cost function |
| Marginal cost currency | Display units for marginal cost fields (numeric values unchanged) | select | EUR, USD, GBP, CHF, PLN, SEK, NOK, DKK, JPY, CNY, INR, AUD, CAD, Other | EUR |
Objective Function
The default objective function minimizes total generation cost, which is typically defined as:
Minimize: Σ (Costi × Pgen,i) for all generators i
Where Costi is the cost coefficient for generator i and Pgen,i is the active power output. Cost functions can be linear, quadratic, or piecewise linear.
Polynomial versus piecewise linear (Electrisim)
In the OPF dialog, Cost function type selects how generator operating costs are modeled before calling pandapower:
- Polynomial — Each synchronous generator gets a smooth cost in active power: by default a small positive quadratic term (convexity / curvature) plus a marginal linear rate that you set per machine (OPF run dialog and/or the generator’s OPF tab as marginal cost per MWh). This matches pandapower
poly_cost(cp2_eur_per_mw2,cp1_eur_per_mw,cp0_eur). It is usually the most robust choice for AC OPF. - Piecewise linear — Cost is linear on each power segment; Electrisim builds a single segment between each generator’s minimum and maximum OPF active power, with slope equal to your marginal rate (same interpretation as the linear term in the polynomial case). This matches pandapower
pwl_cost. Use it when you think of marginal price as constant between min and max P; multi-segment tariffs would require additional segments (not exposed individually in the UI). - No cost function — No polynomial/PWL costs are created for economic minimization; the OPF can still converge but economic dispatch is not driven by generator marginal costs.
Same axes in both panels: horizontal axis is generator active power P over the dispatch range; vertical axis is operating cost contribution C (arbitrary units). Electrisim uses one linear segment for piecewise-linear cost between each machine’s OPF min/max P.
Left: A positive quadratic term makes marginal cost rise with output—useful for differentiable models or rising incremental heat rates. Right: A single segment fixes marginal price over the whole OPF band (simple block tariff).
Currency — The OPF dialog lets you choose a marginal cost currency for labels only. Numerical values are passed to the solver as-is; pandapower still names internal cost columns with eur for historical reasons. Interpret objective values (e.g. total_cost) in the same unit system you used when typing marginal costs.
Constraints
The OPF solution must satisfy:
- Power Balance: Total generation equals total load plus losses
- Generator Limits: Pmin ≤ Pgen ≤ Pmax, Qmin ≤ Qgen ≤ Qmax
- Voltage Limits: Vmin ≤ V ≤ Vmax at each bus using
net.bus.min_vm_pu/max_vm_pufrom the diagram (see Bus) - Thermal Limits: Branch loading respects element ratings; optional OPF caps — set
max_loading_percenton lines, two-winding, or three-winding transformers. A value > 0 adds a pandapower OPF thermal limit for that element; 0 leaves the default unconstrained behaviour. - Reactive Power Limits: Generator reactive power capability constraints
Output Results
The OPF results include optimized dispatch and system state:
| Output Category | Parameters | Description |
|---|---|---|
| Optimization Status | Status, Success flag | Whether optimization converged successfully |
| Total Cost | Objective function value | Minimum total generation cost achieved (monetary units) |
| Generator Dispatch | P_opt, Q_opt | Optimal active and reactive power output for each generator |
| Bus Voltages | vm_pu, va_degree | Optimal voltage magnitudes and angles at all buses |
| Power Flows | P_from, Q_from, P_to, Q_to, Loading | Optimal power flows and loading of lines and transformers |
| Marginal Costs | Lambda_P, Lambda_Q | Shadow prices (marginal costs) for active and reactive power at each bus |
| Constraint Violations | Violation details | Information about any constraint violations if optimization failed |
Prerequisites
- OPF-capable network: slack/external grid, generator and storage models compatible with pandapower OPF.
- Bus voltage bounds (
min_vm_pu,max_vm_pu) should bracket a feasible region. - For meaningful objective values, define polynomial or piecewise costs—Electrisim can auto-create defaults from the dialog Cost function type when no costs exist.
Diagram-level inputs
- Generators: active/reactive limits and any OPF-specific fields exposed in element dialogs.
- Storage: optimisation-tab limits map into pandapower OPF constraints.
- Buses: voltage set-points and min/max magnitudes bound the OPF solution.
API response (successful OPF)
The route returns JSON with:
| Key | Contents |
|---|---|
opf_converged |
Whether pandapower reported successful optimisation (net.OPF_converged). |
total_cost |
net.res_cost objective scalar when converged. |
busbars |
Voltages, injections, and OPF duals lam_p, lam_q when available. |
lines |
Flows, currents, loading, optional thermal duals mu_sf/mu_st. |
generators |
Dispatch plus gen_cost/marginal_cost estimated from polynomial costs. |
externalgrids, loads |
Final injections consistent with the OPF solution. |
Failures respond with error: true, a descriptive message, exception text, and optional pandapower diagnostic payloads.
Note: PandaModels.jl / PowerModels.jl OPF paths referenced in pandapower docs are not wired through Electrisim; only PYPOWER-style runopp/rundcopp are available.
Algorithm Details
AC OPF: Solves the full nonlinear optimization problem using Interior Point Method (IPM) or Sequential Quadratic Programming (SQP). Provides accurate results but requires significant computation time for large networks.
DC OPF: Uses a linearized power flow model (ignoring losses and reactive power). Much faster than AC OPF but less accurate. Suitable for transmission planning where reactive power is less critical.
Solver: PYPOWER, which is based on MATPOWER and uses MATLAB optimization solvers (converted to Python).
Limitations and Considerations
Important Notes:
- OPF assumes perfect information and deterministic conditions - does not account for uncertainty
- Cost functions must be defined for generators (linear or quadratic coefficients)
- AC OPF may fail to converge for heavily loaded or ill-conditioned systems
- DC OPF ignores reactive power, losses, and voltage constraints
- Results represent steady-state optimal dispatch - dynamic constraints are not considered
- Large networks may require significant computation time, especially for AC OPF
- Market rules and regulatory constraints may not be fully represented
Technical References
Based on: pandapower Optimal Power Flow and PYPOWER.
Algorithm Type: Nonlinear/Linear optimization with Interior Point Method or Sequential Quadratic Programming.
Documentation References: 📘 pandapower Optimal Power Flow 📘 PYPOWER OPF
Time Series Simulation
pandapower
Time Series runs one AC load flow per hour (or time step). At each step, load and generation follow the profiles you enter, so you can see voltages and loadings over a day or a year.
Simulate → Time Series Simulation (pandapower).
When to use
- Daily or yearly voltage and loading with varying load and generation
- Checking whether a snapshot load flow hides an overloaded hour
How to run
- Build the network and confirm a single Load Flow converges.
- Open Time Series Simulation.
- Set the horizon (for example 24 hours) and a profile for each load and generator.
- Run and review charts in the results dialog; export if you need a spreadsheet.
How this relates to pandapower time series
Each step updates P/Q from your profiles and solves AC load flow. The idea matches the pandapower time series tutorial, but Electrisim drives the loop itself rather than the pandapower OutputWriter pipeline.
Dialog — simulation horizon
time_steps— number of sequential power-flow solves. Each step represents one hour by default (e.g. 24 = one day, 8760 = one year).
Dialog — load & generation profiles (per element)
Every Load, Generator, and Static Generator on the diagram gets its own profile editor. Enter one numeric value per time step, separated by commas or spaces. You can also import a .csv or .txt file.
| Profile mode | Meaning | When to use |
|---|---|---|
| Absolute P (MW) | Sets active power directly in MW at each hour (Q scales proportionally unless overridden). | Recommended for tutorial-style networks and when base-case P from the diagram should be replaced entirely. |
| Scale factor (× base P) | Multiplies the element’s base p_mw from the diagram (e.g. 0.8 → 80% of rated P). |
Use with built-in preset shapes (daily load, solar, wind) via Quick fill or Fill preset. |
Quick fill (optional toolbar above the element cards) lets you apply a preset shape to all loads or all generators at once — this replaces the older “Global preset” mode, which applied one profile to every element and often failed to converge on meshed or transformer-heavy networks. Per-element control with absolute MW values is the recommended approach.
Preset shapes available for quick fill:
- Load:
constant,daily(residential),industrial,variable - Generation:
constant,solar,wind,variable
The Random (tutorial) button fills absolute MW values between 0 and the element’s base P — matching the pandapower notebook example.
Dialog — advanced power flow settings
Collapsed under Advanced power flow settings in the dialog:
frequency— system frequency (Hz).algorithm—nr(Newton-Raphson),iwamoto_nr,fastdecoupled, ordc.calculate_voltage_angles—auto, yes, or no.init— initialization method. Auto is recommended; after the first converged step the backend warm-starts from previous results.
Convergence tips
- Verify the network converges in a single Load Flow before running time series.
- Use Absolute P (MW) when values look like notebook MW numbers — do not mix absolute MW values with scale-factor mode.
- Keep initialization on Auto unless you have a specific reason to change it.
- Large simultaneous swings in load and generation can stress weak networks; try smoother profiles first.
Results dialog
After a successful run, the results dialog shows:
- Summary — convergence status, duration, element counts, and non-converged step numbers if any.
- Charts — input profiles, bus voltages, line loading, load P, static generator P.
- Statistics — min / max / average voltage and line loading across all hours.
- Detailed data — scrollable table of bus results for every hour.
Enable Download Excel report automatically in the setup dialog, or click Export to Excel in the results dialog. Sheets include Summary, res_bus, res_line, res_load, res_sgen, and profiles. If the Excel library cannot load, a CSV fallback is offered.
API payload
Posted as TimeSeriesSimulationPandaPower Parameters together with the diagram JSON:
time_steps,profile_mode(alwayscustomfrom the UI),element_profiles— per-element{ element_type, mode, values, display_name }.load_profile,generation_profile— preset names used only for quick-fill reference.frequency,algorithm,calculate_voltage_angles,init.
Outputs (JSON)
| Key | Meaning |
|---|---|
timeseries_converged |
true only if every time step converged. |
time_steps |
Requested horizon (hours). |
profiles_used |
Per-element profiles actually applied, including display_name for chart labels. |
busbars |
{ name, id, time_step, vm_pu, va_degree, p_mw, q_mvar } for each bus and hour. |
lines |
{ name, id, time_step, loading_percent, p_from_mw, p_to_mw }. |
loads, sgens |
Simulated P/Q per element and hour. |
voltage_statistics, loading_statistics |
Per-bus / per-line min, max, average across steps. |
time_stamps |
Synthetic timestamps (hourly from 2024-01-01). |
Extraction tip: Filter busbars / lines by time_step to plot trajectories; use the statistics blocks for KPI cards.
pandapower alignment
Official reference: Time Series Simulation. Electrisim approximates the profile-driven loop using repeated runpp calls, which is appropriate when you need bus/line summaries and Excel export rather than registered OutputWriters.
Economic Analysis
pandapower
Economic Analysis totals CAPEX from element costs, power losses from a load flow, and optionally energy losses over a lifetime using load and generation profiles.
Simulate → Economic Analysis. Enter cost per unit on the Economic tab of each element first.
When to use
- Project CAPEX from lines, transformers, and other equipment
- Where the losses are (lines, transformers, impedances, DC lines)
- Energy-loss cost over a lifetime when you supply an energy price
How to run
- Fill the Economic tab on the elements you want in the CAPEX total.
- Click Simulate → Economic Analysis.
- Optionally enable energy-loss profiles and a lifetime / energy price.
- Run and compare CAPEX, power losses, and energy-loss cost.
How it is calculated
The economic analysis performs the following steps:
- CAPEX: Sums costs from the Economic tab of each element (lines, transformers, etc.). For lines: cost × length_km × parallel. For transformers: cost × parallel.
- Power Losses: Runs one AC load flow and extracts active power losses (
pl_mw) from lines, transformers, three-winding transformers, impedance branches, DC lines / DC lines mapped through pandapower. - Energy Losses (optional): When profiles are enabled, Electrisim builds hourly scaling traces for loads and generators, evaluates losses on a compact grid of operating points with repeated
runpp, then interpolates losses for each hour (SciPyRegularGridInterpolatorwhen both load and generation vary). This estimates the sum of hourly loss energy, Σ Ploss(t)Δt, with Δt = 1 h. - Period vs lifetime MWh: The simulation-period integral is exposed as
total_energy_losses_period_mwh. Multiplying by Lifetime (years) yieldstotal_energy_losses_mwh, representing cumulative losses across the project horizon. - Energy Loss Cost: When an energy price is supplied, cost equals
total_energy_losses_mwh(lifetime MWh) × price.
Formulas: Power Losses and Electrical Energy Losses
Power losses are computed by pandapower from the load flow results. The following formulas apply per element type:
Power Loss (Ploss) per Element
AC Line, Impedance, DC Line (line_dc):
Ploss = Pfrom + Pto
where Pfrom is active power flow into the element at the "from" bus, and Pto is active power flow into the element at the "to" bus (power flow convention: one direction is positive, the other negative, so the sum equals the power dissipated).
Transformer (2-winding and 3-winding):
Ploss = Phv + Plv
where Phv is active power at the high-voltage side and Plv at the low-voltage side. Equivalent to Pfrom + Pto in terms of power balance.
HV DC Link (dcline):
Ploss = Pfrom + Pto
with Pto = −Pfrom × (1 − loss_percent/100) − loss_mw. The loss is thus Pfrom × (loss_percent/100) + loss_mw.
Physical interpretation: For resistive elements (lines, impedance), Ploss ≈ I²R, where I is the current and R the resistance. For transformers, losses include copper (I²R) and iron (no-load) losses.
Total Power Losses
Ptotal,loss (MW) = Σ Ploss over all lines, transformers, impedance elements, and DC lines
Electrical Energy Losses
Hourly losses are reconstructed via interpolation from strategically sampled AC load flows (see workflow above—not full pandapower run_timeseries). Energy over the simulated horizon:
Eperiod (MWh) = Σt=1..N Ploss(t) × Δt
Lifetime cumulative energy:
Elifetime (MWh) = Eperiod × lifetime_years
The JSON field total_energy_losses_period_mwh stores Eperiod; total_energy_losses_mwh stores Elifetime.
Energy Loss Cost
Cost = Elifetime (MWh) × energy_price_per_MWh
Economic analysis request payload
The frontend merges diagram cells with an object typ: "EconomicAnalysisPandaPower Parameters". Important keys mirrored by Flask (app.py):
frequency,currency,algorithm,calculate_voltage_angles,inituse_generation_profile— UI sets this true whenever profile widgets are shown.time_steps,lifetime_years,load_profile,generation_profile,energy_price_per_mwh,energy_price_currency,calculation_mode
Economic analysis JSON outputs
total_capex,capex_breakdown: Aggregated CAPEX and per-element contribution pulled from diagram economics fields.total_power_losses_mw,power_losses_breakdown: Sum ofpl_mwafter the baseline load flow.total_energy_losses_period_mwh: Integrated losses overtime_stepshours (Δt = 1 h).total_energy_losses_mwh: Lifetime cumulative (= period ×lifetime_years).energy_loss_cost: Lifetime MWh × price when provided.load_profile_values,generation_profile_values: Hourly scaling vectors stored for auditing/charts.
Input Parameters
| Parameter | Description | Type | Options/Value Range | Default |
|---|---|---|---|---|
| Frequency | System frequency for load flow | radio | 50 Hz, 60 Hz | 50 Hz |
| Display Currency | Currency for CAPEX and cost display | select | EUR, USD, PLN, GBP, etc. | EUR |
| Time steps (hours) | Number of hours for energy loss time series (e.g. 8760 for one year) | number | > 0 | 8760 |
| Lifetime (years) | Project lifetime for energy loss calculation | number | > 0 | 30 |
| Load profile | Load scaling profile (appears when model has loads) | select | Constant, Residential (yearly, seasonal), Industrial (yearly, seasonal) | Constant |
| Generation profile | Generation scaling profile (appears when model has generators) | select | Constant, Solar, Onshore wind, Offshore wind | Constant |
| Energy price per MWh | Optional energy price for loss cost calculation (uses Display Currency) | number | ≥ 0 | 100 |
Results
- Total CAPEX: Sum of all element costs in the selected currency
- CAPEX Breakdown: Table of element type, name, and cost per element
- Total Power Losses (MW): Sum of active power losses from load flow
- Power Losses Breakdown: Table of element type, name, and power loss (MW) per element
- Total Energy Losses (period):
total_energy_losses_period_mwh— integrated MWh over the simulated hour window. - Total Energy Losses (lifetime):
total_energy_losses_mwh— equals period energy × lifetime years. - Energy Loss Cost: Lifetime MWh × energy price when specified.
- Profiles used: Load and generation profile names and hour count used for the calculation
Note: Set cost per unit in the Economic tab of each element dialog (lines, transformers, etc.) before running Economic Analysis. Element names in the breakdown match the names shown in the CAPEX and Power Losses tables.
Reactive Power Capability (PQ Diagram) App menu: Grid Code Compliance (P-Q & U-Q)
pandapower
P-Q and U-Q
Choose Grid Code Compliance (P-Q & U-Q) when you need a PQ diagram and a U-Q/Pmax view. Plant Q is set on each static generator or wind turbine.
P-Q with Park Controller
Choose Grid Code Compliance (P-Q) for a PQ diagram only, with optional plant Q dispatch through a Park Controller. There is no U-Q chart.
This study builds a PQ diagram (and U-Q/Pmax) at the point of common coupling (PCC) for plants modelled with static generators and/or wind turbines. It sweeps plant P, runs load flow at each step and PCC voltage, and records the Q range the plant can deliver.
Video tutorials: Reactive Power Capability (PQ Diagram) — YouTube; offshore wind P-Q/Pmax worked example — 450 MW grid compliance (Part 1) (video card). U-Q/Pmax offshore tutorial planned separately.
Use cases:
- Verify that the plant can deliver required Q (lagging/leading) across the P range at different PCC voltages
- Compare simulated capability curves against grid code templates (e.g. ENTSO-E PPM, VDE AR-N, Saudi Arabian Grid Code (SAGC), other national codes) on the same chart
- Document compliance for project or TSO submissions using the compliance flag and exported CSV
- Study the effect of limiting Q to avoid branch/transformer overloads
How to run it
- Model the plant and grid: define a bus as the PCC, an external grid at the PCC (voltage source), and one or more static generators and/or wind turbine generators for the plant.
- In the Electrisim menu, choose Grid Code Compliance (P-Q & U-Q) (under Simulate; pandapower).
- Select PCC bus, external grid, and the Static Generator or Wind Turbine Generator units that represent the plant.
- Set P Max (MW), number of P steps, and voltage levels at PCC (pu) (comma-separated, e.g. 0.9, 0.95, 1.0, 1.05, 1.1).
- Optionally enable limit Q to avoid branch overloads and set a maximum loading (%).
- Optionally add grid code requirements: pick a P-Q template and P rated (MW), or use Apply to fill the table. A matching U-Q/Pmax template is selected automatically when U-Q is still “none”; you can override it. You can also edit P, Qmin, Qmax manually.
- Run the calculation. While the backend works, a small progress panel can show each voltage level being processed (when streaming is supported).
Key parameters explained
| Parameter | Meaning |
|---|---|
| P Max (MW) — 0 = auto | Upper end of the active power sweep. 0 tells the solver to use the sum of installed capacity of the selected static generators and wind turbines (same idea as automatic rated power). Enter a positive value to cap the sweep (e.g. partial load or derated plant). |
| P rated (MW) (grid code section) | Reference power used to scale per-unit grid-code templates into absolute MW and Mvar. If empty, the tool falls back to P Max (when > 0) or estimated installed capacity from the diagram. |
| Voltage levels (pu) | PCC voltage setpoints for the external grid. The analysis produces one PQ curve family per level (tabs in the results window). When a U-Q/Pmax template is active, its voltage points are merged into this list automatically so the U-Q chart is a curve rather than two dots at a single U. |
| Q capability mode | From Sn and P uses a circular (apparent-power) relation for each generator; Fixed fraction uses a simpler Q limit based on rating; From static generator or wind turbine P–Q curve uses the manufacturer-style Q capability table on each selected unit. |
| Grid code template / table | Templates fill Qmin/Qmax vs P from standard envelopes. The results chart overlays required Q (blue) on top of simulated capability (red) when requirements are provided. Choosing a P-Q template with U-Q still set to “none” also selects the matching U-Q/Pmax envelope (for example Polish PPM Fig. 2 @ 400 kV pairs with Polish Type D U-Q @ 400 kV) so the U-Q results chart has a requirement overlay. See built-in templates below. |
Built-in grid code templates
Choose Custom (manual table) to type P, Qmin, and Qmax yourself, or pick a built-in envelope. Values are per-unit of P rated before scaling to MW and Mvar. These summaries support study and visualization only—always confirm against the official code text and your TSP or connection agreement.
- ENTSO-E RfG — PPM inner envelope (EU minimum); PPM outer envelope (maximum TSO range)
- VDE AR-N 4120 variant 2 (Germany HV, ≥110 kV); VDE AR-N 4110 (Germany MV)
- Polish IRiESP — Type D (≥110 kV); PPM / wind farms; PPM P-Q/Pmax Fig. 2 @ 400 kV (offshore Type D PPM)
- GB Grid Code (UK, National Grid ESO)
- Spanish P.O. 12.2 (REE)
- Danish Grid Code (Energinet TF 3.2.5)
- Italian Grid Code (Terna, Allegato A.68)
- Saudi Arabian Grid Code (SAGC, May 2024) — Connection Code §2.5.5.1, Fig. 2.1:
- Power Park Module: at the connection point, for active output below 20% of rated power, Q within ±0.05·Prated; for output above 20%, Q within ±0.33·Prated (unless the TSP agrees a different threshold in the connection agreement).
- Synchronous generating unit: at rated active power, capability between 85% power factor lagging and 95% leading at the unit terminals. For P below rated, the template uses a linear ramp toward (0, 0) so the chart has points to interpolate; the published text is explicit at rated output, so check with your TSP if you need a different partial-load shape.
U-Q/Pmax diagram and grid-code templates
NC RfG Art. 21(3)(b)(i) requires reactive power capability at maximum active power as a function of voltage at the PoC (U-Q/Pmax profile). Electrisim extracts Qmax and Qmin at P = Pmax from the same RPC sweep used for P-Q diagrams and displays them in a dedicated U-Q / Pmax results view.
- In the RPC dialog, set P Max to rated output. You can leave voltage levels at a single value (e.g. 1.0 pu); the solver unions the U points from the U-Q template into the sweep so the U-Q chart is a curve.
- Pick a P-Q Template (or set a U-Q Template under U-Q/Pmax Grid Code Requirements). If U-Q is still “none”, Electrisim applies the paired U-Q envelope for that P-Q template (Polish Type D / PPM, Polish PPM Fig. 2 @ 400 kV, ENTSO-E PPM inner, VDE AR-N 4110).
- After the run, open results and switch from P-Q / Pmax to U-Q / Pmax: net Q at the PCC (Mvar) on the X-axis (positive = overexcited), voltage (p.u.) on the Y-axis. Red is simulated capability; blue is the PCC requirement envelope (overexcited solid, underexcited dashed) with a filled requirement area.
- Review the COMPLIANT / NON-COMPLIANT badge and the per-voltage results table; export CSV includes U-Q sections.
If the U-Q curve still has only one or two voltage points, add more levels by hand (e.g. 0.875, 0.9, 0.925, 0.95, 1.0, 1.05, 1.075, 1.1 pu) and Calculate again.
Built-in U-Q templates: Polish IRiESP PPM U-Q/Pmax @ 400 kV (Fig. 1 tapered polygon) and @ 110 kV; ENTSO-E PPM U-Q inner envelope. Values are per-unit of Prated before scaling to Mvar.
P-Q PPM template: Polish IRiESP – PPM P-Q/Pmax Fig. 2 @ 400 kV (Type D) matches NC RfG Figure 2: ±0.33 Q/Pmax at Pmax, −0.35 / +0.40 Q/Pmax from 10–90% P. Selecting it also applies the 400 kV U-Q template unless you already chose a different U-Q envelope.
What the results show
- PQ diagram per voltage tab: P (MW) vs Q (Mvar) at the PCC, with capability Qmax/Qmin curves and optional grid-code requirement curves.
- U-Q/Pmax diagram (results view toggle): Qmax/Qmin at P = Pmax vs PCC voltage (Q on X, U on Y), with optional U-Q grid-code overlay (blue requirement area) and compliance badge.
- Compliance badge when requirements are defined: whether interpolated capability meets the required Q band at check points (separate flags for P-Q per voltage tab and U-Q at Pmax).
- Warnings (e.g. power flow only converged at a reduced Q fraction, or Q limited due to overload constraints). See Warnings in the results dialog below.
- Download CSV for all voltage levels and curve points.
Warnings in the results dialog
The yellow Warnings list explains how certain points on the PQ curves were obtained. It does not mean the whole analysis failed; it flags individual (voltage, P) combinations where the solver had to relax assumptions.
“Qmax converged at X% capability” / “Qmin converged at X% capability”
For each sweep point, the backend sets static-generator reactive power toward the full theoretical limit from the selected Q capability mode (for example, from each generator’s Sn and its share of plant P). It runs AC power flow starting at 100% of that limit. If power flow does not converge, it retries with 90%, then 80%, 70%, and lower fractions until a case converges. The number in the message is that fraction of theoretical reactive capability at which load flow first succeeded—it is not a percentage of solver iterations or “partial convergence.”
- A value below 100% means the tool could not obtain a valid solution at full theoretical Q for that point; the chart shows the PCC Q from the reduced setpoint. Neighbouring P steps may use different fractions, which can make the capability curve look irregular or jagged compared to a smooth envelope.
- Typical causes include stressed or weak-grid conditions, PCC voltages far from nominal, heavy reactive exchange with the network, or model aspects (impedances, transformer taps, P sharing among generators). Improving data quality or simplifying extreme branches often reduces these warnings.
“Qmax limited due to overload” / “Qmin limited due to overload”
These appear only when limit Q to avoid branch overloads is turned on. Here, reactive capability was reduced so that the worst line or transformer loading stays within your maximum loading (%), even if a higher Q would otherwise have been numerically feasible.
Technical summary
For each PCC voltage level and each P in the sweep, the backend adjusts generator P and Q, runs AC power flow (with robust solver fallbacks), and reads Q at the PCC. Qmax and Qmin branches correspond to overexcited and underexcited plant operation relative to the network. This is a numerical envelope built from many load-flow solutions, not a single analytical formula for the whole grid.
Based on: pandapower AC power flow (runpp) executed repeatedly inside Electrisim’s RPC workflow.
Grid Code Compliance (P-Q) App menu: Grid Code Compliance (P-Q)
pandapower
P-Q and U-Q
Choose Grid Code Compliance (P-Q & U-Q) when you need a PQ diagram and a U-Q/Pmax view. Plant Q is set on each static generator or wind turbine.
P-Q with Park Controller
Choose Grid Code Compliance (P-Q) for a PQ diagram only, with optional plant Q dispatch through a Park Controller. There is no U-Q chart.
This study is a P-Q diagram at the point of connection only — no U-Q view. The distinctive option is plant Q through a Park Controller, instead of setting Q on each machine locally.
Park Controller: Place and configure a Park Controller on the SLD first (Machines, General, Distribution tabs). In this study, pick that controller and click Configure… to open the same dialog. When Park controller active is on, the sweep uses constant Q at the point of connection and reduces the plant Q setpoint if loading or voltage limits bind. When it is off, each unit gets a local Q setpoint (same idea as the P-Q & U-Q study) and other park controllers are taken out of service so they cannot overwrite Q.
How to run it
- Model the plant: PCC bus, external grid at the point of connection, wind turbines and/or static generators, and optionally a Park Controller linked to those machines.
- Simulate → Grid Code Compliance (P-Q) (pandapower only).
- Select PCC, external grid, Park Controller, and plant units (auto-filled from the park Machines list when park control is on).
- Set Pn, sweep start / step / end (% of Pn), voltage levels, Q capability mode, and optional grid-code P-Q template.
- Optionally enable loading limit, voltage protection at LV terminals, worst-case transformer taps, shunt-first Q reduction, and Q with units not operating.
Key parameters
| Parameter | Meaning |
|---|---|
| Park controller active | On: plant Q via Park Controller (constant Q at the point of connection). Off: local unit Q setpoints. |
| Pn, Un, Uc | Reference active power and voltages at the point of connection. PCC voltage is applied as the requested p.u. times Uc/Un. |
| Sweep start / step / end | Active-power sweep as % of Pn. |
| Q reduction step | Step size for Q reduction, as % of Pn. After a violating load flow, plant Q is cut by this amount until limits are OK or Q = 0. |
| Operating range | Generation, consumption (storage charging), or both. |
| Units kept at diagram P | Keep selected units at their diagram P while the rest of the plant is scaled. |
| Transformer tap control | Worst-case taps: two voltage setpoints; keep the more restrictive Q envelope. Discrete taps only. |
| Shunt control | Auto switch shunts. With the loading limit, shunt compensation is reduced before plant Q. |
| Loading limit / max loading | Cap Q so line and transformer loading stay within the limit. |
| Voltage protection | Cap Q when generating-unit LV terminal voltage leaves the min…max band. |
| Q with units not operating | Extra load flow with plant P = Q = 0; report P and Q at the point of connection. |
| Table at 10%…100% of Pn | Table of Q capability at those active-power points. |
| Generator oriented | Plot sign convention. Inputs stay generator-oriented. Switch the results chart between MW/Mvar and p.u. of Pn after the run. |
Procedure
For each voltage level and each P from sweep start to sweep end:
- Set Q to the plant/unit capability (Qmax, then Qmin) and run a load flow.
- If loading limits are violated and Shunt control plus Loading limit are on, reduce shunt compensation one step at a time before touching plant Q.
- Then reduce Q by the Q reduction step (% of Pn) until the network is within limits or Q reaches 0 Mvar.
- Park controller off: each unit’s Q setpoint is reduced as a function of its rating (local Q on the static generator / wind turbine).
- Park controller on: the Park Controller constant-Q setpoint at the point of connection is reduced.
- Transformer tap control: two load flows per P (lower vs upper tap voltage setpoint); keep the more restrictive Q envelope. Discrete taps only.
Park Controller Q applies to wind turbine and static generator elements only, not synchronous generators. OpenDSS is not supported.
Results show the red capability / blue requirement P-Q chart (click a red point to apply that load flow on the diagram), a MW/Mvar vs p.u. of Pn unit toggle, loading and voltage summary, optional 10% table, and CSV download. Grid-code templates are the same P-Q envelopes as in Grid Code Compliance (P-Q & U-Q).
Contingency Analysis
pandapower
Contingency analysis takes equipment out of service one piece at a time, runs AC load flow, and flags thermal or voltage violations. Today this is single-outage (N-1 style) only.
Simulate → Contingency Analysis. Requires a subscription. Confirm a base Load Flow converges first.
When to use
- N-1 screening for overloads and voltage excursions
- Ranking outages by violation count
- A worst-case snapshot for reinforcement discussions
Only one element is outaged at a time (line, two-winding transformer, or synchronous generator). Dialog options for N-2, N-K, selected subsets, and redispatch are reserved for later releases and are not applied yet.
How to run
- Build and solve a normal Load Flow first so the network is connected and the base case converges.
- Ensure each busbar has a numeric nominal voltage
vn_kv(kV), not descriptive text from other equipment. - Click Simulate → Contingency Analysis (active subscription required).
- In the Contingency Analysis Parameters dialog, set element type (lines, transformers, generators, or all), voltage and thermal limit checks, and thresholds (min/max voltage in p.u., maximum loading %).
- Click Analyze. When the study completes, the Contingency Analysis Results dialog opens automatically.
- Use filters and expandable rows to inspect violations; download CSV for a full audit trail or expand Worst-case network snapshot for bus/line/trafo values after the heaviest outage.
Results dialog
After a successful run, Electrisim shows an interactive results window (not only console output):
- Summary cards — cases analyzed, converged, failed, cases with violations, total violation count.
- Search and filters — find a case by name or outage text; show All, With violations, or Failed only.
- Case list — sorted by violation count (highest first). Each row shows status (Converged, Non-convergent, or Failed), a violation badge, and a short summary (e.g. voltage vs thermal counts).
- Expandable details — click a row to open grouped tables for voltage and thermal violations (up to 25 rows per group in the UI; use CSV for the full list).
- Worst-case snapshot — collapsible section with bus, line, and transformer results from the contingency with the most violations (same data used for optional diagram colouring).
- Download CSV — exports every case with status and violation summaries.
Non-convergent cases mean the AC power flow did not solve after that outage (often islanding or loss of slack). Failed indicates another backend error; the detail row shows the message.
How it works (backend)
How it works (backend)
- Network export: The diagram is collected with the same
prepareNetworkDatapipeline as Load Flow (buses, lines, transformers, generators, loads, external grid, and so on). - Base case: Run AC load flow on the intact network; abort if isolated buses are detected.
- Build cases: For each in-service element of the selected type, create one contingency record.
- Outage simulation:
deepcopythe network, set that elementin_service = False, runrunpp. - Limits: Compare bus voltages to your min/max (p.u.) and line/trafo loading to your maximum percent.
- Response: Return per-case results, summary, worst-case element arrays, and JSON-safe numeric values (NaN/Inf converted to
nullfor the browser).
Prerequisites
- Solvable base-case AC power flow (slack/external grid, connected topology).
- Reasonable voltage and thermal limits for meaningful violation detection.
- Valid bus
vn_kvon every busbar (numeric kV).
Dialog parameters
These fields are sent as ContingencyAnalysisPandaPower Parameters in the POST body together with network elements (see development/API notes if you integrate programmatically).
| Parameter | Description | Honoured in backend? |
|---|---|---|
contingency_type |
N-1, N-2, or N-K (UI label) | No (reserved; only N-1-style single outages run) |
element_type |
line, transformer, generator, or all |
Yes |
elements_to_analyze |
All, critical only, or selected only (UI) | No (reserved; all matching in-service elements are used) |
voltage_limits, thermal_limits |
Enable/disable voltage or thermal checks (true / false) |
Yes |
min_vm_pu, max_vm_pu |
Bus voltage violation thresholds (per unit) | Yes |
max_loading_percent |
Line and transformer overload threshold (%) | Yes |
post_contingency_actions |
None, redispatch, load shedding, or both (UI) | No (reserved) |
analysis_mode |
Fast screening, detailed, or comprehensive (UI) | No (reserved) |
user_email |
Logged-in user (server logging) | Yes |
Outputs and JSON shape
The HTTP response is JSON (often gzip-compressed). Top-level keys:
| Key | Content |
|---|---|
bus, line, transformer |
Arrays for the worst contingency (maximum violation count)—compact values for diagram colouring. |
summary |
contingencies_analyzed, flat violations list, critical_contingencies (high-severity or non-convergent cases), total_violations, total_critical. |
contingency_results |
Full per-case list: name, description, converged, optional error, violations (type, element, description, severity), and when converged bus_results / line_results / trafo_results. |
error |
Present if the whole study failed (e.g. no cases, isolated buses, validation error). |
Extracting results: Use contingency_results for complete audit trails and CSV export; use summary.critical_contingencies for quick screening; use top-level bus/line/transformer only for the worst-case view on the canvas.
Relationship to pandapower documentation
pandapower documents contingency workflows under Contingency analysis, including run_contingency and limit helpers. Electrisim follows the same physical idea (sequential AC PF after outages) but uses its own loop so the UI can evolve independently. For deeper algorithm options, refer to the official docs.
Limitations
- Steady-state only—no transient or voltage stability assessment.
- Each case removes one element; double or common-mode outages are not generated.
- No automatic redispatch or load shedding after an outage.
- Islanded or non-convergent cases are reported with
converged: falseand an error or convergence violation entry. - Large networks may produce many voltage violations per case when limits are tight; use the results dialog filters and CSV export rather than reading every violation in the UI.
Technical references
Battery (BESS) sizing — POC busbar P/Q targets App menu: Battery Sizing for Busbar Requirements
pandapower
This study sizes the electrical P/Q the BESS must provide so the point of coupling (POC) bus meets a target P (MW) and Q (Mvar). It answers “how hard must the battery work for this schedule?” — not switchgear ampacity.
Simulate → Battery Sizing for Busbar Requirements (pandapower).
Electrisim does not compute switchgear or busbar conductor ratings (thermal withstand, IEC 61439). Use a separate equipment study for ampacity.
When to use
- BESS P/Q needed to meet a POC schedule
- Comparing load-supply, export, and reactive-support targets
How to run
- Model the POC bus, grid connection, and the BESS (Storage or BESS AC Block).
- Click Simulate → Battery Sizing for Busbar Requirements.
- Set the POC bus and target P/Q, then run.
- Read the required BESS P and Q and whether the target was reached.
How the sizing loop works
An Electrisim proportional controller adjusts BESS P and Q, running load flow each iteration, until the POC P/Q is within tolerance (or the iteration limit is hit). The first guess includes a small loss overhead.
Dialog parameters
| Parameter | Description | Type | Value Range | Default |
|---|---|---|---|---|
| Storage Selection | Select the Battery/Storage element in the network to be sized | dropdown | Available storage elements | - |
| POC Busbar | Point of Coupling busbar where target P/Q should be achieved (typically connected to external grid) | dropdown | Available busbars | - |
| Calculation Mode | Select between "Single Target at POC" or "Multiple Scenarios" | radio | single, multiple | single |
| Target P (MW) | Target active power at POC in MW Positive = consumption from grid, Negative = generation to grid |
number | Any real number | 10.0 |
| Target Q (Mvar) | Target reactive power at POC in Mvar Positive = inductive (lagging), Negative = capacitive (leading) |
number | Any real number | 5.0 |
| Convergence Tolerance | Convergence criterion in MW/Mvar - algorithm stops when both P and Q errors are below this value | number | > 0 | 0.001 |
| Max Iterations | Maximum number of control loop iterations before stopping | integer | 1-200 | 50 |
| Proportional Gain (P) | Proportional gain for active power control loop | number | > 0 | 0.5 |
| Proportional Gain (Q) | Proportional gain for reactive power control loop | number | > 0 | 0.5 |
| Frequency | System frequency (50 Hz or 60 Hz) | radio | 50, 60 | 50 Hz |
| Algorithm | Power flow algorithm to use | radio | nr, iwamoto_nr, bfsw | Newton-Raphson (nr) |
Multiple Scenarios Mode
When selecting "Multiple Scenarios" mode, you can evaluate five different operational scenarios simultaneously. Each scenario has editable target P and Q values:
| Scenario | Default P (MW) | Default Q (Mvar) | Typical Use Case |
|---|---|---|---|
| Load Supply | 15.0 | 8.0 | BESS supplying load demand with inductive reactive power |
| Power Export | -20.0 | -5.0 | BESS exporting power to grid with capacitive reactive power |
| Reactive Support | 0.0 | 10.0 | BESS providing only reactive power support (voltage regulation) |
| Capacitive Support | 5.0 | -8.0 | BESS providing active power and capacitive reactive power |
| Balanced | 10.0 | 5.0 | Balanced active and reactive power scenario |
All scenario values are editable before running the calculation. The results show the required BESS power for each scenario separately, allowing you to determine the maximum BESS capacity needed across all scenarios.
Output Results
For each scenario (or single target), the results include:
| Output Parameter | Description | Unit |
|---|---|---|
| Required BESS Power (P) | Active power output required from BESS Negative = discharging (generation), Positive = charging (consumption) |
MW |
| Required BESS Power (Q) | Reactive power output required from BESS Positive = inductive, Negative = capacitive |
Mvar |
| Apparent Power (S) | Total apparent power required: S = √(P² + Q²) | MVA |
| Achieved P at POC | Actual active power achieved at Point of Coupling after BESS control | MW |
| Achieved Q at POC | Actual reactive power achieved at Point of Coupling after BESS control | Mvar |
| Error P | Difference between target and achieved active power at POC | MW |
| Error Q | Difference between target and achieved reactive power at POC | Mvar |
| Converged | Whether the algorithm converged within tolerance | Yes/No |
| Iterations | Number of control loop iterations performed | integer |
API payloads and result extraction
The browser POSTs the diagram JSON plus a sibling object bess_sizing_params with typ: "BessSizingPandaPower", carrying storageId, pocBusbarId, targets, tolerances, gains, frequency, algorithm, and optional scenarios when running multi-case mode.
Single target response (JSON): bess_p_mw, bess_q_mvar, bess_s_mva, achieved_p_mw, achieved_q_mvar, error_p_mw, error_q_mvar, converged, iterations, or an error string when sizing cannot proceed.
Multiple scenarios response: { "calculationMode": "multiple", "scenarios": [ ... ] } where each scenario echoes the input targets and the same numeric keys as the single-mode payload.
Visualization (Multiple Scenarios Only)
When running multiple scenarios, the results include two visualization plots:
- POC P–Q (Target vs Achieved) Plot: Shows a scatter plot comparing target and achieved P/Q values at the Point of Coupling. Blue circles represent target values, green circles represent achieved values. Dashed lines connect target-achieved pairs for each scenario.
- Required BESS P–Q Plot: Shows a scatter plot of the required BESS active and reactive power for each scenario. Green circles represent the calculated BESS requirements.
Both plots include grid lines, axis labels, and scenario name annotations for easy identification.
Algorithm Details
The sizing algorithm implements a proportional controller with the following characteristics:
- Initial Guess:
initial_p = -target_p_mw × 1.05andinitial_q = -target_q_mvar × 1.05. The negative sign accounts for the fact that BESS must discharge (negative P from BESS perspective) to supply positive power at POC, and the 1.05 factor accounts for losses. - Control Loop: Uses proportional control with damping factor of 0.5 to prevent oscillations:
delta_p = -kp_p × error_p × dampingdelta_q = -kp_q × error_q × damping
- Sign Convention:
- At POC: Positive P = consumption from grid, Negative P = generation to grid
- For BESS: Negative P = discharging (generation), Positive P = charging (consumption)
- Convergence: Algorithm converges when
|error_p| < toleranceAND|error_q| < tolerance
Limitations and Considerations
Important Notes:
- The algorithm may not converge if the target P/Q values are outside the BESS capability limits
- Network losses are automatically accounted for in the calculation
- For time-series analysis (state-of-charge tracking), additional energy capacity parameters are required
- This sizing calculation is for steady-state power flow and does not consider dynamic behavior
- If convergence fails, try increasing max iterations, adjusting proportional gains, or checking if targets are feasible
Technical References
Based on: pandapower control framework with custom BESS control controller implementation.
Algorithm Type: Iterative proportional control with Newton-Raphson power flow solver.
Documentation References: 📘 pandapower Control Documentation 📘 pandapower Storage Element
Elements
Use this catalog to see which palette elements work with pandapower and OpenDSS. Click a name to open its parameter reference. Build the diagram first, then run a study from Simulation.
- Available — The element maps to a native object in that engine.
- Indirect — No native object; similar behaviour is possible with other elements (see the note in parentheses).
- Not available — That engine cannot represent this element. Electrisim warns if such elements are on the diagram when you pick that engine.
| Element | Pandapower | OpenDSS |
|---|---|---|
| Bus | ✅ Available | ✅ Available |
| Line | ✅ Available | ✅ Available |
| Load | ✅ Available | ✅ Available |
| Generator | ✅ Available | ✅ Available |
| Static Generator | ✅ Available | 🟡 no direct element (can be implemented by setting the Generator parameters) |
| Wind Turbine | ✅ Available (as Static Generator / sgen; P from power curve) | ✅ Available (as Generator; P from power curve) |
| Wind Turbine Controller (steady-state) | ✅ Available (Pref for load flow) | ✅ Available (Pref for load flow; not an OpenDSS control object) |
| Wind Turbine Controller (dynamic) | ✅ Stored for time-domain (not applied in snapshot LF) | ✅ Stored for time-domain (not applied in snapshot LF) |
| Park Controller (steady-state) | ✅ Available (station Q/V/PF/tanφ via BinarySearchControl) | ❌ Not Available |
| RegControl | ❌ Not Available | ✅ Available |
| CapControl | ❌ Not Available | ✅ Available |
| StorageController | ❌ Not Available | ✅ Available |
| Asymmetric Static Generator | ✅ Available | 🟡 no direct element (can be implemented by setting the Generator parameters) |
| External Grid | ✅ Available | ✅ Available (Vsource) |
| Transformer | ✅ Available | ✅ Available |
| Capacitor (shunt capacitor bank) | ✅ Available | ✅ Available |
| Shunt Reactor | ✅ Available | ✅ Available (Reactor) |
| Impedance | ✅ Available | ✅ Available |
| Storage | ✅ Available | ✅ Available |
| Protection relay | 🟡 annotation only (visual element, not simulated) | 🟡 annotation only (visual element, not simulated) |
| Fuse | 🟡 annotation only (visual element, not simulated) | 🟡 annotation only (visual element, not simulated) |
| Thyristor-Controlled Series Capacitor (TCSC) | ✅ Available | ❌ Not Available |
| Switch | ✅ Available | ✅ Available |
| Three Winding Transformer | ✅ Available | ✅ Available (Transformer with 3 windings) |
| Asymmetric Load | ✅ Available | 🟡 no direct element (can be implemented by setting the parameters of Load) |
| Motor | ✅ Available | 🟡 no direct element (can be implemented by setting the parameters of Load) |
| Ward | ✅ Available | 🟡 no direct element (can be implemented by modelling PQ+shunt) |
| Extended Ward | ✅ Available | 🟡 no direct element (can be implemented by modelling PV+PQ+shunt) |
| DC line | ✅ Available | ❌ Not Available |
| Voltage Source Converter (VSC) | ✅ Available | ❌ Not Available |
| Static Var Compensator (SVC) | ✅ Available | 🟡 no direct element (can be implemented by modelling Capacitor + Reactor+CapControl) |
| Static Synchronous Compensator STATCOM (SSC) | ✅ Available | 🟡 no direct element (can be implemented by modelling Generator+InvControl) |
| DC Bus | ✅ Available | ❌ Not Available |
| Load DC | ✅ Available | ❌ Not Available |
| Source DC | ✅ Available | ❌ Not Available |
| Back-to-Back Voltage Source Converter (B2B VSC) | ✅ Available | ❌ Not Available |
| BESS AC Block (composite) | 🟡 composite (Bus + Transformer + Storage — all native in pandapower) | 🟡 composite (Bus + Transformer + Storage — all native in OpenDSS) |
| Load 1ph | ❌ Not Available | ✅ Available |
| Source 1ph | ❌ Not Available | ✅ Available |
| Generator 1ph | ❌ Not Available | ✅ Available |
| Line 1ph | ❌ Not Available | ✅ Available |
| Transformer 1ph | ❌ Not Available | ✅ Available |
| PVSystem | 🟡 no direct element (can be approximated using a Static Generator) | ✅ Available |
| Unified power flow controller (UPFC) | 🟡 no direct element (can be implemented by modelling SSC + VSC or DC line) | 🟡 no direct element (approximate with VSC, Generator+InvControl, or series elements) |
Below you will find detailed information about each element, including all configurable parameters, their data types, value ranges, the corresponding OpenDSS property names, and which simulation types use each parameter.
Element Details
This is the parameter lexicon: names match the Electrisim element dialogs. For how to run a study, go back to Simulation. In the parameter tables, the Simulation Types column uses the following abbreviations:
Simulation type abbreviations:
- PF — Power Flow (Load Flow)
- SC — Short Circuit
- OPF — Optimal Power Flow
- MS — Motor Starting
- Harmonics — Harmonic Analysis (OpenDSS)
Parameter importance:
- 🔴 Required — must be specified for the simulation to run
- 🟡 Recommended — important for accurate results
- 🟢 Optional — enhances functionality but has sensible defaults
Bus
pandapower OpenDSS
A bus is a connection point (node / busbar). Every other element must attach to at least one bus. Load-flow results show voltage magnitude and angle here — so set rated voltage (vn_kv) correctly before you run anything.
Documentation References: 📘 pandapower Bus 📗 OpenDSS Documentation
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | User-defined name for the bus (optional). Used in result summaries and tables (e.g. OpenDSS harmonic analysis) so you can identify nodes by project labels, not only internal IDs. | string | - | Bus name | 🔴 PF, SC, OPF, Harmonics |
| vn_kv | Rated voltage in kV | float | > 0 | kVBase | 🔴 PF, SC, OPF |
| type | Bus type (b = busbar, n = node, m = muff) | string | b, n, m | - | 🟡 PF, SC, OPF |
| max_vm_pu | Maximum voltage magnitude in per unit — enforced as net.bus.max_vm_pu in AC OPF (pandapower). Set on the Bus dialog OPF tab; new buses default to 1.1 p.u. |
float | > 0 | - | 🔴 OPF |
| min_vm_pu | Minimum voltage magnitude in per unit — enforced as net.bus.min_vm_pu in AC OPF (pandapower). Set on the Bus dialog OPF tab; new buses default to 0.9 p.u. |
float | > 0 | - | 🔴 OPF |
| in_service | Specifies if the bus is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
OPF note: Bus min_vm_pu / max_vm_pu are sent to the pandapower backend with each study. If limits are missing or inconsistent (e.g. max ≤ min) on a bus, Electrisim substitutes a wide 0.8–1.2 p.u. band for that bus only so AC OPF can converge on stressed networks.
Line
pandapower OpenDSS
Draw a Line as an edge between two buses (it is not a palette shape). Enter length and impedance, or keep the defaults for a first test. Use this for cables and overhead lines; use Impedance when you only have R and X between two buses.
UI defaults on drop: length_km 1, type cs (cable), endtemp_degree 250 °C, zero-sequence r0_ohm_per_km/x0_ohm_per_km 0.1 Ω/km, parallel 1, df 1.
Documentation References: 📘 pandapower Line 📗 OpenDSS Line
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the line | string | - | name | 🔴 PF, SC, OPF |
| from_bus | Starting bus | integer | - | Bus1 | 🔴 PF, SC, OPF |
| to_bus | Ending bus | integer | - | Bus2 | 🔴 PF, SC, OPF |
| length_km | Line length in kilometers | float | > 0 | Length | 🔴 PF, SC, OPF |
| r_ohm_per_km | Resistance per kilometer (Ω/km) | float | ≥ 0 | R1 | 🔴 PF, SC, OPF |
| x_ohm_per_km | Reactance per kilometer (Ω/km) | float | ≥ 0 | X1 | 🔴 PF, SC, OPF |
| c_nf_per_km | Capacitance per kilometer (nF/km) | float | ≥ 0 | C1 | 🟡 PF, SC, OPF |
| g_us_per_km | Dielectric conductance per kilometer (μS/km) | float | ≥ 0 | - | 🟡 PF, SC, OPF |
| max_i_ka | Maximum thermal current (kA) | float | > 0 | normamps | 🔴 PF, OPF |
| r0_ohm_per_km | Zero-sequence resistance per kilometer (Ω/km) | float | ≥ 0 | R0 | 🟡 SC |
| x0_ohm_per_km | Zero-sequence reactance per kilometer (Ω/km) | float | ≥ 0 | X0 | 🟡 SC |
| c0_nf_per_km | Zero-sequence capacitance per kilometer (nF/km) | float | ≥ 0 | C0 | 🟡 SC |
| type | Type of line ("ol" for overhead, "cs" for cable) | string | ol, cs | - | 🟡 PF, SC, OPF |
| parallel | Number of parallel lines | integer | ≥ 1 | - | 🟢 PF, SC, OPF |
| df | Derating factor (applies to max_i_ka) | float | 0-1 | - | 🟢 PF, SC, OPF |
| max_loading_percent | Optional maximum thermal loading in percent of rating for AC OPF only (pandapower line.max_loading_percent). Use 0 or leave unset for no OPF thermal limit on this branch. Edit on the line dialog OPF tab or in the Component Data grid (Line tab). |
float | ≥ 0 | - | 🔴 OPF |
| endtemp_degree | End temperature of the line in °C (used for temperature-dependent resistance correction in short-circuit calculations) | float | > 0 | - | 🟢 SC |
| in_service | Specifies if the line is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
Load
pandapower OpenDSS
A load is demand at a bus (P and Q). Use constant power unless you have a reason for constant current or impedance. This is the usual way to model customers, motors-as-PQ, and plant auxiliaries.
Documentation References: 📘 pandapower Load 📗 OpenDSS Load
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the load | string | - | name | 🔴 PF, SC, OPF |
| bus | Bus the load is connected to | integer | - | Bus1 | 🔴 PF, SC, OPF |
| p_mw | Active power consumption in MW | float | - | kW | 🔴 PF, SC, OPF |
| q_mvar | Reactive power consumption in Mvar | float | - | kvar | 🟡 PF, SC, OPF |
| const_z_percent | Percentage of constant impedance load | float | 0-100 | %Z | 🟢 PF, SC, OPF |
| const_i_percent | Percentage of constant current load | float | 0-100 | %I | 🟢 PF, SC, OPF |
| sn_mva | Rated apparent power in MVA | float | > 0 | kVA | 🟡 PF, SC, OPF |
| scaling | Scaling factor for power values | float | > 0 | - | 🟡 PF, SC, OPF |
| type | Connection type: "wye" (wye/star) or "delta" | string | wye, delta | conn | 🟡 PF, SC, OPF |
| in_service | Specifies if the load is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
Harmonic Parameters (OpenDSS):
These parameters are used when running harmonic analysis with the OpenDSS engine. They define how the load injects harmonic currents and how the harmonic-frequency impedance of the load is represented. See also the Harmonic Analysis section for spectrum modes and workflow.
| Parameter | Description | Type | Value Range | OpenDSS Property | Simulation Types |
|---|---|---|---|---|---|
| spectrum | Harmonic current spectrum selection from the Harmonic tab: Default uses OpenDSS built-in defaultload; Linear uses a defined decaying spectrum (approximately 100/h % magnitude on odd orders 3,5,7,11,13); Custom uses spectrum_csv; None disables harmonic injection from this load. |
string | defaultload, Linear, custom, none | spectrum | 🟡 Harmonics |
| spectrum_csv | One row per harmonic: order, magnitude_percent, angle_deg (comma-separated). Used when spectrum mode is Custom. Magnitudes are in percent of fundamental current. |
string (CSV) | - | New Spectrum.* + spectrum | 🟢 Harmonics |
| pctSeriesRL | Percent of load modeled as series R–L branch for harmonics (OpenDSS %SeriesRL). 100% is typical for many studies; lower values emphasize the parallel branch. See EPRI Harmonics Load Modeling. |
float | 0–100 | %SeriesRL | 🟡 Harmonics |
| conn | Wye or delta connection for the harmonic load model (can differ from the load flow connection type type when you need a specific harmonic representation). |
string | wye, delta | conn | 🟡 Harmonics |
| puXharm | Per-unit reactance of the load at harmonic frequency when the series R–L model is used; leave 0 to let OpenDSS derive behavior from %SeriesRL and XRharm. |
float | ≥ 0 | puXharm | 🟢 Harmonics |
| XRharm | X/R ratio for the harmonic branch (often taken in the 3–7 range for equipment studies). | float | > 0 | XRharm | 🟢 Harmonics |
Motor
pandapower OpenDSS
An asynchronous motor. Use it when you need locked-rotor inrush for Motor Starting or a motor contribution in short-circuit. In OpenDSS it is mapped through a Load equivalent, not a native motor object.
Documentation References: 📘 pandapower Motor 📗 OpenDSS Motor
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the motor | string | - | name | 🔴 PF, SC, OPF |
| bus | Bus the motor is connected to | integer | - | Bus1 | 🔴 PF, SC, OPF |
| pn_mech_mw | Rated mechanical power in MW | float | > 0 | HP (converted) | 🔴 PF, SC, OPF |
| vn_kv | Rated voltage in kV | float | > 0 | kV | 🔴 PF, SC, OPF |
| cos_phi | Power factor (lagging) | float | 0-1 | pf | 🟡 PF, SC, OPF |
| efficiency_percent | Efficiency in percent at current loading | float | 0-100 | %Eff | 🟡 PF, SC, OPF |
| efficiency_n_percent | Rated efficiency in percent at nominal conditions | float | 0-100 | %EffRated | 🟢 PF, SC, OPF |
| loading_percent | Current loading in percent of rated power | float | 0-100 | %LoadMW | 🟡 PF, SC, OPF |
| scaling | Scaling factor for power | float | > 0 | - | 🟡 PF, SC, OPF |
| lrc_pu | Locked rotor current in per unit for short-circuit and motor starting | float | > 0 | LRC | 🔴 SC, MS |
| rx | R/X ratio for short-circuit / locked-rotor impedance | float | ≥ 0 | R/X | 🔴 SC, MS |
| Hm | Inertia constant (s) for dynamic motor starting (ANDES Motor3) | float | > 0 | - | 🟢 MS (dynamic) |
| tm_c1 / tm_c2 / tm_c3 | Mechanical load torque coefficients for dynamic starting | float | - | - | 🟢 MS (dynamic) |
| in_service | Specifies if the motor is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF, MS |
Asymmetric Load
pandapower OpenDSS
Asymmetric loads allow modeling of unbalanced three-phase loads where each phase can have different power consumption. This is particularly useful for distribution network analysis.
Documentation References: 📘 pandapower Asymmetric Load 📗 OpenDSS Load
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the asymmetric load | string | - | name | 🔴 PF, SC, OPF |
| bus | Bus the load is connected to | integer | - | Bus1 | 🔴 PF, SC, OPF |
| p_a_mw, p_b_mw, p_c_mw | Active power per phase in MW (phases A, B, C) | float | - | kW (per phase) | 🔴 PF, SC, OPF |
| q_a_mvar, q_b_mvar, q_c_mvar | Reactive power per phase in Mvar (phases A, B, C) | float | - | kvar (per phase) | 🟡 PF, SC, OPF |
| sn_mva | Rated apparent power in MVA | float | > 0 | kVA | 🟡 PF, SC, OPF |
| scaling | Scaling factor for power values | float | > 0 | - | 🟡 PF, SC, OPF |
| type | Connection type (wye or delta) | string | wye, delta | conn | 🟡 PF, SC, OPF |
| in_service | Specifies if the load is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
Static Generator
pandapower OpenDSS
Static generators represent generators with static (PQ) behavior — for example photovoltaic systems or small generation units. For wind turbines with an editable P–v power curve, prefer the dedicated Wind Turbine element. In OpenDSS, a static generator is a Generator with Model=1 (constant kW and kvar), not a voltage-controlled Model=3 bus. Both static generators and wind turbines can be selected in Grid Code Compliance (P-Q & U-Q).
Documentation References: 📘 pandapower Static Generator 📗 OpenDSS Generator
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the static generator | string | - | name | 🔴 PF, SC, OPF |
| bus | Bus the generator is connected to | integer | - | Bus1 | 🔴 PF, SC, OPF |
| p_mw | Active power generation in MW | float | - | kW | 🔴 PF, SC, OPF |
| q_mvar | Reactive power generation in Mvar | float | - | kvar | 🟡 PF, SC, OPF |
| sn_mva | Rated apparent power in MVA | float | > 0 | kVA | 🟡 PF, SC, OPF |
| type | Type of generator (e.g., PV, wind, CHP) | string | - | - | 🟡 PF, SC, OPF |
| controllable | Whether the generator is controllable | boolean | True/False | - | 🔴 OPF |
| scaling | Scaling factor for power | float | > 0 | - | 🟡 PF, SC, OPF |
| k | Factor for short-circuit calculation (typically 1.1) | float | > 0 | - | 🟡 SC |
| rx | R/X ratio for short-circuit impedance | float | ≥ 0 | R/X | 🔴 SC |
| generator_type | Generator type for short-circuit (current_source, async, doubly_fed) | string | - | - | 🟡 SC |
| lrc_pu | Locked rotor current in per unit for short-circuit | float | > 0 | LRC | 🟡 SC |
| max_ik_ka | Maximum short-circuit current in kA | float | > 0 | - | 🟡 SC |
| current_source | Whether generator acts as current source for short-circuit | boolean | True/False | - | 🟡 SC |
| kappa | Factor for peak short-circuit current (typically 1.5) | float | > 0 | - | 🟡 SC |
| in_service | Specifies if the generator is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
Wind Turbine
pandapower OpenDSS
A dedicated wind generation element based on the Static Generator model. Active power for load flow is always derived from a wind power curve P(v) and the configured wind speed — you do not set p_mw independently. Changing wind speed (in the element dialog or in Component Data) updates P [MW] immediately from the curve.
How load flow uses it: Electrisim interpolates the curve at the current wind speed (linear segments or constant/stepwise between knots) and sends the resulting p_mw to the engine. In pandapower this is a Static Generator (sgen). In OpenDSS it is a Generator with Model=1 (constant kW and kvar — a PQ injection, matching pandapower sgen), not Model=3 (constant kW / constant kV). Vminpu is kept wide so collector undervoltage does not convert the unit to constant-Z and collapse P. Reactive power and other Static Generator parameters (ratings, short-circuit data, ANDES dynamics kind, etc.) work the same way as on a Static Generator. Wind turbines can be selected together with static generators in Grid Code Compliance (P-Q & U-Q).
Do you need a Wind Turbine Controller? For a normal snapshot load flow, no — the turbine already computes P from its own curve and speed. Use a Wind Turbine Controller (steady-state) only if you want a separate Pref override (controller wind speed or controller curve). Use a Wind Turbine Controller (dynamic) for averaging / gradient limiting in time-domain studies.
Palette: Sources (or Electrical abstract sources) → Wind Turbine. A worked example is File → New → offshore wind farm 1 GW (rev 6; 100 km export).
Documentation References: 📘 pandapower Static Generator 📗 OpenDSS Generator
Wind-specific parameters
In addition to the usual Static Generator fields, the Wind Turbine dialog provides:
| Parameter | Description | Type | Value Range | Simulation Types |
|---|---|---|---|---|
| wind_speed_ms | Hub-height wind speed used with the power curve to set active power. Editing this value recalculates p_mw from the curve in the Power tab and in Component Data. |
float | ≥ 0 m/s | 🔴 PF |
| wind_power_curve_json | Editable P(v) table (wind speed [m/s] vs active power [MW]), edited via table + live plot in the Power tab. Built-in templates: 2.5 MW onshore, 3.3 MW onshore, 15 MW offshore (replace with OEM data for project work). | JSON array | points {v_ms, p_mw} |
🔴 PF |
| wind_curve_approx | Interpolation between table knots | string | linear or constant |
🔴 PF |
| p_mw | Active power from the curve at wind_speed_ms (read-only; updated automatically when speed, curve, or interpolation changes; also overwritten before each load flow) |
float | — | 🔴 PF, SC, OPF |
| q_setpoint_mode | Load-flow Q: manual uses q_mvar; capacitive_max uses Qmax from the capability curve (overexcited / injects Q); inductive_max uses Qmin (underexcited / absorbs Q). Requires Use Q capability curve. |
string | manual, capacitive_max, inductive_max |
🔴 PF |
Default dynamics plant kind is WIND for ANDES studies when renewable/IBR models are used.
Q capability (voltage-dependent, P and U)
The Wind Turbine Q capability tab defines reactive limits Qmin/Qmax as a function of both active power P and terminal voltage U (voltage-dependent Q limits). Enable Use Q capability curve so load flow applies the limits (pandapower enforce_q_lims and optional capacitive/inductive Q setpoint).
Configuration: choose limits in p.u. of Sn or MW/Mvar, optionally Consider voltage dependent limits, and scale min/max with the Operational Limits factors (%). Use a built-in template (below) or paste OEM matrices.
Axes: rows are voltage levels [p.u.]; columns are P-setpoints (p.u. or MW). Two matrices hold Qmax (overexcited / capacitive — the plant injects Q) and Qmin (underexcited / inductive — the plant absorbs Q) at every (U, P) knot. The P–Q plot shows one envelope per voltage.
Load flow: the engine bilinearly interpolates Q(P, U). Before bus voltages exist, U = 1.0 p.u. is used. After a voltage solution (and in the Park Controller), the terminal vm_pu is used. A flattened U=1.0 slice is also stored as the 1D P–Q table for pandapower’s native characteristic.
Built-in Q capability templates (stored in p.u. of Sn; confirm against OEM data):
- FRC WTG P–U (voltage-dependent) — typical Type IV fully rated converter: Q vs P and U. Default for new turbines (~2.5 MW class: about ±0.44 p.u. Q at U=1.0 and moderate P, tapering toward rated P and at high/low voltage).
- ±0.95 PF vs P (1D, U = 1.0 p.u.) — |Q| ≈ P·tan(arccos(0.95)) at each P; single voltage row. Same shape as the Static Generator 15 MW template, scaled to this turbine Sn.
- 15 MW offshore 1·Un chart (1D) — digitized manufacturer-style P–Q envelope at 1.0 p.u. voltage (asymmetric import/export).
Asymmetric Static Generator
pandapower OpenDSS
Asymmetric static generators allow modeling of unbalanced generation where each phase can produce different power levels.
Documentation References: 📘 pandapower Asymmetric Static Generator 📗 OpenDSS Generator
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the asymmetric generator | string | - | name | 🔴 PF, SC, OPF |
| bus | Bus the generator is connected to | integer | - | Bus1 | 🔴 PF, SC, OPF |
| p_a_mw, p_b_mw, p_c_mw | Active power per phase in MW (phases A, B, C) | float | - | kW (per phase) | 🔴 PF, SC, OPF |
| q_a_mvar, q_b_mvar, q_c_mvar | Reactive power per phase in Mvar (phases A, B, C) | float | - | kvar (per phase) | 🟡 PF, SC, OPF |
| type | Connection type (wye or delta) | string | wye, delta | conn | 🟡 PF, SC, OPF |
| in_service | Specifies if the generator is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
External Grid
pandapower OpenDSS
The external grid represents the connection to a higher voltage level or an infinite bus. It serves as the slack bus in power flow calculations and provides the voltage reference.
Documentation References: 📘 pandapower External Grid 📗 OpenDSS Vsource
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the external grid | string | - | name | 🔴 PF, SC, OPF |
| bus | Bus the external grid is connected to | integer | - | Bus1 | 🔴 PF, SC, OPF |
| vm_pu | Voltage magnitude setpoint in per unit | float | > 0 | pu (Vsource) | 🔴 PF, SC, OPF |
| va_degree | Voltage angle in degrees | float | -360 to 360 | angle | 🟡 PF, SC, OPF |
| s_sc_max_mva | Maximum short-circuit apparent power in MVA | float | > 0 | MVAsc3 | 🔴 SC |
| s_sc_min_mva | Minimum short-circuit apparent power in MVA | float | > 0 | MVAsc1 | 🟡 SC |
| rx_max | Maximum R/X ratio for positive sequence short-circuit | float | ≥ 0 | R1/X1 | 🔴 SC |
| rx_min | Minimum R/X ratio for positive sequence short-circuit | float | ≥ 0 | R1/X1 | 🟡 SC |
| r0x0_max | Maximum R0/X0 ratio for zero sequence short-circuit | float | ≥ 0 | R0/X0 | 🟡 SC |
| x0x_max | Maximum X0/X ratio (zero to positive sequence reactance) | float | ≥ 0 | X0/X1 | 🟡 SC |
| spectrum | Harmonic voltage spectrum for OpenDSS harmonic analysis (e.g., "defaultvsource") | string | defaultvsource, none, custom | spectrum (Vsource) | 🟡 Harmonics |
| cost_per_unit_by_currency | Cost per unit for economic analysis (in selected currency) | float | ≥ 0 | - | 🟢 Economic |
| in_service | Specifies if the external grid is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
Transformer
pandapower OpenDSS
Transformers connect different voltage levels in the network. They can be equipped with tap changers for voltage regulation.
Schematic Labels: Each transformer terminal can display a custom label on the canvas symbol (e.g. "HV", "LV"). These labels are purely cosmetic — they help identify which winding connects to which bus on the schematic, but do not affect simulation parameters or solver data. Edit them in the Schematic tab of the transformer dialog. Changes appear immediately on the canvas.
Documentation References: 📘 pandapower Transformer 📗 OpenDSS Transformer
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the transformer | string | - | name | 🔴 PF, SC, OPF |
| term_label_0 | Schematic label for port 0 (HV bus / first connection). Display only — shown on the canvas symbol near the HV terminal pin. Does not affect simulation. | string | any text | - | - |
| term_label_1 | Schematic label for port 1 (LV bus / second connection). Display only — shown on the canvas symbol near the LV terminal pin. Does not affect simulation. | string | any text | - | - |
| hv_bus | High voltage bus | integer | - | Bus (winding 1) | 🔴 PF, SC, OPF |
| lv_bus | Low voltage bus | integer | - | Bus (winding 2) | 🔴 PF, SC, OPF |
| sn_mva | Rated apparent power in MVA | float | > 0 | kVA | 🔴 PF, SC, OPF |
| vn_hv_kv | Rated high voltage in kV | float | > 0 | kV (winding 1) | 🔴 PF, SC, OPF |
| vn_lv_kv | Rated low voltage in kV | float | > 0 | kV (winding 2) | 🔴 PF, SC, OPF |
| vk_percent | Short-circuit voltage in percent | float | > 0 | %Z | 🔴 PF, SC, OPF |
| vkr_percent | Real part of short-circuit voltage in percent | float | ≥ 0 | %R | 🔴 PF, SC, OPF |
| pfe_kw | Iron losses in kW | float | ≥ 0 | %noload | 🟡 PF, SC, OPF |
| i0_percent | No-load current in percent | float | ≥ 0 | %imag | 🟡 PF, SC, OPF |
| parallel | Number of parallel transformers | integer | ≥ 1 | - | 🟢 PF, SC, OPF |
| shift_degree | Phase shift angle in degrees | float | -360 to 360 | Wdg (angle) | 🟢 PF, SC, OPF |
| vector_group | Vector group designation (e.g., "Dyn11", "Yyn0"). App default: Dyn |
string | - | Wdg (conn) | 🟢 PF, SC, OPF |
| tap_side | Side with tap changer ("hv" or "lv") | string | hv, lv | Wdg (tap side) | 🔴 OPF |
| tap_pos | Current tap position | integer | - | tap | 🟡 OPF |
| tap_neutral | Neutral tap position | integer | - | - | 🟢 OPF |
| tap_min | Minimum tap position | integer | - | MinTap | 🔴 OPF |
| tap_max | Maximum tap position | integer | - | MaxTap | 🔴 OPF |
| tap_step_percent | Voltage change per tap step in percent | float | - | %RperTap | 🔴 OPF |
| tap_step_degree | Phase angle change per tap step in degrees | float | - | - | 🟢 OPF |
| tap_changer_type | Type of tap changer: "Ratio" (default) adjusts voltage magnitude only, "Symmetrical" distributes tap change to both windings (new in pandapower 3.0+) | string | Ratio, Symmetrical | - | 🟢 PF, SC, OPF |
| discrete_tap_control | Enable Discrete Tap Control for this transformer (requires Include controller on the Pandapower Load Flow dialog) | boolean | True/False | - | 🟢 PF |
| control_side | Which bus voltage is monitored by the controller ("lv" or "hv") | string | lv, hv | lv | 🟢 PF |
| vm_lower_pu | Lower voltage limit for Discrete Tap Control | float | 0.9 - 1.1 (typical) | 0.99 | 🟢 PF |
| vm_upper_pu | Upper voltage limit for Discrete Tap Control | float | 0.9 - 1.1 (typical) | 1.01 | 🟢 PF |
| vk0_percent | Zero-sequence short-circuit voltage in percent | float | > 0 | %Z0 | 🟡 SC |
| vkr0_percent | Real part of zero-sequence short-circuit voltage in percent | float | ≥ 0 | %R0 | 🟡 SC |
| mag0_percent | Zero-sequence magnetizing current in percent | float | ≥ 0 | - | 🟢 SC |
| mag0_rx | Zero-sequence magnetizing R/X ratio | float | ≥ 0 | - | 🟢 SC |
| si0_hv_partial | Zero-sequence short-circuit impedance distribution (HV side) | float | 0-1 | - | 🟡 SC |
| max_loading_percent | Optional maximum loading (% of rating) for AC OPF (pandapower trafo.max_loading_percent). 0 = no limit. OPF tab. |
float | ≥ 0 | - | 🔴 OPF |
| in_service | Specifies if the transformer is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
Three Winding Transformer
pandapower OpenDSS
Three winding transformers have three separate windings, typically connecting three different voltage levels at one location.
Schematic Labels: Each of the three terminals can display a custom label on the canvas symbol (e.g. "HV", "MV", "LV"). These labels are purely cosmetic — they help identify which winding connects to which bus on the schematic, but do not affect simulation parameters or solver data. Edit them in the Schematic tab of the transformer dialog. Changes appear immediately on the canvas.
For the solver, Electrisim maps the three connected buses to HV / MV / LV by bus voltage (vn_kv): highest, middle, then lowest. If two buses share the same voltage, the original connection order is used as a tie-break so the mapping stays stable between runs.
Documentation References: 📘 pandapower Three Winding Transformer 📗 OpenDSS Transformer
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types | Dialog tab |
|---|---|---|---|---|---|---|
| name | Name of the three winding transformer | string | - | name | 🔴 PF, SC, OPF | Load Flow |
| term_label_0 | Schematic label for port 0 (HV bus / first connection). Display only — shown on the canvas symbol near the HV terminal pin. Does not affect simulation. | string | any text | - | - | Schematic |
| term_label_1 | Schematic label for port 1 (MV bus / second connection). Display only — shown on the canvas symbol near the MV terminal pin. Does not affect simulation. | string | any text | - | - | Schematic |
| term_label_2 | Schematic label for port 2 (LV bus / third connection). Display only — shown on the canvas symbol near the LV terminal pin. Does not affect simulation. | string | any text | - | - | Schematic |
| hv_bus | High voltage bus | integer | - | - | 🔴 PF, SC, OPF | |
| mv_bus | Medium voltage bus | integer | - | - | 🔴 PF, SC, OPF | |
| lv_bus | Low voltage bus | integer | - | - | 🔴 PF, SC, OPF | |
| sn_hv_mva, sn_mv_mva, sn_lv_mva | Rated power per winding in MVA | float | > 0 | - | 🔴 PF, SC, OPF | |
| vn_hv_kv, vn_mv_kv, vn_lv_kv | Rated voltage per winding in kV | float | > 0 | - | 🔴 PF, SC, OPF | |
| vk_hv_percent, vk_mv_percent, vk_lv_percent | Short-circuit voltages in percent | float | > 0 | %Z (Wdg 1-2, 2-3, 3-1) | 🔴 PF, SC, OPF | |
| vkr_hv_percent, vkr_mv_percent, vkr_lv_percent | Real part of short-circuit voltages in percent | float | ≥ 0 | %R (Wdg 1-2, 2-3, 3-1) | 🔴 PF, SC, OPF | |
| pfe_kw | Iron losses in kW | float | ≥ 0 | %noload | 🟡 PF, SC, OPF | |
| i0_percent | No-load current in percent | float | ≥ 0 | %imag | 🟡 PF, SC, OPF | |
| shift_mv_degree | Phase shift angle for MV winding in degrees | float | -360 to 360 | Wdg 2 angle | 🟢 PF, SC, OPF | |
| shift_lv_degree | Phase shift angle for LV winding in degrees | float | -360 to 360 | Wdg 3 angle | 🟢 PF, SC, OPF | |
| vector_group | Vector group designation (e.g., "YNyn0d5"). App default: Dyn (2W); configure per winding for 3W |
string | - | Wdg (conn) | 🟢 PF, SC, OPF | |
| tap_side | Winding with tap changer ("hv", "mv", or "lv") | string | hv, mv, lv | Wdg (tap side) | 🔴 OPF | |
| tap_pos | Current tap position | integer | - | tap | 🟡 OPF | |
| tap_neutral | Neutral tap position | integer | - | - | 🟢 OPF | |
| tap_min | Minimum tap position | integer | - | MinTap | 🔴 OPF | |
| tap_max | Maximum tap position | integer | - | MaxTap | 🔴 OPF | |
| tap_step_percent | Voltage change per tap step in percent | float | - | %RperTap | 🔴 OPF | |
| tap_changer_type | Type of tap changer: "Ratio" (default) adjusts voltage magnitude only, "Symmetrical" distributes tap change to both windings (new in pandapower 3.0+) | string | Ratio, Symmetrical | - | 🟢 PF, SC, OPF | |
| vk0_hv_percent, vk0_mv_percent, vk0_lv_percent | Zero-sequence short-circuit voltages in percent | float | > 0 | %Z0 (Wdg pairs) | 🟡 SC | |
| vkr0_hv_percent, vkr0_mv_percent, vkr0_lv_percent | Real part of zero-sequence short-circuit voltages in percent | float | ≥ 0 | %R0 (Wdg pairs) | 🟡 SC | |
| max_loading_percent | Optional maximum loading (% of rating) for AC OPF (pandapower trafo3w.max_loading_percent). 0 = no limit. OPF tab. |
float | ≥ 0 | - | 🔴 OPF | |
| in_service | Specifies if the transformer is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
Generator
pandapower OpenDSS
Generators represent synchronous generators with dynamic behavior. They are typically used for large power plants and have voltage control capabilities.
Documentation References: 📘 pandapower Generator 📗 OpenDSS Generator
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the generator | string | - | name | 🔴 PF, SC, OPF |
| bus | Bus the generator is connected to | integer | - | Bus1 | 🔴 PF, SC, OPF |
| p_mw | Active power setpoint in MW | float | - | kW | 🔴 OPF |
| vm_pu | Voltage magnitude setpoint in per unit | float | > 0 | kV (model=3) | 🔴 PF, SC, OPF |
| sn_mva | Rated apparent power in MVA | float | > 0 | kVA | 🟡 PF, SC, OPF |
| min_q_mvar | Minimum reactive power in Mvar | float | - | kvarmin | 🔴 OPF |
| max_q_mvar | Maximum reactive power in Mvar | float | - | kvarmax | 🔴 OPF |
| scaling | Scaling factor for power | float | > 0 | - | 🟢 PF, SC, OPF |
| slack | Whether this is the slack generator | boolean | True/False | - | 🟡 PF, SC, OPF |
| vn_kv | Rated voltage in kV | float | > 0 | kV | 🔴 SC |
| xdss_pu | Subtransient reactance in per unit for short-circuit | float | > 0 | Xd'' | 🔴 SC |
| rdss_ohm | Subtransient resistance in Ohm for short-circuit | float | ≥ 0 | - | 🟡 SC |
| cos_phi | Rated power factor (cosine phi) | float | 0-1 | pf | 🟡 SC |
| pg_percent | Generator participation factor in percent for power dispatch | float | 0-100 | - | 🟡 OPF |
| in_service | Specifies if the generator is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
Harmonic Parameters (OpenDSS):
| Parameter | Description | Type | OpenDSS Property | Simulation Types |
|---|---|---|---|---|
| spectrum | Harmonic current injection spectrum name (e.g., "defaultgen") | string | spectrum | 🟡 Harmonics |
| Xdpp | Sub-transient reactance for harmonic model (per unit) | float | Xd'' | 🟢 Harmonics |
| XRdp | X/R ratio at sub-transient frequency for harmonic model | float | XRdp | 🟢 Harmonics |
| dyn_machine_model | ANDES machine model for TDS/EIG (GENROU or GENCLS). Empty numeric dynamics fields use textbook defaults. | string | — | 🔴 TDS, EIG |
| dyn_M / dyn_H | Inertia M (=2H) or H in seconds (Dynamics tab) | float | — | 🟡 TDS, EIG |
| dyn_xd, dyn_xq, dyn_xd1, … | Machine reactances and time constants (Dynamics tab). Leave empty for GENROU defaults. | float | — | 🟡 TDS, EIG |
| dyn_exciter_model | Exciter: EXDC2, SEXS, or NONE | string | — | 🟡 TDS, EIG |
| dyn_governor_model | Governor: TGOV1, IEEEG1, IEESGO, GAST, HYGOV, or NONE | string | — | 🟡 TDS, EIG |
| dyn_exciter_model | Exciter: EXDC2, SEXS, IEEEX1, ESDC2A, EXST1, ESST1A, AC8B, or NONE | string | — | 🟡 TDS, EIG |
| dyn_pss_model | PSS: IEEEST or NONE | string | — | 🟡 TDS, EIG |
Dynamics tab: Open the Generator dialog → Dynamics to set machine, exciter, governor, and optional PSS parameters for Transient Stability and Eigenvalue Analysis. If fields are left empty, Electrisim applies GENROU + EXDC2 + TGOV1 defaults and lists them in the results as defaults_applied. Static Generators support renewable plant kinds (IBR / Wind / PVD1 / ESD1) with REGCA1–REPCA1 and related ANDES models.
Slack concept by framework
The slack parameter in Electrisim applies to Pandapower load flow only. OpenDSS handles the slack bus differently:
| Framework | Slack concept |
|---|---|
| Pandapower | slack=True on a generator marks it as the slack bus |
| OpenDSS | Vsource is the slack; Generator has no slack flag |
For OpenDSS load flow, the slack role is handled by Vsource elements (External Grid), not by the Generator object.
Capacitor & Shunt Reactor
pandapower OpenDSS
Electrisim provides two separate shunt elements for reactive power compensation: a Capacitor (capacitor bank for leading reactive power) and a Shunt Reactor (inductive shunt for lagging reactive power). Both appear as separate components in the element palette and have dedicated dialog forms. Internally, both map to the pandapower shunt element, while in OpenDSS they map to the Capacitor and Reactor elements respectively.
Documentation References: 📘 pandapower Shunt 📗 OpenDSS Capacitor 📗 OpenDSS Reactor
Capacitor Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the capacitor | string | - | name | 🔴 PF, SC, OPF |
| bus | Bus the capacitor is connected to | integer | - | Bus1 | 🔴 PF, SC, OPF |
| q_mvar | Reactive power output in Mvar (positive = capacitive) | float | > 0 | kvar | 🔴 PF, SC, OPF |
| vn_kv | Rated voltage in kV | float | > 0 | kV | 🟡 PF, SC, OPF |
| loss_factor | Loss factor (tan delta) of the capacitor | float | ≥ 0 | - | 🟢 PF, SC, OPF |
| step | Current active step (for switched capacitor banks) | integer | ≥ 1 | numsteps | 🟡 PF, SC, OPF |
| max_step | Maximum number of steps in the capacitor bank | integer | ≥ 1 | numsteps | 🟢 PF, SC, OPF |
| in_service | Specifies if the capacitor is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
Shunt Reactor Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the shunt reactor | string | - | name | 🔴 PF, SC, OPF |
| bus | Bus the reactor is connected to | integer | - | Bus1 | 🔴 PF, SC, OPF |
| q_mvar | Reactive power in Mvar (negative = inductive/absorbing) | float | < 0 | kvar (Reactor) | 🔴 PF, SC, OPF |
| p_mw | Active power losses in MW (usually small) | float | ≥ 0 | - | 🟡 PF, SC, OPF |
| vn_kv | Rated voltage in kV | float | > 0 | kV | 🟡 PF, SC, OPF |
| in_service | Specifies if the reactor is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
| step | Current shunt step position (integer steps). Used with max_step and, when the characteristic table is off, scales the base P/Q from the Power tab. |
float / int | 0 … max_step |
— | 🟡 PF, SC, OPF |
| max_step | Maximum shunt step. Defines the upper range of valid steps; use with the characteristic table and with Fill steps 0…max step in the shunt dialog. | float / int | ≥ 0 | — | 🟡 PF, SC, OPF |
| step_dependency_table | If enabled, P and Q at v = 1.0 p.u. for each step come from the shunt characteristic table (not from a single P/Q times step). Sent to pandapower as step_dependency_table with a shunt_characteristic_table block. OpenDSS applies the same table when creating the Reactor. |
boolean | True/False | kvar at the selected step (Reactor) | 🟢 PF (pandapower and OpenDSS) |
| shunt_characteristic_table_json | JSON array of rows { "step", "p_mw", "q_mvar" }: reactive (and loss) shunt power at 1.0 p.u. for that step. Should include every step you use, typically 0 through max_step. Both engines use the same JSON. |
string (JSON) | — | — | 🟢 PF (pandapower and OpenDSS) |
| discrete_shunt_control | Move the shunt step so the bus voltage at the shunt tracks vm_set_pu. Pandapower uses DiscreteShuntController. OpenDSS iterates the same step table after each snapshot solve. For pandapower (and RPC), enable Shunt reactor tap changer under Include controller. |
boolean | True/False | — | 🟢 PF (pandapower controlled run; OpenDSS snapshot) |
| vm_set_pu | Voltage setpoint (p.u.) for discrete shunt control. | float | typ. 0.9–1.1 | — | 🟢 PF (pandapower and OpenDSS) |
| shunt_control_increment | How many step positions the controller may change per iteration. | integer | ≥ 1 | — | 🟢 PF (pandapower and OpenDSS) |
| shunt_control_tol | Voltage band (p.u.) around vm_set_pu where no action is taken. |
float | ≥ 0 | — | 🟢 PF (pandapower and OpenDSS) |
| shunt_reset_at_init | If set, the controller may reset the shunt step at init (pandapower reset_at_init). |
boolean | True/False | — | 🟢 PF (pandapower) |
| line_flow_step_control | Set shunt step from active-power bands on a reference line (variable shunt reactor / VSR). Enable Shunt reactor tap changer under Include controller so pandapower (and RPC) actually apply the lookup. OpenDSS snapshot load flow applies the same bands after the solve. | boolean | True/False | — | 🟢 PF (pandapower controlled run; OpenDSS snapshot) |
| line_flow_reference_line_id | Diagram cell of the line whose P is compared with the band table. | string (cell id) | — | — | 🟢 PF (pandapower and OpenDSS) |
| line_flow_step_table_json | JSON array of bands { "p_mw_min", "p_mw_max", "step" }. The last band includes the upper bound. Combined with line_flow_p_use_abs and line_flow_p_reference (p_from_mw or p_to_mw). |
string (JSON) | — | — | 🟢 PF (pandapower and OpenDSS) |
How shunt reactor parameters work together
The dialog is organised in three tabs. The relationship between “static” shunt data and “control” is:
- Power tab — base P and Q. Here you set
p_mwandq_mvaras the reference shunt power at 1.0 p.u. If you do not use a step characteristic table, the network model uses this pair together with step and max_step (equivalent shunt scaling with the step number). - Electrical tab —
vn_kv. Shunt equipment rating; it must be consistent with the bus you connect to. It does not, by itself, turn control on or off. - Control tab — steps and the optional table.
stepandmax_stepdefine the discrete positions of the shunt.max_stepis the top step index you model (e.g. if steps are 0, 1, …, N, setmax_step = N).- If Shunt characteristic table (step-dependent P/Q) is off, P and Q at the operating point follow the base values on the Power tab, combined with
step. - If that option is on, you must fill the table so each step has its own
p_mwandq_mvarat 1.0 p.u. Pandapower stores this asshunt_characteristic_table; OpenDSS applies the same rows to the Reactor. The dialog’s Fill steps 0…max step usesmax_stepto create empty rows you can complete.
- Control tab — discrete shunt (voltage) control. This is a different option from the characteristic table (you can enable either, both, or neither). The table defines what P and Q are at each
step; Discrete shunt control changesstepso the shunt bus voltage moves towardvm_set_pu. When both are on, the controller only updatesstep; the injections at that step still follow the table. For pandapower load flow and RPC, tick Shunt reactor tap changer under Include controller. OpenDSS snapshot load flow runs the same loop when the option is enabled on the shunt. - Control tab — Line P → shunt step. A separate lookup: the solver reads P on a reference line and sets
stepfrom the band table (typical VSR behaviour). This is also gated by Shunt reactor tap changer on pandapower / RPC; OpenDSS snapshot applies it after the solve.
Summary. Use the Power tab for a simple fixed or step-scaled shunt; add the characteristic table when each step has different P/Q at 1 p.u.; use discrete shunt control for a voltage target; use Line P → shunt step for flow-based VSR tap. If a table and a controller are both enabled, the table provides the per-step model and the controller selects the step. All of these are properties of the shunt on the single-line diagram; the pandapower load-flow or RPC dialog turns controller execution on or off for the run.
Impedance
pandapower OpenDSS
A branch between two buses defined only by R and X (not a physical line type). Use it for a coupling, a simplified equivalent, or a connection that is not a cable or overhead line.
Documentation References: 📘 pandapower Impedance 📗 OpenDSS Documentation
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the impedance | string | - | name | 🔴 PF, SC, OPF |
| from_bus | Starting bus | integer | - | Bus1 | 🔴 PF, SC, OPF |
| to_bus | Ending bus | integer | - | Bus2 | 🔴 PF, SC, OPF |
| rft_pu | Resistance in per unit | float | ≥ 0 | R (converted to ohms) | 🔴 PF, SC, OPF |
| xft_pu | Reactance in per unit | float | - | X (converted to ohms) | 🔴 PF, SC, OPF |
| sn_mva | Rated apparent power for per unit calculation in MVA | float | > 0 | - | 🟡 PF, SC, OPF |
| in_service | Specifies if the impedance is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
Ward
pandapower OpenDSS
A Ward equivalent stands in for a neighbouring network you do not want to draw in full: a constant-power plus constant-impedance injection at one bus. Prefer this over inventing dummy lines when you only have a reduced-network equivalent.
Documentation References: 📘 pandapower Ward 📗 OpenDSS Documentation
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the ward equivalent | string | - | - | 🔴 PF, SC, OPF |
| bus | Bus the ward is connected to | integer | - | - | 🔴 PF, SC, OPF |
| ps_mw | Active power of the constant power component in MW | float | - | PQ Load (kW) | 🔴 PF, SC, OPF |
| qs_mvar | Reactive power of the constant power component in Mvar | float | - | PQ Load (kvar) | 🔴 PF, SC, OPF |
| pz_mw | Active power of the constant impedance component in MW | float | - | Shunt (equiv.) | 🔴 PF, SC, OPF |
| qz_mvar | Reactive power of the constant impedance component in Mvar | float | - | Shunt (equiv.) | 🔴 PF, SC, OPF |
| in_service | Specifies if the ward is in service | boolean | True/False | - | 🟡 PF, SC, OPF |
Extended Ward
pandapower OpenDSS
Like a Ward equivalent, plus an internal bus and impedance so the voltage response of the reduced network is more accurate. Use it when a plain Ward model is too crude at the boundary bus.
Documentation References: 📘 pandapower Extended Ward 📗 OpenDSS Documentation
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the extended ward | string | - | - | 🔴 PF, SC, OPF |
| bus | External bus | integer | - | - | 🔴 PF, SC, OPF |
| ps_mw | Active power of constant power component in MW | float | - | PQ Load (kW) | 🔴 PF, SC, OPF |
| qs_mvar | Reactive power of constant power component in Mvar | float | - | PQ Load (kvar) | 🔴 PF, SC, OPF |
| pz_mw | Active power of impedance component in MW | float | - | Shunt (equiv.) | 🔴 PF, SC, OPF |
| qz_mvar | Reactive power of impedance component in Mvar | float | - | Shunt (equiv.) | 🔴 PF, SC, OPF |
| r_ohm | Internal resistance in Ohm | float | ≥ 0 | - | 🔴 PF, SC, OPF |
| x_ohm | Internal reactance in Ohm | float | - | - | 🔴 PF, SC, OPF |
| vm_pu | Internal bus voltage magnitude in per unit | float | > 0 | PV Gen (equiv.) | 🔴 PF, SC, OPF |
| in_service | Specifies if the extended ward is in service | boolean | True/False | - | 🟡 PF, SC, OPF |
Storage
pandapower OpenDSS
Storage elements represent battery energy storage systems (BESS) or other energy storage technologies that can both consume and generate power. Electrisim uses a unified Storage element that maps to both pandapower and OpenDSS. Parameters are organized in the dialog into five tabs: Power, Energy, Configuration, Optimization (OPF), and OpenDSS Parameters.
Documentation References: 📘 pandapower Storage 📗 OpenDSS Storage 📗 OpenDSS Storage Properties
Parameters (Power & Energy)
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the storage | string | - | name | 🔴 PF, OPF |
| bus | Bus the storage is connected to | integer | - | Bus1 | 🔴 PF, OPF |
| p_mw | Active power in MW (positive = charging/consuming, negative = discharging/generating). OpenDSS sign is converted automatically. | float | - | kW, kWRated (Storage) | 🔴 PF, OPF |
| q_mvar | Reactive power in Mvar (positive = absorbing, negative = supplying) | float | - | kvar (Storage) | 🟡 PF, OPF |
| max_e_mwh | Maximum energy capacity in MWh (rated storage capacity) | float | > 0 | kWhrated | 🔴 OPF |
| min_e_mwh | Minimum energy to keep in reserve (MWh). Maps to OpenDSS %reserve = (min_e_mwh / max_e_mwh) × 100. When min_e_mwh ≥ max_e_mwh, %reserve is not applied. | float | ≥ 0 | %reserve | 🔴 OPF |
| soc_percent | State of charge in percent (0–100) | float | 0-100 | %stored | 🟡 OPF |
Parameters (Configuration)
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| sn_mva | Nominal / inverter rating in MVA. Maps to OpenDSS kVA. Used as kWRated when p_mw = 0. | float | > 0 | kVA (Storage) | 🟡 PF, OPF |
| conn | Winding connection type (wye or delta) | string | wye, delta | conn | 🟡 PF (OpenDSS) |
| phases | Number of electrical phases (1–3) | integer | 1–3 | phases | 🟡 PF (OpenDSS) |
| scaling | Scaling factor for p_mw and q_mvar (pandapower only) | float | > 0 | - | 🟡 PF, OPF |
| type | Optional string to classify the storage (e.g., Li-Ion, Flow). Informational only. | string | - | - | 🟡 PF, OPF |
| in_service | Specifies if the storage is in service | boolean | True/False | enabled | 🟡 PF, OPF |
Parameters (Optimization – pandapower OPF)
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| controllable | Whether the storage is controllable by the Optimal Power Flow. Must be true to use OPF limits. | boolean | True/False | - | 🟡 OPF |
| max_p_mw | Maximum active power injection for OPF (MW) | float | - | - | 🟡 OPF |
| min_p_mw | Minimum active power injection for OPF (MW) | float | - | - | 🟡 OPF |
| max_q_mvar | Maximum reactive power injection for OPF (MVar) | float | - | - | 🟡 OPF |
| min_q_mvar | Minimum reactive power injection for OPF (MVar) | float | - | - | 🟡 OPF |
Parameters (OpenDSS-specific)
These parameters apply when using OpenDSS for load flow, harmonics, or time-series simulations. They control the built-in inverter model, dispatch logic, and losses.
| Parameter | Description | Type | Value Range | OpenDSS Property | Simulation Types |
|---|---|---|---|---|---|
| state | Initial operational state. Set automatically from p_mw sign when p_mw ≠ 0; use IDLING when p_mw = 0. | string | IDLING, CHARGING, DISCHARGING | State | 🟡 PF (OpenDSS) |
| disp_mode | Dispatch mode: DEFAULT (loadshape triggers), FOLLOW (output follows loadshape), EXTERNAL (StorageController), LOADLEVEL, PRICE. | string | DEFAULT, FOLLOW, EXTERNAL, LOADLEVEL, PRICE | DispMode | 🟡 PF (OpenDSS) |
| pct_charge | Charging rate as percent of rated kW. Default = 100. | float | 0–200 | %Charge | 🟡 PF (OpenDSS) |
| pct_discharge | Discharge rate as percent of rated kW. Default = 100. | float | 0–200 | %Discharge | 🟡 PF (OpenDSS) |
| pct_eff_charge | Charging efficiency (%). Default = 90. | float | 0–100 | %EffCharge | 🟡 PF (OpenDSS) |
| pct_eff_discharge | Discharging efficiency (%). Default = 90. Round-trip ≈ pct_eff_charge × pct_eff_discharge. | float | 0–100 | %EffDischarge | 🟡 PF (OpenDSS) |
| pct_idling_kw | Percent of rated kW consumed as active power while idling (auxiliary loads, cooling). Default = 1. | float | 0–100 | %IdlingkW | 🟡 PF (OpenDSS) |
| pct_idling_kvar | Percent of rated kW consumed as reactive power while idling. Default = 0. | float | 0–100 | %Idlingkvar | 🟡 PF (OpenDSS) |
| discharge_trigger | Loadshape level that triggers DISCHARGING. 0 = disabled. | float | 0–2 | DischargeTrigger | 🟡 PF (OpenDSS) |
| charge_trigger | Loadshape level below which CHARGING is triggered. 0 = disabled. | float | 0–2 | ChargeTrigger | 🟡 PF (OpenDSS) |
| time_charge_trig | Time of day (fractional hours, e.g. 2.0 = 2 AM) when storage automatically starts charging. -1 disables. Default = 2.0. | float | -1–24 | TimeChargeTrig | 🟡 PF (OpenDSS) |
| spectrum | Harmonic current injection spectrum for OpenDSS harmonic analysis. "default" is the built-in inverter spectrum. | string | default, defaultgen, defaultload, pwm6, none | spectrum | 🟡 Harmonics (OpenDSS) |
OpenDSS Implementation Notes
The following implementation details ensure consistent results between Pandapower and OpenDSS for storage elements:
- Power dispatch: Both
kWRated(inverter capacity) andkW(requested dispatch power) are set explicitly. The state (DISCHARGING/CHARGING/IDLING) is derived from the sign ofp_mw. - Reactive power convention: Pandapower uses load convention (positive = absorbing). OpenDSS Storage uses generator convention (positive = supplying). The conversion is applied automatically.
- Reserve handling: When
min_e_mwh≥max_e_mwh, the OpenDSS%reserveparameter is not set. This prevents blocking discharge in snapshot power flow when the reserve would otherwise lock 100% of stored energy. - Connection and phases: The
conn(wye/delta) andphases(1–3) parameters are passed to OpenDSS for correct modeling of single-phase or delta-connected storage. - Inverter model: OpenDSS Storage includes a built-in inverter model with efficiency, idling losses, and dispatch modes. Pandapower uses a simpler PQ-bus model; time-domain SOC updates require custom scripting.
BESS AC Block
pandapower OpenDSS
The BESS AC Block is a composite element available in the Storage palette (next to the Storage element). When you drag and drop it onto the canvas, it automatically creates and connects a complete Battery Energy Storage System (BESS) AC interconnection setup in a single step.
The block includes:
- BESS BUSBAR 1 — MV busbar rated at 33 kV (high-voltage side)
- Step-up Transformer — HV: 33 kV, LV: 690 V, connecting the MV and LV busbars
- BESS BUSBAR 2 — LV busbar rated at 0.69 kV (low-voltage side)
- Storage — Battery storage element (includes built-in inverter model) connected to the LV busbar
All four elements are pre-wired with correct connection points. Result placeholders for load flow and short-circuit analysis appear automatically for each busbar, the transformer, and the storage unit. You can connect the BESS AC block to your existing network by linking BESS BUSBAR 1 to your MV grid (e.g., 33 kV).
Documentation References: 📗 Storage 📗 OpenDSS Transformer 📗 Storage Properties
Note: The BESS AC Block is a composite palette template (MV bus, step-up transformer, LV bus, and Storage). It is not a separate backend element type — both pandapower and OpenDSS receive the four connected standard elements. Default drop values: MV bus 33 kV, LV bus 0.69 kV, transformer 33/0.69 kV, 1 MVA. You can modify all parameters to match your project.
Controls
The sidebar Controls palette groups plant and feeder controllers. It uses two analysis-oriented sub-tabs:
- Steady-state — controllers that affect snapshot / control-mode load flow:
- OpenDSS: RegControl, CapControl, StorageController
- Common (pandapower & OpenDSS): Wind Turbine Controller (steady-state) (power-curve Pref)
- Pandapower: Park Controller (steady-state) (plant Q/V/PF/tanφ)
- Dynamic — time-domain controllers:
- Common: Wind Turbine Controller (dynamic) (averaging & gradient limiting)
Double-click a control on the diagram to open its parameter dialog. OpenDSS controls are created as native OpenDSS objects when you run OpenDSS load flow. Wind Turbine Controllers are applied on the frontend (they do not create OpenDSS RegControl-style objects).
Wind Turbine Controller (steady-state)
pandapower OpenDSS
Palette: Controls → Steady-state → Common. Diagram label defaults to WindTurbineController (steady-state).
Chain linked to a Wind Turbine by name:
Wind Speed Input → Lookup (Power Curve) → Pref / P
Steady-state load flow: When enabled and linked, Electrisim sets the turbine’s p_mw (Pref) from wind speed and the selected power curve, then runs the normal load flow.
When you need it vs the turbine alone: The Wind Turbine already computes p_mw from its own curve and speed. Use this controller to:
- Override wind speed on the controller (uncheck “use turbine wind speed”), or
- Use a dedicated Controller Curve instead of the turbine’s machine curve (same built-in P(v) templates as the Wind Turbine: 2.5 MW onshore, 3.3 MW onshore, 15 MW offshore).
Averaging and gradient limiting live on the separate dynamic controller.
Key parameters
| Parameter | Description | Type | Simulation Types |
|---|---|---|---|
| name | Controller name | string | 🔴 PF |
| wind_turbine | Name of the linked Wind Turbine on the diagram | string | 🔴 PF |
| enabled | When false, the controller is ignored | boolean | 🔴 PF |
| use_turbine_wind_speed | If true, Pref uses the turbine’s wind_speed_ms; if false, uses the controller’s wind speed |
boolean | 🔴 PF |
| wind_speed_ms | Controller wind speed (used when not using the turbine speed) | float | 🔴 PF |
| power_curve_type | Turbine Power Curve or Controller Curve |
string | 🔴 PF |
Engines: Pref is applied for both pandapower and OpenDSS load flow. The controller cell itself is skipped as an OpenDSS native control object.
Wind Turbine Controller (dynamic)
pandapower OpenDSS
Palette: Controls → Dynamic → Common. Diagram label defaults to WindTurbineController (dynamic).
Chain linked to a Wind Turbine by name:
Wind Speed Averaging → Gradient Limiter → Active Power Averaging
Time-domain only: Parameters are stored for RMS / transient studies. Snapshot load flow does not apply averaging or gradient limiting — use the steady-state controller (or the turbine’s own curve) for Pref.
Key parameters
| Parameter | Description | Type | Simulation Types |
|---|---|---|---|
| wind_turbine | Name of the linked Wind Turbine | string | 🟡 Dynamic |
| wind_avg_T / wind_avg_Tavg | Wind-speed averaging time constants | float | 🟡 Dynamic |
| gradient_T / gradient_max | Gradient limiter time constant and max ramp [MW/s] | float | 🟡 Dynamic |
| power_avg_T / power_avg_Tavg | Active-power averaging time constants | float | 🟡 Dynamic |
Park Controller (steady-state, pandapower)
pandapower
Station / park controller for pandapower load flow. It coordinates reactive power of linked Wind Turbines and Static Generators to meet a plant-level target. The same object is used by Grid Code Compliance (P-Q) when Park controller active is selected (constant Q at the point of connection during the capability sweep).
Palette: Controls → Steady-state → Pandapower. Diagram label defaults to ParkController (steady-state).
Control modes (General tab):
- Voltage Control — hold bus voltage (optional droop: rated Q + droop %).
- Reactive Power Control — Const Q, Q(V) or Q(P) characteristic at a busbar, line, or transformer boundary.
- Power Factor Control — Const cosφ, or cosφ(P)/cosφ(V) characteristics (converted to a Q setpoint) at a busbar, line, or transformer. See cosφ(P) characteristic below.
- tan(φ) Control — Q = P × tan(φ) at a busbar, line, or transformer boundary.
Distribution: share plant Q among machines by dispatched P, rated S, Q capability (P–Q / P–U curve band at current P and terminal voltage), individual %, maximise reserve (remaining headroom on the curve), or equal shares (voltage setpoint adaption). Enable Use machine P–Q capability curves so each Wind Turbine / Static Generator Q capability tab limits park Q (clamp plant setpoint + enforce min/max Q at current P and U).
cosφ(P) characteristic
On the General tab, set PF-Control to cosphi(P)-Characteristic. Electrisim stores two branches (overexcited and underexcited). Each branch is one operating point: Min. power factor at a given Active power [MW].
| Branch (stored value) | Also shown as | Meaning (generator convention) |
|---|---|---|
| Overexcited | capacitive | Plant injects Q (Q ≥ 0). Same side as Wind Turbine Qmax / capacitive max. |
| Underexcited | inductive | Plant absorbs Q (Q < 0). Same side as Wind Turbine Qmin / inductive max. |
Excitation branch chooses which curve is used:
- Overexcited (capacitive) or Underexcited (inductive) — force that branch.
- Auto (by Q sign) — Overexcited when measured Q ≥ 0 at Control Q at, otherwise Underexcited.
The dialog labels use Overexcited / Underexcited and also show capacitive/inductive so both machine language and grid-side Q language are visible. Stored attributes remain Overexcited / Underexcited.
How it runs
- Drop a Park Controller; open it and select connected machines by name.
- Set control mode, measurement bus or boundary (line/transformer name), and setpoints / characteristic tables.
- Run pandapower Load Flow. Electrisim attaches pandapower
BinarySearchControl(andDroopControlwhen droop is enabled) and enablesrun_controlautomatically when a Park Controller is present.
Note: OpenDSS ignores Park Controllers. Balanced load flow uses positive-sequence voltage only. Sync Generators (gen) are not Q-controlled by BinarySearchControl in current pandapower — link Wind Turbines / Static Generators (sgens).
Documentation: pandapower Station Controller / BinarySearchControl
RegControl (OpenDSS)
OpenDSS
OpenDSS regulator control attached to a transformer by canvas name. Used in OpenDSS load flow (and related studies such as DG interconnection mitigations) to hold regulated voltage within a band.
Palette: Controls → Steady-state → OpenDSS.
| Parameter | Description | Type | Typical default |
|---|---|---|---|
| name | Control name | string | RegControl |
| transformer | Transformer name (or bus reference) on the diagram | string | — |
| winding | Controlled winding | integer | 2 |
| vreg | Regulated voltage [V] | float | 120 |
| band | Bandwidth [V] | float | 3 |
| ptratio / ctprim | PT ratio and CT primary [A] | float | 60 / 300 |
| delaying | Control delay [s] | float | 15 |
| enabled | Enable / disable the control | boolean | true |
Documentation: OpenDSS RegControl
CapControl (OpenDSS)
OpenDSS
OpenDSS capacitor control linked to a capacitor (or bus) by name. Switches capacitor banks based on voltage, current, kvar, or time.
Palette: Controls → Steady-state → OpenDSS.
| Parameter | Description | Type | Typical default |
|---|---|---|---|
| name | Control name | string | CapControl |
| capacitor | Capacitor name (or bus reference) | string | — |
| type | Control type | string | Voltage / Current / kvar / Time |
| on_setting / off_setting | ON / OFF thresholds (units depend on type) | float | 115 / 125 |
| ctratio / ptratio | CT / PT ratios | float | 1 / 1 |
| delay | Switching delay [s] | float | 15 |
| enabled | Enable / disable the control | boolean | true |
Documentation: OpenDSS CapControl
StorageController (OpenDSS)
OpenDSS
OpenDSS storage dispatch controller. Controlled Storage elements are exported with external dispatch mode so the controller can set charge / discharge.
Palette: Controls → Steady-state → OpenDSS.
| Parameter | Description | Type | Typical default |
|---|---|---|---|
| name | Control name | string | StorageController |
| element | Storage name(s), comma-separated | string | — |
| mode | Dispatch mode | string | PeakShave / LoadFollow / Time / Support |
| kwtarget | kW target for peak-shave / support modes | float | 0 |
| pct_reserve | Minimum state-of-charge reserve [%] | float | 20 |
| enabled | Enable / disable the control | boolean | true |
Documentation: OpenDSS Storage
Pandapower-only elements
These palette elements are included only when the simulation engine is set to Pandapower. If you run load flow or short circuit with OpenDSS, they are excluded and Electrisim shows a warning listing any unsupported elements on the diagram.
Static Var Compensator (SVC)
pandapower
Static Var Compensators are FACTS devices used for dynamic voltage support and reactive power control. They can rapidly adjust reactive power output.
Documentation References: 📘 pandapower SVC 📗 OpenDSS Documentation
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the SVC | string | - | - | 🔴 PF, OPF |
| bus | Bus the SVC is connected to | integer | - | - | 🔴 PF, OPF |
| x_l_ohm | Inductive reactance in Ohm | float | > 0 | XL (Reactor) | 🔴 PF, OPF |
| x_cvar_ohm | Variable capacitive reactance in Ohm | float | > 0 | kvar (Capacitor) | 🔴 PF, OPF |
| set_vm_pu | Voltage setpoint in per unit | float | > 0 | kvarlimit (CapControl) | 🔴 PF, OPF |
| thyristor_firing_angle_degree | Thyristor firing angle in degrees | float | 0-180 | - | 🟡 PF, OPF |
| min_angle_degree | Minimum thyristor firing angle in degrees | float | 0-180 | - | 🟡 PF, OPF |
| max_angle_degree | Maximum thyristor firing angle in degrees | float | 0-180 | - | 🟡 PF, OPF |
| controllable | Whether the SVC is controllable | boolean | True/False | - | 🔴 OPF |
| in_service | Specifies if the SVC is in service | boolean | True/False | - | 🟡 PF, OPF |
Thyristor-Controlled Series Capacitor (TCSC)
pandapower
TCSCs are FACTS devices that provide controllable series compensation to regulate power flow and improve transmission capacity.
Documentation References: 📘 pandapower TCSC 📗 OpenDSS Documentation
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the TCSC | string | - | name | 🔴 PF, OPF |
| from_bus | Starting bus | integer | - | Bus1 | 🔴 PF, OPF |
| to_bus | Ending bus | integer | - | Bus2 | 🔴 PF, OPF |
| x_l_ohm | Inductive reactance in Ohm | float | > 0 | XL (Reactor) | 🔴 PF, OPF |
| x_cvar_ohm | Variable capacitive reactance in Ohm | float | > 0 | C (Capacitor) | 🔴 PF, OPF |
| set_p_to_mw | Power flow setpoint at receiving end in MW | float | - | - | 🔴 OPF |
| thyristor_firing_angle_degree | Thyristor firing angle in degrees | float | 0-180 | - | 🟡 PF, OPF |
| min_angle_degree | Minimum firing angle in degrees | float | 0-180 | - | 🟡 PF, OPF |
| max_angle_degree | Maximum firing angle in degrees | float | 0-180 | - | 🟡 PF, OPF |
| controllable | Whether the TCSC is controllable | boolean | True/False | - | 🔴 OPF |
| in_service | Specifies if the TCSC is in service | boolean | True/False | enabled | 🟡 PF, OPF |
Static Synchronous Compensator (SSC / STATCOM)
pandapower
Static Synchronous Compensators (STATCOM) are advanced FACTS devices that use voltage source converters to provide dynamic reactive power support. They offer superior voltage control compared to traditional SVCs. In the palette this element appears as SSC(STATCOM).
Documentation References: 📘 pandapower SSC 📗 OpenDSS Documentation
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the SSC | string | - | name | 🔴 PF, OPF |
| bus | Bus the SSC is connected to | integer | - | Bus1 | 🔴 PF, OPF |
| r_ohm | Internal resistance in Ohm | float | ≥ 0 | R (Generator) | 🔴 PF, OPF |
| x_ohm | Internal reactance in Ohm | float | > 0 | X (Generator) | 🔴 PF, OPF |
| set_vm_pu | Voltage setpoint at connection bus in per unit | float | > 0 | Voltage (InvControl) | 🔴 PF, OPF |
| vm_internal_pu | Internal voltage magnitude in per unit | float | > 0 | kV (Generator) | 🟡 PF, OPF |
| va_internal_degree | Internal voltage angle in degrees | float | -360 to 360 | Angle (Generator) | 🟡 PF, OPF |
| controllable | Whether the SSC is controllable | boolean | True/False | Enabled (InvControl) | 🔴 OPF |
| in_service | Specifies if the SSC is in service | boolean | True/False | enabled | 🟡 PF, OPF |
DC Line
pandapower
DC lines represent high-voltage direct current (HVDC) connections between AC systems. They provide controlled power transfer and can connect asynchronous networks.
Documentation References: 📘 pandapower DC Line OpenDSS: Not Available
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the DC line | string | - | - | 🔴 PF, OPF |
| from_bus | Starting bus (rectifier side) | integer | - | - | 🔴 PF, OPF |
| to_bus | Ending bus (inverter side) | integer | - | - | 🔴 PF, OPF |
| p_mw | Active power transmitted from from_bus to to_bus in MW | float | - | - | 🔴 PF, OPF |
| loss_percent | Relative transmission loss in percent | float | ≥ 0 | - | 🟡 PF, OPF |
| loss_mw | Fixed transmission loss in MW | float | ≥ 0 | - | 🟡 PF, OPF |
| vm_from_pu | Voltage setpoint at the from bus in per unit | float | > 0 | - | 🔴 PF, OPF |
| vm_to_pu | Voltage setpoint at the to bus in per unit | float | > 0 | - | 🔴 PF, OPF |
| in_service | Specifies if the DC line is in service | boolean | True/False | - | 🟡 PF, OPF |
DC Bus
pandapower
DC buses represent connection points in DC networks, similar to AC buses but for direct current systems. They serve as nodes where DC components like DC loads, DC sources, and DC lines can be connected.
Documentation References: 📘 pandapower DC Bus OpenDSS: Not Available
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the DC bus | string | - | - | 🔴 PF, SC, OPF |
| vn_kv | Rated voltage in kV | float | > 0 | - | 🔴 PF, SC, OPF |
| in_service | Specifies if the DC bus is in service | boolean | True/False | - | 🟡 PF, SC, OPF |
Load DC
pandapower
DC loads represent power consumption in DC networks. They consume active power from the DC system.
Documentation References: 📘 pandapower Load DC OpenDSS: Not Available
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the DC load | string | - | - | 🔴 PF, SC, OPF |
| bus | DC bus the load is connected to | integer | - | - | 🔴 PF, SC, OPF |
| p_mw | Active power consumption in MW | float | ≥ 0 | - | 🔴 PF, SC, OPF |
| in_service | Specifies if the DC load is in service | boolean | True/False | - | 🟡 PF, SC, OPF |
Source DC
pandapower
DC sources represent voltage sources in DC networks, similar to external grids in AC systems. They provide voltage reference and power injection into the DC network.
Documentation References: 📘 pandapower Source DC OpenDSS: Not Available
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the DC source | string | - | - | 🔴 PF, SC, OPF |
| bus | DC bus the source is connected to | integer | - | - | 🔴 PF, SC, OPF |
| vm_pu | Voltage magnitude setpoint in per unit | float | > 0 | - | 🔴 PF, SC, OPF |
| in_service | Specifies if the DC source is in service | boolean | True/False | - | 🟡 PF, SC, OPF |
Switch
pandapower
Switches represent circuit breakers, load break switches, or disconnectors that can connect or disconnect network elements (lines, transformers, or buses). In pandapower, a switch connects a bus to a line, transformer, three-winding transformer, or another bus. In OpenDSS, open switches are modeled by opening the corresponding line or transformer element.
Documentation References: 📘 pandapower Switch 📗 OpenDSS Documentation
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the switch | string | - | name | 🔴 PF, SC, OPF |
| bus | Bus the switch is connected to | integer | - | Bus1 | 🔴 PF, SC, OPF |
| element | Name/index of the element the switch controls (a line, transformer, three-winding transformer, or bus) | string/integer | - | - | 🔴 PF, SC, OPF |
| et | Element type the switch is connected to: "l" (line), "t" (transformer), "t3" (three-winding transformer), "b" (bus-bus) | string | l, t, t3, b | - | 🔴 PF, SC, OPF |
| closed | Whether the switch is closed (True) or open (False) | boolean | True/False | open/close action | 🔴 PF, SC, OPF |
| type | Type of switch: "CB" (Circuit Breaker), "LS" (Load Switch), "LBS" (Load Break Switch), "DS" (Disconnector) | string | CB, LS, LBS, DS | - | 🟡 PF, SC, OPF |
| z_ohm | Impedance of the switch in Ohm (when closed) | float | ≥ 0 | - | 🟡 PF, SC, OPF |
| in_ka | Rated current of the switch in kA | float | > 0 | normamps | 🟡 PF, SC, OPF |
| in_service | Specifies if the switch is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
Protection tab (Protection Coordination Study)
When running the Protection Coordination Study, assign a device on the Switch dialog Protection tab. Key fields:
| Parameter | Description |
|---|---|
| protection_type | none, fuse, or ocr (overcurrent relay) |
| fuse_type, rated_i_a, fuse_custom_std_json | Library fuse name or custom I–t curve JSON and rated current (fuse mode) |
| oc_relay_type | DTOC, IDMT, or IDTOC |
| curve_type, tms, t_grade, t_g, t_gg, t_diff | IEC inverse curve and timing / grading settings (OCR mode) |
| pickup_mode, I_s_a, I_g_a, I_gg_a | Automatic or manual pickup currents |
| overload_factor, ct_current_factor, safety_factor | Factors for automatic pickup calculation |
Voltage Source Converter (VSC)
pandapower
Voltage Source Converters are power electronic devices that connect AC and DC networks. They enable bidirectional power flow and provide voltage control capabilities, making them essential for HVDC systems and renewable energy integration.
Documentation References: 📘 pandapower VSC OpenDSS: Not Available
Parameters:
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the VSC | string | - | - | 🔴 PF, SC, OPF |
| bus | AC bus the VSC is connected to | integer | - | Bus1 | 🔴 PF, SC, OPF |
| bus_dc | DC bus the VSC is connected to | integer | - | - | 🔴 PF, SC, OPF |
| p_mw | Active power setpoint at the AC bus in MW | float | - | kW | 🔴 PF, SC, OPF |
| vm_pu | Voltage magnitude setpoint on the AC side in per unit | float | > 0 | kV | 🔴 PF, SC, OPF |
| sn_mva | Nominal power of the VSC in MVA | float | > 0 | kVA | 🟡 PF, SC, OPF |
| rx | R/X ratio of the VSC coupling transformer | float | ≥ 0 | R/X | 🟡 PF, SC, OPF |
| max_ik_ka | Maximum short-circuit current in kA | float | > 0 | - | 🟡 SC |
| in_service | Specifies if the VSC is in service | boolean | True/False | enabled | 🟡 PF, SC, OPF |
Back-to-Back Voltage Source Converter (B2B VSC)
pandapower
In Electrisim, the B2B VSC cell models a dual–DC–bus back-to-back converter: one AC connection plus two DC buses (plus and minus) for detailed DC grid or metallic-return style studies. In pandapower v3.3.2 this maps to the B2B VSC element (create_b2b_vsc, net.b2b_vsc).
Alternatively, a single–AC–to–single–DC connection uses the VSC element and DC Bus per side as needed.
Documentation References: 📘 pandapower B2B VSC OpenDSS: Not Available
Parameters (Load Flow / OPF; connections from the diagram):
| Parameter | Description | Type | Value Range | OpenDSS Equivalent | Simulation Types |
|---|---|---|---|---|---|
| name | Name of the B2B VSC | string | - | - | 🔴 PF, OPF |
| (topology) | One AC bus and two DC buses (plus / minus) are set from the diagram edges (not a form field). | - | - | - | 🔴 PF, OPF |
| r_ohm / x_ohm | Series resistance and reactance of the VSC coupling branch (Ω), per pandapower b2b_vsc. |
float | ≥ 0 | - | 🔴 PF, OPF |
| r_dc_ohm | Internal DC path resistance component (Ω). | float | ≥ 0 | - | 🔴 PF, OPF |
| control_mode_ac / control_value_ac | AC control mode (vm_pu or q_mvar) and corresponding setpoint (p.u. or MVAr). |
string / float | see pandapower | - | 🔴 PF, OPF |
| control_mode_dc / control_value_dc | DC control mode (vm_pu or p_mw) and setpoint (p.u. or MW). |
string / float | see pandapower | - | 🔴 PF, OPF |
| in_service | Whether the device is in service | boolean | True/False | enabled | 🟡 PF, OPF |
OpenDSS-only elements
These palette elements are included only when the simulation engine is set to OpenDSS. They are not sent to Pandapower; if any are on the diagram during a Pandapower calculation, Electrisim warns that they will be skipped.
- PVSystem — photovoltaic array and inverter
- Load 1ph, Source 1ph, Generator 1ph, Line 1ph, Transformer 1ph — explicit single-phase (
phases=1) distribution elements
Single-phase distribution modeling
Use the five 1ph elements to build radial feeders such as: Source 1ph → Transformer 1ph → Line 1ph → Load 1ph, with optional Generator 1ph for distributed generation. Each exposes Phase (1, 2, or 3) and Connection (wye L-N or delta L-L) so the correct OpenDSS bus terminal (bus.1, bus.1.2, etc.) is used.
Tip: On radial single-phase lines, prefer wye (L-N) for loads and generators. Delta connection requires two energized phase nodes on the bus; if only one node is energized (typical for Line 1ph with wye connection), delta-connected loads may draw little or no power. Electrisim automatically switches delta loads and generators to wye on radial feeders and reports a warning in the load-flow results.
PVSystem
OpenDSS
The PVSystem element combines the photovoltaic (PV) array and the PV inverter in a single model. It assumes that the inverter tracks the maximum power point (MPP) of the panel quickly, making it suitable for quasi-static time-series (QSTS) simulations with time steps of at least one second. This model is adequate for most interconnection impact studies.
Documentation References: 📗 OpenDSS PVSystem 📗 OpenDSS PVSystem Properties
Note: PVSystem is an OpenDSS-only element. Pandapower has no direct equivalent; it can be approximated using a static generator.
Parameters
Parameters are organized by analysis type in the Electrisim PVSystem dialog:
PV Array Properties
| Parameter | Description | Type | Value Range | OpenDSS Property | Simulation Types |
|---|---|---|---|---|---|
| name | Name identifier for the PV system element | string | - | name | 🔴 PF |
| irradiance | Present irradiance value in kW/m². Used as base for shape multipliers. | float | ≥ 0 | irradiance | 🔴 PF |
| pmpp | Rated max power of the PV array for 1.0 kW/m² irradiance at selected array temperature (kW) | float | > 0 | Pmpp | 🔴 PF |
| temperature | Present temperature (°C). Used with P-TCurve to determine net array output. | float | - | Temperature | 🟡 PF |
PV Inverter Properties
| Parameter | Description | Type | Value Range | OpenDSS Property | Simulation Types |
|---|---|---|---|---|---|
| phases | Number of phases. Power is evenly divided among phases. | integer | 1–3 | phases | 🔴 PF |
| kv | Nominal rated (1.0 pu) voltage in kV | float | > 0 | kV | 🔴 PF |
| pf | Power factor for output power. Sets CONSTANT POWER FACTOR MODE. Negative when kW and kvar have opposite signs. | float | -1 to 1 | pf | 🟡 PF |
| kvar | Present kvar value. Setting forces CONSTANT KVAR MODE. | float | - | kvar | 🟡 PF |
| kva | kVA rating of inverter. Base for dynamics and harmonics. | float | > 0 | kVA | 🟡 PF, SC, Harmonics |
| cutin | % cut-in power — % of kVA. Inverter turns on when array power exceeds this. | float | 0–100 | %Cutin | 🟢 PF |
| cutout | % cut-out power — % of kVA. Inverter turns off when array power drops below this. | float | 0–100 | %Cutout | 🟢 PF |
| conn | Connection type: wye or delta | string | wye, LN, delta, LL | conn | 🟡 PF |
Operating Conditions
| Parameter | Description | Type | Value Range | OpenDSS Property | Simulation Types |
|---|---|---|---|---|---|
| model | Power output variation with voltage: 1=Constant kW/kvar, 2=Constant Admittance, 3=User Model | integer | 1–3 | model | 🟡 PF |
| vminpu | Minimum per unit voltage for model application. Below this, reverts to constant impedance. | float | > 0 | Vminpu | 🟡 PF |
| vmaxpu | Maximum per unit voltage for model application. Above this, reverts to constant impedance. | float | > 0 | Vmaxpu | 🟡 PF |
| in_service | Specifies if the PV system is in service | boolean | True/False | enabled | 🟡 PF |
Time-dependent Load Flow (Load Shapes)
| Parameter | Description | Type | OpenDSS Property |
|---|---|---|---|
| yearly | Dispatch shape for yearly simulations | string (Loadshape name) | yearly |
| daily | Dispatch shape for daily simulations (typically 24 hrs) | string (Loadshape name) | daily |
| duty | Load shape for duty cycle (e.g., solar ramp rate) | string (Loadshape name) | duty |
| tyearly, tdaily, tduty | Temperature shapes for Pmpp vs T curve | string (TShape name) | Tyearly, Tdaily, Tduty |
| dutystart | Starting time offset (hours) into duty cycle shape | float | DutyStart |
Short Circuit
| Parameter | Description | Type | OpenDSS Property |
|---|---|---|---|
| r_percent | Equivalent percent internal resistance (ohms) | float | %R |
| x_percent | Equivalent percent internal reactance (ohms). Limits fault current to ~2 pu. | float | %X |
| basefreq | Base frequency for ratings (Hz) | float | basefreq |
| balanced | Force balanced current for 3-phase (zero/negative sequence = 0) | boolean | Balanced |
Harmonic
| Parameter | Description | Type | OpenDSS Property |
|---|---|---|---|
| spectrum | Name of harmonic voltage/current spectrum | string | spectrum |
| class_ | Class number for PVSystem segregation | integer | class |
| debugtrace | Capture PVSystem model progress per iteration | boolean | debugtrace |
Dynamic (Control Mode)
| Parameter | Description | Type | OpenDSS Property |
|---|---|---|---|
| controlmode | GFL (Grid Following) or GFM (Grid Forming). GFM for islanded microgrids. | string | ControlMode |
| kvarmax | Maximum reactive power generation (kvar) | float | kvarMax |
| kvarmaxabs | Maximum reactive power absorption (kvar) | float | kvarMaxAbs |
| kvdc | Rated DC voltage at inverter input (kV) | float | kVDC |
| safevoltage | Voltage level (%) for safe mode threshold | float | SafeVoltage |
| limitcurrent | Limit current magnitude to Vminpu | boolean | LimitCurrent |
| amplimit | Current limiter per phase for GFM mode | float | AmpLimit |
| wattpriority | Watt priority instead of var priority | boolean | WattPriority |
| varfollowinverter | Reactive power follows inverter on/off status | boolean | VarFollowInverter |
Electrisim Implementation
In Electrisim, the PVSystem element is configured via the PVSystem dialog with parameters organized into tabs:
- Snapshot Load Flow: PV array (irradiance, Pmpp, temperature), inverter (phases, kV, pf, kvar, kVA), and operating conditions (model, Vminpu, Vmaxpu)
- Time-dependent Load Flow: Load shapes (yearly, daily, duty), temperature shapes (Tyearly, Tdaily, Tduty)
- Short Circuit: Internal resistance/reactance (%R, %X), base frequency, balanced mode
- Harmonic: Spectrum, class, debug trace
- Dynamic: Control mode (GFL/GFM), reactive limits, PI controller, safety limits
- Inverter Control: OpenDSS InvControl modes — NONE / Fixed Q / Fixed PF / Volt-VAR / Volt-Watt / Watt-PF / Watt-VAR / DynamicReacCurr (requires Control Mode = Time in OpenDSS load flow)
Load 1ph
OpenDSS
Single-phase constant-power load connected to one bus. Power is entered in kW and kVar (not MW/MVar). Results show actual kW/kVar, optional setpoint, and bus voltage in pu.
Documentation References: 📗 OpenDSS Load
Note: OpenDSS-only. Not available in pandapower.
Parameters
| Parameter | Description | Type | Value Range | OpenDSS Property | Simulation Types |
|---|---|---|---|---|---|
| name | Element name | string | - | name | 🔴 PF |
| bus | Connected bus | reference | - | Bus1 | 🔴 PF |
| p_kw | Active power demand (kW) | float | ≥ 0 | kW | 🔴 PF |
| q_kvar | Reactive power demand (kVar) | float | - | kvar | 🟡 PF |
| kv | Rated voltage (kV L-N or L-L). Empty = bus nominal. | float | > 0 | kV | 🟡 PF |
| pf | Power factor (UI helper when deriving Q from P) | float | 0–1 | pf | 🟢 PF |
| phase | OpenDSS phase node (1, 2, or 3) | integer | 1–3 | Bus1 terminal | 🔴 PF |
| conn | Wye (L-N) or delta (L-L) | string | wye / delta | conn | 🔴 PF |
| spectrum | Harmonic spectrum name | string | - | spectrum | 🟢 HA |
| pctSeriesRL | Series R-L percentage for harmonics | float | 0–100 | %SeriesRL | 🟢 HA |
| in_service | Include in simulation | boolean | True/False | enabled | 🟡 PF |
Source 1ph
OpenDSS
Single-phase slack source (OpenDSS Vsource). The first Source 1ph in a model configures the circuit source (Vsource.source); additional sources create named Vsource objects. Equivalent to a single-phase external grid.
Documentation References: 📗 OpenDSS Vsource 📘 External Grid (three-phase)
Note: OpenDSS-only. Not available in pandapower.
Parameters
| Parameter | Description | Type | Value Range | OpenDSS Property | Simulation Types |
|---|---|---|---|---|---|
| name | Element name | string | - | name | 🔴 PF, SC |
| bus | Connected bus | reference | - | Bus1 | 🔴 PF, SC |
| vm_pu | Voltage magnitude setpoint (pu) | float | > 0 | pu | 🔴 PF, SC |
| va_degree | Voltage angle (degrees) | float | -360 to 360 | angle | 🟡 PF |
| s_sc_max_mva | Short-circuit MVA for Thevenin impedance | float | > 0 | mvasc3 / R1,X1 | 🔴 SC |
| phase | OpenDSS phase node (1, 2, or 3) | integer | 1–3 | Bus1 terminal | 🔴 PF, SC |
| conn | Wye (L-N) or delta (L-L) | string | wye / delta | conn | 🔴 PF, SC |
| in_service | Include in simulation | boolean | True/False | enabled | 🟡 PF, SC |
Generator 1ph
OpenDSS
Single-phase dispatchable generator with constant P/Q (OpenDSS Generator, phases=1). Power is entered in kW and kVar.
Documentation References: 📗 OpenDSS Generator 📘 Generator (three-phase)
Note: OpenDSS-only. Not available in pandapower.
Parameters
| Parameter | Description | Type | Value Range | OpenDSS Property | Simulation Types |
|---|---|---|---|---|---|
| name | Element name | string | - | name | 🔴 PF |
| bus | Connected bus | reference | - | Bus1 | 🔴 PF |
| p_kw | Generated active power (kW) | float | ≥ 0 | kW | 🔴 PF |
| q_kvar | Generated reactive power (kVar) | float | - | kvar | 🟡 PF |
| kv | Rated voltage (kV). Empty = bus nominal. | float | > 0 | kV | 🟡 PF |
| sn_kva | Rated apparent power (kVA), optional | float | > 0 | kVA | 🟡 PF |
| model | OpenDSS generator model (1 = constant P&Q) | integer | 1, 3, … | Model | 🔴 PF |
| phase | OpenDSS phase node (1, 2, or 3) | integer | 1–3 | Bus1 terminal | 🔴 PF |
| conn | Wye (L-N) or delta (L-L) | string | wye / delta | conn | 🔴 PF |
| spectrum | Harmonic spectrum name | string | - | spectrum | 🟢 HA |
| in_service | Include in simulation | boolean | True/False | enabled | 🟡 PF |
Transformer 1ph
OpenDSS
Two-winding single-phase transformer (phases=1 Windings=2). HV/LV sides are determined from bus nominal voltages. LV winding is always wye-connected; HV uses wye or delta according to the connection setting.
Documentation References: 📗 OpenDSS Transformer 📘 Transformer (three-phase)
Note: OpenDSS-only. Not available in pandapower.
Parameters
| Parameter | Description | Type | Value Range | OpenDSS Property | Simulation Types |
|---|---|---|---|---|---|
| name | Element name | string | - | name | 🔴 PF |
| busFrom / busTo | HV and LV buses (auto-sorted by voltage) | reference | - | Buses | 🔴 PF |
| sn_kva | Rated apparent power (kVA) | float | > 0 | kVAs | 🔴 PF |
| vk_percent | Short-circuit voltage (%) | float | > 0 | XHL | 🔴 PF |
| vkr_percent | Resistive part of vk (%) | float | ≥ 0 | %Rs | 🟡 PF |
| vn_hv_kv | HV rated voltage (kV) | float | > 0 | kVs (HV) | 🔴 PF |
| vn_lv_kv | LV rated voltage (kV) | float | > 0 | kVs (LV) | 🔴 PF |
| phase | OpenDSS phase node (1, 2, or 3) | integer | 1–3 | Bus terminals | 🔴 PF |
| conn | HV connection: wye or delta | string | wye / delta | Conns | 🔴 PF |
| tap_pos | Tap changer position | integer | - | Taps | 🟡 PF |
| in_service | Include in simulation | boolean | True/False | enabled | 🟡 PF |
Line 1ph
OpenDSS
Single-phase series impedance between two buses (phases=1). Uses per-km R, X, and optional shunt C with a length in km.
Documentation References: 📗 OpenDSS Line 📘 Line (three-phase)
Note: OpenDSS-only. Not available in pandapower.
Parameters
| Parameter | Description | Type | Value Range | OpenDSS Property | Simulation Types |
|---|---|---|---|---|---|
| name | Element name | string | - | name | 🔴 PF |
| busFrom / busTo | From and to buses | reference | - | Bus1, Bus2 | 🔴 PF |
| length_km | Line length (km) | float | ≥ 0 | Length (units=km) | 🔴 PF |
| r_ohm_per_km | Series resistance (Ω/km) | float | ≥ 0 | R1 | 🔴 PF |
| x_ohm_per_km | Series reactance (Ω/km) | float | - | X1 | 🔴 PF |
| c_nf_per_km | Shunt capacitance (nF/km), 0 = ignored | float | ≥ 0 | C1 | 🟢 PF |
| phase | OpenDSS phase node (1, 2, or 3) | integer | 1–3 | Bus terminals | 🔴 PF |
| conn | Wye (L-N) or delta (L-L) at both ends | string | wye / delta | — | 🔴 PF |
| in_service | Include in simulation | boolean | True/False | enabled | 🟡 PF |
Importing Network Models
If you already have a pandapower script or an OpenDSS circuit file, import it instead of redrawing the network. Electrisim builds the single-line diagram from the file, then you can edit parameters and run studies as usual.
File → Import from → Device... (or Open from device) and pick a file on your computer.
How to import
- Save a pandapower
.pyfile that defines anetobject, or an OpenDSS.dsscircuit file. - In Electrisim, choose File → Import from → Device....
- Select the file. Buses, lines, transformers, loads, generators, and (for OpenDSS) capacitors/reactors are placed on the canvas.
- Check rated voltages and names, then run Load Flow.
Supported native formats:
- Pandapower (.py) — Python scripts that define a
netobject. The network will be converted to a diagram with buses, lines, transformers, loads, generators, and other elements. - OpenDSS (.dss) — OpenDSS circuit definition files. Buses, lines, transformers, loads, generators, capacitors, and reactors (including harmonic filters) are imported and displayed as a single-line diagram.
After import, the diagram is created automatically on the canvas. You can then run simulations, modify parameters, or export the model.
Component Data
Component Data is a spreadsheet of every element on the diagram. Use it when you need to change many parameters at once, or to review ratings without opening each dialog.
Edit menu → Component Data...
How to use it
- Open Component Data.... Each element type has its own tab (buses, lines, loads, generators, wind turbines, and so on).
- Filter or sort a column, then edit cells directly.
- Click Apply to write values back to the diagram, or Cancel to discard.
The Line tab includes thermal limit max_loading_percent for OPF (0 = no limit). The Bus tab includes min_vm_pu and max_vm_pu for OPF voltage bounds.
p_mw is derived from the power curve and is read-only in the grid. Change wind speed or the power-curve fields and P [MW] updates immediately. Fill-down on wind speed also recomputes P. Apply writes the new P back to each turbine on the canvas.
Maps
The Map Editor lets you design networks on a geographic map. Place buses and equipment at real coordinates, draw cables, and get line lengths from geography instead of typing kilometres by hand.
Open the Map Editor from the application menu, then Generate Electrical Model when the layout is ready.
How to use the Map Editor
- Open the Map Editor from the application menu.
- Place nodes — Pick an element (Bus, Wind Turbine, External Grid, Transformer, …) and click the map.
- Draw cables — Use Draw Cable: click start, optional intermediate points, then the end node. Length in km comes from the coordinates.
- Click Generate Electrical Model to create the schematic with those line lengths, then run Load Flow as usual.
When to use a map
The Maps feature is especially useful for:
- Offshore wind farms — Model turbine arrays, offshore substations, and export cables with realistic distances.
- Distribution networks — Build models from geographic layouts where line lengths matter.
- Transmission planning — Place substations and lines on a map and get correct line lengths for power flow and short-circuit analysis.
After generating the model, you can run load flow, short-circuit, and other analyses as usual. The diagram can be edited further in the standard Electrisim editor.
Development Process
Electrisim is open source and under active development. Use the links below for the product roadmap, source code, and contact — this page is not a changelog.
Roadmap, code, and support
- Product roadmap — planned features and direction.
- Frontend on GitHub — issues, discussions, and contributions.
- Contact — questions and feedback via the website form.
- Development history — what shipped in recent versions.
Under the hood
You do not install these libraries locally. Electrisim calls them on the server (or in the packaged app) after you click Run.
- pandapower v3.3.2 — documentation — balanced power flow, OPF, IEC 60909 short-circuit, protection, controllers, time series. Joint development of University of Kassel and Fraunhofer IEE.
- OpenDSS (via opendssdirect.py) — documentation — unbalanced distribution, fault studies, harmonics, controls. Developed by EPRI.
- ANDES — documentation — time-domain simulation and eigenvalue analysis. Developed at the CURENT Engineering Research Center; see CURENT/andes.
- draw.io — diagramming framework for the canvas.
You can export generated pandapower Python or OpenDSS commands from several study dialogs if you want to continue outside Electrisim.
Acknowledgments
Electrisim would not exist without pandapower, OpenDSS, ANDES, and draw.io, and the people who maintain them.
Last updated: August 2026