psspy.addmodellibrary(HuaweiModelPath + 'HWS2000_psse34.dll') psspy.addmodellibrary(HuaweiModelPath + 'MOD_GPM_PPC_V13_34.dll') psspy.addmodellibrary(HuaweiModelPath + 'MOD_GPM_SB_V7.dll') psspy.dynamics_solution_param_2([_i, _i, _i, _i, _i, _i, _i, _i], [0.300, _f, 0.001, 0.004, _f, _f, _f, _f]) psspy.machine_data_2( 500, r"""1""", [_i, _i, _i, _i, _i, _i], [90, _f, _f, _f, 96.8, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f]) psspy.fnsl([0, 0, 0, 1, 1, 1, 99, 0]) psspy.bus_frequency_channel([1, 1000], r"""System frequency""") psspy.voltage_channel([2, -1, -1, 500], r"""Inverter Voltage Mag.""") psspy.voltage_channel([3, -1, -1, 800], r"""WISF POC Voltage Mag.""") psspy.branch_p_and_q_channel([4, -1, -1, 800, 900], r"""1""", [r"""P Injection""", r"""Q Injection"""]) ierr = psspy.machine_array_channel([6, 2, 500], r"""1""", r"""Pelec Inverter""") ierr = psspy.machine_array_channel([7, 3, 500], r"""1""", r"""Qelec Inverter""") [ierr, var_ppc_conp] = psspy.mdlind(500, '1', 'EXC', 'CON') [ierr, var_ppc_setp] = psspy.mdlind(500, '1', 'EXC', 'VAR') [ierr, var_ppc_mode] = psspy.mdlind(500, '1', 'EXC', 'ICON') [ierr, var_inv1_con] = psspy.mdlind(500, '1', 'GEN', 'CON') [ierr, var_inv1_var] = psspy.mdlind(500, '1', 'GEN', 'VAR') [ierr, var_inv1_mod] = psspy.mdlind(500, '1', 'GEN', 'ICON') # convert load , do not change psspy.cong(0) psspy.bsys(0, 0, [0.0, 500.], 1, [7], 0, [], 0, [], 0, []) psspy.bsys(0, 0, [0.0, 500.], 1, [7], 0, [], 0, [], 0, []) psspy.conl(0, 0, 1, [0, 0], [91.27, 19.36, -126.88, 188.43])
psspy.addmodellibrary(HuaweiModelPath+'MOD_GPM_SB_V7.dll') psspy.plant_chng_3(500,0,_i,[ 1.05,_f]) psspy.plant_chng_3(1000,0,_i,[ 1.047,_f]) psspy.dynamics_solution_param_2([_i,_i,_i,_i,_i,_i,_i,_i],[0.300,_f, 0.001,0.004,_f,_f,_f,_f]) psspy.machine_data_2(500, r"""1""", [_i, _i, _i, _i, _i, _i],[87, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f]) psspy.two_winding_chng_5(700,800,r"""1""",[_i,_i,_i,_i,_i,_i,_i,_i,800,_i,_i,1,_i,_i,_i],[_f,_f,_f, 1.0,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f],[_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f],r"""SS-TF-1""", r"""YNYN0""") psspy.machine_chng_2(500,r"""1""",[_i,_i,_i,_i,_i,_i],[_f,0.0,0,0,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f]) psspy.fnsl([0,0,0,1,0,0,99,0]) # convert load , do not change psspy.cong(0) psspy.bus_frequency_channel([1,1000],r"""System frequency""") ierr=psspy.machine_array_channel([2,4,500],r"""1""",r"""Inverter Terminal Voltage""") ierr=psspy.voltage_channel([3,-1,-1,800],r"""WISF PoC Voltage""") psspy.branch_p_and_q_channel([4,-1,-1,800,900],r"""1""",[r"""P Injection""",r"""Q Injection"""]) psspy.branch_p_and_q_channel([6,-1,-1,500,600],r"""1""",[r"""P Injection""",r"""Q Injection"""]) # ierr=psspy.machine_array_channel([6,2,500],r"""1""",r"""Pelec Inverter""") # ierr=psspy.machine_array_channel([7,3,500],r"""1""",r"""Qelec Inverter""") [ierr, var_ppc_conp] = psspy.mdlind(500, '1', 'EXC', 'CON') [ierr, var_ppc_setp] = psspy.mdlind(500, '1', 'EXC', 'VAR') [ierr, var_ppc_mode] = psspy.mdlind(500, '1', 'EXC', 'ICON') [ierr, var_inv1_con] = psspy.mdlind(500, '1', 'GEN', 'CON') [ierr, var_inv1_var]= psspy.mdlind(500,'1','GEN','VAR') [ierr, var_inv1_mod]= psspy.mdlind(500,'1','GEN','ICON') ierr=psspy.var_channel([8,var_ppc_setp+68],"Voltage Setpoint") ierr=psspy.var_channel([9,var_ppc_setp+10],"Active Power Setpoint")
[ierr, var_ppc_conp] = psspy.mdlind(101, '1', 'EXC', 'CON') [ierr, var_ppc_setp] = psspy.mdlind(101, '1', 'EXC', 'VAR') [ierr, var_ppc_mode] = psspy.mdlind(101, '1', 'EXC', 'ICON') [ierr, var_inv_con] = psspy.mdlind(101, '1', 'GEN', 'CON') [ierr, var_inv_var] = psspy.mdlind(101, '1', 'GEN', 'VAR') [ierr, var_inv_stt] = psspy.mdlind(101, '1', 'GEN', 'STATE') psspy.bus_frequency_channel([1, 400], r"""System frequency""") psspy.voltage_channel([2, -1, -1, 101], r"""Inverter Voltage Mag.""") psspy.voltage_channel([3, -1, -1, 400], r"""WD SF POC Voltage Mag.""") psspy.branch_p_and_q_channel( [4, -1, -1, 400, 46660], r"""1""", [r"""P Injection""", r"""Q Injection"""]) ierr = psspy.machine_array_channel([7, 2, 101], r"""1""", r"""Pelec 100""") ierr = psspy.machine_array_channel([8, 3, 101], r"""1""", r"""Qelec 100""") # ierr = psspy.state_channel([9, var_inv_stt + 6], r"""Inverter Voltage Measurement""") # start simulation psspy.strt_2([0, 0], OutputFilePath) psspy.run(0, 1, 1000, 1, 0) psspy.run(0, 5, 1000, 1, 0) psspy.two_winding_chng_5( 500, 46660, r"""1""", [_i, _i, _i, _i, _i, _i, _i, _i, 500, _i, _i, 0, _i, _i, _i], [ _f, _f, _f, _f, _f, _f, vref[k], _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f ], [_f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f], "", "") psspy.run(0, 20, 1000, 1, 0)
psspy.fdns([0, 0, 1, 1, 0, 0, 99, 0]) # convert load , do not change psspy.cong(0) psspy.conl(0, 1, 1, [0, 0], [100.0, 0.0, 0.0, 100.0]) psspy.conl(0, 1, 2, [0, 0], [100.0, 0.0, 0.0, 100.0]) psspy.conl(0, 1, 3, [0, 0], [100.0, 0.0, 0.0, 100.0]) psspy.ordr(0) # Order the matrix: ORDR psspy.fact() # Factorize the matrix: FACT psspy.tysl(0) # TYSL psspy.bus_frequency_channel([1, 969], r"""System frequency""") psspy.voltage_channel([2, -1, -1, 969], r"""IB_Voltage""") psspy.voltage_channel([3, -1, -1, 100], r"""UUT_Voltage""") psspy.voltage_channel([4, -1, -1, 106], r"""POC_Voltage""") psspy.machine_array_channel([5, 2, 100], r"""1""", r"""UUT_Pelec""") psspy.machine_array_channel([6, 3, 100], r"""1""", r"""UUT_Qelec""") psspy.branch_p_and_q_channel([7, -1, -1, 105, 106], r"""1""", [r"""POC_Flow""", ""]) psspy.machine_array_channel([9, 9, 100], r"""1""", r"""UUT_IDcmd""") psspy.machine_array_channel([10, 12, 100], r"""1""", r"""UUT_IQcmd""") psspy.machine_array_channel([11, 8, 100], r"""1""", r"""PPC_Pcmd""") psspy.machine_array_channel([12, 5, 100], r"""1""", r"""PPC_Qcmd""") [ierr, var_ppc_conp] = psspy.mdlind(100, '1', 'EXC', 'CON') [ierr, var_ppc_setp] = psspy.mdlind(100, '1', 'EXC', 'VAR') [ierr, var_ppc_mode] = psspy.mdlind(100, '1', 'EXC', 'ICON') [ierr, var_inv_con] = psspy.mdlind(100, '1', 'GEN', 'CON') [ierr, var_inv_var] = psspy.mdlind(100, '1', 'GEN', 'VAR') [ierr, var_inv_mod] = psspy.mdlind(100, '1', 'GEN', 'ICON')
# psspy.change_plmod_con(600, r"""1""", r"""SEXS""", 6, 2.5) psspy.change_plmod_con(600, r"""1""", r"""GENCLS""", 1, 0.1) psspy.change_plmod_con(600, r"""1""", r"""GENCLS""", 2, 1) for t_var in range(1, 9000): psspy.change_var(t_var, 0) [ierr, var_ppc_conp] = psspy.mdlind(101, '1', 'EXC', 'CON') [ierr, var_ppc_setp] = psspy.mdlind(101, '1', 'EXC', 'VAR') [ierr, var_ppc_mode] = psspy.mdlind(101, '1', 'EXC', 'ICON') [ierr, var_inv_con] = psspy.mdlind(101, '1', 'GEN', 'CON') [ierr, var_inv_var] = psspy.mdlind(101, '1', 'GEN', 'VAR') [ierr, var_inv_stt] = psspy.mdlind(101, '1', 'GEN', 'STATE') psspy.bus_frequency_channel([1, 400], r"""System frequency""") #psspy.voltage_channel([2, -1, -1, 101], r"""Inverter Voltage Mag.""") psspy.machine_array_channel([2, 4, 101],r"""1""", r"""Inverter Voltage Mag.""") psspy.voltage_channel([3, -1, -1, 400], r"""WD SF POC Voltage Mag.""") psspy.branch_p_and_q_channel([4, -1, -1, 400, 46660], r"""1""", [r"""P Injection""", r"""Q Injection"""]) ierr = psspy.machine_array_channel([7, 2, 101], r"""1""", r"""Pelec 101""") ierr = psspy.machine_array_channel([8, 3, 101], r"""1""", r"""Qelec 101""") psspy.cong(0) # psspy.conl(0, 1, 1, [0, 0], [0.0, 0.0, 0.1, 0.0]) # psspy.conl(0, 1, 2, [0, 0], [0.0, 0.0, 0.1, 0.0]) # psspy.conl(0, 1, 3, [0, 0], [0.0, 0.0, 0.1, 0.0]) psspy.ordr(1) psspy.fact() psspy.tysl(1) # psspy.change_plmod_icon(101,r"""1""",r"""HWS2000""",1,0) # psspy.change_plmod_icon(102,r"""1""",r"""HWS2000""",1,0) # psspy.change_plmod_icon(103,r"""1""",r"""HWS2000""",1,0)
psspy.psseinit(10000) # ## Initiation---------------------------------------------------------------------------------------------------------------------------------- psspy.case(casefile) # Read in the power flow data psspy.dyre_new([1, 1, 1, 1], dyrfile, "", "", "") # Convert the loads for dynamic simulation psspy.cong(0) psspy.conl(0, 1, 1, [0, 0], [10.0, 10.0, 0.0, 100.0]) psspy.conl(0, 1, 2, [0, 0], [10.0, 10.0, 0.0, 100.0]) psspy.conl(0, 1, 3, [0, 0], [10.0, 10.0, 0.0, 100.0]) # Set the time step for the dynamic simulation psspy.dynamics_solution_params(realar=[_f, _f, 0.005, _f, _f, _f, _f, _f]) psspy.machine_array_channel([1, 2, 5500]) # Monitor Skien Power (as 5101 Hasle does not have any machine to measure frequency) psspy.machine_array_channel([2, 7, 5500]) # Monitor Skien Frequency (as 5101 Hasle does not have any machine to measure frequency) load = load_models.Load(3359) # Create a load consisting of Ringhals ierr = psspy.strt(outfile=outputfile) # Tell PSS/E to write to the output file # Simulation---------------------------------------------------------------------------------------------------------------------------------- if ierr == 0: # nprt: number of time steps between writing to screen # nplt: number of time steps between writing to output file psspy.run(tpause=0, nprt=0, nplt=0) # run the simulation load.step(1120) # Do a 1120MW load step in Ringhals psspy.run(tpause=120) # Pause the simulation after 120 seconds
psspy.addmodellibrary(HuaweiModelPath + 'MOD_GPM_SB_V7.dll') psspy.dynamics_solution_param_2([_i, _i, _i, _i, _i, _i, _i, _i], [0.300, _f, 0.001, 0.004, _f, _f, _f, _f]) # psspy.two_winding_chng_5(104,299,r"""1""",[_i,_i,_i,_i,_i,_i,_i,_i,299,_i,_i,1,_i,_i,_i],[_f,_f,_f, 1.0,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f],[_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f],r"""SS-TF-1""", # r"""YNYN0""") # psspy.two_winding_chng_5(204,299,r"""1""",[_i,_i,_i,_i,_i,_i,_i,_i,299,_i,_i,1,_i,_i,_i],[_f,_f,_f, 1.0,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f],[_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f],r"""SS-TF-2""", # r"""YNYN0""") psspy.machine_data_2( 500, r"""1""", [_i, _i, _i, _i, _i, _i], [90, _f, _f, _f, 96.8, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f]) psspy.fnsl([0, 0, 0, 1, 0, 0, 99, 0]) # convert load , do not change psspy.cong(0) psspy.bus_frequency_channel([1, 1000], r"""System frequency""") ierr = psspy.machine_array_channel([2, 4, 500], r"""1""", r"""Inverter Terminal Voltage""") ierr = psspy.voltage_channel([3, -1, -1, 800], r"""WISF PoC Voltage""") psspy.branch_p_and_q_channel([4, -1, -1, 800, 900], r"""1""", [r"""P Injection""", r"""Q Injection"""]) ierr = psspy.machine_array_channel([6, 2, 500], r"""1""", r"""Pelec Inverter""") ierr = psspy.machine_array_channel([7, 3, 500], r"""1""", r"""Qelec Inverter""") [ierr, var_ppc_conp] = psspy.mdlind(500, '1', 'EXC', 'CON') [ierr, var_ppc_setp] = psspy.mdlind(500, '1', 'EXC', 'VAR') [ierr, var_ppc_mode] = psspy.mdlind(500, '1', 'EXC', 'ICON') [ierr, var_inv1_con] = psspy.mdlind(500, '1', 'GEN', 'CON') [ierr, var_inv1_var] = psspy.mdlind(500, '1', 'GEN', 'VAR') [ierr, var_inv1_mod] = psspy.mdlind(500, '1', 'GEN', 'ICON') ierr = psspy.var_channel([8, var_ppc_setp + 68], "Voltage Setpoint")
psspy.change_var(t_var, 0) [ierr, var_ppc_conp] = psspy.mdlind( 101, '1', 'EXC', 'CON' ) # Use this API to return plant-related model starting array indices and status. get the EXC (GPMPPC)'s CON [ierr, var_ppc_setp] = psspy.mdlind(101, '1', 'EXC', 'VAR') [ierr, var_ppc_mode] = psspy.mdlind(101, '1', 'EXC', 'ICON') [ierr, var_inv_con] = psspy.mdlind(101, '1', 'GEN', 'CON') [ierr, var_inv_var] = psspy.mdlind(101, '1', 'GEN', 'VAR') [ierr, var_inv_stt] = psspy.mdlind(101, '1', 'GEN', 'STATE') psspy.bus_frequency_channel([1, 400], r"""System frequency""") psspy.voltage_channel([2, -1, -1, 101], r"""Inverter Voltage Mag.""") psspy.voltage_channel([3, -1, -1, 400], r"""NEOEN SF POC Voltage Mag.""") psspy.branch_p_and_q_channel([4, -1, -1, 400, 46660], r"""1""", [r"""P Injection""", r"""Q Injection"""]) ierr = psspy.machine_array_channel([7, 2, 101], r"""1""", r"""Pelec 101""") ierr = psspy.machine_array_channel([8, 3, 101], r"""1""", r"""Qelec 101""") ierr = psspy.machine_array_channel([9, 2, 102], r"""1""", r"""Pelec 102""") ierr = psspy.machine_array_channel([10, 3, 102], r"""1""", r"""Qelec 102""") ierr = psspy.machine_array_channel([11, 2, 103], r"""1""", r"""Pelec 103""") ierr = psspy.machine_array_channel([12, 3, 103], r"""1""", r"""Qelec 103""") ierr = psspy.machine_array_channel([13, 2, 104], r"""1""", r"""Pelec 104""") ierr = psspy.machine_array_channel([14, 3, 104], r"""1""", r"""Qelec 104""") #ierr = psspy.state_channel([15, var_inv_stt + 6], r"""Inverter Voltage Measurement""") psspy.var_channel([15, var_ppc_setp + 68], r"""Voltage Setpoint""") psspy.change_plmod_icon(101, r"""1""", r"""HWS2000""", 4, 1) # start simulation psspy.strt_2([0, 0], OutputFilePath) psspy.run(0, 5, 1000, 1, 0) psspy.change_var(var_ppc_setp + 68, 1.05)
psspy.fdns([0, 0, 1, 1, 0, 0, 99, 0]) # convert load , do not change psspy.cong(0) psspy.conl(0, 1, 1, [0, 0], [100.0, 0.0, 0.0, 100.0]) psspy.conl(0, 1, 2, [0, 0], [100.0, 0.0, 0.0, 100.0]) psspy.conl(0, 1, 3, [0, 0], [100.0, 0.0, 0.0, 100.0]) psspy.ordr(0) # ! Order the matrix: ORDR psspy.fact() # ! Factorize the matrix: FACT psspy.tysl(0) # ! TYSL psspy.bus_frequency_channel([1, 969], r"""System frequency""") psspy.voltage_channel([2, -1, -1, 969], r"""IB_Voltage""") psspy.voltage_and_angle_channel([3, -1, -1, 100], [r"""UUT_Voltage""", r"""UUT_Angle"""]) psspy.voltage_and_angle_channel([5, -1, -1, 106], [r"""POC_Voltage""", r"""POC_Angle"""]) psspy.machine_array_channel([7, 2, 100], r"""1""", r"""UUT_Pelec""") psspy.machine_array_channel([8, 3, 100], r"""1""", r"""UUT_Qelec""") psspy.branch_p_and_q_channel([9, -1, -1, 105, 106], r"""1""", [r"""POC_Flow""", ""]) psspy.machine_array_channel([11, 9, 100], r"""1""", r"""UUT_IDcmd""") psspy.machine_array_channel([12, 12, 100], r"""1""", r"""UUT_IQcmd""") psspy.machine_array_channel([13, 8, 100], r"""1""", r"""PPC_Pcmd""") psspy.machine_array_channel([14, 5, 100], r"""1""", r"""PPC_Qcmd""") psspy.strt_2([0, 0], OutputFilePath) psspy.run(0, 1.0, 1000, 5, 5) psspy.two_winding_data_3(bus_flt, bus_IDTRF, r"""1""", realari6=20) psspy.run(0, 6.0, 1000, 5, 5) psspy.two_winding_data_3(bus_flt, bus_IDTRF, r"""1""", realari6=0) psspy.run(0, 11.0, 1000, 5, 5) psspy.two_winding_data_3(bus_flt, bus_IDTRF, r"""1""", realari6=-20) psspy.run(0, 16.0, 1000, 5, 5)
import utils
psspy.psseinit(10000) # Initiation---------------------------------------------------------------------------------------------------------------------------------- psspy.case(casefile) # Read in the power flow data psspy.dyre_new([1, 1, 1, 1], dyrfile, "", "", "") # Convert the loads for dynamic simulation psspy.cong(0) psspy.conl(0, 1, 1, [0, 0], [50.0, 50.0, 0.0, 100.0]) psspy.conl(0, 1, 2, [0, 0], [50.0, 50.0, 0.0, 100.0]) psspy.conl(0, 1, 3, [0, 0], [50.0, 50.0, 0.0, 100.0]) # Set the time step for the dynamic simulation psspy.dynamics_solution_params(realar=[_f, _f, 0.005, _f, _f, _f, _f, _f]) psspy.machine_array_channel([1, 2, 6000]) # Monitor Kvilldal Power psspy.machine_array_channel([2, 7, 6000]) # Monitor Kvilldal Frequency load = load_models.Load(6500) # Create a load consisting of Trondheim ierr = psspy.strt(outfile=outputfile) # Tell PSS/E to write to the output file # Simulation---------------------------------------------------------------------------------------------------------------------------------- if ierr == 0: # nprt: number of time steps between writing to screen # nplt: number of time steps between writing to output file psspy.run(tpause=0, nprt=0, nplt=0) # run the simulation load.step(100) # Do a 100MW load step in Trondheim psspy.run(tpause=120) # Pause the simulation after 120 seconds