# Exciter Model: REEC_A and REECA1

Following checks and corrections are applied during Validation and AutoCorrection.

- If 0.0 < Tv < 0.5*Mult*TimeStep then Tv = 0, ElseIf 0.5*Mult*TimeStep < Tv < Mult*TimeStep then Tv = Mult*TimeStep
- If 0.0 < Tp < 0.5*Mult*TimeStep then Tp = 0, ElseIf 0.5*Mult*TimeStep < Tp < Mult*TimeStep then Tp = Mult*TimeStep
- If 0.0 < Tiq < 0.5*Mult*TimeStep then Tiq = 0, ElseIf 0.5*Mult*TimeStep < Tiq < Mult*TimeStep then Tiq = Mult*TimeStep
- If 0.0 < Tpord < 0.5*Mult*TimeStep then Tpord = 0, ElseIf 0.5*Mult*TimeStep < Tpord < Mult*TimeStep then Tpord = Mult*TimeStep
- Kpp and Kip can't be both zero. Must be corrected by user.
- If Vmax < Vmin then swap the values
- If Qmax < Qmin then swap the values
- If Pmax < Pmin then swap the values
- If RPmax < RPmin then swap the values
- If Iqh < Iql then swap the values

Mult represents the user-specified value **Minimum time constant size as multiple of time step** option on the Validation page of the Transient Stability Dialog

TimeStep represents the integration time step being used as described on TimeStep

Following treatment is handled during the transient numerical simulation

- If Q limits > Qmax , then Qmax = Q limits or if Q limits < Qmin , then Qmin = Q limits
- If PIq limits > Vmax , then Vmax = PIq limits or if PIq limits < Vmin, then Vmin = PIq limits
- If Pord > Pmax , then Pmax = Pord or if Pord < Pmin, then Pmin = Pord

Model Equations and/or Block Diagrams

**Parameters:**

PfFlag | Power factor flag (1 – power factor control, 0 – Q control, which can be commanded by an external signal) |

VFlag | Voltage control flag (1 – Q control, 0 – voltage control) |

QFlag | Reactive power control flag ( 1 – voltage/Q control, 0 – constant pf or Q control) |

Pqflag | P/Q priority selection on current limit flag. 0 = Q priority; 1 = P priority |

Pflag | Power Flag (1 - multiply Pref signal by gen speed wg, 0 - do not multiply) |

Vdip | The voltage below which the reactive current injection (Iqinj) logic is activated (i.e. voltage_dip = 1) |

Vup | The voltage above which the reactive current injection (Iqinj) logic is activated (i.e. voltage_dip = 1) |

Trv | Filter time constant for voltage measurement |

dbd1 | Deadband in voltage error when voltage dip logic is activated (for overvoltage – thus overvoltage response can be disabled by setting this to a large number e.g. 999) |

dbd2 | Deadband in voltage error when voltage dip logic is activated (for undervoltage) |

kqv | Gain for reactive current injection during voltage dip (and overvoltage) conditions |

Iqh1 | Maximum limit of reactive current injection (Iqinj) |

Iql1 | Minimum limit of reactive current injection (Iqinj) |

Vref0 | The reference voltage from which the voltage error is calculated. This is set by the user. If the user does not specify a value it is initialized by the model to equal to the initial terminal voltage. |

Iqfrz | Value at which Iqinj is held for Thld seconds following a voltage dip if Thld > 0 |

Thld | Time delay for which the state of the reactive current injection is held after voltage_dip returns to zero. |

Thld2 | Time delay for which the active current limit (Ipmax) is held after voltage_dip returns to zero for Thld2 seconds at its value during the voltage dip. |

Tp | Filter time constant for electrical power measurement |

Qmax | Reactive power limit maximum |

Qmin | Reactive power limit minimum |

Vmax | Voltage control maximum |

Vmin | Voltage control minimum |

Kqp | Proportional gain on Q control |

Kqi | Integral gain on Q control |

Kvp | Proportional gain on V control |

Kvi | Integral gain on V control |

Vref1 | User-define reference/bias on the inner-loop voltage control (default value is zero) |

Tiq | Time constant on lag delay |

dPmax | Positive Ramp rate on power reference |

dPmin | Negative Ramp rate on power reference |

Pmax | Maximum power reference |

Pmin | Minimum power reference |

Tpord | Filter time constant on Pord |

Imax | Maximum allowable total converter current limit |

vq1 | VDL1: Voltage Point1 |

lq1 | VDL1: Iqmax Point1 |

vq2 | VDL1: Voltage Point2 |

lq2 | VDL1: Iqmax Point2 |

vq3 | VDL1: Voltage Point3 |

lq3 | VDL1: Iqmax Point3 |

vq4 | VDL1: Voltage Point4 |

lq4 | VDL1: Iqmax Point4 |

vp1 | VDL2: Voltage Point1 |

lp1 | VDL2: Ipmax Point1 |

vp2 | VDL2: Voltage Point2 |

lp2 | VDL2: Ipmax Point2 |

vp3 | VDL2: Voltage Point3 |

lp3 | VDL2: Ipmax Point3 |

vp4 | VDL2: Voltage Point4 |

lp4 | VDL2: Ipmax Point4 |

MVABase | MVABase |

**Current Limit Logic Psuedo Code**

The following pseudo-code describes how the values for Ipmax, Ipmin, Iqmax, and Iqmin are updated.

Voltage_Thld2TimerActive = special boolean related to timer

local_V = StateVtfilter // Vt State 1

if VDL1 table is empty **then **Iqmax = 1E10

**else** Iqmax = lookup from VL1 table using local_V

**if** not Voltage_Thld2TimerActive **then begin**

**if** VDL2 table is empty then Ipmax = 1E10

**else** Ipmax = lookup from VDL2 table using local_V

**end**

**if** PQFlag = **0** **then begin** // Q priority [default]

**If** Imax < Iqmax Then Iqmax = IMax

Iqmin = -Iqmax

**if** not Voltage_Thld2TimerActive then begin

local_I = Sqr(Imax) - Sqr(Iqcmd)

**if** local_I < **0** then local_I = **0**

**else** local_I = sqrt( local_I )

**if** local_I < Ipmax **Then **Ipmax = local_I

**end**

Ipmin = **0**

**end**

**else** **Begin** // P priority

**if** not Voltage_Thld2TimerActive **then begin**

**if** IMax < Ipmax **Then **Ipmax = Imax

**end**

Ipmin = **0**

local_I = Sqr(Imax) - Sqr(Ipcmd)

**if** local_I < 0 **then** local_I = **0**

**else** local_I = sqrt( local_I )

**if** local_I < Iqmax **Then** Iqmax = local_I

Iqmin = -Iqmax

**end**