def dpsim(): # Parameters V_nom = 20e3 p_load_nom = 100e3 q_load_nom = 50e3 line_resistance = 0.05 line_inductance = 0.1 line_capacitance = 0.1e-6 name = 'test_shmem_import_export' # Nodes and Components n1 = dpsimpy.sp.SimNode('n1', dpsimpy.PhaseType.Single) n2 = dpsimpy.sp.SimNode('n2', dpsimpy.PhaseType.Single) extnet = dpsimpy.sp.ph1.NetworkInjection('Slack') extnet.set_parameters(voltage_set_point=V_nom) extnet.set_base_voltage(V_nom) extnet.modify_power_flow_bus_type(dpsimpy.PowerflowBusType.VD) line = dpsimpy.sp.ph1.PiLine('PiLine') line.set_parameters(R=line_resistance, L=line_inductance, C=line_capacitance) line.set_base_voltage(V_nom) load = dpsimpy.sp.ph1.Load('Load') load.set_parameters(active_power=p_load_nom, reactive_power=q_load_nom, nominal_voltage=V_nom) load.modify_power_flow_bus_type(dpsimpy.PowerflowBusType.PQ) extnet.connect([n1]) line.connect([n1, n2]) load.connect([n2]) system = dpsimpy.SystemTopology(50, [n1, n2], [extnet, line, load]) sim = dpsimpy.RealTimeSimulation(name, dpsimpy.LogLevel.debug) sim.set_system(system) sim.set_domain(dpsimpy.Domain.SP) sim.set_solver(dpsimpy.Solver.NRP) sim.set_time_step(1) sim.set_final_time(10) sim.do_init_from_nodes_and_terminals(False) logger = dpsimpy.Logger(name) sim.add_logger(logger) sim.log_attr('n1', 'v') sim.log_attr('n2', 'v') intf = dpsimpyvillas.InterfaceShmem() sim.add_interface(intf) sim.import_attr('Load', 'P', 0) sim.export_attr('n2', 'v', 0, dpsimpy.AttrModifier.mag) return sim, intf
def wait_for_run_command(queue): while True: out = open(str(os.getpid()) + ".out", "w") err = open(str(os.getpid()) + ".err", "w") msg = queue.get() analysis_id = msg['analysis_id'] try: model_id = msg['model_id'] name = msg['name'] analysis_name = "Analysis_" + str(analysis_id) out.write("run analysis: " + str(analysis_id)) TaskExecutor.status_list[analysis_id] = TaskExecutor.Status.running.value logger = dpsimpy.Logger(analysis_name) model = model_db.get_model(model_id) files = model.files # prepare the files for dpsim to read. we should make dpsim accept data blobs. # however, that requires work in 3 projects and a technical discussion first. filenames = [] for filedata in model.files: fp, path = tempfile.mkstemp(suffix=".xml", prefix=None, dir=None, text=True) filedata.seek(0) data = filedata.read() os.write(fp, data); os.close(fp); filenames.append(path) #initialise dpsimpy reader = dpsimpy.CIMReader("Analysis_" + str(analysis_id)) system = reader.loadCIM(50, filenames, dpsimpy.Domain.SP, dpsimpy.PhaseType.Single) sim = dpsimpy.Simulation("Analysis_" + str(analysis_id)) sim.set_system(system) sim.set_domain(dpsimpy.Domain.SP) sim.set_solver(dpsimpy.Solver.NRP) for node in system.nodes: logger.log_attribute(node.name()+'.V', 'v', node); sim.add_logger(logger) sim.run() # clean up the files that we created for tempname in filenames: os.unlink(tempname) TaskExecutor.status_list[analysis_id] = TaskExecutor.Status.complete.value except Exception as e: TaskExecutor.status_list[analysis_id] = TaskExecutor.Status.error.value err.write("analysis failed: " + str(analysis_id) + " with: " + str(e)) finally: err.close() out.close()
def execute_dpsimpy(self): #initialise dpsimpy logger = dpsimpy.Logger(self.analysis_name) reader = dpsimpy.CIMReader(self.analysis_name) system = reader.loadCIM(50, self.filenames, dpsimpy.Domain.SP, dpsimpy.PhaseType.Single) sim = dpsimpy.Simulation(self.analysis_name) sim.set_system(system) sim.set_domain(dpsimpy.Domain.SP) sim.set_solver(dpsimpy.Solver.NRP) for node in system.nodes: logger.log_attribute(node.name() + '.V', 'v', node) sim.add_logger(logger) sim.run()
def dpsim0(): sim_name = "ShmemDistributed0" time_step = 0.001 final_time = 10 n1 = dpsimpy.dp.SimNode('n1', dpsimpy.PhaseType.Single, [10]) n2 = dpsimpy.dp.SimNode('n2', dpsimpy.PhaseType.Single, [5]) evs = dpsimpy.dp.ph1.VoltageSource('v_intf', dpsimpy.LogLevel.debug) evs.set_parameters(complex(5, 0)) vs1 = dpsimpy.dp.ph1.VoltageSource('vs_1', dpsimpy.LogLevel.debug) vs1.set_parameters(complex(10, 0)) r12 = dpsimpy.dp.ph1.Resistor('r_12', dpsimpy.LogLevel.debug) r12.set_parameters(1) evs.connect([dpsimpy.dp.SimNode.gnd, n2]) vs1.connect([dpsimpy.dp.SimNode.gnd, n1]) r12.connect([n1, n2]) sys = dpsimpy.SystemTopology(50, [n1, n2], [evs, vs1, r12]) dpsimpy.Logger.set_log_dir('logs/' + sim_name) logger = dpsimpy.Logger(sim_name) logger.log_attribute('v1', 'v', n1) logger.log_attribute('v2', 'v', n2) logger.log_attribute('r12', 'i_intf', r12) logger.log_attribute('ievs', 'i_intf', evs) logger.log_attribute('vevs', 'v_intf', evs) sim = dpsimpy.RealTimeSimulation(sim_name) sim.set_system(sys) sim.set_time_step(time_step) sim.set_final_time(final_time) intf = dpsimpyvillas.InterfaceShmem('/dpsim0-out', '/dpsim0-in') sim.import_attr('v_intf', 'V_ref', 0) sim.export_attr('v_intf', 'i_intf', 0, 0, 0) sim.add_interface(intf, True) sim.add_logger(logger) evs.set_intf_current([[complex(5, 0)]]) sim.run(1)
def execute_dpsimpy(self): #initialise dpsimpy logger = dpsimpy.Logger(self.analysis_name) reader = dpsimpy.CIMReader(self.analysis_name) system = reader.loadCIM(50, self.filenames, dpsimpy.Domain.SP, dpsimpy.PhaseType.Single) if system == None: self.err.write("Could not start dpsimpy with files: " + self.filenames) TaskExecutor.status_list[ self.analysis_id] = TaskExecutor.Status.error.value return self.read_load_profiles(system) sim = dpsimpy.Simulation(self.analysis_name) sim.set_system(system) sim.set_domain(dpsimpy.Domain.SP) sim.set_solver(dpsimpy.Solver.NRP) for node in system.nodes: logger.log_attribute(node.name() + '.V', 'v', node) sim.add_logger(logger) sim.run()
def dpsim1(): sim_name = "ShmemDistributed1" time_step = 0.001 final_time = 10 n2 = dpsimpy.dp.SimNode('n2', dpsimpy.PhaseType.Single, [5]) ecs = dpsimpy.dp.ph1.CurrentSource('i_intf', dpsimpy.LogLevel.debug) ecs.set_parameters(complex(5, 0)) r02 = dpsimpy.dp.ph1.Resistor('r_02', dpsimpy.LogLevel.debug) r02.set_parameters(1) ecs.connect([dpsimpy.dp.SimNode.gnd, n2]) r02.connect([dpsimpy.dp.SimNode.gnd, n2]) sys = dpsimpy.SystemTopology(50, [n2], [ecs, r02]) dpsimpy.Logger.set_log_dir('logs/' + sim_name) logger = dpsimpy.Logger(sim_name) logger.log_attribute('v2', 'v', n2) logger.log_attribute('r02', 'i_intf', r02) logger.log_attribute('vecs', 'v_intf', ecs) logger.log_attribute('iecs', 'i_intf', ecs) sim = dpsimpy.RealTimeSimulation(sim_name) sim.set_system(sys) sim.set_time_step(time_step) sim.set_final_time(final_time) intf = dpsimpyvillas.InterfaceShmem('/dpsim1-out', '/dpsim1-in') sim.import_attr('i_intf', 'I_ref', 0) sim.export_attr('i_intf', 'v_intf', 0, 0, 0, scale=complex(-1, 0)) sim.add_interface(intf) sim.add_logger(logger) sim.run(1)
assignList['LOAD-I-13'] = 'Load_I_13' assignList['LOAD-I-14'] = 'Load_I_14' csvreader = dpsimpy.CSVReader(name, csv_files, assignList, dpsimpy.LogLevel.info) csvreader.assignLoadProfile(system, 0, 1, 300, dpsimpy.CSVReaderMode.MANUAL, dpsimpy.CSVReaderFormat.SECONDS) sim = dpsimpy.RealTimeSimulation(name) sim.set_system(system) sim.set_domain(dpsimpy.Domain.SP) sim.set_solver(dpsimpy.Solver.NRP) sim.set_time_step(1) sim.set_final_time(30) logger = dpsimpy.Logger(name) sim.add_logger(logger) intf = dpsimpy.InterfaceShmem() sim.add_interface(intf) obj_list = system.list_idobjects() node_list = { k: v for k, v in obj_list.items() if v == 'SimNode<std::complex<double> >' } print(node_list) for i in range(15): objname = 'N' + str(i) sim.export_attr(objname, 'v', (i * 2), dpsimpy.AttrModifier.mag)
vs1 = dpsimpy.dp.ph1.VoltageSource('vs_1', dpsimpy.LogLevel.debug) vs1.set_parameters(complex(10, 0)) r12 = dpsimpy.dp.ph1.Resistor('r_12', dpsimpy.LogLevel.debug) r12.set_parameters(1) evs.connect([dpsimpy.dp.SimNode.gnd, n2]) vs1.connect([dpsimpy.dp.SimNode.gnd, n1]) r12.connect([n1, n2]) sys = dpsimpy.SystemTopology(50, [n1, n2], [evs, vs1, r12]) dpsimpy.Logger.set_log_dir('logs/' + sim_name) logger = dpsimpy.Logger(sim_name) logger.log_attribute('v1', 'v', n1) logger.log_attribute('v2', 'v', n2) logger.log_attribute('r12', 'i_intf', r12) logger.log_attribute('ievs', 'i_intf', evs) logger.log_attribute('vevs', 'v_intf', evs) sim = dpsimpy.RealTimeSimulation(sim_name) sim.set_system(sys) sim.set_time_step(time_step) sim.set_final_time(final_time) file_config = '''{ "type": "file", "format": "csv", "uri": "logs/output.csv",
def dpsim(): name = 'CIGRE-MV-Profiles' files = glob.glob( 'build/_deps/cim-data-src/CIGRE_MV/NEPLAN/CIGRE_MV_no_tapchanger_With_LoadFlow_Results/*.xml' ) print(files) reader = dpsimpy.CIMReader(name) system = reader.loadCIM(50, files, dpsimpy.Domain.SP, dpsimpy.PhaseType.Single) csv_files = glob.glob( 'build/_deps/profile-data-src/CIGRE_MV_NoTap/load_profiles/')[0] print(csv_files) assignList = {} assignList['LOAD-H-1'] = 'Load_H_1' assignList['LOAD-H-3'] = 'Load_H_3' assignList['LOAD-H-4'] = 'Load_H_4' assignList['LOAD-H-5'] = 'Load_H_5' assignList['LOAD-H-6'] = 'Load_H_6' assignList['LOAD-H-8'] = 'Load_H_8' assignList['LOAD-H-10'] = 'Load_H_10' assignList['LOAD-H-11'] = 'Load_H_11' assignList['LOAD-H-12'] = 'Load_H_12' assignList['LOAD-H-14'] = 'Load_H_14' assignList['LOAD-I-1'] = 'Load_I_1' assignList['LOAD-I-3'] = 'Load_I_3' assignList['LOAD-I-7'] = 'Load_I_7' assignList['LOAD-I-9'] = 'Load_I_9' assignList['LOAD-I-10'] = 'Load_I_10' assignList['LOAD-I-12'] = 'Load_I_12' assignList['LOAD-I-13'] = 'Load_I_13' assignList['LOAD-I-14'] = 'Load_I_14' csvreader = dpsimpy.CSVReader(name, csv_files, assignList, dpsimpy.LogLevel.info) csvreader.assignLoadProfile(system, 0, 1, 300, dpsimpy.CSVReaderMode.MANUAL, dpsimpy.CSVReaderFormat.SECONDS) sim = dpsimpy.RealTimeSimulation(name) sim.set_system(system) sim.set_domain(dpsimpy.Domain.SP) sim.set_solver(dpsimpy.Solver.NRP) sim.set_time_step(1) sim.set_final_time(30) logger = dpsimpy.Logger(name) sim.add_logger(logger) intf = dpsimpy.InterfaceShmem() sim.add_interface(intf) obj_list = system.list_idobjects() node_list = { k: v for k, v in obj_list.items() if v == 'SimNode<std::complex<double> >' } print(node_list) for i in range(15): objname = 'N' + str(i) sim.export_attr(objname, 'v', (i * 2), dpsimpy.AttrModifier.mag) sim.export_attr(objname, 'v', (i * 2) + 1, dpsimpy.AttrModifier.phase) print(objname) for node in system.nodes: logger.log_attribute(node.name() + '.V', 'v', node) sim.run(1)
def dpsim(): # Parameters V_nom = 20e3 p_load_nom = 100e3 q_load_nom = 50e3 line_resistance = 0.05 line_inductance = 0.1 line_capacitance = 0.1e-6 name = 'dpsim_mqtt_import_export' # Nodes and Components n1 = dpsimpy.sp.SimNode('n1', dpsimpy.PhaseType.Single) n2 = dpsimpy.sp.SimNode('n2', dpsimpy.PhaseType.Single) extnet = dpsimpy.sp.ph1.NetworkInjection('Slack') extnet.set_parameters(voltage_set_point=V_nom) extnet.set_base_voltage(V_nom) extnet.modify_power_flow_bus_type(dpsimpy.PowerflowBusType.VD) line = dpsimpy.sp.ph1.PiLine('PiLine') line.set_parameters(R=line_resistance, L=line_inductance, C=line_capacitance) line.set_base_voltage(V_nom) load = dpsimpy.sp.ph1.Load('Load') load.set_parameters(active_power=p_load_nom, reactive_power=q_load_nom, nominal_voltage=V_nom) load.modify_power_flow_bus_type(dpsimpy.PowerflowBusType.PQ) extnet.connect([n1]) line.connect([n1, n2]) load.connect([n2]) system = dpsimpy.SystemTopology(50, [n1, n2], [extnet, line, load]) sim = dpsimpy.RealTimeSimulation(name, dpsimpy.LogLevel.debug) sim.set_system(system) sim.set_domain(dpsimpy.Domain.SP) sim.set_solver(dpsimpy.Solver.NRP) sim.set_time_step(0.1) sim.set_final_time(10) sim.do_init_from_nodes_and_terminals(False) logger = dpsimpy.Logger(name) sim.add_logger(logger) sim.log_attr('n1', 'v') sim.log_attr('n2', 'v') intf_config = { "type": "mqtt", "format": "json", "host": "mqtt", "in": { "subscribe": "/mqtt-dpsim" }, "out": { "publish": "/dpsim-mqtt" } } intf_config_2 = { "type": "shmem", "in": { "name": "/shmem-dpsim" }, "out": { "name": "/dpsim-shmem" } } intf = dpsimpyvillas.InterfaceVillas(name="dpsim-mqtt", config=intf_config) sim.add_interface(intf) intf2 = dpsimpyvillas.InterfaceVillas(name="dpsim-shmem", config=intf_config_2) sim.add_interface(intf2) sim.import_attr('Load', 'P', 0, intf=intf) sim.export_attr('n1', 'v', 0, intf=intf) sim.export_attr('n2', 'v', 1, dpsimpy.AttrModifier.mag, intf=intf) sim.import_attr('Load', 'Q', 0, intf=intf2) sim.export_attr('n1', 'v', 0, intf=intf2) sim.export_attr('n2', 'v', 1, dpsimpy.AttrModifier.mag, intf=intf2) return sim, intf, intf2