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])
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
# 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])