Medium scale benchmark problem
| Name | Description |
|---|---|
| OpenLoop | |
| PrimaryController | Primary Control System |
| PrimaryControlledSystem | |
| Case1 | Double line outage, no secondary control |
| Case2 | Double line outage, stabilizatiobn by tap changer voltage reference |
| Case3 | Double line outage, stabilizatiobn by capacitor switching |
| Case4 | Triple line outage, failed attempt to stabilize by capacitor switching and tap reference change |
| Case5 | Triple line outage, stabilization by load shedding |
| Case6 | Triple line outage, stabilization by combined load shedding and capacitor switching |
ABB_CC_Testcase.MediumScale.OpenLoop
Model of open-loop system This is a system with purely continuous nonlinear dynamics
model OpenLoop
Components.Slack G1(V0=1.03);
Components.Bus Bus11;
Components.Bus Bus14;
Components.Bus Bus12;
Components.Bus Bus13;
Components.Bus Bus21;
Components.Bus Bus22;
Components.Bus Bus23;
Components.Bus Bus24;
Components.Bus Bus31;
Components.Bus Bus32;
Components.Bus Bus33;
Components.Bus Bus34;
Components.Impedance L11(X=0.1);
Components.Impedance L12(X=0.1);
Components.Impedance L13(X=0.1);
Components.Impedance L21(X=0.1);
Components.Impedance L22(X=0.1);
Components.Impedance L23(X=0.1);
Components.Impedance L31(X=0.1);
Components.Impedance L32(X=0.1);
Components.Impedance L33(X=0.1);
Components.GenQSS2 G2(D=1, Pm0=0.5);
Components.GenQSS2 G3(D=1, Pm0=0.5);
Components.SimplerLoad Load1(ShedStep=0.1, as=0.5);
Components.SimplerLoad Load2(
P0=1,
Q0=0.4,
ShedStep=0.1,
as=0.5);
Components.SimplerLoad Load3(
Q0=0.4,
ShedStep=0.1,
P0=1.3,
as=0.5);
Components.Transformer T1;
Components.Transformer T2;
Components.Transformer T3;
Components.Capacitor C1(B=0.2);
Components.Capacitor C2(B=0.2);
Components.Capacitor C3(B=0.2);
Components.ParTripLine Tie12(X=0.8);
Components.ParTripLine Tie13(X=1.6);
Components.ParTripLine Tie23(X=0.8);
input Integer CapStep[3];
input Integer LoadStep[3];
input Integer TrStep[3];
input Real GEfd[2];
input Integer faulted[3];
output Real Vload[3]={Bus14.V,Bus24.V,Bus34.V};
output Real Vgen[2]={G2.V,G3.V};
output Real Vcap[3]={Bus13.V,Bus23.V,Bus33.V};
Real Pl=Load1.Pl + Load2.Pl + Load3.Pl;
Real Ql=Load1.Ql + Load2.Ql + Load3.Ql;
//
//auxilliary outputs
output Real B11va=Bus11.T.va;
output Real B11vb=Bus11.T.vb;
output Real B12va=Bus12.T.va;
output Real B12vb=Bus12.T.vb;
output Real B13va=Bus13.T.va;
output Real B13vb=Bus13.T.vb;
output Real B14va=Bus14.T.va;
output Real B14vb=Bus14.T.vb;
output Real B21va=Bus21.T.va;
output Real B21vb=Bus21.T.vb;
output Real B22va=Bus22.T.va;
output Real B22vb=Bus22.T.vb;
output Real B23va=Bus23.T.va;
output Real B23vb=Bus23.T.vb;
output Real B24va=Bus24.T.va;
output Real B24vb=Bus24.T.vb;
output Real B31va=Bus31.T.va;
output Real B31vb=Bus31.T.vb;
output Real B32va=Bus32.T.va;
output Real B32vb=Bus32.T.vb;
output Real B33va=Bus33.T.va;
output Real B33vb=Bus33.T.vb;
output Real B34va=Bus34.T.va;
output Real B34vb=Bus34.T.vb;
output Real G1ia=G1.T.ia;
output Real G1ib=G1.T.ib;
output Real G2ia=G2.T.ia;
output Real G2ib=G2.T.ib;
output Real G3ia=G3.T.ia;
output Real G3ib=G3.T.ib;
output Real Load1ia=Load1.T.ia;
output Real Load1ib=Load1.T.ib;
output Real Load2ia=Load2.T.ia;
output Real Load2ib=Load2.T.ib;
output Real Load3ia=Load3.T.ia;
output Real Load3ib=Load3.T.ib;
output Real C1ia=C1.T.ia;
output Real C1ib=C1.T.ib;
output Real C2ia=C2.T.ia;
output Real C2ib=C2.T.ib;
output Real C3ia=C3.T.ia;
output Real C3ib=C3.T.ib;
output Real Tie12ia=Tie12.T1.ia;
output Real Tie12ib=Tie12.T1.ib;
output Real Tie13ia=Tie13.T1.ia;
output Real Tie13ib=Tie13.T1.ib;
output Real Tie23ia=Tie23.T1.ia;
output Real Tie23ib=Tie23.T1.ib;
output Real L11ia=L11.T1.ia;
output Real L11ib=L11.T1.ib;
output Real L12ia=L12.T1.ia;
output Real L12ib=L12.T1.ib;
output Real L13ia=L13.T1.ia;
output Real L13ib=L13.T1.ib;
output Real L21ia=L11.T1.ia;
output Real L21ib=L21.T1.ib;
output Real L22ia=L22.T1.ia;
output Real L22ib=L22.T1.ib;
output Real L23ia=L23.T1.ia;
output Real L23ib=L23.T1.ib;
output Real L31ia=L31.T1.ia;
output Real L31ib=L31.T1.ib;
output Real L32ia=L32.T1.ia;
output Real L32ib=L32.T1.ib;
output Real L33ia=L33.T1.ia;
output Real L33ib=L33.T1.ib;
//
output Real G1Pg=G1.Pg;
output Real G1Qg=G1.Qg;
output Real G2Pg=G2.Pg;
output Real G2Qg=G2.Qg;
output Real G3Pg=G3.Pg;
output Real G3Qg=G3.Qg;
output Real Load1Pl=Load1.Pl;
output Real Load1Ql=Load1.Ql;
output Real Load2Pl=Load2.Pl;
output Real Load2Ql=Load2.Ql;
output Real Load3Pl=Load3.Pl;
output Real Load3Ql=Load3.Ql;
equation
connect(Bus11.T, G1.T);
connect(Bus12.T, L11.T2);
connect(Bus11.T, L11.T1);
connect(L13.T1, Bus12.T);
connect(L12.T1, Bus11.T);
connect(L12.T2, Bus13.T);
connect(L13.T2, Bus13.T);
connect(Load1.T, Bus14.T);
connect(T1.T1, Bus13.T);
connect(T1.T2, Bus14.T);
connect(Bus22.T, L21.T2);
connect(Bus21.T, L21.T1);
connect(L23.T1, Bus22.T);
connect(L22.T1, Bus21.T);
connect(L22.T2, Bus23.T);
connect(L23.T2, Bus23.T);
connect(Load2.T, Bus24.T);
connect(T2.T1, Bus23.T);
connect(T2.T2, Bus24.T);
connect(C1.T, Bus13.T);
connect(C2.T, Bus23.T);
connect(G2.T, Bus21.T);
faulted = {Tie12.faulted,Tie23.faulted,Tie13.faulted};
CapStep = {C1.step,C2.step,C3.step};
TrStep = {T1.tappos,T2.tappos,T3.tappos};
LoadStep = {Load1.step,Load2.step,Load3.step};
GEfd = {G2.Efd,G3.Efd};
connect(Bus32.T, L31.T2);
connect(Bus31.T, L31.T1);
connect(L33.T1, Bus32.T);
connect(L32.T1, Bus31.T);
connect(L32.T2, Bus33.T);
connect(L33.T2, Bus33.T);
connect(Load3.T, Bus34.T);
connect(T3.T1, Bus33.T);
connect(T3.T2, Bus34.T);
connect(C3.T, Bus33.T);
connect(G3.T, Bus31.T);
connect(Tie23.T1, Bus22.T);
connect(Bus12.T, Tie13.T1);
connect(Bus32.T, Tie23.T2);
connect(Bus22.T, Tie12.T1);
connect(Bus32.T, Tie13.T2);
connect(Tie12.T2, Bus12.T);
end OpenLoop;
ABB_CC_Testcase.MediumScale.PrimaryController
Model of primary-controllers This is a system with purely continuous nonlinear dynamics
| Name | Default | Description |
|---|---|---|
| Ef0[2] | {1.55,1.55} | |
| Efmax[2] | {1.78,1.78} | |
| SimulinkSafe | true | |
| TapDelay | 30 | |
| DB[3] | {0.01*3,0.01*3,0.01*3} | |
| up_limit0[2] | {false,false} | |
| GenVref[2] | {1.03,1.03} |
model PrimaryController "Primary Control System"
parameter Real Ef0[2](
min=1.5,
max=9) = {1.55,1.55};
Real tEfd[2];
parameter Real Efmax[2]={1.78,1.78};
parameter Boolean SimulinkSafe=true;
parameter Real TapDelay=30;
parameter Real DB[3]={0.01*3,0.01*3,0.01*3};
parameter Boolean up_limit0[2]={false,false};
input Real Vgen[2];
input Real Vload[3];
input Real Vcap[3];
input Real TapVref[3];
parameter Real GenVref[2]={1.03,1.03};
output Real Efd[2](start=Ef0);
output Integer tappos[3];
output Real timer[3];
output Boolean idle[3];
output Boolean wait[3];
output Boolean action[3];
output Boolean up_limit[2](start=up_limit0, fixed=true);
Components.DBControl TapCon;
equation
// generator voltage control
for m in 1:2 loop
up_limit[m] = if not (pre(up_limit[m])) then (tEfd[m] > Efmax[m]) else not
(Vgen[m] > GenVref[m]);
if SimulinkSafe then
1e-2*der(tEfd[m]) + tEfd[m] = if up_limit[m] then Efmax[m] else Ef0[m] +
50*(GenVref[m] - Vgen[m]);
else
tEfd[m] = if up_limit[m] then Efmax[m] else Ef0[m] + 50*(GenVref[m] -
Vgen[m]);
end if;
end for;
Efd = tEfd;
// connection of tap controller
TapCon.Vref = TapVref;
TapCon.u = Vload;
tappos = TapCon.y;
// connection auxilliary variables
timer = TapCon.timer;
idle = TapCon.idle;
wait = TapCon.wait;
action = TapCon.action;
end PrimaryController;
ABB_CC_Testcase.MediumScale.PrimaryControlledSystem
Connection of OpenLoop and Primary control systems
| Name | Default | Description |
|---|---|---|
| faultTime | 10 | |
| tapstepsize | 0.02 | |
| loadstepsize | 0.05 | |
| CapStep[3] | redeclare input Integer CapStep[3] | |
| LoadStep[3] | redeclare input Integer LoadStep[3] | |
| TapVref[3] | redeclare input Real TapVref[3] | |
| faulted[3] | redeclare input Integer faulted[3] |
model PrimaryControlledSystem
parameter Real faultTime=10;
parameter Real tapstepsize=0.02;
parameter Real loadstepsize=0.05;
replaceable input Integer CapStep[3];
replaceable input Integer LoadStep[3];
replaceable input Real TapVref[3];
replaceable input Integer faulted[3];
output Real Vload[3];
output Real Vgen[2];
output Real Vcap[3];
output Real GEfd[2];
OpenLoop System;
PrimaryController Controller(SimulinkSafe=false);
output Integer tappos[3];
output Real timer[3];
output Boolean idle[3];
output Boolean wait[3];
output Boolean action[3];
output Boolean up_limit[2];
equation
Controller.Vgen = System.Vgen;
Controller.Vload = System.Vload;
Vload = System.Vload;
Vcap = System.Vcap;
Vgen = System.Vgen;
Controller.Vcap = System.Vcap;
Controller.TapVref = TapVref;
System.GEfd = Controller.Efd;
System.faulted = faulted;
LoadStep = {System.Load1.step,System.Load2.step,System.Load3.step};
CapStep = {System.C1.step,System.C2.step,System.C3.step};
System.TrStep = (Controller.tappos);
GEfd = System.GEfd;
tappos = Controller.tappos;
timer = Controller.TapCon.timer;
wait = Controller.TapCon.wait;
idle = Controller.TapCon.idle;
action = Controller.TapCon.action;
up_limit = Controller.up_limit;
end PrimaryControlledSystem;
ABB_CC_Testcase.MediumScale.Case1
model Case1 "Double line outage, no secondary control"
extends Modelica.Icons.Example;
PrimaryControlledSystem System;
equation
System.faulted = {0,0,if time > 100 then 2 else 0};
System.LoadStep = {0,0,0};
System.CapStep = {0,0,1};
System.TapVref = {1,1,1};
end Case1;
ABB_CC_Testcase.MediumScale.Case2
model Case2
"Double line outage, stabilizatiobn by tap changer voltage reference"
extends Modelica.Icons.Example;
PrimaryControlledSystem System;
equation
System.faulted = {0,0,if time > 100 then 2 else 0};
System.LoadStep = {0,0,0};
System.CapStep = {0,0,1};
System.TapVref = {1,if time > 150 then 0.95 else 1,if time > 150 then 0.95
else 1};
end Case2;
ABB_CC_Testcase.MediumScale.Case3
model Case3
"Double line outage, stabilizatiobn by capacitor switching"
extends Modelica.Icons.Example;
PrimaryControlledSystem System;
equation
System.faulted = {0,0,if time > 100 then 2 else 0};
// faulted = {0,0,0};
System.LoadStep = {0,0,0};
System.CapStep = {0,if time > 150 then 1 else 0,1};
System.TapVref = {1,1,1};
end Case3;
ABB_CC_Testcase.MediumScale.Case4
model Case4
"Triple line outage, failed attempt to stabilize by capacitor switching and tap reference change"
extends Modelica.Icons.Example;
PrimaryControlledSystem System;
equation
System.faulted = {0,if time > 110 then 1 else 0,if time > 100 then 2 else 0};
// faulted = {0,0,0};
System.LoadStep = {0,0,0};
System.CapStep = {0,if time > 150 then 1 else 0,1};
System.TapVref = {1,if time > 150 then 0.95 else 1,if time > 150 then 0.95
else 1};
end Case4;
ABB_CC_Testcase.MediumScale.Case5
model Case5 "Triple line outage, stabilization by load shedding"
extends Modelica.Icons.Example;
PrimaryControlledSystem System;
equation
System.faulted = {0,if time > 110 then 1 else 0,if time > 100 then 2 else 0};
// faulted = {0,0,0};
System.LoadStep = {0,if time > 150 then 1 else 0,if time > 150 then 1 else 0};
System.CapStep = {0,0,1};
System.TapVref = {1,1,1};
end Case5;
ABB_CC_Testcase.MediumScale.Case6
model Case6
"Triple line outage, stabilization by combined load shedding and capacitor switching"
extends Modelica.Icons.Example;
PrimaryControlledSystem System;
equation
System.faulted = {0,if time > 110 then 1 else 0,if time > 100 then 2 else 0};
// faulted = {0,0,0};
System.LoadStep = {0,0,if time > 140 then 1 else 0};
System.CapStep = {0,if time > 140 then 1 else 0,1};
System.TapVref = {1,if time > 140 then 0.95 else 1,if time > 140 then 0.95
else 1};
end Case6;