def __init__(self): super(IEEESTData, self).__init__() self.avr = IdxParam(info='Exciter idx', mandatory=True) self.MODE = NumParam(info='Input signal selection', mandatory=True) self.BUSR = IdxParam(info='Remote bus idx (local if empty)') self.A1 = NumParam(default=1, tex_name='A_1', info='filter time const. (pole)') self.A2 = NumParam(default=1, tex_name='A_2', info='filter time const. (pole)') self.A3 = NumParam(default=1, tex_name='A_3', info='filter time const. (pole)') self.A4 = NumParam(default=1, tex_name='A_4', info='filter time const. (pole)') self.A5 = NumParam(default=1, tex_name='A_5', info='filter time const. (zero)') self.A6 = NumParam(default=1, tex_name='A_6', info='filter time const. (zero)') self.T1 = NumParam(default=1, tex_name='T_1', vrange=[0, 10], info='first leadlag time const. (zero)') self.T2 = NumParam(default=1, tex_name='T_2', vrange=[0, 10], info='first leadlag time const. (pole)') self.T3 = NumParam(default=1, tex_name='T_3', vrange=[0, 10], info='second leadlag time const. (pole)') self.T4 = NumParam(default=1, tex_name='T_4', vrange=[0, 10], info='second leadlag time const. (pole)') self.T5 = NumParam(default=1, tex_name='T_5', vrange=[0, 10], info='washout time const. (zero)') self.T6 = NumParam(default=1, tex_name='T_6', vrange=[0.04, 2], info='washout time const. (pole)') self.KS = NumParam(default=1, tex_name='K_S', info='Gain before washout') self.LSMAX = NumParam(default=0.3, tex_name='L_{SMAX}', vrange=[0, 0.3], info='Max. output limit') self.LSMIN = NumParam(default=-0.3, tex_name='L_{SMIN}', vrange=[-0.3, 0], info='Min. output limit') # TODO: allow ignoring zero elements in the output condition self.VCU = NumParam(default=1.2, tex_name='V_{CU}', unit='p.u.', info='Upper enabling bus voltage') self.VCL = NumParam(default=0.8, tex_name='V_{CL}', unit='p.u.', info='Upper enabling bus voltage')
def __init__(self): super().__init__() self.Sn = NumParam(default=100.0, info="Power rating", non_zero=True, tex_name=r'S_n') self.Vn = NumParam(default=110.0, info="AC voltage rating", non_zero=True, tex_name=r'V_n') self.subidx = DataParam(info='index for generators on the same bus', export=False) self.bus = IdxParam(model='Bus', info="idx of the installed bus") self.busr = IdxParam(model='Bus', info="bus idx for remote voltage control") self.p0 = NumParam(default=0.0, info="active power set point in system base", tex_name=r'p_0', unit='p.u.') self.q0 = NumParam(default=0.0, info="reactive power set point in system base", tex_name=r'q_0', unit='p.u.') self.pmax = NumParam(default=999.0, info="maximum active power in system base", tex_name=r'p_{max}', unit='p.u.') self.pmin = NumParam(default=-1.0, info="minimum active power in system base", tex_name=r'p_{min}', unit='p.u.') self.qmax = NumParam(default=999.0, info="maximim reactive power in system base", tex_name=r'q_{max}', unit='p.u.') self.qmin = NumParam(default=-999.0, info="minimum reactive power in system base", tex_name=r'q_{min}', unit='p.u.') self.v0 = NumParam(default=1.0, info="voltage set point", tex_name=r'v_0') self.vmax = NumParam(default=1.4, info="maximum voltage voltage", tex_name=r'v_{max}') self.vmin = NumParam(default=0.6, info="minimum allowed voltage", tex_name=r'v_{min}') self.ra = NumParam(default=0.01, info='armature resistance', tex_name='r_a') self.xs = NumParam(default=0.3, info='armature reactance', tex_name='x_s')
def __init__(self): ExcBaseData.__init__(self) self.TR = NumParam( info='Sensing time constant', tex_name='T_R', default=0.01, ) self.VIMAX = NumParam( default=0.8, info='Max. input voltage', tex_name=r'V_{IMAX}', ) self.VIMIN = NumParam( default=-0.1, info='Min. input voltage', tex_name=r'V_{IMIN}', ) self.TB = NumParam( info='Lag time constant in lead-lag', tex_name='T_B', default=1, ) self.TC = NumParam( info='Lead time constant in lead-lag', tex_name='T_C', default=1, ) self.TB1 = NumParam( info='Lag time constant in lead-lag 1', tex_name=r'T_{B1}', default=1, ) self.TC1 = NumParam( info='Lead time constant in lead-lag 1', tex_name=r'T_{C1}', default=1, ) self.VAMAX = NumParam(info='V_A upper limit', tex_name=r'V_{AMAX}', default=999, unit='p.u.') self.VAMIN = NumParam(info='V_A lower limit', tex_name=r'V_{AMIN}', default=-999, unit='p.u.') self.KA = NumParam( default=80, info='Regulator gain', tex_name='K_A', ) self.TA = NumParam( info='Lag time constant in regulator', tex_name='T_A', default=0.04, ) self.ILR = NumParam( default=1, info='Exciter output current limite reference', tex_name=r'I_{LR}', ) self.KLR = NumParam( default=1, info='Exciter output current limiter gain', tex_name=r'K_{LR}', ) self.VRMAX = NumParam( info='Maximum voltage regulator output limit', tex_name=r'V_{RMAX}', default=7.3, unit='p.u.', ) self.VRMIN = NumParam( info='Minimum voltage regulator output limit', tex_name=r'V_{RMIN}', default=-7.3, unit='p.u.', ) self.KF = NumParam( default=0.1, info='Feedback gain', tex_name='K_F', ) self.TF = NumParam( info='Feedback washout time constant', tex_name='T_{F}', default=1, ) self.KC = NumParam( info= 'Rectifier loading factor proportional to commutating reactance', tex_name='K_C', default=0.1, ) self.UELc = NumParam( info='Alternate UEL inputs, input code 1-3', tex_name='UEL_c', default=1, ) self.VOSc = NumParam( info='Alternate Stabilizer inputs, input code 1-2', tex_name='VOS_c', default=1, )
def __init__(self): super().__init__() self.bus = IdxParam(model='Bus', info="interface bus id", mandatory=True, ) self.gen = IdxParam(info="static generator index", model='StaticGen', mandatory=True, ) self.coi = IdxParam(model='COI', info="center of inertia index", ) self.Sn = NumParam(default=100.0, info="Power rating", tex_name='S_n', ) self.Vn = NumParam(default=110.0, info="AC voltage rating", tex_name='V_n', ) self.fn = NumParam(default=60.0, info="rated frequency", tex_name='f', ) self.D = NumParam(default=0.0, info="Damping coefficient", power=True, tex_name='D' ) self.M = NumParam(default=6, info="machine start up time (2H)", non_zero=True, power=True, tex_name='M' ) self.ra = NumParam(default=0.0, info="armature resistance", z=True, tex_name='r_a' ) self.xl = NumParam(default=0.0, info="leakage reactance", z=True, tex_name='x_l' ) self.xd1 = NumParam(default=0.302, info='d-axis transient reactance', tex_name=r"x'_d", z=True) self.kp = NumParam(default=0, info="active power feedback gain", tex_name='k_p' ) self.kw = NumParam(default=0, info="speed feedback gain", tex_name='k_w' ) self.S10 = NumParam(default=0.0, info="first saturation factor", tex_name='S_{1.0}' ) self.S12 = NumParam(default=1.0, info="second saturation factor", tex_name='S_{1.2}', )
def __init__(self): TGBaseData.__init__(self) self.syn2 = IdxParam(model='SynGen', info='Optional SynGen idx', ) self.K = NumParam(default=20, tex_name='K', info='Gain (1/R) in mach. base', unit='p.u. (power)', power=True, vrange=(5, 30), ) self.T1 = NumParam(default=1, tex_name='T_1', info='Gov. lag time const.', vrange=(0, 5), ) self.T2 = NumParam(default=1, tex_name='T_2', info='Gov. lead time const.', vrange=(0, 10), ) self.T3 = NumParam(default=0.1, tex_name='T_3', info='Valve controller time const.', vrange=(0.04, 1), ) # "UO" is "U" and capitalized "o" character self.UO = NumParam(default=0.1, tex_name='U_o', info='Max. valve opening rate', unit='p.u./sec', vrange=(0.01, 0.3), ) self.UC = NumParam(default=-0.1, tex_name='U_c', info='Max. valve closing rate', unit='p.u./sec', vrange=(-0.3, 0), ) self.PMAX = NumParam(default=5, tex_name='P_{MAX}', info='Max. turbine power', vrange=(0.5, 2), power=True, ) self.PMIN = NumParam(default=0., tex_name='P_{MIN}', info='Min. turbine power', vrange=(0.0, 0.5), power=True, ) self.T4 = NumParam(default=0.4, tex_name='T_4', info='Inlet piping/steam bowl time constant', vrange=(0, 1.0), ) self.K1 = NumParam(default=0.5, tex_name='K_1', info='Fraction of power from HP', vrange=(0, 1.0), ) self.K2 = NumParam(default=0, tex_name='K_2', info='Fraction of power from LP', vrange=(0,), ) self.T5 = NumParam(default=8, tex_name='T_5', info='Time constant of 2nd boiler pass', vrange=(0, 10), ) self.K3 = NumParam(default=0.5, tex_name='K_3', info='Fraction of HP shaft power after 2nd boiler pass', vrange=(0, 0.5), ) self.K4 = NumParam(default=0.0, tex_name='K_4', info='Fraction of LP shaft power after 2nd boiler pass', vrange=(0,), ) self.T6 = NumParam(default=0.5, tex_name='T_6', info='Time constant of 3rd boiler pass', vrange=(0, 10), ) self.K5 = NumParam(default=0.0, tex_name='K_5', info='Fraction of HP shaft power after 3rd boiler pass', vrange=(0, 0.35), ) self.K6 = NumParam(default=0, tex_name='K_6', info='Fraction of LP shaft power after 3rd boiler pass', vrange=(0, 0.55), ) self.T7 = NumParam(default=0.05, tex_name='T_7', info='Time constant of 4th boiler pass', vrange=(0, 10), ) self.K7 = NumParam(default=0, tex_name='K_7', info='Fraction of HP shaft power after 4th boiler pass', vrange=(0, 0.3), ) self.K8 = NumParam(default=0, tex_name='K_8', info='Fraction of LP shaft power after 4th boiler pass', vrange=(0, 0.3), )
def __init__(self): ExcBaseData.__init__(self) self.TR = NumParam(info='Sensing time constant', tex_name='T_R', default=0.01, unit='p.u.', ) self.VIMAX = NumParam(default=0.8, info='Max. input voltage', tex_name='V_{IMAX}', vrange=(0, 1), ) self.VIMIN = NumParam(default=-0.1, info='Min. input voltage', tex_name='V_{IMIN}', vrange=(-1, 0), ) self.KM = NumParam(default=500, tex_name='K_M', info='Forward gain constant', vrange=(0, 1000), ) self.TC = NumParam(info='Lead time constant in lead-lag', tex_name='T_C', default=3, vrange=(0, 20), ) self.TB = NumParam(info='Lag time constant in lead-lag', tex_name='T_B', default=15, vrange=(0, 20), ) self.KA = NumParam(info='Gain in anti-windup lag TF', tex_name='K_A', default=50, vrange=(0, 200), ) self.TA = NumParam(info='Lag time constant in anti-windup lag', tex_name='T_A', default=0.1, vrange=(0, 1), ) self.VRMAX = NumParam(info='Maximum excitation limit', tex_name='V_{RMAX}', default=8, unit='p.u.', vrange=(0.5, 10), ) self.VRMIN = NumParam(info='Minimum excitation limit', tex_name='V_{RMIN}', default=0, unit='p.u.', vrange=(-10, 0.5), ) self.KG = NumParam(info='Feedback gain of inner field regulator', tex_name='K_G', default=1, vrange=(0, 1.1), ) self.KP = NumParam(info='Potential circuit gain coeff.', tex_name='K_P', default=4, vrange=(1, 10), ) self.KI = NumParam(info='Potential circuit gain coeff.', tex_name='K_I', default=0.1, vrange=(0, 1.1), ) self.VBMAX = NumParam(info='VB upper limit', tex_name='V_{BMAX}', default=18, unit='p.u.', vrange=(0, 20), ) self.KC = NumParam(default=0.1, info='Rectifier loading factor proportional to commutating reactance', tex_name='K_C', vrange=(0, 1), ) self.XL = NumParam(default=0.01, info='Potential source reactance', tex_name='X_L', vrange=(0, 0.5), ) self.VGMAX = NumParam(info='VG upper limit', tex_name='V_{GMAX}', default=4, unit='p.u.', vrange=(0, 20), ) self.THETAP = NumParam(info='Rectifier firing angle', tex_name=r'\theta_P', default=0, unit='degree', vrange=(0, 90), ) self.TM = NumParam(default=0.1, info='Inner field regulator forward time constant', tex_name='K_C', ) self.VMMAX = NumParam(info='Maximum VM limit', tex_name='V_{MMAX}', default=1, unit='p.u.', vrange=(0.5, 1.5), ) self.VMMIN = NumParam(info='Minimum VM limit', tex_name='V_{RMIN}', default=0.1, unit='p.u.', vrange=(-1.5, 0.5), )
def __init__(self): super().__init__() self.TR = NumParam(info='Sensing time constant', tex_name='T_R', default=1, unit='p.u.', ) self.TA = NumParam(info='Lag time constant in anti-windup lag', tex_name='T_A', default=0.04, unit='p.u.', ) self.TC = NumParam(info='Lead time constant in lead-lag', tex_name='T_C', default=1, unit='p.u.', ) self.TB = NumParam(info='Lag time constant in lead-lag', tex_name='T_B', default=1, unit='p.u.', ) self.TE = NumParam(info='Exciter integrator time constant', tex_name='T_E', default=0.8, unit='p.u.', ) self.TF1 = NumParam(info='Feedback washout time constant', tex_name='T_{F1}', default=1, unit='p.u.', non_zero=True ) self.KF1 = NumParam(info='Feedback washout gain', tex_name='K_{F1}', default=0.03, unit='p.u.', ) self.KA = NumParam(info='Gain in anti-windup lag TF', tex_name='K_A', default=40, unit='p.u.', ) self.KE = NumParam(info='Gain added to saturation', tex_name='K_E', default=1, unit='p.u.', ) self.VRMAX = NumParam(info='Maximum excitation limit', tex_name='V_{RMAX}', default=7.3, unit='p.u.') self.VRMIN = NumParam(info='Minimum excitation limit', tex_name='V_{RMIN}', default=-7.3, unit='p.u.') self.E1 = NumParam(info='First saturation point', tex_name='E_1', default=0.0, unit='p.u.', ) self.SE1 = NumParam(info='Value at first saturation point', tex_name='S_{E1}', default=0.0, unit='p.u.', ) self.E2 = NumParam(info='Second saturation point', tex_name='E_2', default=0.0, unit='p.u.', ) self.SE2 = NumParam(info='Value at second saturation point', tex_name='S_{E2}', default=0.0, unit='p.u.', ) self.Ae = NumParam(info='Gain in saturation', tex_name='A_e', default=0.0, unit='p.u.', ) self.Be = NumParam(info='Exponential coefficient in saturation', tex_name='B_e', default=0.0, unit='p.u.', )
def __init__(self): super().__init__() self.bus1 = IdxParam(model='Bus', info="idx of from bus") self.bus2 = IdxParam(model='Bus', info="idx of to bus") self.Sn = NumParam(default=100.0, info="Power rating", non_zero=True, tex_name=r'S_n') self.fn = NumParam(default=60.0, info="rated frequency", tex_name=r'f') self.Vn1 = NumParam(default=110.0, info="AC voltage rating", non_zero=True, tex_name=r'V_{n1}') self.Vn2 = NumParam(default=110.0, info="rated voltage of bus2", non_zero=True, tex_name=r'V_{n2}') self.r = NumParam(default=1e-8, info="line resistance", tex_name='r', z=True) self.x = NumParam(default=1e-8, info="line reactance", tex_name='x', z=True) self.b = NumParam(default=0.0, info="shared shunt susceptance", y=True) self.g = NumParam(default=0.0, info="shared shunt conductance", y=True) self.b1 = NumParam(default=0.0, info="from-side susceptance", tex_name='b_1') self.g1 = NumParam(default=0.0, info="from-side conductance", tex_name='g_1') self.b2 = NumParam(default=0.0, info="to-side susceptance", tex_name='b_2') self.g2 = NumParam(default=0.0, info="to-side conductance", tex_name='g_2') self.trans = NumParam(default=0, info="transformer branch flag") self.tap = NumParam(default=1.0, info="transformer branch tap ratio", tex_name='t_{ap}') self.phi = NumParam(default=0.0, info="transformer branch phase shift in rad", tex_name=r'\phi') self.owner = IdxParam(model='Owner', info="owner code") self.xcoord = DataParam(info="x coordinates") self.ycoord = DataParam(info="y coordinates")
def __init__(self, system, config): ModelData.__init__(self) self.bus = IdxParam( model='Bus', info="linked bus idx", mandatory=True, ) self.tf = TimerParam( info='Bus fault start time', unit='second', mandatory=True, callback=self.apply_fault, ) self.tc = TimerParam( info='Bus fault end time', unit='second', callback=self.clear_fault, ) self.xf = NumParam( info='Fault to ground impedance (positive)', unit='p.u.(sys)', default=1e-4, tex_name='x_f', ) self.rf = NumParam( info='Fault to ground resistance (positive)', unit='p.u.(sys)', default=0, tex_name='x_f', ) Model.__init__(self, system, config) self.flags.update({'tds': True}) self.group = 'TimedEvent' self.config.add(OrderedDict((('restore', 1), ('scale', 1.0)))) self.config.add_extra( '_alt', restore=(0, 1), ) self.config.add_extra( '_help', restore='restore algebraic variables to pre-fault values', scale='scaling factor of restored algebraic values', ) self.gf = ConstService( tex_name='g_{f}', v_str='re(1/(rf + 1j * xf))', vtype=complex, ) self.bf = ConstService( tex_name='b_{f}', v_str='im(1/(rf + 1j * xf))', vtype=complex, ) # uf: an internal flag of whether the fault is in action (1) or not (0) self.uf = ConstService(tex_name='u_f', v_str='0') self.a = ExtAlgeb( model='Bus', src='a', indexer=self.bus, tex_name=r'\theta', info='Bus voltage angle', unit='p.u.(kV)', e_str='u * uf * (v ** 2 * gf)', ) self.v = ExtAlgeb( model='Bus', src='v', indexer=self.bus, tex_name=r'V', unit='p.u.(kV)', info='Bus voltage magnitude', e_str='-u * uf * (v ** 2 * bf)', ) self._vstore = np.array([])
def __init__(self, system, config): ACDC2Term.__init__(self, system, config) self.rsh = NumParam(default=0.0025, info="AC interface resistance", unit="ohm", z=True, tex_name='r_{sh}') self.xsh = NumParam(default=0.06, info="AC interface reactance", unit="ohm", z=True, tex_name='x_{sh}') self.control = NumParam(info="Control method: 0-PQ, 1-PV, 2-vQ or 3-vV", mandatory=True) self.v0 = NumParam(default=1.0, info="AC voltage setting (PV or vV) or initial guess (PQ or vQ)") self.p0 = NumParam(default=0.0, info="AC active power setting", unit="pu") self.q0 = NumParam(default=0.0, info="AC reactive power setting", unit="pu") self.vdc0 = NumParam(default=1.0, info="DC voltage setting", unit="pu", tex_name='v_{dc0}') self.k0 = NumParam(default=0.0, info="Loss coefficient - constant") self.k1 = NumParam(default=0.0, info="Loss coefficient - linear") self.k2 = NumParam(default=0.0, info="Loss coefficient - quadratic") self.droop = NumParam(default=0.0, info="Enable dc voltage droop control", unit="boolean") self.K = NumParam(default=0.0, info="Droop coefficient") self.vhigh = NumParam(default=9999, info="Upper voltage threshold in droop control", unit="pu") self.vlow = NumParam(default=0.0, info="Lower voltage threshold in droop control", unit="pu") self.vshmax = NumParam(default=1.1, info="Maximum ac interface voltage", unit="pu") self.vshmin = NumParam(default=0.9, info="Minimum ac interface voltage", unit="pu") self.Ishmax = NumParam(default=2, info="Maximum ac current", unit="pu") # define variables and equations self.flags.update({'pflow': True}) self.group = 'StaticACDC' self.gsh = ConstService(tex_name='g_{sh}', v_str='re(1/(rsh + 1j * xsh))') self.bsh = ConstService(tex_name='b_{sh}', v_str='im(1/(rsh + 1j * xsh))') self.mode = Switcher(u=self.control, options=(0, 1, 2, 3)) self.ash = Algeb(info='voltage phase behind the transformer', unit='rad', tex_name=r'\theta_{sh}', v_str='a', e_str='u * (gsh * v**2 - gsh * v * vsh * cos(a - ash) - ' 'bsh * v * vsh * sin(a - ash)) - psh', diag_eps=1e-6, ) self.vsh = Algeb(info='voltage magnitude behind transformer', tex_name="V_{sh}", unit='p.u.', v_str='v0', e_str='u * (-bsh * v**2 - gsh * v * vsh * sin(a - ash) + ' 'bsh * v * vsh * cos(a - ash)) - qsh', diag_eps=1e-6, ) self.psh = Algeb(info='active power injection into VSC', tex_name="P_{sh}", unit='p.u.', v_str='p0 * (mode_s0 + mode_s1)', e_str='u * (mode_s0 + mode_s1) * (p0 - psh) + ' 'u * (mode_s2 + mode_s3) * (v1 - v2 - vdc0)', diag_eps=1e-6, ) self.qsh = Algeb(info='reactive power injection into VSC', tex_name="Q_{sh}", v_str='q0 * (mode_s0 + mode_s2)', e_str='u * (mode_s0 + mode_s2) * (q0 - qsh) + ' 'u * (mode_s1 + mode_s3) * (v0 - v)', diag_eps=1e-6, ) self.pdc = Algeb(info='DC power injection', tex_name="P_{dc}", v_str='0', e_str='u * (gsh * vsh * vsh - gsh * v * vsh * cos(a - ash) + ' 'bsh * v * vsh * sin(a - ash)) + pdc', ) self.a.e_str = '-psh' self.v.e_str = '-qsh' self.v1.e_str = '-pdc / (v1 - v2)' self.v2.e_str = 'pdc / (v1 - v2)'
def __init__(self): ExcBaseData.__init__(self) self.TR = NumParam( info='Sensing time constant', tex_name='T_R', default=0.01, unit='p.u.', ) self.KA = NumParam( default=80, info='Regulator gain', tex_name='K_A', ) self.TA = NumParam( info='Lag time constant in regulator', tex_name='T_A', default=0.04, unit='p.u.', ) self.TB = NumParam( info='Lag time constant in lead-lag', tex_name='T_B', default=1, unit='p.u.', ) self.TC = NumParam( info='Lead time constant in lead-lag', tex_name='T_C', default=1, unit='p.u.', ) self.VRMAX = NumParam(info='Max. exc. limit (0-unlimited)', tex_name='V_{RMAX}', default=7.3, unit='p.u.') self.VRMIN = NumParam(info='Min. excitation limit', tex_name='V_{RMIN}', default=-7.3, unit='p.u.') self.KE = NumParam( info='Saturation feedback gain', tex_name='K_E', default=1, unit='p.u.', ) self.TE = NumParam( info='Integrator time constant', tex_name='T_E', default=0.8, unit='p.u.', ) self.KF = NumParam( default=0.1, info='Feedback gain', tex_name='K_F', ) self.TF1 = NumParam( info='Feedback washout time constant', tex_name='T_{F1}', default=1, unit='p.u.', non_negative=True, non_zero=True, ) self.Switch = NumParam( info='Switch that PSS/E did not implement', tex_name='S_w', default=0, unit='bool', ) self.E1 = NumParam( info='First saturation point', tex_name='E_1', default=0., unit='p.u.', ) self.SE1 = NumParam( info='Value at first saturation point', tex_name='S_{E1}', default=0., unit='p.u.', ) self.E2 = NumParam( info='Second saturation point', tex_name='E_2', default=0., unit='p.u.', ) self.SE2 = NumParam( info='Value at second saturation point', tex_name='S_{E2}', default=0., unit='p.u.', )
def __init__(self): ModelData.__init__(self) self.Kp = NumParam() self.Ki = NumParam() self.Wmax = NumParam() self.Wmin = NumParam()
def __init__(self): ExcBaseData.__init__(self) self.TR = NumParam( info='Sensing time constant', tex_name='T_R', default=0.01, unit='p.u.', ) self.TB = NumParam( info='Lag time constant in lead-lag', tex_name='T_B', default=1, unit='p.u.', ) self.TC = NumParam( info='Lead time constant in lead-lag', tex_name='T_C', default=1, unit='p.u.', ) self.KA = NumParam( default=80, info='Regulator gain', tex_name='K_A', ) self.TA = NumParam( info='Lag time constant in regulator', tex_name='T_A', default=0.04, unit='p.u.', ) self.VRMAX = NumParam( info='Maximum excitation limit', tex_name='V_{RMAX}', default=8, unit='p.u.', vrange=(0.5, 10), ) self.VRMIN = NumParam( info='Minimum excitation limit', tex_name='V_{RMIN}', default=0, unit='p.u.', vrange=(-10, 0.5), ) self.TE = NumParam( info='Exciter integrator time constant', tex_name='T_E', default=0.8, unit='p.u.', ) self.KF = NumParam( default=0.1, info='Feedback gain', tex_name='K_F', ) self.TF = NumParam( default=1.0, info='Feedback delay', tex_name='T_F', non_negative=True, non_zero=True, ) self.KC = NumParam( default=0.1, info= 'Rectifier loading factor proportional to commutating reactance', tex_name='K_C', vrange=(0, 1), ) self.KD = NumParam( default=0, info='Ifd feedback gain', tex_name='K_C', vrange=(0, 1), ) self.KE = NumParam( info='Saturation feedback gain', tex_name='K_E', default=1, unit='p.u.', ) self.E1 = NumParam( info='First saturation point', tex_name='E_1', default=0., unit='p.u.', ) self.SE1 = NumParam( info='Value at first saturation point', tex_name='S_{E1}', default=0., unit='p.u.', ) self.E2 = NumParam( info='Second saturation point', tex_name='E_2', default=1., unit='p.u.', ) self.SE2 = NumParam( info='Value at second saturation point', tex_name='S_{E2}', default=1., unit='p.u.', )
def __init__(self): super().__init__() self.a0 = NumParam(default=0.0, info="reference angle set point", tex_name=r'\theta_0')
def __init__(self): TGBaseData.__init__(self) self.T1 = NumParam( info='Controller lag', default=0.02, tex_name='T_1', vrange=(0, 100), ) self.T2 = NumParam( info='Lead compensation', default=1.0, tex_name='T_2', vrange=(0, 10), ) self.T3 = NumParam( info='Governor lag', default=1.0, tex_name='T_3', vrange=(0.04, 1.0), ) self.T4 = NumParam( info='Steam inlet delay', default=0.5, tex_name='T_4', vrange=(0.0, 1.0), ) self.T5 = NumParam( info='Reheater delay', default=10.0, tex_name='T_5', vrange=(0.0, 50.0), ) self.T6 = NumParam( info='Crossover delay', default=0.5, tex_name='T_6', vrange=(0.0, 1.0), ) self.K1 = NumParam( info='1/pu regulation', default=0.02, tex_name='K_1', vrange=(5, 30), ) self.K2 = NumParam( info='fraction K2', default=1.0, tex_name='K_2', vrange=(0, 3), ) self.K3 = NumParam( info='fraction K3', default=1.0, tex_name='K_3', vrange=(-1.0, 1.0), ) self.PMAX = NumParam( default=5, tex_name='P_{MAX}', info='Max. turbine power', vrange=(0.5, 1.5), power=True, ) self.PMIN = NumParam( default=0., tex_name='P_{MIN}', info='Min. turbine power', vrange=(0.0, 0.5), power=True, )
def __init__(self) -> None: self.Tiq = NumParam(default=0.01, tex_name='T_{Iq}') self.Tid = NumParam(default=0.01, tex_name='T_{Id}')
def __init__(self): ExcBaseData.__init__(self) self.TR = NumParam( info='Sensing time constant', tex_name='T_R', default=0.01, unit='p.u.', ) self.kP = NumParam( info='PID proportional coeff.', tex_name='k_P', default=10, vrange=(10, 500), ) self.kI = NumParam( info='PID integrative coeff.', tex_name='k_I', default=10, vrange=(10, 500), ) self.kD = NumParam( info='PID derivative coeff.', tex_name='k_D', default=10, vrange=(10, 500), ) self.Td = NumParam( info='PID derivative time constant.', tex_name='T_d', default=0.2, vrange=(0, 0.5), ) self.VPMAX = NumParam(info='PID maximum limit', tex_name=r'V_{PMAX}', default=999, unit='p.u.') self.VPMIN = NumParam(info='PID minimum limit', tex_name=r'V_{PMIN}', default=-999, unit='p.u.') self.VRMAX = NumParam(info='Maximum regulator limit', tex_name=r'V_{RMAX}', default=7.3, unit='p.u.', vrange=(1, 10)) self.VRMIN = NumParam(info='Minimum regulator limit', tex_name=r'V_{RMIN}', default=1, unit='p.u.', vrange=(-1, 1.5)) self.VFEMAX = NumParam(info='Exciter field current limit', tex_name=r'V_{FEMAX}', default=999, unit='p.u.') self.VEMIN = NumParam(info='Minimum exciter voltage output', tex_name=r'V_{EMIN}', default=-999, unit='p.u.') self.TA = NumParam( info='Lag time constant in anti-windup lag', tex_name='T_A', default=0.04, unit='p.u.', ) self.KA = NumParam( info='Gain in anti-windup lag TF', tex_name='K_A', default=40, unit='p.u.', ) self.TE = NumParam( info='Exciter integrator time constant', tex_name='T_E', default=0.8, unit='p.u.', ) self.E1 = NumParam( info='First saturation point', tex_name='E_1', default=0., unit='p.u.', ) self.SE1 = NumParam( info='Value at first saturation point', tex_name=r'S_{E1}', default=0., unit='p.u.', ) self.E2 = NumParam( info='Second saturation point', tex_name='E_2', default=1., unit='p.u.', ) self.SE2 = NumParam( info='Value at second saturation point', tex_name=r'S_{E2}', default=1., unit='p.u.', ) self.KE = NumParam( info='Gain added to saturation', tex_name='K_E', default=1, unit='p.u.', ) self.KD = NumParam( default=0, info='Ifd feedback gain', tex_name='K_D', vrange=(0, 1), ) self.KC = NumParam( default=0.1, info= 'Rectifier loading factor proportional to commutating reactance', tex_name='K_C', vrange=(0, 1), )
def __init__(self): super().__init__() self.bus = IdxParam(model='Bus', info="interface bus id", mandatory=True, ) self.gen = IdxParam(info="static generator index", mandatory=True, ) self.coi = IdxParam(model='COI', info="center of inertia index", ) self.Sn = NumParam(default=100.0, info="Power rating", tex_name='S_n', ) self.Vn = NumParam(default=110.0, info="AC voltage rating", tex_name='V_n', ) self.fn = NumParam(default=60.0, info="rated frequency", tex_name='f', ) self.D = NumParam(default=0.0, info="Damping coefficient", power=True, tex_name='D' ) self.M = NumParam(default=6, info="machine start up time (2H)", non_zero=True, power=True, tex_name='M' ) self.ra = NumParam(default=0.0, info="armature resistance", z=True, tex_name='r_a' ) self.xl = NumParam(default=0.0, info="leakage reactance", z=True, tex_name='x_l' ) self.xq = NumParam(default=1.7, info="q-axis synchronous reactance", z=True, tex_name='x_q' ) # NOTE: assume `xd1 = xq` for GENCLS, TODO: replace xq with xd1 self.kp = NumParam(default=0, info="active power feedback gain", tex_name='k_p' ) self.kw = NumParam(default=0, info="speed feedback gain", tex_name='k_w' ) self.S10 = NumParam(default=0.0, info="first saturation factor", tex_name='S_{1.0}' ) self.S12 = NumParam(default=1.0, info="second saturation factor", tex_name='S_{1.2}', non_zero=True )
def __init__(self): ExcBaseData.__init__(self) self.TR = NumParam( default=0.01, info='Measurement delay', tex_name='T_R', ) self.VIMAX = NumParam( default=0.2, info='Max. input voltage', tex_name='V_{IMAX}', ) self.VIMIN = NumParam( default=0, info='Min. input voltage', tex_name='V_{IMIN}', ) self.TC = NumParam( default=1, info='LL numerator', tex_name='T_C', ) self.TB = NumParam( default=1, info='LL denominator', tex_name='T_B', ) self.KA = NumParam( default=80, info='Regulator gain', tex_name='K_A', ) self.TA = NumParam( default=0.05, info='Regulator delay', tex_name='T_A', ) self.VRMAX = NumParam( default=8, info='Max. regulator output', tex_name='V_{RMAX}', ) self.VRMIN = NumParam( default=-3, info='Min. regulator output', tex_name='V_{RMIN}', ) self.KC = NumParam( default=0.2, info='Coef. for Ifd', tex_name='K_C', ) self.KF = NumParam( default=0.1, info='Feedback gain', tex_name='K_F', ) self.TF = NumParam( default=1.0, info='Feedback delay', tex_name='T_F', non_negative=True, non_zero=True, )
def __init__(self, system, config): ModelData.__init__(self) self.bus = IdxParam( model='Bus', info="idx of connected bus", mandatory=True, ) self.node1 = IdxParam( default=None, info='Node 1 index', mandatory=True, model='Node', ) self.node2 = IdxParam( default=None, info='Node 2 index', mandatory=True, model='Node', ) self.Vn = NumParam( default=110.0, info="AC voltage rating", non_zero=True, tex_name=r'V_n', ) self.Vdcn1 = NumParam( default=100, info='DC voltage rating on node 1', unit='kV', non_zero=True, tex_name='V_{dcn1}', ) self.Vdcn2 = NumParam( default=100, info='DC voltage rating on node 2', unit='kV', non_zero=True, tex_name='V_{dcn2}', ) self.Idcn = NumParam( default=1, info='DC current rating', unit='kA', non_zero=True, tex_name='I_{dcn}', ) Model.__init__(self, system, config) self.a = ExtAlgeb( model='Bus', src='a', indexer=self.bus, info='AC bus voltage phase', ) self.v = ExtAlgeb( model='Bus', src='v', indexer=self.bus, info='AC bus voltage magnitude', ) self.v1 = ExtAlgeb( model='Node', src='v', indexer=self.node1, info='DC node 1 voltage', ) self.v2 = ExtAlgeb( model='Node', src='v', indexer=self.node2, info='DC node 2 voltage', )
def __init__(self): ExcBaseData.__init__(self) self.TR = NumParam( info='Sensing Time Constant', tex_name='T_R', default=0.01, unit='p.u', ) self.TA = NumParam( info='Voltage Regulator Time Constant', tex_name='T_A', default=0.04, unit='p.u', ) self.KA = NumParam( info='Voltage Regulator Gain', tex_name='K_A', default=80, ) self.VRMIN = NumParam(info='V_R lower limit', default=-7.3, unit='p.u', tex_name='V_Rmin') self.VRMAX = NumParam( info='V_R upper limit', default=7.3, unit='p.u', tex_name='V_Rmax', ) self.TE = NumParam(info='Integrator Time Constant', tex_name='T_E', default=0.8, unit='p.u', non_negative=True) self.KF = NumParam(info='Feedback Gain', default=0.03, tex_name='K_F') self.TF1 = NumParam( info='Lag Time Constant', default=1.0, unit='p.u', tex_name='T_F_1', ) self.TF2 = NumParam( info='Lead-Lag Time Constant (pole)', default=0.8, unit='p.u', tex_name='T_F_2', ) self.TF3 = NumParam( info='Lead-Lag Time Constant (zero)', default=1, unit='p.u', tex_name='T_F_3', ) self.KE = NumParam( info='Exciter Feedback Gain', tex_name='K_E', default=1, ) self.E1 = NumParam( info='First saturation point', default=0, unit='p.u.', tex_name='E_1', ) self.SE1 = NumParam(info='Value at first saturation point', default=0, unit='p.u.', tex_name='S_E1') self.E2 = NumParam(info='Second saturation point', default=1, unit='p.u.', tex_name='E_2') self.SE2 = NumParam(info='Value at second saturation point', default=1, unit='p.u.', tex_name='S_E2')
def __init__(self): ExcBaseData.__init__(self) self.TR = NumParam( info='Sensing time constant', tex_name='T_R', default=0.01, unit='p.u.', ) self.KPR = NumParam( info='Proportional gain 1', tex_name='K_{PR}', default=1, unit='p.u.', ) self.KIR = NumParam( info='Integral gain 1', tex_name='K_{IR}', default=0, unit='p.u.', ) self.VRMAX = NumParam( info='Maximum regulator limit', tex_name='V_{RMAX}', default=8, unit='p.u.', vrange=(0.5, 10), ) self.VRMIN = NumParam( info='Minimum regulator limit', tex_name='V_{RMIN}', default=0, unit='p.u.', vrange=(-10, 0.5), ) self.TA = NumParam( info='Lag time constant', tex_name='T_A', default=0.1, vrange=(0, 1), ) self.KPM = NumParam( info='Proportional gain 2', tex_name='K_{PM}', default=1, unit='p.u.', ) self.KIM = NumParam( info='Integral gain 2', tex_name='K_{IM}', default=0, unit='p.u.', ) self.VMMAX = NumParam( info='Maximum inner loop limit', tex_name='V_{RMAX}', default=8, unit='p.u.', vrange=(0.5, 10), ) self.VMMIN = NumParam( info='Minimum inner loop limit', tex_name='V_{RMIN}', default=0, unit='p.u.', vrange=(-10, 0.5), ) self.KG = NumParam( info='Feedback gain of inner field regulator', tex_name='K_G', default=1, vrange=(0, 1.1), ) self.KP = NumParam( info='Potential circuit gain coeff.', tex_name='K_P', default=4, vrange=(1, 10), ) self.KI = NumParam( info='Potential circuit gain coeff.', tex_name='K_I', default=0.1, vrange=(0, 1.1), ) self.VBMAX = NumParam( info='VB upper limit', tex_name='V_{BMAX}', default=18, unit='p.u.', vrange=(0, 20), ) self.KC = NumParam( default=0.1, info= 'Rectifier loading factor proportional to commutating reactance', tex_name='K_C', vrange=(0, 1), ) self.XL = NumParam( default=0.01, info='Potential source reactance', tex_name='X_L', vrange=(0, 0.5), ) self.THETAP = NumParam( info='Rectifier firing angle', tex_name=r'\theta_P', default=0, unit='degree', vrange=(0, 90), ) self.VGMAX = NumParam( info='VG upper limit', tex_name='V_{GMAX}', default=20, unit='p.u.', vrange=(0, 20), )
def __init__(self): ExcBaseData.__init__(self) self.TR = NumParam( info='Sensing time constant', tex_name='T_R', default=0.01, unit='p.u.', ) self.VIMAX = NumParam( default=5.0, info='Max. input voltage', tex_name='V_{IMAX}', vrange=(0, 5), ) self.VIMIN = NumParam( default=-0.1, info='Min. input voltage', tex_name='V_{IMIN}', vrange=(-1, 0), ) self.TC = NumParam( info='Lead time constant in lead-lag', tex_name='T_C', default=1, unit='p.u.', ) self.TB = NumParam( info='Lag time constant in lead-lag', tex_name='T_B', default=1, unit='p.u.', ) self.KA = NumParam( default=80, info='Regulator gain', tex_name='K_A', ) self.TA = NumParam( info='Lag time constant in regulator', tex_name='T_A', default=0.04, unit='p.u.', ) self.VRMAX = NumParam( info='Maximum excitation limit', tex_name='V_{RMAX}', default=8, unit='p.u.', vrange=(0.5, 10), ) self.VRMIN = NumParam( info='Minimum excitation limit', tex_name='V_{RMIN}', default=0, unit='p.u.', vrange=(-10, 0.5), ) self.KC = NumParam( default=0.0, tex_name='K_C', info='Reactive power compensation gain', )