PowerWorld AGC In Stability

advertisement
Incorporation of Automatic
Generation Control in
Transient Stability Simulation
WECC MVWG
November 20, 2014
Jamie Weber, Ph.D.
Director of Software Development
weber@powerworld.com
217 384 6330 ext 13
2001 South First Street
Champaign, Illinois 61820
+1 (217) 384.6330
support@powerworld.com
http://www.powerworld.com
Area AGC in Transient Stability
• Desire: Implementation of AGC response in
Transient Stability
• LCFB1 model does this on a local level for one
generator
• Want this across an area instead
© 2014 PowerWorld Corporation
2
Software Implementation
• New Transient Stability Model with an Area
–Area AGC Model – New Model
• Industry has always used a modular approach for generator models
–
–
–
–
–
–
–
–
–
–
–
Machine (Generator/Converter Model)
Exciter (P and Q controller)
Governor (Drive Train)
Stabilizer (Pitch Control)
Relay Model
Under Excitation Limiter
Over Excitation Limiter
Compensator Model
Aerodynamic Model (recent addition for Type 3 Wind)
Pref Controller (recent addition for renewable and LCFB1)
Plant Controller (recent addition for renewable)
–AGC Controller – New Model Type
© 2014 PowerWorld Corporation
3
General Signal Flow
Area
Update AGC Control
at an interval
AreaAGC
ACE
GenAGCControl1
GenAGCControl2
PartFact1
Active1
MWReference1
Generator1
Governor1
PartFact2
Active2
MWReference2
Generator2 Governor2
© 2014 PowerWorld Corporation
...
Generator3
4
Area AGC Model:
AreaAGC
• Create a new Area AGC Model with following
Parameter
Description
Units
Bus
Specification of the bus at which frequency measurement is taken
Bias
Frequency Bias [MW/0.1Hz]
MW/0.1Hz
Deadband
No response if ACE within this deadband
MW
PanicHighOn
Panic Mode is entered if the frequency goes above this
Hz
PanicHighOff
If a panic mode is entered due to HIGH frequency, this is the frequency
in Hz BELOW which the system must fall to exit the panic mode
Hz
PanicLowOn
Panic mode is entered if the frequency goes below this
Hz
PanicLowOff
If a panic mode is entered due to LOW frequency, this is the frequency
in Hz ABOVE which the system must recover to exit the panic mode
Hz
UpdateTime
AGC Update Cycle Time in Seconds. AGC signals are updated at this
interval
Seconds
© 2014 PowerWorld Corporation
5
Notes on AreaAGC model
• Area Frequency is measured at one bus
• ACE calculation uses
– Bias and Deadband terms
– List of tie-lines for the area (Area designations matter)
• What changes in “Panic Mode”
– Generators with AGC Mode = 2 (LOCAL) or 3
(BASELOAD) will participate in AGC just like they were
set to AGC Mode = 1 (ON)
– ACE Calculation will no longer include tie-line flow
portion. ACE is only concerned with returning to
nominal frequency (60 Hz)
© 2014 PowerWorld Corporation
6
Generator Other Model:
AGCSetpoint
Parameter
Description
Units
Mode
Integer Value 0 (OFF), 1 (ON), 2 (LOCAL), or 3 (BASELOAD)
• OFF – means it’s ignored for AGC purposes
• ON – means it participates in AGC
• LOCAL – means it normally doesn’t particular in AGC, but
during Panic Mode it will participate
• BASELOAD – means it only participates if moving Pref pushes
the generator back toward it’s initial value
Default
Integer Value 0 (No, use specific values), 1 (get values from case)
If value set to 1, then PartFact, Pmax, and Pmin will be obtained
from the power flow input data and stability record values are
ignored
PartFact
Participation Factor for us in AGC
None
Pmax
Maximum Power reference signal output
MW
Pmin
Minimum Power reference signal output
MW
© 2014 PowerWorld Corporation
7
Generator Other Model:
AGCPulseRate
Parameter
Description
Units
Mode
Integer Value 0 (OFF), 1 (ON), 2 (LOCAL), or 3 (BASELOAD)
Default
Integer Value 0 (No, use specific values), 1 (get values from case)
If value set to 1, then PartFact, Pmax, and Pmin will be obtained
from the power flow input data and stability record values are
ignored
PartFact
Participation Factor for us in AGC
None
Pmax
Maximum Power reference signal output
MW
Pmin
Minimum Power reference signal output
MW
PulseRate
Rate at which the MWReference signal changes
MW/Second
PulseLength
Length of time that the pulse up or down occurs. This should
normally be less than the Area AGC Model’s UpdateTime. Thus
the UpdateTime may be 10 seconds and PulseLength is 2 seconds
Second
PulseLengthPanic
When Area AGC Model enters panic mode, then you can increase
the length of the pulse.
Second
© 2014 PowerWorld Corporation
8
AreaAGC Update
• AGC update is done at a user-specified interval of
UpdateTime seconds
– Handled at the start of each time-step (within
numerical integration this update is “algebraic”)
• Process done each update is as follows
– CalculateACE
– Call UpdateAGCSignal on each generator in the area
– Call RespondToAGCSignal on each generator in the area
• Also requires update of many other models to
receive a MWReference input signal (discussed
shortly)
© 2014 PowerWorld Corporation
9
AGC ACE Calculation
• Calculation ACE
– Area designations determine the list of tie-line. ACE
attempts to bring tie-line flows back to initial condition
– Normal Operation ACE Equation
๐ด๐ถ๐ธ = ๐‘€๐‘’๐‘Ž๐‘ ๐ต๐‘ข๐‘ ๐น๐‘Ÿ๐‘’๐‘ž − ๐‘๐‘œ๐‘š๐‘–๐‘›๐‘Ž๐‘™๐น๐‘Ÿ๐‘’๐‘ž ∗ 10 ∗ ๐ต๐‘–๐‘Ž๐‘  +
๐‘€๐‘Š − ๐ผ๐‘›๐‘–๐‘ก๐‘‡๐‘–๐‘’๐น๐‘™๐‘œ๐‘ค
๐‘ก๐‘–๐‘’๐‘™๐‘–๐‘›๐‘’๐‘ 
– Panic Mode ACE Equations (ignore tielines)
๐ด๐ถ๐ธ = ๐‘€๐‘’๐‘Ž๐‘ ๐ต๐‘ข๐‘ ๐น๐‘Ÿ๐‘’๐‘ž − ๐‘๐‘œ๐‘š๐‘–๐‘›๐‘Ž๐‘™๐น๐‘Ÿ๐‘’๐‘ž ∗ 10 ∗ ๐ต๐‘–๐‘Ž๐‘ 
• For both, also apply dead-band as follows
– If ๐ด๐ถ๐ธ < ๐ท๐‘’๐‘Ž๐‘‘๐‘๐‘Ž๐‘›๐‘‘ ๐‘กโ„Ž๐‘’๐‘› ๐ด๐ถ๐ธ = 0.0
© 2014 PowerWorld Corporation
10
Allocate ACE to all Generators
• Using ACE value, process through all generators in
the Area to calculate whether that generator will
respond and what the summation of the
participation factors are
– GenAGC.UpdateAGCSignal(
Inputs: Time, ACE, AGCStatus;
Outputs: PartFactSum, AGCActive);
• Then ask each GenAGC model to respond to the
ACE signal and pass in the PartFactSum.
– GenAGCx.RespondToAGCSignal(
Inputs: Time, ACE, AGCStatus,
PartFactSum , AGCActive);
© 2014 PowerWorld Corporation
11
GenAGC.UpdateAGCSignal
Procedure UpdateAGCSignal(INPUTS: PresentTime : Time; ACE : float; AGCStatus : AreaAGCStatus;
OUTPUTS: PartFactSum : float; AGCActive : boolean);
// Note: AGCStatus = OFF, ON, LOCAL, or BASELOAD
// Parameters of GenAGC Controller
// Mode, PartFact, Pmax, Pmin
AGCActive = false;
if Mode <> OFF then begin // generator AGC is set off so it won't respond
if (Pelec > PMax) or (PElec < PMin) then begin
AGCActive = True;
end
else if (Mode = ON) or // Generator is on normal AGC mode
(AGCStatus = PanicHigh) or (AGCStatus = PanicLow) // Area on PANIC mode!
then begin
AGCActive = True;
PartFactSum = PartFactSum + PartFact;
end
else if (Mode = BASELOAD) then begin
// Unless under "panic" mode, BaseLoad units try to return to their initial value!
local_DeltaPElec := Pelec - GetPGenInitialInMW;
if ((local_DeltaPElec > +MWAGCTolerance) and (ACE >= 0)) or
((local_DeltaPElec < -MWAGCTolerance) and (ACE <= 0))
then begin
AGCActive = True;
PartFactSum = PartFactSum + PartFact;
end;
end;
end;
Unit outside limit
Unit Mode = ON
or during Panic
include
LOCAL, BASELOAD
Mode = BASELOAD
Only respond if pushing
back toward initial value
© 2014 PowerWorld Corporation
12
GenAGC.RespondToAGCSignal
AGCSetpoint (Set MWReference immediately)
Procedure RespondToAGCSignal(INPUTS: PresentTime : Time; ACE : float; AGCStatus : AreaAGCStatus;
INPUTS: PartFactSum : float; AGCActive : boolean);
if AGCActive then begin
if
(PElec > PMax) then UseThisMWReference = Pmax
else if (PElec < PMin) then UseThisMWReference = Pmin
else UseThisMWReference = UseThisMWReference - ACE * PartFact/PartFactSum;
Unit outside limit – always respond
// MWReference signal will simply change immediately to UseThisMWReference
end;
AGCPulseRate (Ramp MWReference up or down with a slope)
Procedure RespondToAGCSignal(INPUTS: PresentTime : Time; ACE : float; AGCStatus : AreaAGCStatus;
INPUTS: PartFactSum : float; AGCActive : boolean);
if AGCActive then begin
if
(PElec > PMax) then UseThisPulseRate = -PulseRate
else if (PElec < PMin) then UseThisPulseRate = +PulseRate
else if (ACE > 0) then UseThisPulseRate = -PulseRate
else if (ACE < 0) then UseThisPulseRate = +PulseRate
else UseThisPulseRate = 0
Unit outside limit – always respond
if AGCStatus = ON then PulseExpirationTime = PresentTime + PulseLength
else PulseExpirationTime = PresentTime + PulseLengthPanic
// MWReference signal will now change with derivative of UseThisPulseRate
// until the time PulseExpirationTime is exceeded
end;
© 2014 PowerWorld Corporation
13
Sample MW Reference Values from
Generator AGC Control Models
AGCSetpoint
Immediate
MWReference change
every 3 seconds
85
80
75
70
65
88
86
AGCPulseRate
Update every 3 seconds
84
82
80
78
76
74
60
72
55
70
50
68
45
66
64
40
Pulse for 1 second
62
60
35
58
30
56
25
54
20
52
50
0
1
2
g
b
c
d
e
f
b
c
d
e
f
g
b
c
d
e
f
g
3
4
5
6
7
8
9
10 11 12 13
States of AGC\MW Setpoint_Gen One #1
States of AGC\MW Setpoint_Gen Bus 2 #1
States of AGC\MW Setpoint_Gen Bus 3 #1
14 15
2
3
4
g
b
c
d
e
f
b
c
d
e
f
g
b
c
d
e
f
g
© 2014 PowerWorld Corporation
5
6
7
8
9
10
11
12
13
14
States of AGC\MW Setpoint, Gen Bus 2 #1
States of AGC\MW Setpoint, Gen Bus 3 #1
States of AGC\MW Setpoint, Gen One #1
14
Pass MW Reference Signal
• This new MWReference will then be passed to the appropriate
generator model to respond
• Various types of model must take this as an input
1.
2.
3.
4.
Each Plant Controller (REPC_A)
Each Pref Controller (LCFB1, WTGTRQ_A)
WT3P (old type 3 pitch control)
Each Governor (all the dozens of governor types)
• The software will send this signal to the model in the order of
precedence above
• If none of these model exist, then just change P Mechanical for the
machine model appropriately
• If no machine model exists, just change the Pelec for the algebraic
model
• Conversion is unique for each model – Be careful of per unit base!
© 2014 PowerWorld Corporation
15
Traditional
Synchronous Machine Modules
Network
AGC Controller
Vref
Over/Under
Excitation
Limiter
UEL/OEL
Relay Models
Iq
Ip
Vcomp
Efield
MWReference
Exciter
Vs
Stabilizer
Voltage
Compensation
Machine
Pref
Governor
© 2014 PowerWorld Corporation
ActualPmech
16
2nd Generation Type 3 Wind Turbine
AGC Controller
Plant_Pref
Network
Plant Level
Controller
REPC_A
Voltage
Compensation
Iq
Ip
Qref/Vref
Vcomp
Pref0
PRef Controller
WTGTRQ_A
Exciter
REEC_A
Pref
Iqord
Ipord
Machine
REGC_A
Pord
ωref
wt
Stabilizer
WTGPT_A
ฯด
Aero
WTGAR_A
Pm
wg
Governor
WTGT_A
© 2014 PowerWorld Corporation
17
2nd Generation Type 4 Wind Turbine
(REGC_A, REEC_A, WTGT_A, REPC_A)
AGC Controller
Plant_Pref
Network
Plant Level
Controller
REPC_A
Voltage
Compensation
Iq
Ip
Qref/Vref
Vcomp
Exciter
REEC_A
Pref
Iqord
Ipord
Machine
REGC_A
wg
Tm0
Governor
WTGT_A
© 2014 PowerWorld Corporation
18
Conversion of MWReference to Pref
• Pref is calculated from MWReference by algebra
using the following assumptions
– Assume the generator is operating at steady state and
nominal frequency (60 Hz)
– Calculate what Pref would be using this assumption
• This is what Pref would be when initializing the governor from
steady state if the MW output was equal to MWReference
• AGC is driving the frequency back to 60 Hz
• Caveats
– For some governors this is not possible
• Isochronous governor (Rselect=0 for some model or R = 0)
– AGC operates in MW units – be careful with per unit
values
© 2014 PowerWorld Corporation
19
GGOV1 example
๐‘ฎ๐’๐’—๐‘ถ๐’–๐’•
Solve 2 equations
to map PgenMW
to Pref
๐‘ฎ๐’๐’—๐‘ถ๐’–๐’• =
Rselect
Kigov = 0
Kigov <> 0
0
Not Possible: Isochronous
Isochronous
-2 or -1
Must update
Pmwset too
๐‘ท๐‘ฎ๐’†๐’๐‘ด๐‘พ
+ ๐’˜๐’‡๐’๐’
๐‘ป๐’“๐’‚๐’•๐’† ∗ ๐‘ฒ๐’•๐’–๐’“๐’ƒ
+1
๐‘ฎ๐’๐’—๐‘ถ๐’–๐’• = ๐‘ท๐’“๐’†๐’‡ − ๐‘น ∗ ๐‘ฎ๐’๐’—๐‘ถ๐’–๐’• ∗ ๐‘ฒ๐’‘๐’ˆ๐’๐’—
๐‘ฎ๐’๐’—๐‘ถ๐’–๐’• = ๐‘ท๐’“๐’†๐’‡ − ๐‘น ∗
๐‘ท๐‘ฎ๐’†๐’๐‘ด๐‘พ
∗ ๐‘ฒ๐’‘๐’ˆ๐’๐’—
๐‘ป๐’“๐’‚๐’•๐’†
© 2014 PowerWorld Corporation
๐ŸŽ = ๐‘ท๐’“๐’†๐’‡ − ๐‘น ∗ ๐‘ฎ๐’๐’—๐‘ถ๐’–๐’•
๐ŸŽ = ๐‘ท๐’“๐’†๐’‡ − ๐‘น ∗
๐‘ท๐‘ฎ๐’†๐’๐‘ด๐‘พ
๐‘ป๐’“๐’‚๐’•๐’†
20
GGOV1 Conversion
Procedure MWReferenceToPref(INPUTS: MWReference : float
OUTPUTS: ErrorConditions);
All conditions must meet
๐‘ท๐‘ฎ๐’†๐’๐‘ด๐‘พ
๐‘ฎ๐’๐’—๐‘ถ๐’–๐’• =
+ ๐’˜๐’‡๐’๐’
๐‘ป๐’“๐’‚๐’•๐’† ∗ ๐‘ฒ๐’•๐’–๐’“๐’ƒ
In addition, we must enforce equation below
If RSelect = 0 Then begin
depending on other input parameters
Error Condition because Isochronous
end
Else If Kigov <> 0 Then Begin
๐ŸŽ = ๐‘ท๐’“๐’†๐’‡ − ๐‘น ∗ ๐‘ฎ๐’๐’—๐‘ถ๐’–๐’•
Case RSelect of
-1,-2 : Pref = (MWReference/(TurbineMVARate*Kturb)+wfnl)*R;
1
: Pref = (MWReference/(TurbineMVARate)*R;
๐‘ท๐‘ฎ๐’†๐’๐‘ด๐‘พ
End;
๐ŸŽ
=
๐‘ท๐’“๐’†๐’‡
−
๐‘น
∗
End
๐‘ป๐’“๐’‚๐’•๐’†
Else Begin
Pref:= aDeltaMWOutput/(GetTRate*fKTurb*fKpgov);
๐‘ฎ๐’๐’—๐‘ถ๐’–๐’• = ๐‘ท๐’“๐’†๐’‡ − ๐‘น ∗ ๐‘ฎ๐’๐’—๐‘ถ๐’–๐’• ∗ ๐‘ฒ๐’‘๐’ˆ๐’๐’—
Case fRSelect of
-1,-2 : Pref = (MWReference/(TurbineMVARate*Kturb) + wfnl)/Kpgov*(1+R*Kpgov);
1
: Pref = (MWReference/(TurbineMVARate*Kturb) + wfnl)/Kpgov + R*MWReference/TurbineRate;
End;
End;
๐‘ท๐‘ฎ๐’†๐’๐‘ด๐‘พ
// If Kimw <> 0 then you also must change PMWSet value
๐‘ฎ๐’๐’—๐‘ถ๐’–๐’• = ๐‘ท๐’“๐’†๐’‡ − ๐‘น ∗
∗ ๐‘ฒ๐’‘๐’ˆ๐’๐’—
๐‘ป๐’“๐’‚๐’•๐’†
If fKimw <> 0 Then PmwSet := PMWSet + MWReference/GetTRate;
© 2014 PowerWorld Corporation
21
Where does it appear in GUI
• Machine, Exciter, Governor, and
Stabilizer remain prominent
• Other Models contain the other
categories of modules
• You see it in the
Model Explorer
• When inserting a
new Other Model
from the
generator dialog
• Plot Designer in
Transient Stability
Dialog
© 2014 PowerWorld Corporation
22
Model Explorer
© 2014 PowerWorld Corporation
23
Another Note:
Initialization of Dead-bands
• Most often, dead-bands have an output of zero at
initialization such as the input to a PI block or
when fed in speed deviation
• What about when output is non-zero
• We think that appropriate modeling is to apply the
dead-band around the initial condition
© 2014 PowerWorld Corporation
24
Example: GGOV1
© 2014 PowerWorld Corporation
25
Handling of Dead-bands
Dead-band around
Zero (0.0)
Output
Dead-band around
Initial Output Value
Output
InitOut
InitOut
Input
InitIn = InitOut+dB
Input
InitIn = InitOut
PowerWorld is switching to ensure we initialize around Initial Output
© 2014 PowerWorld Corporation
26
Download