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