Multi-Transient Stability Case
Requirement
Using InterPSS to run automated loadflow and dynamic study cases
Machine and Net Data (Salient Pole machine)
Sn 174MVA 17kV nominal PF = 0.95
Xd 1.588 Xq 0.838
Xd' 0.371
Xd" 0.251 Xq" 0.236
Tdo' 9.19
Tdo" 0.051 Tqo" 0.1
H = 3.09 Xl 0.177
Sat1 = 0.066 Sat12 = 0.192 Sliner = 0.7
Step up Transformer Data
Rt = 0.0017 Xt = 0.1293 on 174MVA
Fixed ratio 17kV / 346kV (manual changer on high side)
Line segment 1: 0.000155 +j0.0125. nominal 330kV
Line segment 2: 0 +j0.0609 nominal 330kV
Connection to Infinite Bus. 330kV
The infinite bus will be represented by a constant voltage source
The machine is equipped with an Exciter and PSS
Exciter Representation
The machine is equipped with a static exciter that is connected in shunt. The exciter can be represented in block diagram form according to the figure 1:
Figure 1: AVR representation
Exciter CML Code
<ControllerDescriptionBegin> // do not modify this tag line
@AnController(
input="this.refPoint - mach.vt + pss.vs - this.ifdBlock.y",
output="this.gcuBlock.y",
refPoint="this.krBlock.u0 - pss.vs + mach.vt - this.QgBlock.y",
display= {"str.out_y, this.gcuBlock.y",
"str.ifd_y, this.ifdBlock.y",
"str.LL1, this.tgrBlock.y",
"str.Ug, this.UgBlock.y",
"str.Qg, this.QgBlock.y",
"str.Vref, this.refPoint"} )
<ControllerDescriptionEnd> // do not modify this tag line
<ControllerFieldDescriptionBegin> // do not modify this tag line
public double tr = 0.02, kr = 500.0, umax = 6.35, umin = -5.4;
public double k = 1.0, tc1 = 2.0, tb1 = 8.0, u1max = umax/kr, u1min = umin/kr;
public double kq = 0.0434, kic = 0.0776, imax = 2.0, imin = 0.0;
@AnControllerField(
type= CMLFieldType.ControlBlock,
input= "mach.q" ,
parameter={"type.NoLimit", "this.kq", "this.tr"},
y0= "mach.q",
initOrderNumber= -2 )
DelayControlBlock QgBlock;
@AnControllerField(
type= CMLFieldType.ControlBlock,
input= "mach.vt" ,
parameter={"type.NoLimit", "this.k", "this.tr"},
y0= "mach.vt",
initOrderNumber= -1 )
DelayControlBlock UgBlock;
@AnControllerField(
type= CMLFieldType.ControlBlock,
input= "this.refPoint + pss.vs - this.UgBlock.y + this.QgBlock.y" ,
parameter = "type.NonWindup", "this.k", "this.tc1", "this.tb1",
"this.u1max", "this.u1min"},
y0= "this.krBlock.u0",
initOrderNumber=1 )
FilterControlBlock tgrBlock;
@AnControllerField(
type= CMLFieldType.StaticBlock,
input= "this.tgrBlock.y" ,
parameter={"type.Limit", "this.kr", "this.umax", "this.umin"},
y0= "this.gcuBlock.u0/mach.vt + this.ifdBlock.y",
initOrderNumber=2 )
GainBlock krBlock;
@AnControllerField(
type= CMLFieldType.StaticBlock,
input= "mach.ifd" ,
parameter={"type.Limit", "this.kic", "this.imax", "this.imin"},
y0= "mach.ifd*this.kic",
initOrderNumber=3 )
GainBlock ifdBlock;
public double ks = 1.0, ts = 0.004;
@AnControllerField(
type= CMLFieldType.ControlBlock,
input="this.krBlock.y*mach.vt - this.ifdBlock.y",
parameter={"type.NoLimit", "this.ks", "this.ts"},
y0="mach.efd",
initOrderNumber=4 )
DelayControlBlock gcuBlock;
<ControllerFieldDescriptionEnd> // do not modify this tag line
PSS Representation
The stabiliser on this machine is a variation of the IEEE type 2A. The implementation is shown in block diagram form in figure 2:
Figure 2: PSS type 2A implementation
PSS CML Code
<ControllerDescriptionBegin> // do not modify this tag line
@AnController(
input="mach.speed",
output="this.LLBlock2.y",
refPoint="0.0",
display= {"str.Vpss, this.output",
"str.d_wr, this.washoutBlock2.y",
"str.d_Pint, this.dPintBlock.y",
"str.d_Pacc, this.rtBlock.y-this.dPintBlock.y"} )
<ControllerDescriptionEnd> // do not modify this tag line
<ControllerFieldDescriptionBegin> // do not modify this tag line
public double k = 1.0, t6 = 0.02, tw = 2.5, ks2 = 0.404;
public double t8 = 0.2, t9 = 0.1;
public int m = 5, n = 1;
public double ks1 = 4.5, t1 = 0.12, t2 = 0.02, t3 = 0.22, t4 = 0.04;
public double max = 0.05, min = -0.05;
@AnControllerField(
type= CMLFieldType.ControlBlock,
input= "mach.speed" ,
parameter={"type.NoLimit", "this.k", "this.t6"},
y0= "mach.speed",
initOrderNumber = -5 )
DelayControlBlock wrBlock;
@AnControllerField(
type= CMLFieldType.ControlBlock,
input= "mach.pe" ,
parameter={"type.NoLimit", "this.k", "this.t6"},
y0= "mach.pe",
initOrderNumber = -6 )
DelayControlBlock PgBlock;
@AnControllerField(
type= CMLFieldType.ControlBlock,
input= "this.wrBlock.y" ,
parameter={"type.NoLimit", "this.k", "this.tw"},
y0= "this.washoutBlock2.u0",
initOrderNumber = -2 )
WashoutControlBlock washoutBlock1;
@AnControllerField(
type= CMLFieldType.ControlBlock,
input= "this.washoutBlock1.y" ,
parameter={"type.NoLimit", "this.k", "this.tw"},
y0= "this.rtBlock.u0 - this.dPintBlock.y",
initOrderNumber = -1 )
WashoutControlBlock washoutBlock2;
@AnControllerField(
type= CMLFieldType.ControlBlock,
input= "this.PgBlock.y" ,
parameter={"type.NoLimit", "this.k", "this.tw"},
y0= "this.dPintBlock.u0",
initOrderNumber = -4 )
WashoutControlBlock washoutBlock3;
@AnControllerField(
type= CMLFieldType.ControlBlock,
input= "this.washoutBlock3.y" ,
parameter={"type.NoLimit", "this.ks2", "this.tw"},
y0= "-this.gainBlock.u0 - this.rtBlock.y",
initOrderNumber = -3 )
DelayControlBlock dPintBlock;
@AnControllerField(
type= CMLFieldType.ControlBlock,
input="this.refPoint + this.washoutBlock2.y + this.dPintBlock.y",
parameter={"type.t8", "this.t9", "this.m", "this.n"},
y0="this.gainBlock.u0 + this.dPintBlock.y",
initOrderNumber = 1 )
FilterNthOrderBlock rtBlock;
@AnControllerField(
type= CMLFieldType.StaticBlock,
input= "this.rtBlock.y - this.dPintBlock.y" ,
parameter={"type.NoLimit", "this.ks1"},
y0= "this.LLBlock1.u0",
initOrderNumber = 2 )
GainBlock gainBlock;
@AnControllerField(
type= CMLFieldType.ControlBlock,
input= "this.gainBlock.y" ,
parameter={"type.NonWindup", "this.k", "this.t1", "this.t2", "this.max", "this.min"},
y0= "this.LLBlock2.u0",
initOrderNumber = 3 )
FilterControlBlock LLBlock1;
@AnControllerField(
type= CMLFieldType.ControlBlock,
input= "this.LLBlock1.y" ,
parameter={"type.NonWindup", "this.k", "this.t3", "this.t4", "this.max", "this.min"},
y0= "this.output",
initOrderNumber = 4 )
FilterControlBlock LLBlock2;
<ControllerFieldDescriptionEnd> // do not modify this tag line
Scenarios
Desire is to script the network including regulator. It seems the approach to attaching an exciter has changed, as the example scripts all break when trying to add an exciter to a machine
Would like to perform the following load flow calcs in an automated way:
LF Case 1: P=0 Q=0 Vt=1.0.. what is required inf bus Vi
Dstab Case 1: from LF1, 5% Vref step [record time, Vt, P ; check settling times with PSS OFF]
Dstab case 2: from LF 1, -5% Vref step [record time, Vt, P ; check settling times with PSS OFF]
LF case 2: P=0 Q=0.6 Vt=1.. what is required Vi, Efd
Dstab 3: from LF2 -5% Vref step. Record time, Vt, P, Q,Ifd; check settling with PSS OFF
LF3: P=0 Q= -0.4 Vt=1.. what is required Vi, Efd
Dstab 4: from LF3 5% Vref step. record as with case 3
LF4: P=0.1 Q= -0.4 Vt=1.. what is required Vi, Efd
Dstab 5; from LF4 5% Vref Step, at t=10sec step back to initial conditions. record as with case 3. PSS ON
LF5; P=0.5, Q=0.3, Vt =1.. wht is Vi, Efd
Dstab 6. step 5% plus and minus. record as before and check settling with PSS OFF
Dstab 7. step 5% plus and minus. record as before and check settling with PSS ON
Result Analysis
- Settling time -