A program to look at the security of the IEEE RTS 96 using PSAT in Matlab. Python is used to generate the files to test.
-
script.py this is where all the main functionality of the program lies. see the bottom of the file for some examples of how the program can be used.
-
simulation_batch.py - SimulationBatch - batch_file - batch
-
psat_report.py - PsatReport - report_file - report
-
psat_data.py - PsatData - psat_file - psat
-
network_probability.py - NetworkProbability - prob_file - prob
-
buslevel.py a messy utility to get load forecast and load forecast errors.
-
misc.py A few utilities.
-
parsingutil.py a few utilities for pyparsing
-
modifiedtestcase.py a few utilities for unittest
-
failed convergences on load flow followed by passing opf. causes
error
should causepass
. -
reactive-limit-bug - caused by seperating generators onto virtual busses example: (pf 0.772)
-
kill-large-gen-bug - fix_mismatch fails when large gens are killed example: (pf 1.107)
-
islanding-bug - islanding should cause fail not error (e.g. kill bus 7)
-
report_to_psat - shunt-bug - it might sometimes get included twice
-
Re-run tests (again) as both opf and pf.
- make report on why things fail and pass
- show to rod
Things that should be done
- FIX BUGS
- look into using a distributed slack bus.
- memoize results considering that loss of either unit on a bus is the same action as long as they are identical units.
- do unit commitment as well as OPF
- run N-1 test
Defined in Link 6 (PSAT).
Bus.con = [ ...
1 138 1 0 2 1;
24 230 1 0 2 1;
];
Line.con = [ ...
1 2 100 138 60 0 0 0.0026 0.0139 0.4611 0 0 1.93 0 2 1;
];
component probabilities.
bus 1 0.025 13
bus 2 0.025 13
line A1 1 2 .24 16 0.0
line A2 1 3 .51 10 2.9
generator G1 1 450 50 U20
generator G2 1 450 50 U20
crow A12-1 A13-2 0.075
crow A13-2 A12-1 0.075
crow A18 A20 0.075
[abc]
remove bus 1
remove line A3
remove line A54
[def]
[ghi]
remove generator G65
remove line C21-4
[jkl]
set all demand 1.25
defined by psat manual.
initpsat;
Settings.lfmit = 50;
Settings.violations = 'on'
runpsat('psat_filename','data');
runpsat pf;
runpsat pfrep;
closepsat;
exit;
- [http://psdyn.ece.wisc.edu/IEEE_benchmarks/index.htm](University of Wisconsin)
- 9 Bus System
- IEEE 39 Bus System
- Simplified 14-Generator Australian Power System
- (including full dynamic models)
- [http://www.ee.washington.edu/research/pstca/](University of Washington Power Systems Test Case Archive)
- Power Flow Test Cases (No. buses: 14, 30, 57, 118, 300)
- Dynamic Test Cases (17 Gen, 30 Bus "New England", 50 Generator)
- IEEE-RTS-96
- [http://www.mathworks.com/access/helpdesk/help/toolbox/physmod/powersys](Matlab SimPowerSystems)
- http://rwl.github.com/pylon/
- http://www.pserc.cornell.edu/matpower/
- http://www.power.uwaterloo.ca/~fmilano/psat.htm
- There might be a way to trip out and modify a system while matlab is running in a way that will be much quicker to run
- to test the scenario generation probabilities are correct you can use
sort test.bch | grep -v '^\[' | uniq -c > test.csv
- Settings.distrsw = 1 % use distributed slack bus
- Settings.init % status (including PF diverged!)
- OPF.conv % did the OPF converge
- OPF.report % not sure but should be checked out
- clpsat.refresh = 0 % don't bother re-running the PF
- clpsat.showopf % not sure