def test_get_connected_lines_at_bus():
    net = pp.create_empty_network()

    bus0 = pp.create_bus(net, 0.4)
    bus1 = pp.create_bus(net, 0.4)

    line0 = pp.create_line(net,
                           bus0,
                           bus1,
                           length_km=1.,
                           std_type="NAYY 4x50 SE")
    line1 = pp.create_line(net,
                           bus0,
                           bus1,
                           length_km=1.,
                           std_type="NAYY 4x50 SE")
    line2 = pp.create_line(net,
                           bus0,
                           bus1,
                           in_service=False,
                           length_km=1.,
                           std_type="NAYY 4x50 SE")
    line3 = pp.create_line(net,
                           bus0,
                           bus1,
                           length_km=1.,
                           std_type="NAYY 4x50 SE")

    pp.create_switch(net, bus0, line0, "l")
    pp.create_switch(net, bus0, line1, "l", closed=False)
    pp.create_switch(net, bus0, line2, "l")

    lines = tb.get_connected_elements(net,
                                      "line",
                                      bus0,
                                      respect_switches=False,
                                      respect_in_service=False)

    assert set(lines) == set([line0, line1, line2, line3])

    lines = tb.get_connected_elements(net,
                                      "line",
                                      bus0,
                                      respect_switches=True,
                                      respect_in_service=False)
    assert set(lines) == set([line0, line2, line3])

    lines = tb.get_connected_elements(net,
                                      "line",
                                      bus0,
                                      respect_switches=True,
                                      respect_in_service=True)
    assert set(lines) == set([line0, line3])

    lines = tb.get_connected_elements(net,
                                      "line",
                                      bus0,
                                      respect_switches=False,
                                      respect_in_service=True)
    assert set(lines) == set([line0, line1, line3])
Example #2
0
def disconnected_elements(net):
    """
    Checks, if there are network sections without a connection to an ext_grid. Returns all network
    elements in these sections, that are in service. Elements belonging to the same disconnected
    networks section are grouped in lists (e.g. disconnected lines: [[1, 2, 3], [4, 5]]
    means, that lines 1, 2 and 3 are in one disconncted section but are connected to each other.
    The same stands for lines 4, 5.)

     INPUT:
        **net** (pandapowerNet)         - pandapower network

     OUTPUT:
        **disc_elements** (dict)        - list that contains all network elements, without a
                                          connection to an ext_grid.

                                          format: {'disconnected buses'   : bus_indices,
                                                   'disconnected switches' : switch_indices,
                                                   'disconnected lines'    : line_indices,
                                                   'disconnected trafos'   : trafo_indices
                                                   'disconnected loads'    : load_indices,
                                                   'disconnected gens'     : gen_indices,
                                                   'disconnected sgens'    : sgen_indices}

    """
    import pandapower.topology as top
    mg = top.create_nxgraph(net)
    sections = top.connected_components(mg)
    disc_elements = []

    for section in sections:
        section_dict = {}

        if not section & set(net.ext_grid.bus[net.ext_grid.in_service]).union(
                net.gen.bus[net.gen.slack & net.gen.in_service]) and any(
                net.bus.in_service.loc[section]):
            section_buses = list(net.bus[net.bus.index.isin(section)
                                         & (net.bus.in_service == True)].index)
            section_switches = list(net.switch[net.switch.bus.isin(section_buses)].index)
            section_lines = list(get_connected_elements(net, 'line', section_buses,
                                                        respect_switches=True,
                                                        respect_in_service=True))
            section_trafos = list(get_connected_elements(net, 'trafo', section_buses,
                                                         respect_switches=True,
                                                         respect_in_service=True))

            section_trafos3w = list(get_connected_elements(net, 'trafo3w', section_buses,
                                                           respect_switches=True,
                                                           respect_in_service=True))
            section_gens = list(net.gen[net.gen.bus.isin(section)
                                        & (net.gen.in_service == True)].index)
            section_sgens = list(net.sgen[net.sgen.bus.isin(section)
                                          & (net.sgen.in_service == True)].index)
            section_loads = list(net.load[net.load.bus.isin(section)
                                          & (net.load.in_service == True)].index)

            if section_buses:
                section_dict['buses'] = section_buses
            if section_switches:
                section_dict['switches'] = section_switches
            if section_lines:
                section_dict['lines'] = section_lines
            if section_trafos:
                section_dict['trafos'] = section_trafos
            if section_trafos3w:
                section_dict['trafos3w'] = section_trafos3w
            if section_loads:
                section_dict['loads'] = section_loads
            if section_gens:
                section_dict['gens'] = section_gens
            if section_sgens:
                section_dict['sgens'] = section_sgens

            if any(section_dict.values()):
                disc_elements.append(section_dict)

    open_trafo_switches = net.switch[(net.switch.et == 't') & (net.switch.closed == 0)]
    isolated_trafos = set(
        (open_trafo_switches.groupby("element").count().query("bus > 1").index))
    isolated_trafos_is = isolated_trafos.intersection((set(net.trafo[net.trafo.in_service == True]
                                                           .index)))
    if isolated_trafos_is:
        disc_elements.append({'isolated_trafos': list(isolated_trafos_is)})

    isolated_trafos3w = set(
        (open_trafo_switches.groupby("element").count().query("bus > 2").index))
    isolated_trafos3w_is = isolated_trafos3w.intersection((
        set(net.trafo[net.trafo.in_service == True].index)))
    if isolated_trafos3w_is:
        disc_elements.append({'isolated_trafos3w': list(isolated_trafos3w_is)})

    if disc_elements:
        return disc_elements
Example #3
0
# Youtube Tutorial: https://www.youtube.com/watch?v=O74yw1FmmsM
import pandapower.toolbox as tb
import pandapower.networks as nw
import pandapower as pp

net = nw.create_cigre_network_mv()
pp.runpp(net)
# print some power flow information
tb.lf_info(net)

net2 = nw.create_cigre_network_mv()
net2.load.drop(index=0, inplace=True)
# check if two nets are identical. You can also only check the results
tb.nets_equal(net, net2)

# merge two power systems
net3 = tb.merge_nets(net, net2)
# drop some buses
tb.drop_buses(net, buses=[5])
# creates a continuous index in net.bus starting at 10
tb.create_continuous_bus_index(net, start=10)

# get all line elements connected to buses
els = tb.get_connected_elements(net, "line", buses=[11])
print(els)
print(net.line.loc[els])