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 -