Exemple #1
0
    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')
Exemple #2
0
    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')
Exemple #3
0
    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,
        )
Exemple #4
0
    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}',
                            )
Exemple #5
0
    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),
                           )
Exemple #6
0
    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),
                              )
Exemple #7
0
 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.',
                        )
Exemple #8
0
    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")
Exemple #9
0
    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([])
Exemple #10
0
    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)'
Exemple #11
0
    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.',
        )
Exemple #12
0
 def __init__(self):
     ModelData.__init__(self)
     self.Kp = NumParam()
     self.Ki = NumParam()
     self.Wmax = NumParam()
     self.Wmin = NumParam()
Exemple #13
0
    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.',
        )
Exemple #14
0
 def __init__(self):
     super().__init__()
     self.a0 = NumParam(default=0.0,
                        info="reference angle set point",
                        tex_name=r'\theta_0')
Exemple #15
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,
        )
Exemple #16
0
 def __init__(self) -> None:
     self.Tiq = NumParam(default=0.01, tex_name='T_{Iq}')
     self.Tid = NumParam(default=0.01, tex_name='T_{Id}')
Exemple #17
0
    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),
        )
Exemple #18
0
    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
                            )
Exemple #19
0
    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,
        )
Exemple #20
0
    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',
        )
Exemple #21
0
    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')
Exemple #22
0
    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),
        )
Exemple #23
0
 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',
     )