예제 #1
0
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
예제 #2
0
    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()
예제 #3
0
 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()
예제 #4
0
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)
예제 #5
0
 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()
예제 #6
0
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)
예제 #8
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)

file_config = '''{
        "type": "file",
        "format": "csv",
        "uri": "logs/output.csv",
예제 #9
0
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)
예제 #10
0
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