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 |
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;
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;
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;
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;
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;
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;
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;
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;
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;