Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

The output from the generator is determined by the turbine power (PMECH). The variable PMECH(MC) may be updated by code in CONEC subroutine during a simulation but that needs some Fortran code and a compiler.

Instead I propose that governor model IEESGO is used for update of PMECH as you wish during the simulation. With the parameters I have chosen below the model will instantaneously update PMECH after changes to GREF. The script is adapted to savnw test case, but the concept can be used for any case.

psspy.case('savnw.sav')
psspy.rstr('savnw.snp')
psspy.cong(0)
psspy.conl(0,1,1,[0,0],[ 80.0,0.0, 20.0, 80.0])
psspy.conl(0,1,2,[0,0],[ 80.0,0.0, 20.0, 80.0])
psspy.conl(0,1,3,[0,0],[ 80.0,0.0, 20.0, 80.0])
ibus = 3011
gid = '1'
dp = 50.  # MW change for generator
ierr, mbase = psspy.macdat(ibus, gid, 'MBASE')
# add dummy governor without droop and time constants
psspy.add_plant_model(ibus,gid,7,r"""IEESGO""",0,"",0,[],[],11,[0.0,0.0,0.05,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0])
psspy.machine_array_channel([-1,6,ibus],gid,"")

ierr = psspy.strt(0, 'test1.out')
psspy.run(0, 0.5,0,1,0)
psspy.increment_gref(ibus,gid, dp/mbase)
psspy.run(0, 1.0,0,1,0)
psspy.increment_gref(ibus,gid,-dp/mbase)
psspy.run(0, 2.0,0,1,0)

The following Figure shows how PMECH for the studied generator is updated during the simulation. image description

PMECH is always in pu generator base (Mbase=1000). The turbine power is here temporarily increased with 50 MW (50/1000=0.05 pu) at t=0.5 s and reset again at t=1 s.

The output from the generator is determined by the turbine power (PMECH). The variable PMECH(MC) may be updated by code in CONEC subroutine during a simulation but that needs some Fortran code and a compiler.

Instead I propose that governor model IEESGO is used for update of PMECH as you wish during the simulation. With the parameters I have chosen below the model will instantaneously update PMECH after changes to GREF. The script is adapted to savnw test case, but the concept can be used for any case.

psspy.case('savnw.sav')
psspy.rstr('savnw.snp')
psspy.cong(0)
psspy.conl(0,1,1,[0,0],[ 80.0,0.0, 20.0, 80.0])
psspy.conl(0,1,2,[0,0],[ 80.0,0.0, 20.0, 80.0])
psspy.conl(0,1,3,[0,0],[ 80.0,0.0, 20.0, 80.0])
ibus = 3011
gid = '1'
dp = 50.  # MW change for generator
ierr, mbase = psspy.macdat(ibus, gid, 'MBASE')
# add dummy governor without droop and time constants
psspy.add_plant_model(ibus,gid,7,r"""IEESGO""",0,"",0,[],[],11,[0.0,0.0,0.05,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0])
psspy.machine_array_channel([-1,6,ibus],gid,"")

ierr = psspy.strt(0, 'test1.out')
psspy.run(0, 0.5,0,1,0)
psspy.increment_gref(ibus,gid, dp/mbase)
psspy.run(0, 1.0,0,1,0)
psspy.increment_gref(ibus,gid,-dp/mbase)
psspy.run(0, 2.0,0,1,0)

The following Figure shows how PMECH for the studied generator is updated during the simulation. image description

PMECH is always in pu generator base (Mbase=1000). The turbine power is here temporarily increased with 50 MW (50/1000=0.05 pu) at t=0.5 s and reset again at t=1 s.

EDIT:

Since the post is revived, I can improve by showing the block diagram of IEESGO:

image description

With the selected parameter all blocks except the limiter block are ignored. Speed input signal is blocked and the output PMECH only depends on Po and Pmax and Pmin. Those limits are set to 1 and 0 in the script above. Note, set Pmin negative if you want to set negative PMECH.

PMECH will immediately follow Po with no time delay. Any number of step changes can be made on PMECH during the simulation using API increment_gref or change_gref.

It is thereby very easy to manually update the turbine power of a generator using this governor model and parameters.