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): 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): super().__init__() self.bus = IdxParam(model='Bus', info="linked bus idx", mandatory=True, ) self.Vn = NumParam(default=110, info="AC voltage rating", unit='kV', non_zero=True, tex_name=r'V_n', ) self.p0 = NumParam(default=0, info='active power load in system base', power=False, tex_name=r'p_0', unit='p.u.', ) self.q0 = NumParam(default=0, info='reactive power load in system base', power=False, tex_name=r'q_0', unit='p.u.', ) self.vmax = NumParam(default=1.2, info='max voltage before switching to impedance', tex_name=r'v_{max}', ) self.vmin = NumParam(default=0.8, info='min voltage before switching to impedance', tex_name=r'v_{min}', ) self.owner = IdxParam(model='Owner', info="owner idx")
def __init__(self): ModelData.__init__(self) self.t = TimerParam(info='switch time for connection status', mandatory=True) self.model = DataParam(info='model or group name of the device', mandatory=True) self.dev = IdxParam(info='idx of the device to alter', mandatory=True) self.src = IdxParam(info='model source field (param or service)', mandatory=True) self.attr = IdxParam(info='attribute (e.g., v) of the source field', default='v') self.method = NumParam( info='alteration method in `+`, `-`, `*`, `/`, `=`', mandatory=True, vtype=object) self.amount = NumParam( info='the amount to apply', mandatory=True, ) self.rand = NumParam(info='use uniform ramdom sampling', default=0) self.lb = NumParam(info='lower bound of random sampling', default=0) self.ub = NumParam(info='upper bound of random sampling', default=0)
def __init__(self): super().__init__() self.Vn = NumParam( default=110, info="AC voltage rating", unit='kV', non_zero=True, tex_name=r'V_n', ) self.vmax = NumParam( default=1.1, info="Voltage upper limit", tex_name=r'V_{max}', unit='p.u.', ) self.vmin = NumParam( default=0.9, info="Voltage lower limit", tex_name=r'V_{min}', unit='p.u.', ) self.v0 = NumParam( default=1.0, info="initial voltage magnitude", non_zero=True, tex_name=r'V_0', unit='p.u.', ) self.a0 = NumParam( default=0, info="initial voltage phase angle", unit='rad', tex_name=r'\theta_0', ) self.xcoord = DataParam( default=0, info='x coordinate (longitude)', ) self.ycoord = DataParam( default=0, info='y coordinate (latitude)', ) self.area = IdxParam( model='Area', default=None, info="Area code", ) self.zone = IdxParam( model='Region', default=None, info="Zone code", ) self.owner = IdxParam( model='Owner', default=None, info="Owner code", )
def __init__(self): ModelData.__init__(self) self.bus = IdxParam( model='Bus', info="interface bus id", mandatory=True, ) self.gen = IdxParam( info="static generator index", mandatory=True, )
def __init__(self, system, config): ModelData.__init__(self) self.node1 = IdxParam( default=None, tex_name='node_1', info='Node 1 index', mandatory=True, model='Node', ) self.node2 = IdxParam( default=None, tex_name='node_2', info='Node 2 index', mandatory=True, model='Node', ) 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.v1 = ExtAlgeb( model='Node', src='v', indexer=self.node1, info='DC voltage on node 1', ) self.v2 = ExtAlgeb( model='Node', src='v', indexer=self.node2, info='DC voltage on node 2', )
def __init__(self): ModelData.__init__(self) self.bus = IdxParam(model='Bus', info="bus idx for freq. measurement", mandatory=True) self.bias = NumParam(default=1.0, info='bias parameter', tex_name=r'\beta', unit='MW/0.1Hz', power=True) self.busf = IdxParam(info='Optional BusFreq device idx', model='BusFreq', default=None)
def __init__(self): """ DC Node data. """ super().__init__() self.Vdcn = NumParam( default=100, info='DC voltage rating', unit='kV', non_zero=True, tex_name='V_{dcn}', ) self.Idcn = NumParam( default=1, info='DC current rating', unit='kA', non_zero=True, tex_name='I_{dcn}', ) self.v0 = NumParam( default=1.0, info="initial voltage magnitude", tex_name=r'V_{dc0}', unit='p.u.', ) self.xcoord = DataParam( default=0, info='x coordinate (longitude)', ) self.ycoord = DataParam( default=0, info='y coordinate (latitude)', ) self.area = IdxParam( model='Area', default=None, info="Area code", ) self.zone = IdxParam( model='Region', default=None, info="Zone code", ) self.owner = IdxParam( model='Owner', default=None, info="Owner code", )
def __init__(self): super().__init__() self.syn = IdxParam( model='SynGen', info='Synchronous generator idx', mandatory=True, )
def __init__(self, system, config): ModelData.__init__(self) self.node = IdxParam( default=None, tex_name='node', info='Node index', mandatory=True, model='Node', ) self.voltage = NumParam( default=0.0, tex_name='V_0', info='Ground voltage (typically 0)', unit='p.u.', ) Model.__init__(self, system, config) self.flags.update({'pflow': True}) self.group = 'DCLink' self.v = ExtAlgeb( model='Node', src='v', indexer=self.node, e_str='-Idc', ) self.Idc = Algeb( tex_name='I_{dc}', info='Ficticious current injection from ground', e_str='u * (v - voltage)', v_str='0', diag_eps=1e-6, ) self.v.e_str = '-Idc'
def __init__(self): ModelData.__init__(self) self.mode = NumParam(default='1', info='Mode for applying timeseries. ' '1: exact time, ' '2: interpolated', vrange=(1, 2), ) self.path = DataParam(mandatory=True, info='Path to timeseries xlsx file') self.sheet = DataParam(mandatory=True, info='Sheet name to use') self.fields = NumParam(mandatory=True, info='comma-separated field names in timeseries data', iconvert=str_list_iconv, oconvert=str_list_oconv, vtype=np.object, ) self.tkey = DataParam(default='t', info='Key for timestamps') self.model = DataParam(info='Model to link to', mandatory=True) self.dev = IdxParam(info='Idx of device to link to', mandatory=True) self.dests = NumParam(mandatory=True, info='comma-separated device fields as destinations', iconvert=str_list_iconv, oconvert=str_list_oconv, vtype=np.object, )
def __init__(self, system=None, name=None): super().__init__(system, name) self.bus = IdxParam(model='Bus', info="idx of connected bus", mandatory=True) self.Sn = NumParam(default=100.0, info="Power rating", non_zero=True, tex_name='S_n') self.Vn = NumParam(default=110.0, info="AC voltage rating", non_zero=True, tex_name='V_n') self.g = NumParam(default=0.0, info="shunt conductance (real part)", y=True, tex_name='g') self.b = NumParam(default=0.0, info="shunt susceptance (positive as capacitive)", y=True, tex_name='b') self.fn = NumParam(default=60.0, info="rated frequency", tex_name='f_n')
def __init__(self): ModelData.__init__(self) self.bus = IdxParam(info="bus idx", mandatory=True) self.Kp = NumParam( info='proportional gain', default=1, tex_name='K_p', ) self.Ki = NumParam( info='integral gain', default=0.2, tex_name='K_i', ) self.Tf = NumParam( default=0.05, info="input digital filter time const", unit="sec", tex_name='T_f', ) self.Tp = NumParam(default=0.05, info='output filter time const.', unit='sec', tex_name='T_p') self.fn = NumParam( default=60.0, info="nominal frequency", unit='Hz', tex_name='f_n', )
def __init__(self): super(TogglerData, self).__init__() self.model = DataParam(info='Model or Group of the device to control', mandatory=True) self.dev = IdxParam(info='idx of the device to control', mandatory=True) self.t = TimerParam(info='switch time for connection status', mandatory=True)
def __init__(self): ModelData.__init__(self) self.pq = IdxParam( model='PQ', mandatory=True, info='idx of the PQ to replace', ) self.busf = IdxParam( model='BusFreq', info='optional idx of the BusFreq device to use', ) self.kp = NumParam( info='active power percentage', default=100.0, unit='%', ) self.kq = NumParam( info='active power percentage', default=100.0, unit='%', ) self.Tf = NumParam( info='filter time constant', unit='s', default=0.02, non_negative=True, ) self.ap = NumParam( info='active power voltage exponent', default=1.0, ) self.aq = NumParam( info='reactive power voltage exponent', default=0.0, ) self.bp = NumParam( info='active power frequency exponent', default=0.0, ) self.bq = NumParam( info='reactive power frequency exponent', default=0.0, )
def __init__(self, system, config): ModelData.__init__(self) self.bus = IdxParam( model='Bus', info="linked bus idx", mandatory=True, ) self.tf = TimerParam( info='Fault start time for the bus', mandatory=True, callback=self.apply_fault, ) self.tc = TimerParam( info='Fault end time for the bus', callback=self.clear_fault, ) self.xf = NumParam( info='Fault to ground impedance', default=1e-4, tex_name='x_f', ) self.rf = NumParam( info='Fault to ground resistance', default=0, tex_name='x_f', ) Model.__init__(self, system, config) self.flags.update({'tds': True}) self.group = 'TimedEvent' self.gf = ConstService( tex_name='g_{f}', v_str='re(1/(rf + 1j * xf))', ) self.bf = ConstService( tex_name='b_{f}', v_str='im(1/(rf + 1j * xf))', ) self.uf = ConstService( tex_name='u_f', v_str='0', ) self.a = ExtAlgeb( model='Bus', src='a', indexer=self.bus, tex_name=r'\theta', e_str='u * uf * (v ** 2 * gf)', ) self.v = ExtAlgeb( model='Bus', src='v', indexer=self.bus, tex_name=r'V', e_str='u * uf * (v ** 2 * bf)', ) self._vstore = np.array([])
def __init__(self): ModelData.__init__(self) self.bus = IdxParam(model='Bus', info="bus idx for freq. measurement", mandatory=True) self.bias = NumParam(default=1.0, info='bias parameter', tex_name=r'\beta', unit='MW/0.1Hz', power=True) self.tcycle = NumParam(default=4.0, info='Update cycle', tex_name='t_{cycle}') # TODO: do not skip time in the update cycle. self.busf = IdxParam(info='Optional BusFreq idx', model='BusFreq', default=None)
def __init__(self): ModelData.__init__(self) self.bus = IdxParam(info="bus idx", mandatory=True) self.Ta = NumParam(default=0.1, tex_name='T_a', info='angle filter time constant') self.Tv = NumParam(default=0.1, tex_name='T_v', info='voltage filter time constant')
def __init__(self): REECA1Data.__init__(self) self.Kf = NumParam(default=0.0, info='gain for frequency deviation', tex_name='K_{df}', ) self.sg = IdxParam(info='synchronous gen idx', model='Synchronous', default=None, mandatory=True, )
def __init__(self): ModelData.__init__(self) self.avr = IdxParam(info='Exciter idx', mandatory=True, model='Exciter') self.rc = NumParam(default=0.0, info="Active compensation degree.", z=True, tex_name='r_c') self.xc = NumParam(default=0.0, info="Reactive compensation degree.", z=True, tex_name='x_c')
def __init__(self, system, config): ModelData.__init__(self) Model.__init__(self, system, config) self.flags.tds = True self.group = 'FreqMeasurement' # Parameters self.bus = IdxParam(info="bus idx", mandatory=True) self.Tf = NumParam(default=0.02, info="input digital filter time const", unit="sec", tex_name='T_f') self.Tw = NumParam(default=0.02, info="washout time const", unit="sec", tex_name='T_w') self.fn = NumParam(default=60.0, info="nominal frequency", unit='Hz', tex_name='f_n') # Variables self.iwn = ConstService(v_str='u / (2 * pi * fn)', tex_name=r'1/\omega_n') self.a0 = ExtService(src='a', model='Bus', indexer=self.bus, tex_name=r'\theta_0', info='initial phase angle', ) self.a = ExtAlgeb(model='Bus', src='a', indexer=self.bus, tex_name=r'\theta', ) self.v = ExtAlgeb(model='Bus', src='v', indexer=self.bus, tex_name=r'V', ) self.L = Lag(u='(a-a0)', T=self.Tf, K=1, info='digital filter', ) self.WO = Washout(u=self.L_y, K=self.iwn, T=self.Tw, info='angle washout', ) self.f = Algeb(info='frequency output', unit='p.u. (Hz)', tex_name='f', v_str='1', e_str='1 + WO_y - f', )
def __init__(self): REECA1Data.__init__(self) self.Kf = NumParam(default=0.0, info='gain for frequency deviation', tex_name='K_{df}', ) self.Kdf = NumParam(default=0.0, info='gain for rate-of-change of frequency', tex_name='K_{df}', ) self.busroc = IdxParam(info='Optional BusROCOF device idx', model='BusROCOF', default=None, )
def __init__(self): super().__init__() self.syn = IdxParam(model='SynGen', info='Synchronous generator idx', mandatory=True, unique=True, ) self.Tn = NumParam(info='Turbine power rating. Equal to Sn if not provided.', tex_name='T_n', unit='MVA', default=None, ) self.wref0 = NumParam(info='Base speed reference', tex_name=r'\omega_{ref0}', default=1.0, unit='p.u.', )
def __init__(self): super().__init__() self.syn = IdxParam(model='SynGen', info='Synchronous generator idx', mandatory=True, ) self.R = NumParam(info='Speed regulation gain under machine base', tex_name='R', default=0.05, unit='p.u.', ipower=True, ) self.wref0 = NumParam(info='Base speed reference', tex_name=r'\omega_{ref0}', default=1.0, unit='p.u.', )
def __init__(self): ModelData.__init__(self) self.pq = IdxParam( model='PQ', mandatory=True, info='idx of the PQ to replace', ) self.kpp = NumParam( info='Percentage of active power', mandatory=True, tex_name='K_{pp}', ) self.kpi = NumParam( info='Percentage of active current', mandatory=True, tex_name='K_{pi}', ) self.kpz = NumParam( info='Percentage of conductance', mandatory=True, tex_name='K_{pz}', ) self.kqp = NumParam( info='Percentage of reactive power', mandatory=True, tex_name='K_{qp}', ) self.kqi = NumParam( info='Percentage of reactive current', mandatory=True, tex_name='K_{qi}', ) self.kqz = NumParam( info='Percentage of susceptance', mandatory=True, tex_name='K_{qz}', )
def __init__(self): ModelData.__init__(self) self.bus = IdxParam(model='Bus', info="interface bus id", mandatory=True, ) self.gen = IdxParam(info="static generator index", mandatory=True, ) self.Sn = NumParam(default=100.0, tex_name='S_n', info='device MVA rating', unit='MVA', ) self.fn = NumParam(default=60.0, tex_name='f_n', info='nominal frequency', unit='Hz', ) self.busf = IdxParam(info='Optional BusFreq measurement device idx', model='BusFreq', default=None, ) self.xc = NumParam(default=0.0, tex_name='x_c', info='coupling reactance', unit='p.u.', z=True, ) self.pqflag = NumParam(info='P/Q priority for I limit; 0-Q priority, 1-P priority', mandatory=True, unit='bool', ) # --- parameters found from ESIG.energy --- self.igreg = IdxParam(model='Bus', info='Remote bus idx for droop response, None for local', ) self.qmx = NumParam(default=0.33, tex_name='q_{mx}', info='Max. reactive power command', power=True, unit='pu', ) self.qmn = NumParam(default=-0.33, tex_name='q_{mn}', info='Min. reactive power command', power=True, unit='pu', ) self.pmx = NumParam(default=999.0, info='maximum power limit', tex_name='p_{mx}', power=True, unit='pu', ) self.v0 = NumParam(default=0.8, tex_name='v_0', info='Lower limit of deadband for Vdroop response', unit='pu', non_zero=True, ) self.v1 = NumParam(default=1.1, tex_name='v_1', info='Upper limit of deadband for Vdroop response', unit='pu', non_zero=True, ) self.dqdv = NumParam(default=-1.0, tex_name='dq/dv', info='Q-V droop characteristics (negative)', power=True, non_zero=True ) self.fdbd = NumParam(default=-0.017, tex_name='f_{dbd}', info='frequency deviation deadband', unit='Hz', non_positive=True, ) # added on 11/14/2020: convert to system base pu self.ddn = NumParam(default=0.0, tex_name='D_{dn}', info='Gain after f deadband', unit='pu (MW)/Hz', power=True, non_negative=True, ) self.ialim = NumParam(default=1.3, tex_name='I_{alim}', info='Apparent power limit', current=True, non_negative=True, non_zero=True, ) self.vt0 = NumParam(default=0.88, tex_name='V_{t0}', info='Voltage tripping response curve point 0', unit='p.u.', non_negative=True, non_zero=True, ) self.vt1 = NumParam(default=0.90, tex_name='V_{t1}', info='Voltage tripping response curve point 1', unit='p.u.', non_negative=True, non_zero=True, ) self.vt2 = NumParam(default=1.1, tex_name='V_{t2}', info='Voltage tripping response curve point 2', unit='p.u.', non_negative=True, non_zero=True, ) self.vt3 = NumParam(default=1.2, tex_name='V_{t3}', info='Voltage tripping response curve point 3', unit='p.u.', non_negative=True, non_zero=True, ) self.vrflag = NumParam(default=0.0, tex_name='z_{VR}', info='V-trip is latching (0) or self-resetting (0-1)', ) self.ft0 = NumParam(default=59.5, tex_name='f_{t0}', info='Frequency tripping response curve point 0', unit='Hz', non_negative=True, non_zero=True, ) self.ft1 = NumParam(default=59.7, tex_name='f_{t1}', info='Frequency tripping response curve point 1', unit='Hz', non_negative=True, non_zero=True, ) self.ft2 = NumParam(default=60.3, tex_name='f_{t2}', info='Frequency tripping response curve point 2', unit='Hz', non_negative=True, non_zero=True, ) self.ft3 = NumParam(default=60.5, tex_name='f_{t3}', info='Frequency tripping response curve point 3', unit='Hz', non_negative=True, non_zero=True, ) self.frflag = NumParam(default=0.0, tex_name='z_{FR}', info='f-trip is latching (0) or self-resetting (0-1)', ) self.tip = NumParam(default=0.02, tex_name='T_{ip}', info='Inverter active current lag time constant', unit='s', non_negative=True, ) self.tiq = NumParam(default=0.02, tex_name='T_{iq}', info='Inverter reactive current lag time constant', unit='s', non_negative=True, ) self.gammap = NumParam(default=1.0, tex_name=r'\gamma_p', info='Ratio of PVD1.pref0 w.r.t to that of static PV', vrange='(0, 1]', ) self.gammaq = NumParam(default=1.0, tex_name=r'\gamma_q', info='Ratio of PVD1.qref0 w.r.t to that of static PV', vrange='(0, 1]', ) self.recflag = NumParam(default=1, tex_name=r'z_{rec}', info='Enable flag for voltage and frequency recovery limiters', vrange='(0, 1)', )
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.gf = ConstService( tex_name='g_{f}', v_str='re(1/(rf + 1j * xf))', ) self.bf = ConstService( tex_name='b_{f}', v_str='im(1/(rf + 1j * xf))', ) # 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): ModelData.__init__(self) self.bus = IdxParam( model='Bus', info="idx of connected bus", mandatory=True, ) self.node1 = IdxParam( default=None, tex_name='node_1', info='Node 1 index', mandatory=True, model='Node', ) self.node2 = IdxParam( default=None, tex_name='node_2', 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): 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.0, info="active power feedback gain", tex_name='k_p') self.kw = NumParam(default=0.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}', ) self.gammap = NumParam(default=1.0, info="P ratio of linked static gen", tex_name=r'\gamma_P') self.gammaq = NumParam(default=1.0, info="Q ratio of linked static gen", tex_name=r'\gamma_Q')