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:
- 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]).
- 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.
- 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).
Notes:
- 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 | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.