Skip to main content

Power System Long-Term Dynamic Simulator

Project description

PSLTDSim = Power System Long-Term Dynamic Simulator

Purpose: Use Python and PSLF to simulate long-term power system dynamics.

Examples of long-term dynamics:

  1. A 20 minute wind ramp that forces a governor action response that in turn affects the area control error (ACE) which is later corrected by automatic generator control (AGC [a.k.a. load frequency control or LFC]).
  2. A Generator is tripped in an area that is importing power. Governor action from other areas will respond before AGC works to restore tie-line balance.
  3. A multi-hour simulation of a daily load cycle and forcast used to assure AGC algorithm operates within NERC mandates.

Warning: Work in progress - everything may be broken. Nothing guaranteed.

To install package from git repository: "pip install -e ." from this directory with administrative privleges. If python 3 32 bit is not default python: "py -3-32 -m pip install -e ." Requires IronPython (32 bit) to be on system path.

What this code does:

-Uses an agent-based approach to power system modeling.

-Creates a time sequence of power flows while accounting for combined system frequency, all generator mechanical powers and associated staes along with balancing authority states.

-Uses the PSLF system model format and power flow solver.

-Communicates with PSLF via Ironpython.

-Python 3 communicates with Ironpython via AMQP.

-Reads PSLF dyd files and creates python equivalents of one governor (tgov1).

-Implements a generic governor for models that are not fully created in Python (i.e. anything besides tgov1).

-Allows for noise, step, and ramp type perturbances

What this code doesn't do:

-Use definite time controllers to change the status of agents in the system according to user programmable logic.

-Handle tripping of any generator (power-flow solution mysteriously diverges).


  • Requires GE PSLF Python API and valid PSLF licencse. (sorry)
  • To workaround GE API issues: Erlang, RabbitMQ, and Ironpython are required.
  • Additional Python packages include:
    • Python 3: Scipy ( for Numpy and Matplotlib) and Pika (for AMQP)
    • Ironpython 2.7 32 bit: Pika (Note: Ironpython must be 32 bit to work with GE PSLF middleware)

Recent Progress:

  • Code refactored to:
    • Utilize Py3<->AMQP<->IPY<-> PSLF workarounds
    • Allow for generic automation using agent current value dictionaries
    • Enable easier code packaging
    • Clarify code structure
  • Code creates python mirror of PSLF areas, buses, generators, loads, branch sections, and shunts.
  • Code has been written to:
    • Check accuracy of mirror
    • Ignore islanded objects
    • Allow for optional Vsched or Vinit of bus Voltage setting
    • Parse .dyd files (more than one)
    • Parse .ltd files
    • Handle H (inertia)
    • Add noise, step, and ramp perturbances to most any agent value
    • Set area wide governor deadbands
    • Incorporate balancing authority actions into simulation
    • Parse EIA data for multi-hour demand/forcast simulation
    • Distribute changes in Pacc according to inertia
    • Exectute Combined Swing equation
    • Step dynamic modles (tgov1 and genericGov)
    • Log values of interest
    • Generate data dictionary
    • Import/Export Mirror or data data dictionary via shelve
    • Export Model or data data dictionary from Python 3.x to MATLAB .mat file
    • Generate terminal output
    • Generate plots via matplotlib
    • Run multiple simulations in a batch style and handle errors in a non-show stopping way
  • MATLAB scripts created to verify and validate simulation outputs
    • Frequency, Pe, Pm, Q, and Voltage Magnitude and Angle compared to PSDS.
    • Branch power flow of P, Q, and I.
    • Accounts for loss of system inertia and change in system losses.

Project details

Release history Release notifications

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for PSLTDSim, version 0.1.0
Filename, size File type Python version Upload date Hashes
Filename, size PSLTDSim-0.1.0-py3-none-any.whl (128.4 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size PSLTDSim-0.1.0.tar.gz (65.7 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page