def create_cigre_network_mv(with_der=False): net_cigre_mv = pp.create_empty_network() # Linedata line_data = {'c_nf_per_km': 151.1749, 'r_ohm_per_km': 0.501, 'x_ohm_per_km': 0.716, 'imax_ka': 0.145, 'type': 'cs'} pp.create_std_type(net_cigre_mv, line_data, name='CABLE_CIGRE_MV', element='line') line_data = {'c_nf_per_km': 10.09679, 'r_ohm_per_km': 0.510, 'x_ohm_per_km': 0.366, 'imax_ka': 0.195, 'type': 'ol'} pp.create_std_type(net_cigre_mv, line_data, name='OHL_CIGRE_MV', element='line') # Busses bus0 = pp.create_bus(net_cigre_mv, name='Bus 0', vn_kv=110, type='b', zone='CIGRE_MV') bus1 = pp.create_bus(net_cigre_mv, name='Bus 1', vn_kv=20, type='b', zone='CIGRE_MV') bus2 = pp.create_bus(net_cigre_mv, name='Bus 2', vn_kv=20, type='b', zone='CIGRE_MV') bus3 = pp.create_bus(net_cigre_mv, name='Bus 3', vn_kv=20, type='b', zone='CIGRE_MV') bus4 = pp.create_bus(net_cigre_mv, name='Bus 4', vn_kv=20, type='b', zone='CIGRE_MV') bus5 = pp.create_bus(net_cigre_mv, name='Bus 5', vn_kv=20, type='b', zone='CIGRE_MV') bus6 = pp.create_bus(net_cigre_mv, name='Bus 6', vn_kv=20, type='b', zone='CIGRE_MV') bus7 = pp.create_bus(net_cigre_mv, name='Bus 7', vn_kv=20, type='b', zone='CIGRE_MV') bus8 = pp.create_bus(net_cigre_mv, name='Bus 8', vn_kv=20, type='b', zone='CIGRE_MV') bus9 = pp.create_bus(net_cigre_mv, name='Bus 9', vn_kv=20, type='b', zone='CIGRE_MV') bus10 = pp.create_bus(net_cigre_mv, name='Bus 10', vn_kv=20, type='b', zone='CIGRE_MV') bus11 = pp.create_bus(net_cigre_mv, name='Bus 11', vn_kv=20, type='b', zone='CIGRE_MV') bus12 = pp.create_bus(net_cigre_mv, name='Bus 12', vn_kv=20, type='b', zone='CIGRE_MV') bus13 = pp.create_bus(net_cigre_mv, name='Bus 13', vn_kv=20, type='b', zone='CIGRE_MV') bus14 = pp.create_bus(net_cigre_mv, name='Bus 14', vn_kv=20, type='b', zone='CIGRE_MV') # Lines pp.create_line(net_cigre_mv, bus1, bus2, length_km=2.82, std_type='CABLE_CIGRE_MV', name='Line 1-2') pp.create_line(net_cigre_mv, bus2, bus3, length_km=4.42, std_type='CABLE_CIGRE_MV', name='Line 2-3') pp.create_line(net_cigre_mv, bus3, bus4, length_km=0.61, std_type='CABLE_CIGRE_MV', name='Line 3-4') pp.create_line(net_cigre_mv, bus4, bus5, length_km=0.56, std_type='CABLE_CIGRE_MV', name='Line 4-5') pp.create_line(net_cigre_mv, bus5, bus6, length_km=1.54, std_type='CABLE_CIGRE_MV', name='Line 5-6') pp.create_line(net_cigre_mv, bus7, bus8, length_km=1.67, std_type='CABLE_CIGRE_MV', name='Line 7-8') pp.create_line(net_cigre_mv, bus8, bus9, length_km=0.32, std_type='CABLE_CIGRE_MV', name='Line 8-9') pp.create_line(net_cigre_mv, bus9, bus10, length_km=0.77, std_type='CABLE_CIGRE_MV', name='Line 9-10') pp.create_line(net_cigre_mv, bus10, bus11, length_km=0.33, std_type='CABLE_CIGRE_MV', name='Line 10-11') pp.create_line(net_cigre_mv, bus3, bus8, length_km=1.3, std_type='CABLE_CIGRE_MV', name='Line 3-8') pp.create_line(net_cigre_mv, bus12, bus13, length_km=4.89, std_type='OHL_CIGRE_MV', name='Line 12-13') pp.create_line(net_cigre_mv, bus13, bus14, length_km=2.99, std_type='OHL_CIGRE_MV', name='Line 13-14') line6_7 = pp.create_line(net_cigre_mv, bus6, bus7, length_km=0.24, std_type='CABLE_CIGRE_MV', name='Line 6-7') line4_11 = pp.create_line(net_cigre_mv, bus11, bus4, length_km=0.49, std_type='CABLE_CIGRE_MV', name='Line 11-4') line8_14 = pp.create_line(net_cigre_mv, bus14, bus8, length_km=2., std_type='OHL_CIGRE_MV', name='Line 14-8') # Ext-Grid pp.create_ext_grid(net_cigre_mv, bus0, vm_pu=1.03, va_degree=0., s_sc_max_mva=5000, s_sc_min_mva=5000, rx_max=0.1, rx_min=0.1) # Trafos trafo0 = pp.create_transformer_from_parameters(net_cigre_mv, bus0, bus1, sn_kva=25000, vn_hv_kv=110, vn_lv_kv=20, vscr_percent=0.16, vsc_percent=12.00107, pfe_kw=0, i0_percent=0, shift_degree=30.0, name='Trafo 0-1') trafo1 = pp.create_transformer_from_parameters(net_cigre_mv, bus0, bus12, sn_kva=25000, vn_hv_kv=110, vn_lv_kv=20, vscr_percent=0.16, vsc_percent=12.00107, pfe_kw=0, i0_percent=0, shift_degree=30.0, name='Trafo 0-12') # Switches # S2 pp.create_switch(net_cigre_mv, bus6, line6_7, et='l', closed=True, type='LBS') pp.create_switch(net_cigre_mv, bus7, line6_7, et='l', closed=False, type='LBS', name='S2') # S3 pp.create_switch(net_cigre_mv, bus4, line4_11, et='l', closed=False, type='LBS', name='S3') pp.create_switch(net_cigre_mv, bus11, line4_11, et='l', closed=True, type='LBS') # S1 pp.create_switch(net_cigre_mv, bus8, line8_14, et='l', closed=False, type='LBS', name='S1') pp.create_switch(net_cigre_mv, bus14, line8_14, et='l', closed=True, type='LBS') # trafos pp.create_switch(net_cigre_mv, bus0, trafo0, et='t', closed=True, type='CB') pp.create_switch(net_cigre_mv, bus0, trafo1, et='t', closed=True, type='CB') # Loads # Residential pp.create_load(net_cigre_mv, bus1, p_kw=14994.0, q_kvar=3044.66156, name='Load R1') pp.create_load(net_cigre_mv, bus3, p_kw=276.45, q_kvar=69.28490, name='Load R3') pp.create_load(net_cigre_mv, bus4, p_kw=431.65, q_kvar=108.18169, name='Load R4') pp.create_load(net_cigre_mv, bus5, p_kw=727.5, q_kvar=182.32869, name='Load R5') pp.create_load(net_cigre_mv, bus6, p_kw=548.05, q_kvar=137.35428, name='Load R6') pp.create_load(net_cigre_mv, bus8, p_kw=586.85, q_kvar=147.07847, name='Load R8') pp.create_load(net_cigre_mv, bus10, p_kw=475.3, q_kvar=119.12141, name='Load R10') pp.create_load(net_cigre_mv, bus11, p_kw=329.8, q_kvar=82.65567, name='Load R11') pp.create_load(net_cigre_mv, bus12, p_kw=14994.0, q_kvar=3044.66156, name='Load R12') pp.create_load(net_cigre_mv, bus14, p_kw=208.55, q_kvar=52.26756, name='Load R14') # Commercial / Industrial pp.create_load(net_cigre_mv, bus1, p_kw=4845.0, q_kvar=1592.47449, name='Load CI1') pp.create_load(net_cigre_mv, bus3, p_kw=225.25, q_kvar=139.59741, name='Load CI3') pp.create_load(net_cigre_mv, bus7, p_kw=76.5, q_kvar=47.41044, name='Load CI7') pp.create_load(net_cigre_mv, bus9, p_kw=573.75, q_kvar=355.57831, name='Load CI9') pp.create_load(net_cigre_mv, bus10, p_kw=68.0, q_kvar=42.14262, name='Load CI10') pp.create_load(net_cigre_mv, bus12, p_kw=5016.0, q_kvar=1648.67947, name='Load CI12') pp.create_load(net_cigre_mv, bus13, p_kw=34.0, q_kvar=21.07131, name='Load CI13') pp.create_load(net_cigre_mv, bus14, p_kw=331.5, q_kvar=205.44525, name='Load CI14') # Optional distributed energy recources if with_der: pp.create_sgen(net_cigre_mv, bus3, p_kw=-20, q_kvar=0, sn_kva=20, name='PV 3', type='PV') pp.create_sgen(net_cigre_mv, bus4, p_kw=-20, q_kvar=0, sn_kva=20, name='PV 4', type='PV') pp.create_sgen(net_cigre_mv, bus5, p_kw=-30, q_kvar=0, sn_kva=30, name='PV 5', type='PV') pp.create_sgen(net_cigre_mv, bus6, p_kw=-30, q_kvar=0, sn_kva=30, name='PV 6', type='PV') pp.create_sgen(net_cigre_mv, bus8, p_kw=-30, q_kvar=0, sn_kva=30, name='PV 8', type='PV') pp.create_sgen(net_cigre_mv, bus9, p_kw=-30, q_kvar=0, sn_kva=30, name='PV 9', type='PV') pp.create_sgen(net_cigre_mv, bus10, p_kw=-40, q_kvar=0, sn_kva=40, name='PV 10', type='PV') pp.create_sgen(net_cigre_mv, bus11, p_kw=-10, q_kvar=0, sn_kva=10, name='PV 11', type='PV') pp.create_sgen(net_cigre_mv, bus7, p_kw=-1500, q_kvar=0, sn_kva=1500, name='WKA 7', type='WP') return net_cigre_mv
def test_close_switch_at_line_with_two_open_switches(): net = pp.create_empty_network() bus1 = pp.create_bus(net, vn_kv=.4) bus2 = pp.create_bus(net, vn_kv=.4) bus3 = pp.create_bus(net, vn_kv=.4) line1 = pp.create_line(net, bus2, bus3, length_km=1., std_type="NAYY 4x50 SE") line2 = pp.create_line(net, bus2, bus3, length_km=1., std_type="NAYY 4x50 SE") pp.create_line(net, bus2, bus3, length_km=1., std_type="NAYY 4x50 SE") # line3 pp.create_switch(net, bus1, bus2, et="b", closed=True) # sw0 pp.create_switch(net, bus2, line1, et="l", closed=False) # sw1 pp.create_switch(net, bus3, line1, et="l", closed=False) # sw2 pp.create_switch(net, bus2, line2, et="l", closed=True) # sw3 pp.create_switch(net, bus3, line2, et="l", closed=False) # sw4 pp.create_switch(net, bus3, line2, et="l", closed=True) # sw5 pp.create_switch(net, bus3, line2, et="l", closed=True) # sw6 tb.close_switch_at_line_with_two_open_switches(net) # assertion: sw2 closed assert net.switch.closed.loc[1]
def simple_mv_open_ring_net(): """ This function creates a simple medium voltage open ring network with loads at every medium \ voltage node. As an example this function is used in the topology and diagnostic docu. OUTPUT: **net** - Returns the required simple medium voltage open ring network EXAMPLE: import pandapower.networks as pn net_simple_open_ring = pn.simple_mv_open_ring_net() """ net = pp.create_empty_network() pp.create_bus(net, name="110 kV bar", vn_kv=110, type='b', geodata=[0, 0]) pp.create_bus(net, name="20 kV bar", vn_kv=20, type='b', geodata=[0, -1]) pp.create_bus(net, name="bus 2", vn_kv=20, type='b', geodata=[-0.5, -2]) pp.create_bus(net, name="bus 3", vn_kv=20, type='b', geodata=[-0.5, -3]) pp.create_bus(net, name="bus 4", vn_kv=20, type='b', geodata=[-0.5, -4]) pp.create_bus(net, name="bus 5", vn_kv=20, type='b', geodata=[0.5, -4]) pp.create_bus(net, name="bus 6", vn_kv=20, type='b', geodata=[0.5, -3]) pp.create_ext_grid(net, 0, vm_pu=1) pp.create_line(net, name="line 0", from_bus=1, to_bus=2, length_km=1, std_type="NA2XS2Y 1x185 RM/25 12/20 kV") pp.create_line(net, name="line 1", from_bus=2, to_bus=3, length_km=1, std_type="NA2XS2Y 1x185 RM/25 12/20 kV") pp.create_line(net, name="line 2", from_bus=3, to_bus=4, length_km=1, std_type="NA2XS2Y 1x185 RM/25 12/20 kV") pp.create_line(net, name="line 3", from_bus=4, to_bus=5, length_km=1, std_type="NA2XS2Y 1x185 RM/25 12/20 kV") pp.create_line(net, name="line 4", from_bus=5, to_bus=6, length_km=1, std_type="NA2XS2Y 1x185 RM/25 12/20 kV") pp.create_line(net, name="line 5", from_bus=6, to_bus=1, length_km=1, std_type="NA2XS2Y 1x185 RM/25 12/20 kV") pp.create_transformer(net, hv_bus=0, lv_bus=1, std_type="25 MVA 110/20 kV") pp.create_load(net, 2, p_mw=1, q_mvar=0.200, name="load 0") pp.create_load(net, 3, p_mw=1, q_mvar=0.200, name="load 1") pp.create_load(net, 4, p_mw=1, q_mvar=0.200, name="load 2") pp.create_load(net, 5, p_mw=1, q_mvar=0.200, name="load 3") pp.create_load(net, 6, p_mw=1, q_mvar=0.200, name="load 4") pp.create_switch(net, bus=1, element=0, et='l') pp.create_switch(net, bus=2, element=0, et='l') pp.create_switch(net, bus=2, element=1, et='l') pp.create_switch(net, bus=3, element=1, et='l') pp.create_switch(net, bus=3, element=2, et='l') pp.create_switch(net, bus=4, element=2, et='l') pp.create_switch(net, bus=4, element=3, et='l', closed=0) pp.create_switch(net, bus=5, element=3, et='l') pp.create_switch(net, bus=5, element=4, et='l') pp.create_switch(net, bus=6, element=4, et='l') pp.create_switch(net, bus=6, element=5, et='l') pp.create_switch(net, bus=1, element=5, et='l') return net
for start_bus in net.trafo['lv_bus']: it = id3_1.index(start_bus) (start_x, start_y) = (lat3_1[it], lng3_1[it]) geodata = [(start_x, start_y), (x, y)] length = gd.distance(geodata[0], geodata[1]).km pp.create_line(net, from_bus=start_bus, to_bus=id3_2[i], name='line' + str(iterator), length_km=length, std_type='149-AL1/24-ST1A 110.0', geodata=geodata) pp.create_switch(net, bus=start_bus, element=id3_2[i], et="b", closed=False, type="CB", name="switch" + str(i)) # pp.create_load() iterator += 1 busbar_id.append(id3_2[i]) count += 1 #check = count - 1 #for i in range (0, len(file4)): # x = lat4[i] # y = lng4[i] # if LAT_LOW <= x <= LAT_UP and LNG_LOW <= y <= LNG_UP: # pp.create_bus(net, index=n_id[i], vn_kv=110., name='bus'+str(n_id[i]), geodata=(x, y)) # pp.create_bus(net, index=count, vn_kv=10., name='bus'+str(count), geodata=(x, y-0.00007))
if elementa == 7: connection1 = pp.get_element_index(net, "bus", CB_element[elementa + 7]) connection2 = pp.get_element_index(net, "bus", CB_element[elementa + 8]) if elementa == 8: connection1 = pp.get_element_index(net, "bus", CB_element[elementa + 8]) connection2 = pp.get_element_index(net, "bus", CB_element[elementa + 9]) switch = pp.create_switch(net, connection1, connection2, 'b', 'True', 'None', name) print("\n" 'Circuit Breaker') print(net.switch) ''' # To create transformer ''' ''' Although this is not an ideal approach, I have tried to match the ids of Power Transformer with an end power tranformer, and if it matches then end number will identify the high voltage side and low voltage side respectively. Since these XML files are pretty much consistent, end number 1 traces the high voltage side where as 2 as low voltage side. So I have tried to implement similiar approach further. ''' for elementa in range(len(PowerTransformerValue)):
def example_multivoltage(): """ Returns the multivoltage example network from the pandapower tutorials. OUTPUT: net - multivoltage example network EXAMPLE: >>> import pandapower.networks >>> net = pandapower.networks.example_multivoltage() """ net = pp.create_empty_network() # --- Busses # HV # Double busbar pp.create_bus(net, name='Double Busbar 1', vn_kv=380, type='b') pp.create_bus(net, name='Double Busbar 2', vn_kv=380, type='b') for i in range(10): pp.create_bus(net, name='Bus DB T%s' % i, vn_kv=380, type='n') for i in range(1, 5): pp.create_bus(net, name='Bus DB %s' % i, vn_kv=380, type='n') # Single busbar pp.create_bus(net, name='Single Busbar', vn_kv=110, type='b') for i in range(1, 6): pp.create_bus(net, name='Bus SB %s' % i, vn_kv=110, type='n') for i in range(1, 6): for j in [1, 2]: pp.create_bus(net, name='Bus SB T%s.%s' % (i, j), vn_kv=110, type='n') # Remaining for i in range(1, 5): pp.create_bus(net, name='Bus HV%s' % i, vn_kv=110, type='n') # MV pp.create_bus(net, name='Bus MV0 20kV', vn_kv=20, type='n') for i in range(8): pp.create_bus(net, name='Bus MV%s' % i, vn_kv=10, type='n') # LV pp.create_bus(net, name='Bus LV0', vn_kv=0.4, type='n') for i in range(1, 6): pp.create_bus(net, name='Bus LV1.%s' % i, vn_kv=0.4, type='m') for i in range(1, 5): pp.create_bus(net, name='Bus LV2.%s' % i, vn_kv=0.4, type='m') pp.create_bus(net, name='Bus LV2.2.1', vn_kv=0.4, type='m') pp.create_bus(net, name='Bus LV2.2.2', vn_kv=0.4, type='m') # --- Lines # HV hv_lines = pd.DataFrame() hv_lines['line_name'] = ['HV Line%s' % i for i in range(1, 7)] hv_lines['from_bus'] = [ 'Bus SB 2', 'Bus HV1', 'Bus HV2', 'Bus HV1', 'Bus HV3', 'Bus SB 3' ] hv_lines['to_bus'] = [ 'Bus HV1', 'Bus HV2', 'Bus HV4', 'Bus HV4', 'Bus HV4', 'Bus HV3' ] hv_lines['std_type'] = '184-AL1/30-ST1A 110.0' hv_lines['length'] = [30, 20, 30, 15, 25, 30] hv_lines['parallel'] = [1, 1, 1, 1, 1, 2] for _, hv_line in hv_lines.iterrows(): from_bus = pp.get_element_index(net, "bus", hv_line.from_bus) to_bus = pp.get_element_index(net, "bus", hv_line.to_bus) pp.create_line(net, from_bus, to_bus, length_km=hv_line.length, std_type=hv_line.std_type, name=hv_line.line_name, parallel=hv_line.parallel) # MV mv_lines = pd.DataFrame() mv_lines['line_name'] = ['MV Line%s' % i for i in range(1, 9)] mv_lines['from_bus'] = ['Bus MV%s' % i for i in list(range(7)) + [0]] mv_lines['to_bus'] = ['Bus MV%s' % i for i in list(range(1, 8)) + [7]] mv_lines['length'] = 1.5 mv_lines['std_type'] = 'NA2XS2Y 1x185 RM/25 12/20 kV' for _, mv_line in mv_lines.iterrows(): from_bus = pp.get_element_index(net, "bus", mv_line.from_bus) to_bus = pp.get_element_index(net, "bus", mv_line.to_bus) pp.create_line(net, from_bus, to_bus, length_km=mv_line.length, std_type=mv_line.std_type, name=mv_line.line_name) # LV lv_lines = pd.DataFrame() lv_line_idx = [ '1.1', '1.2', '1.3', '1.4', '1.6', '2.1', '2.2', '2.3', '2.4', '2.2.1', '2.2.2' ] lv_lines['line_name'] = ['LV Line%s' % i for i in lv_line_idx] lv_line_idx = [ '0', '1.1', '1.2', '1.3', '1.4', '0', '2.1', '2.2', '2.3', '2.2', '2.2.1' ] lv_lines['from_bus'] = ['Bus LV%s' % i for i in lv_line_idx] lv_line_idx = [ '1.1', '1.2', '1.3', '1.4', '1.5', '2.1', '2.2', '2.3', '2.4', '2.2.1', '2.2.2' ] lv_lines['to_bus'] = ['Bus LV%s' % i for i in lv_line_idx] lv_lines['length'] = [0.08] * 5 + [0.12] * 6 lv_lines['std_type'] = ['NAYY 4x120 SE'] * 7 + ['15-AL1/3-ST1A 0.4'] * 4 for _, lv_line in lv_lines.iterrows(): from_bus = pp.get_element_index(net, "bus", lv_line.from_bus) to_bus = pp.get_element_index(net, "bus", lv_line.to_bus) pp.create_line(net, from_bus, to_bus, length_km=lv_line.length, std_type=lv_line.std_type, name=lv_line.line_name) # --- Transformer hv_bus = pp.get_element_index(net, "bus", "Bus DB 2") lv_bus = pp.get_element_index(net, "bus", "Bus SB 1") pp.create_transformer_from_parameters(net, hv_bus, lv_bus, sn_mva=300, vn_hv_kv=380, vn_lv_kv=110, vkr_percent=0.06, vk_percent=8, pfe_kw=0, i0_percent=0, tap_pos=0, shift_degree=0, name='EHV-HV-Trafo') hv_bus = pp.get_element_index(net, "bus", "Bus MV4") lv_bus = pp.get_element_index(net, "bus", "Bus LV0") pp.create_transformer_from_parameters(net, hv_bus, lv_bus, sn_mva=0.4, vn_hv_kv=10, vn_lv_kv=0.4, vkr_percent=1.325, vk_percent=4, pfe_kw=0.95, i0_percent=0.2375, tap_side="hv", tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_pos=0, shift_degree=150, name='MV-LV-Trafo') # Trafo3w hv_bus = pp.get_element_index(net, "bus", "Bus HV2") mv_bus = pp.get_element_index(net, "bus", "Bus MV0 20kV") lv_bus = pp.get_element_index(net, "bus", "Bus MV0") pp.create_transformer3w_from_parameters(net, hv_bus, mv_bus, lv_bus, vn_hv_kv=110, vn_mv_kv=20, vn_lv_kv=10, sn_hv_mva=40, sn_mv_mva=15, sn_lv_mva=25, vk_hv_percent=10.1, vk_mv_percent=10.1, vk_lv_percent=10.1, vkr_hv_percent=0.266667, vkr_mv_percent=0.033333, vkr_lv_percent=0.04, pfe_kw=0, i0_percent=0, shift_mv_degree=30, shift_lv_degree=30, tap_side="hv", tap_neutral=0, tap_min=-8, tap_max=8, tap_step_percent=1.25, tap_pos=0, name='HV-MV-MV-Trafo') # --- Static generators # HV pp.create_sgen(net, pp.get_element_index(net, "bus", 'Bus SB 5'), p_mw=20, q_mvar=4, sn_mva=45, type='WP', name='Wind Park') # MV mv_sgens = pd.DataFrame() mv_sgens['sgen_name'] = [ 'Biogas plant', 'Further MV Generator', 'Industry Generator', 'PV Park' ] mv_sgens['bus'] = ['Bus MV6', 'Bus MV0', 'Bus MV0 20kV', 'Bus MV5'] mv_sgens['p'] = [0.5, 0.5, 15, 2] mv_sgens['q'] = [0, 0.05, 3, 0.1] mv_sgens['sn'] = [0.75, 1, 20, 5] mv_sgens['type'] = ['SGEN', 'SGEN', 'SGEN', 'PV'] for _, sgen in mv_sgens.iterrows(): bus_idx = pp.get_element_index(net, "bus", sgen.bus) pp.create_sgen(net, bus_idx, p_mw=sgen.p, q_mvar=sgen.q, sn_mva=sgen.sn, type=sgen.type, name=sgen.sgen_name) # LV lv_sgens = pd.DataFrame() lv_sgens['sgen_name'] = ['PV'] + ['PV(%s)' % i for i in range(1, 6)] lv_sgens['bus'] = [ 'Bus LV%s' % i for i in ['1.1', '1.3', '2.3', '2.4', '2.2.1', '2.2.2'] ] lv_sgens['p'] = [0.006, 0.005, 0.005, 0.005, 0.005, 0.005] lv_sgens['q'] = 0 lv_sgens['sn'] = [0.012, 0.01, 0.01, 0.01, 0.01, 0.01] lv_sgens['type'] = 'PV' for _, sgen in lv_sgens.iterrows(): bus_idx = pp.get_element_index(net, "bus", sgen.bus) pp.create_sgen(net, bus_idx, p_mw=sgen.p, q_mvar=sgen.q, sn_mva=sgen.sn, type=sgen.type, name=sgen.sgen_name) # --- Loads # HV hv_loads = pd.DataFrame() hv_loads['load_name'] = ['MV Net %s' % i for i in range(5)] hv_loads['bus'] = ['Bus SB 4', 'Bus HV1', 'Bus HV2', 'Bus HV3', 'Bus HV4'] hv_loads['p'] = 38 hv_loads['q'] = 6 for _, load in hv_loads.iterrows(): bus_idx = pp.get_element_index(net, "bus", load.bus) pp.create_load(net, bus_idx, p_mw=load.p, q_mvar=load.q, name=load.load_name) # MV mv_loads = pd.DataFrame() mv_loads['load_name'] = ['Further MV-Rings', 'Industry Load' ] + ['LV Net %s' % i for i in [1, 2, 3, 5, 6, 7]] mv_loads['bus'] = ['Bus MV0', 'Bus MV0 20kV' ] + ['Bus MV%s' % i for i in [1, 2, 3, 5, 6, 7]] mv_loads['p'] = [6, 18, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4] mv_loads['q'] = [2, 4, 0.1, 0.06, 0.06, 0.06, 0.06, 0.06] for _, load in mv_loads.iterrows(): bus_idx = pp.get_element_index(net, "bus", load.bus) pp.create_load(net, bus_idx, p_mw=load.p, q_mvar=load.q, name=load.load_name) # LV lv_loads = pd.DataFrame() idx = ['', '(1)', '(2)', '(3)', '(4)', '(5)'] lv_loads['load_name'] = ['Further LV-Feeders Load'] + [ 'Residential Load%s' % i for i in idx[0:5] ] + ['Rural Load%s' % i for i in idx[0:6]] lv_loads['bus'] = [ 'Bus LV%s' % i for i in [ '0', '1.1', '1.2', '1.3', '1.4', '1.5', '2.1', '2.2', '2.3', '2.4', '2.2.1', '2.2.2' ] ] lv_loads['p'] = [0.1] + [0.01] * 11 lv_loads['q'] = [0.01] + [0.03] * 11 for _, load in lv_loads.iterrows(): bus_idx = pp.get_element_index(net, "bus", load.bus) pp.create_load(net, bus_idx, p_mw=load.p, q_mvar=load.q, name=load.load_name) # --- Other # Shunt pp.create_shunt(net, pp.get_element_index(net, "bus", 'Bus HV1'), p_mw=0, q_mvar=-0.96, name='Shunt') # ExtGrids pp.create_ext_grid(net, pp.get_element_index(net, "bus", 'Double Busbar 1'), vm_pu=1.03, va_degree=0, name='External grid', s_sc_max_mva=10000, rx_max=0.1, rx_min=0.1) # Gen pp.create_gen(net, pp.get_element_index(net, "bus", 'Bus HV4'), vm_pu=1.03, p_mw=100, name='Gas turbine') # Impedance pp.create_impedance(net, pp.get_element_index(net, "bus", 'Bus HV3'), pp.get_element_index(net, "bus", 'Bus HV1'), rft_pu=0.074873, xft_pu=0.198872, sn_mva=100, name='Impedance') # xwards pp.create_xward(net, pp.get_element_index(net, "bus", 'Bus HV3'), ps_mw=23.942, qs_mvar=-12.24187, pz_mw=2.814571, qz_mvar=0, r_ohm=0, x_ohm=12.18951, vm_pu=1.02616, name='XWard 1') pp.create_xward(net, pp.get_element_index(net, "bus", 'Bus HV1'), ps_mw=3.776, qs_mvar=-7.769979, pz_mw=9.174917, qz_mvar=0, r_ohm=0, x_ohm=50.56217, vm_pu=1.024001, name='XWard 2') # --- Switches # HV # Bus-bus switches hv_bus_sw = pd.DataFrame() hv_bus_sw['bus_name'] = ['DB DS%s' % i for i in range(14)] + \ ['DB CB%s' % i for i in range(5)] + \ ['SB DS%s.%s' % (i, j) for i in range(1, 6) for j in range(1, 3)] + \ ['SB CB%s' % i for i in range(1, 6)] hv_bus_sw['from_bus'] = ['Double Busbar %s' % i for i in [2, 1, 2, 1, 2, 1, 2, 1, 2, 1]] + \ ['Bus DB T%s' % i for i in [2, 4, 6, 8, 0, 3, 5, 7, 9]] + \ ['Bus SB T1.1', 'Single Busbar', 'Bus SB T2.1', 'Single Busbar', 'Bus SB T3.1', 'Single Busbar', 'Bus SB T4.1', 'Single Busbar', 'Bus SB T5.1', 'Single Busbar'] + \ ['Bus SB T%s.2' % i for i in range(1, 6)] hv_bus_sw['to_bus'] = ['Bus DB %s' % i for i in ['T0', 'T1', 'T3', 'T3', 'T5', 'T5', 'T7', 'T7', 'T9', 'T9', '1', '2', '3', '4', 'T1', 'T2', 'T4', 'T6', 'T8']] + \ ['Bus SB %s' % i for i in ['1', 'T1.2', '2', 'T2.2', '3', 'T3.2', '4', 'T4.2', '5', 'T5.2']] + \ ['Bus SB T%s.1' % i for i in range(1, 6)] hv_bus_sw['type'] = ['DS'] * 14 + ['CB'] * 5 + ['DS'] * 10 + ['CB'] * 5 hv_bus_sw['et'] = 'b' hv_bus_sw['closed'] = [ bool(i) for i in [1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1] + [1] * 15 ] for _, switch in hv_bus_sw.iterrows(): from_bus = pp.get_element_index(net, "bus", switch.from_bus) to_bus = pp.get_element_index(net, "bus", switch.to_bus) pp.create_switch(net, from_bus, to_bus, et=switch.et, closed=switch.closed, type=switch.type, name=switch.bus_name) # Bus-Line switches hv_buses = net.bus[(net.bus.vn_kv == 380) | (net.bus.vn_kv == 110)].index hv_ls = net.line[(net.line.from_bus.isin(hv_buses)) & (net.line.to_bus.isin(hv_buses))] for _, line in hv_ls.iterrows(): for bus in [line.from_bus, line.to_bus]: pp.create_switch(net, bus, line.name, et='l', closed=True, type='LBS', name='Switch %s - %s' % (net.bus.name.at[bus], line['name'])) # MV # Bus-line switches mv_buses = net.bus[(net.bus.vn_kv == 10) | (net.bus.vn_kv == 20)].index mv_ls = net.line[(net.line.from_bus.isin(mv_buses)) & (net.line.to_bus.isin(mv_buses))] for _, line in mv_ls.iterrows(): for bus in [line.from_bus, line.to_bus]: pp.create_switch(net, bus, line.name, et='l', closed=True, type='LBS', name='Switch %s - %s' % (net.bus.name.at[bus], line['name'])) open_switch_id = net.switch[( net.switch.name == 'Switch Bus MV5 - MV Line5')].index net.switch.closed.loc[open_switch_id] = False # LV # Bus-line switches lv_buses = net.bus[net.bus.vn_kv == 0.4].index lv_ls = net.line[(net.line.from_bus.isin(lv_buses)) & (net.line.to_bus.isin(lv_buses))] for _, line in lv_ls.iterrows(): for bus in [line.from_bus, line.to_bus]: pp.create_switch(net, bus, line.name, et='l', closed=True, type='LBS', name='Switch %s - %s' % (net.bus.name.at[bus], line['name'])) # Trafoswitches # HV pp.create_switch(net, pp.get_element_index(net, "bus", 'Bus DB 2'), pp.get_element_index(net, "trafo", 'EHV-HV-Trafo'), et='t', closed=True, type='LBS', name='Switch DB2 - EHV-HV-Trafo') pp.create_switch(net, pp.get_element_index(net, "bus", 'Bus SB 1'), pp.get_element_index(net, "trafo", 'EHV-HV-Trafo'), et='t', closed=True, type='LBS', name='Switch SB1 - EHV-HV-Trafo') # LV pp.create_switch(net, pp.get_element_index(net, "bus", 'Bus MV4'), pp.get_element_index(net, "trafo", 'MV-LV-Trafo'), et='t', closed=True, type='LBS', name='Switch MV4 - MV-LV-Trafo') pp.create_switch(net, pp.get_element_index(net, "bus", 'Bus LV0'), pp.get_element_index(net, "trafo", 'MV-LV-Trafo'), et='t', closed=True, type='LBS', name='Switch LV0 - MV-LV-Trafo') # --- Powerflow # run power flow and generate result tables pp.runpp(net, init='dc', calculate_voltage_angles=True, Numba=False) return net
bus6, bus7, length_km=3.5, std_type="48-AL1/8-ST1A 20.0", name="Line 3") line4 = pp.create_line(net, bus7, bus5, length_km=2.5, std_type="NA2XS2Y 1x240 RM/25 12/20 kV", name="Line 4") print(net.line) #Switches (circuit breakers) on the low and high voltage sides sw1 = pp.create_switch(net, bus2, bus3, et="b", type="CB", closed=True) sw2 = pp.create_switch(net, bus4, bus5, et="b", type="CB", closed=True) #Switches on the load side (Load Break Switches) sw3 = pp.create_switch(net, bus5, line2, et="l", type="LBS", closed=True) sw4 = pp.create_switch(net, bus6, line2, et="l", type="LBS", closed=True) sw5 = pp.create_switch(net, bus6, line3, et="l", type="LBS", closed=True) sw6 = pp.create_switch(net, bus7, line3, et="l", type="LBS", closed=False) sw7 = pp.create_switch(net, bus7, line4, et="l", type="LBS", closed=True) sw8 = pp.create_switch(net, bus5, line4, et="l", type="LBS", closed=True) #Load details #pp.create_load(net, bus7, p_mw=2, q_mvar=4, scaling=0.6, name="load") pp.create_load(net, bus7,
def create_cigre_network_mv(with_der=False): """ Create the CIGRE MV Grid from final Report of Task Force C6.04.02: "Benchmark Systems for Network Integration of Renewable and Distributed Energy Resources”, 2014. OPTIONAL: **with_der** (boolean or str, False) - Range of DER consideration, which should be in (False, "pv_wind", "all"). The DER types, dimensions and locations are taken from CIGRE CaseStudy: "DER in Medium Voltage Systems" OUTPUT: **net** - The pandapower format network. """ if with_der is True: raise ValueError("'with_der=True' is deprecated. Please use 'with_der=pv_wind'") if with_der not in [False, "pv_wind", "all"]: raise ValueError("'with_der' is unknown. It should be in [False, 'pv_wind', 'all'].") net_cigre_mv = pp.create_empty_network() # Linedata line_data = {'c_nf_per_km': 151.1749, 'r_ohm_per_km': 0.501, 'x_ohm_per_km': 0.716, 'max_i_ka': 0.145, 'type': 'cs'} pp.create_std_type(net_cigre_mv, line_data, name='CABLE_CIGRE_MV', element='line') line_data = {'c_nf_per_km': 10.09679, 'r_ohm_per_km': 0.510, 'x_ohm_per_km': 0.366, 'max_i_ka': 0.195, 'type': 'ol'} pp.create_std_type(net_cigre_mv, line_data, name='OHL_CIGRE_MV', element='line') # Busses bus0 = pp.create_bus(net_cigre_mv, name='Bus 0', vn_kv=110, type='b', zone='CIGRE_MV') bus1 = pp.create_bus(net_cigre_mv, name='Bus 1', vn_kv=20, type='b', zone='CIGRE_MV') bus2 = pp.create_bus(net_cigre_mv, name='Bus 2', vn_kv=20, type='b', zone='CIGRE_MV') bus3 = pp.create_bus(net_cigre_mv, name='Bus 3', vn_kv=20, type='b', zone='CIGRE_MV') bus4 = pp.create_bus(net_cigre_mv, name='Bus 4', vn_kv=20, type='b', zone='CIGRE_MV') bus5 = pp.create_bus(net_cigre_mv, name='Bus 5', vn_kv=20, type='b', zone='CIGRE_MV') bus6 = pp.create_bus(net_cigre_mv, name='Bus 6', vn_kv=20, type='b', zone='CIGRE_MV') bus7 = pp.create_bus(net_cigre_mv, name='Bus 7', vn_kv=20, type='b', zone='CIGRE_MV') bus8 = pp.create_bus(net_cigre_mv, name='Bus 8', vn_kv=20, type='b', zone='CIGRE_MV') bus9 = pp.create_bus(net_cigre_mv, name='Bus 9', vn_kv=20, type='b', zone='CIGRE_MV') bus10 = pp.create_bus(net_cigre_mv, name='Bus 10', vn_kv=20, type='b', zone='CIGRE_MV') bus11 = pp.create_bus(net_cigre_mv, name='Bus 11', vn_kv=20, type='b', zone='CIGRE_MV') bus12 = pp.create_bus(net_cigre_mv, name='Bus 12', vn_kv=20, type='b', zone='CIGRE_MV') bus13 = pp.create_bus(net_cigre_mv, name='Bus 13', vn_kv=20, type='b', zone='CIGRE_MV') bus14 = pp.create_bus(net_cigre_mv, name='Bus 14', vn_kv=20, type='b', zone='CIGRE_MV') # Lines pp.create_line(net_cigre_mv, bus1, bus2, length_km=2.82, std_type='CABLE_CIGRE_MV', name='Line 1-2') pp.create_line(net_cigre_mv, bus2, bus3, length_km=4.42, std_type='CABLE_CIGRE_MV', name='Line 2-3') pp.create_line(net_cigre_mv, bus3, bus4, length_km=0.61, std_type='CABLE_CIGRE_MV', name='Line 3-4') pp.create_line(net_cigre_mv, bus4, bus5, length_km=0.56, std_type='CABLE_CIGRE_MV', name='Line 4-5') pp.create_line(net_cigre_mv, bus5, bus6, length_km=1.54, std_type='CABLE_CIGRE_MV', name='Line 5-6') pp.create_line(net_cigre_mv, bus7, bus8, length_km=1.67, std_type='CABLE_CIGRE_MV', name='Line 7-8') pp.create_line(net_cigre_mv, bus8, bus9, length_km=0.32, std_type='CABLE_CIGRE_MV', name='Line 8-9') pp.create_line(net_cigre_mv, bus9, bus10, length_km=0.77, std_type='CABLE_CIGRE_MV', name='Line 9-10') pp.create_line(net_cigre_mv, bus10, bus11, length_km=0.33, std_type='CABLE_CIGRE_MV', name='Line 10-11') pp.create_line(net_cigre_mv, bus3, bus8, length_km=1.3, std_type='CABLE_CIGRE_MV', name='Line 3-8') pp.create_line(net_cigre_mv, bus12, bus13, length_km=4.89, std_type='OHL_CIGRE_MV', name='Line 12-13') pp.create_line(net_cigre_mv, bus13, bus14, length_km=2.99, std_type='OHL_CIGRE_MV', name='Line 13-14') line6_7 = pp.create_line(net_cigre_mv, bus6, bus7, length_km=0.24, std_type='CABLE_CIGRE_MV', name='Line 6-7') line4_11 = pp.create_line(net_cigre_mv, bus11, bus4, length_km=0.49, std_type='CABLE_CIGRE_MV', name='Line 11-4') line8_14 = pp.create_line(net_cigre_mv, bus14, bus8, length_km=2., std_type='OHL_CIGRE_MV', name='Line 14-8') # Ext-Grid pp.create_ext_grid(net_cigre_mv, bus0, vm_pu=1.03, va_degree=0., s_sc_max_mva=5000, s_sc_min_mva=5000, rx_max=0.1, rx_min=0.1) # Trafos trafo0 = pp.create_transformer_from_parameters(net_cigre_mv, bus0, bus1, sn_kva=25000, vn_hv_kv=110, vn_lv_kv=20, vscr_percent=0.16, vsc_percent=12.00107, pfe_kw=0, i0_percent=0, shift_degree=30.0, name='Trafo 0-1') trafo1 = pp.create_transformer_from_parameters(net_cigre_mv, bus0, bus12, sn_kva=25000, vn_hv_kv=110, vn_lv_kv=20, vscr_percent=0.16, vsc_percent=12.00107, pfe_kw=0, i0_percent=0, shift_degree=30.0, name='Trafo 0-12') # Switches # S2 pp.create_switch(net_cigre_mv, bus6, line6_7, et='l', closed=True, type='LBS') pp.create_switch(net_cigre_mv, bus7, line6_7, et='l', closed=False, type='LBS', name='S2') # S3 pp.create_switch(net_cigre_mv, bus4, line4_11, et='l', closed=False, type='LBS', name='S3') pp.create_switch(net_cigre_mv, bus11, line4_11, et='l', closed=True, type='LBS') # S1 pp.create_switch(net_cigre_mv, bus8, line8_14, et='l', closed=False, type='LBS', name='S1') pp.create_switch(net_cigre_mv, bus14, line8_14, et='l', closed=True, type='LBS') # trafos pp.create_switch(net_cigre_mv, bus0, trafo0, et='t', closed=True, type='CB') pp.create_switch(net_cigre_mv, bus0, trafo1, et='t', closed=True, type='CB') # Loads # Residential pp.create_load(net_cigre_mv, bus1, p_kw=14994.0, q_kvar=3044.66156, name='Load R1') pp.create_load(net_cigre_mv, bus3, p_kw=276.45, q_kvar=69.28490, name='Load R3') pp.create_load(net_cigre_mv, bus4, p_kw=431.65, q_kvar=108.18169, name='Load R4') pp.create_load(net_cigre_mv, bus5, p_kw=727.5, q_kvar=182.32869, name='Load R5') pp.create_load(net_cigre_mv, bus6, p_kw=548.05, q_kvar=137.35428, name='Load R6') pp.create_load(net_cigre_mv, bus8, p_kw=586.85, q_kvar=147.07847, name='Load R8') pp.create_load(net_cigre_mv, bus10, p_kw=475.3, q_kvar=119.12141, name='Load R10') pp.create_load(net_cigre_mv, bus11, p_kw=329.8, q_kvar=82.65567, name='Load R11') pp.create_load(net_cigre_mv, bus12, p_kw=14994.0, q_kvar=3044.66156, name='Load R12') pp.create_load(net_cigre_mv, bus14, p_kw=208.55, q_kvar=52.26756, name='Load R14') # Commercial / Industrial pp.create_load(net_cigre_mv, bus1, p_kw=4845.0, q_kvar=1592.47449, name='Load CI1') pp.create_load(net_cigre_mv, bus3, p_kw=225.25, q_kvar=139.59741, name='Load CI3') pp.create_load(net_cigre_mv, bus7, p_kw=76.5, q_kvar=47.41044, name='Load CI7') pp.create_load(net_cigre_mv, bus9, p_kw=573.75, q_kvar=355.57831, name='Load CI9') pp.create_load(net_cigre_mv, bus10, p_kw=68.0, q_kvar=42.14262, name='Load CI10') pp.create_load(net_cigre_mv, bus12, p_kw=5016.0, q_kvar=1648.67947, name='Load CI12') pp.create_load(net_cigre_mv, bus13, p_kw=34.0, q_kvar=21.07131, name='Load CI13') pp.create_load(net_cigre_mv, bus14, p_kw=331.5, q_kvar=205.44525, name='Load CI14') # Optional distributed energy recources if with_der in ["pv_wind", "all"]: pp.create_sgen(net_cigre_mv, bus3, p_kw=-20, q_kvar=0, sn_kva=20, name='PV 3', type='PV') pp.create_sgen(net_cigre_mv, bus4, p_kw=-20, q_kvar=0, sn_kva=20, name='PV 4', type='PV') pp.create_sgen(net_cigre_mv, bus5, p_kw=-30, q_kvar=0, sn_kva=30, name='PV 5', type='PV') pp.create_sgen(net_cigre_mv, bus6, p_kw=-30, q_kvar=0, sn_kva=30, name='PV 6', type='PV') pp.create_sgen(net_cigre_mv, bus8, p_kw=-30, q_kvar=0, sn_kva=30, name='PV 8', type='PV') pp.create_sgen(net_cigre_mv, bus9, p_kw=-30, q_kvar=0, sn_kva=30, name='PV 9', type='PV') pp.create_sgen(net_cigre_mv, bus10, p_kw=-40, q_kvar=0, sn_kva=40, name='PV 10', type='PV') pp.create_sgen(net_cigre_mv, bus11, p_kw=-10, q_kvar=0, sn_kva=10, name='PV 11', type='PV') pp.create_sgen(net_cigre_mv, bus7, p_kw=-1500, q_kvar=0, sn_kva=1500, name='WKA 7', type='WP') if with_der == "all": pp.create_sgen(net_cigre_mv, bus=bus5, p_kw=-600, sn_kva=600, name='Battery 1', type='Battery', max_p_kw=-600, min_p_kw=600) pp.create_sgen(net_cigre_mv, bus=bus5, p_kw=-33, sn_kva=33, name='Residential fuel cell 1', type='Residential fuel cell') pp.create_sgen(net_cigre_mv, bus=bus9, p_kw=-310, sn_kva=310, name='CHP diesel 1', type='CHP diesel') pp.create_sgen(net_cigre_mv, bus=bus9, p_kw=-212, sn_kva=212, name='Fuel cell 1', type='Fuel cell') pp.create_sgen(net_cigre_mv, bus=bus10, p_kw=0, sn_kva=200, name='Battery 2', type='Battery', max_p_kw=-200, min_p_kw=200) pp.create_sgen(net_cigre_mv, bus=bus10, p_kw=-14, sn_kva=14, name='Residential fuel cell 2', type='Residential fuel cell') # Bus geo data net_cigre_mv.bus_geodata = read_json( """{"x":{"0":7.0,"1":4.0,"2":4.0,"3":4.0,"4":2.5,"5":1.0,"6":1.0,"7":8.0,"8":8.0,"9":6.0, "10":4.0,"11":4.0,"12":10.0,"13":10.0,"14":10.0},"y":{"0":16,"1":15,"2":13,"3":11,"4":9, "5":7,"6":3,"7":3,"8":5,"9":5,"10":5,"11":7,"12":15,"13":11,"14":5}}""") # Match bus.index net_cigre_mv.bus_geodata = net_cigre_mv.bus_geodata.loc[net_cigre_mv.bus.index] return net_cigre_mv
def create_cigre_network_lv(): """ Create the CIGRE LV Grid from final Report of Task Force C6.04.02: "Benchmark Systems for Network Integration of Renewable and Distributed Energy Resources”, 2014. OUTPUT: **net** - The pandapower format network. """ net_cigre_lv = pp.create_empty_network() # Linedata # UG1 line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 0.162, 'x_ohm_per_km': 0.0832, 'max_i_ka': 1.0, 'type': 'cs'} pp.create_std_type(net_cigre_lv, line_data, name='UG1', element='line') # UG2 line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 0.2647, 'x_ohm_per_km': 0.0823, 'max_i_ka': 1.0, 'type': 'cs'} pp.create_std_type(net_cigre_lv, line_data, name='UG2', element='line') # UG3 line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 0.822, 'x_ohm_per_km': 0.0847, 'max_i_ka': 1.0, 'type': 'cs'} pp.create_std_type(net_cigre_lv, line_data, name='UG3', element='line') # OH1 line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 0.4917, 'x_ohm_per_km': 0.2847, 'max_i_ka': 1.0, 'type': 'ol'} pp.create_std_type(net_cigre_lv, line_data, name='OH1', element='line') # OH2 line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 1.3207, 'x_ohm_per_km': 0.321, 'max_i_ka': 1.0, 'type': 'ol'} pp.create_std_type(net_cigre_lv, line_data, name='OH2', element='line') # OH3 line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 2.0167, 'x_ohm_per_km': 0.3343, 'max_i_ka': 1.0, 'type': 'ol'} pp.create_std_type(net_cigre_lv, line_data, name='OH3', element='line') # Busses bus0 = pp.create_bus(net_cigre_lv, name='Bus 0', vn_kv=20.0, type='b', zone='CIGRE_LV') busR0 = pp.create_bus(net_cigre_lv, name='Bus R0', vn_kv=20.0, type='b', zone='CIGRE_LV') busR1 = pp.create_bus(net_cigre_lv, name='Bus R1', vn_kv=0.4, type='b', zone='CIGRE_LV') busR2 = pp.create_bus(net_cigre_lv, name='Bus R2', vn_kv=0.4, type='m', zone='CIGRE_LV') busR3 = pp.create_bus(net_cigre_lv, name='Bus R3', vn_kv=0.4, type='m', zone='CIGRE_LV') busR4 = pp.create_bus(net_cigre_lv, name='Bus R4', vn_kv=0.4, type='m', zone='CIGRE_LV') busR5 = pp.create_bus(net_cigre_lv, name='Bus R5', vn_kv=0.4, type='m', zone='CIGRE_LV') busR6 = pp.create_bus(net_cigre_lv, name='Bus R6', vn_kv=0.4, type='m', zone='CIGRE_LV') busR7 = pp.create_bus(net_cigre_lv, name='Bus R7', vn_kv=0.4, type='m', zone='CIGRE_LV') busR8 = pp.create_bus(net_cigre_lv, name='Bus R8', vn_kv=0.4, type='m', zone='CIGRE_LV') busR9 = pp.create_bus(net_cigre_lv, name='Bus R9', vn_kv=0.4, type='m', zone='CIGRE_LV') busR10 = pp.create_bus(net_cigre_lv, name='Bus R10', vn_kv=0.4, type='m', zone='CIGRE_LV') busR11 = pp.create_bus(net_cigre_lv, name='Bus R11', vn_kv=0.4, type='m', zone='CIGRE_LV') busR12 = pp.create_bus(net_cigre_lv, name='Bus R12', vn_kv=0.4, type='m', zone='CIGRE_LV') busR13 = pp.create_bus(net_cigre_lv, name='Bus R13', vn_kv=0.4, type='m', zone='CIGRE_LV') busR14 = pp.create_bus(net_cigre_lv, name='Bus R14', vn_kv=0.4, type='m', zone='CIGRE_LV') busR15 = pp.create_bus(net_cigre_lv, name='Bus R15', vn_kv=0.4, type='m', zone='CIGRE_LV') busR16 = pp.create_bus(net_cigre_lv, name='Bus R16', vn_kv=0.4, type='m', zone='CIGRE_LV') busR17 = pp.create_bus(net_cigre_lv, name='Bus R17', vn_kv=0.4, type='m', zone='CIGRE_LV') busR18 = pp.create_bus(net_cigre_lv, name='Bus R18', vn_kv=0.4, type='m', zone='CIGRE_LV') busI0 = pp.create_bus(net_cigre_lv, name='Bus I0', vn_kv=20.0, type='b', zone='CIGRE_LV') busI1 = pp.create_bus(net_cigre_lv, name='Bus I1', vn_kv=0.4, type='b', zone='CIGRE_LV') busI2 = pp.create_bus(net_cigre_lv, name='Bus I2', vn_kv=0.4, type='m', zone='CIGRE_LV') busC0 = pp.create_bus(net_cigre_lv, name='Bus C0', vn_kv=20.0, type='b', zone='CIGRE_LV') busC1 = pp.create_bus(net_cigre_lv, name='Bus C1', vn_kv=0.4, type='b', zone='CIGRE_LV') busC2 = pp.create_bus(net_cigre_lv, name='Bus C2', vn_kv=0.4, type='m', zone='CIGRE_LV') busC3 = pp.create_bus(net_cigre_lv, name='Bus C3', vn_kv=0.4, type='m', zone='CIGRE_LV') busC4 = pp.create_bus(net_cigre_lv, name='Bus C4', vn_kv=0.4, type='m', zone='CIGRE_LV') busC5 = pp.create_bus(net_cigre_lv, name='Bus C5', vn_kv=0.4, type='m', zone='CIGRE_LV') busC6 = pp.create_bus(net_cigre_lv, name='Bus C6', vn_kv=0.4, type='m', zone='CIGRE_LV') busC7 = pp.create_bus(net_cigre_lv, name='Bus C7', vn_kv=0.4, type='m', zone='CIGRE_LV') busC8 = pp.create_bus(net_cigre_lv, name='Bus C8', vn_kv=0.4, type='m', zone='CIGRE_LV') busC9 = pp.create_bus(net_cigre_lv, name='Bus C9', vn_kv=0.4, type='m', zone='CIGRE_LV') busC10 = pp.create_bus(net_cigre_lv, name='Bus C10', vn_kv=0.4, type='m', zone='CIGRE_LV') busC11 = pp.create_bus(net_cigre_lv, name='Bus C11', vn_kv=0.4, type='m', zone='CIGRE_LV') busC12 = pp.create_bus(net_cigre_lv, name='Bus C12', vn_kv=0.4, type='m', zone='CIGRE_LV') busC13 = pp.create_bus(net_cigre_lv, name='Bus C13', vn_kv=0.4, type='m', zone='CIGRE_LV') busC14 = pp.create_bus(net_cigre_lv, name='Bus C14', vn_kv=0.4, type='m', zone='CIGRE_LV') busC15 = pp.create_bus(net_cigre_lv, name='Bus C15', vn_kv=0.4, type='m', zone='CIGRE_LV') busC16 = pp.create_bus(net_cigre_lv, name='Bus C16', vn_kv=0.4, type='m', zone='CIGRE_LV') busC17 = pp.create_bus(net_cigre_lv, name='Bus C17', vn_kv=0.4, type='m', zone='CIGRE_LV') busC18 = pp.create_bus(net_cigre_lv, name='Bus C18', vn_kv=0.4, type='m', zone='CIGRE_LV') busC19 = pp.create_bus(net_cigre_lv, name='Bus C19', vn_kv=0.4, type='m', zone='CIGRE_LV') busC20 = pp.create_bus(net_cigre_lv, name='Bus C20', vn_kv=0.4, type='m', zone='CIGRE_LV') # Lines pp.create_line(net_cigre_lv, busR1, busR2, length_km=0.035, std_type='UG1', name='Line R1-R2') pp.create_line(net_cigre_lv, busR2, busR3, length_km=0.035, std_type='UG1', name='Line R2-R3') pp.create_line(net_cigre_lv, busR3, busR4, length_km=0.035, std_type='UG1', name='Line R3-R4') pp.create_line(net_cigre_lv, busR4, busR5, length_km=0.035, std_type='UG1', name='Line R4-R5') pp.create_line(net_cigre_lv, busR5, busR6, length_km=0.035, std_type='UG1', name='Line R5-R6') pp.create_line(net_cigre_lv, busR6, busR7, length_km=0.035, std_type='UG1', name='Line R6-R7') pp.create_line(net_cigre_lv, busR7, busR8, length_km=0.035, std_type='UG1', name='Line R7-R8') pp.create_line(net_cigre_lv, busR8, busR9, length_km=0.035, std_type='UG1', name='Line R8-R9') pp.create_line(net_cigre_lv, busR9, busR10, length_km=0.035, std_type='UG1', name='Line R9-R10') pp.create_line(net_cigre_lv, busR3, busR11, length_km=0.030, std_type='UG3', name='Line R3-R11') pp.create_line(net_cigre_lv, busR4, busR12, length_km=0.035, std_type='UG3', name='Line R4-R12') pp.create_line(net_cigre_lv, busR12, busR13, length_km=0.035, std_type='UG3', name='Line R12-R13') pp.create_line(net_cigre_lv, busR13, busR14, length_km=0.035, std_type='UG3', name='Line R13-R14') pp.create_line(net_cigre_lv, busR14, busR15, length_km=0.030, std_type='UG3', name='Line R14-R15') pp.create_line(net_cigre_lv, busR6, busR16, length_km=0.030, std_type='UG3', name='Line R6-R16') pp.create_line(net_cigre_lv, busR9, busR17, length_km=0.030, std_type='UG3', name='Line R9-R17') pp.create_line(net_cigre_lv, busR10, busR18, length_km=0.030, std_type='UG3', name='Line R10-R18') pp.create_line(net_cigre_lv, busI1, busI2, length_km=0.2, std_type='UG2', name='Line I1-I2') pp.create_line(net_cigre_lv, busC1, busC2, length_km=0.030, std_type='OH1', name='Line C1-C2') pp.create_line(net_cigre_lv, busC2, busC3, length_km=0.030, std_type='OH1', name='Line C2-C3') pp.create_line(net_cigre_lv, busC3, busC4, length_km=0.030, std_type='OH1', name='Line C3-C4') pp.create_line(net_cigre_lv, busC4, busC5, length_km=0.030, std_type='OH1', name='Line C4-C5') pp.create_line(net_cigre_lv, busC5, busC6, length_km=0.030, std_type='OH1', name='Line C5-C6') pp.create_line(net_cigre_lv, busC6, busC7, length_km=0.030, std_type='OH1', name='Line C6-C7') pp.create_line(net_cigre_lv, busC7, busC8, length_km=0.030, std_type='OH1', name='Line C7-C8') pp.create_line(net_cigre_lv, busC8, busC9, length_km=0.030, std_type='OH1', name='Line C8-C9') pp.create_line(net_cigre_lv, busC3, busC10, length_km=0.030, std_type='OH2', name='Line C3-C10') pp.create_line(net_cigre_lv, busC10, busC11, length_km=0.030, std_type='OH2', name='Line C10-C11') pp.create_line(net_cigre_lv, busC11, busC12, length_km=0.030, std_type='OH3', name='Line C11-C12') pp.create_line(net_cigre_lv, busC11, busC13, length_km=0.030, std_type='OH3', name='Line C11-C13') pp.create_line(net_cigre_lv, busC10, busC14, length_km=0.030, std_type='OH3', name='Line C10-C14') pp.create_line(net_cigre_lv, busC5, busC15, length_km=0.030, std_type='OH2', name='Line C5-C15') pp.create_line(net_cigre_lv, busC15, busC16, length_km=0.030, std_type='OH2', name='Line C15-C16') pp.create_line(net_cigre_lv, busC15, busC17, length_km=0.030, std_type='OH3', name='Line C15-C17') pp.create_line(net_cigre_lv, busC16, busC18, length_km=0.030, std_type='OH3', name='Line C16-C18') pp.create_line(net_cigre_lv, busC8, busC19, length_km=0.030, std_type='OH3', name='Line C8-C19') pp.create_line(net_cigre_lv, busC9, busC20, length_km=0.030, std_type='OH3', name='Line C9-C20') # Trafos pp.create_transformer_from_parameters(net_cigre_lv, busR0, busR1, sn_kva=500, vn_hv_kv=20.0, vn_lv_kv=0.4, vscr_percent=1.0, vsc_percent=4.123106, pfe_kw=0.0, i0_percent=0.0, shift_degree=30.0, tp_pos=0.0, name='Trafo R0-R1') pp.create_transformer_from_parameters(net_cigre_lv, busI0, busI1, sn_kva=150, vn_hv_kv=20.0, vn_lv_kv=0.4, vscr_percent=1.003125, vsc_percent=4.126896, pfe_kw=0.0, i0_percent=0.0, shift_degree=30.0, tp_pos=0.0, name='Trafo I0-I1') pp.create_transformer_from_parameters(net_cigre_lv, busC0, busC1, sn_kva=300, vn_hv_kv=20.0, vn_lv_kv=0.4, vscr_percent=0.993750, vsc_percent=4.115529, pfe_kw=0.0, i0_percent=0.0, shift_degree=30.0, tp_pos=0.0, name='Trafo C0-C1') # External grid pp.create_ext_grid(net_cigre_lv, bus0, vm_pu=1.0, va_degree=0.0, s_sc_max_mva=100.0, s_sc_min_mva=100.0, rx_max=1.0, rx_min=1.0) # Loads pp.create_load(net_cigre_lv, busR1, p_kw=190.0, q_kvar=62.449980, name='Load R1') pp.create_load(net_cigre_lv, busR11, p_kw=14.25, q_kvar=4.683748, name='Load R11') pp.create_load(net_cigre_lv, busR15, p_kw=49.4, q_kvar=16.236995, name='Load R15') pp.create_load(net_cigre_lv, busR16, p_kw=52.25, q_kvar=17.173744, name='Load R16') pp.create_load(net_cigre_lv, busR17, p_kw=33.25, q_kvar=10.928746, name='Load R17') pp.create_load(net_cigre_lv, busR18, p_kw=44.65, q_kvar=14.675745, name='Load R18') pp.create_load(net_cigre_lv, busI2, p_kw=85.0, q_kvar=52.678269, name='Load I2') pp.create_load(net_cigre_lv, busC1, p_kw=108.0, q_kvar=52.306787, name='Load C1') pp.create_load(net_cigre_lv, busC12, p_kw=18.0, q_kvar=8.717798, name='Load C12') pp.create_load(net_cigre_lv, busC13, p_kw=18.0, q_kvar=8.717798, name='Load C13') pp.create_load(net_cigre_lv, busC14, p_kw=22.5, q_kvar=10.897247, name='Load C14') pp.create_load(net_cigre_lv, busC17, p_kw=22.5, q_kvar=10.897247, name='Load C17') pp.create_load(net_cigre_lv, busC18, p_kw=7.2, q_kvar=3.487119, name='Load C18') pp.create_load(net_cigre_lv, busC19, p_kw=14.4, q_kvar=6.974238, name='Load C19') pp.create_load(net_cigre_lv, busC20, p_kw=7.2, q_kvar=3.487119, name='Load C20') # Switches pp.create_switch(net_cigre_lv, bus0, busR0, et='b', closed=True, type='CB', name='S1') pp.create_switch(net_cigre_lv, bus0, busI0, et='b', closed=True, type='CB', name='S2') pp.create_switch(net_cigre_lv, bus0, busC0, et='b', closed=True, type='CB', name='S3') # Bus geo data net_cigre_lv.bus_geodata = read_json( """{"x":{"0":0.2,"1":0.2,"2":-1.4583333333,"3":-1.4583333333,"4":-1.4583333333, "5":-1.9583333333,"6":-2.7083333333,"7":-2.7083333333,"8":-3.2083333333,"9":-3.2083333333, "10":-3.2083333333,"11":-3.7083333333,"12":-0.9583333333,"13":-1.2083333333, "14":-1.2083333333,"15":-1.2083333333,"16":-1.2083333333,"17":-2.2083333333, "18":-2.7083333333,"19":-3.7083333333,"20":0.2,"21":0.2,"22":0.2,"23":0.2,"24":1.9166666667, "25":1.9166666667,"26":1.9166666667,"27":0.5416666667,"28":0.5416666667,"29":-0.2083333333, "30":-0.2083333333,"31":-0.2083333333,"32":-0.7083333333,"33":3.2916666667, "34":2.7916666667,"35":2.2916666667,"36":3.2916666667,"37":3.7916666667,"38":1.2916666667, "39":0.7916666667,"40":1.7916666667,"41":0.7916666667,"42":0.2916666667,"43":-0.7083333333}, "y":{"0":1.0,"1":1.0,"2":2.0,"3":3.0,"4":4.0,"5":5.0,"6":6.0,"7":7.0,"8":8.0,"9":9.0, "10":10.0,"11":11.0,"12":5.0,"13":6.0,"14":7.0,"15":8.0,"16":9.0,"17":8.0,"18":11.0, "19":12.0,"20":1.0,"21":2.0,"22":3.0,"23":1.0,"24":2.0,"25":3.0,"26":4.0,"27":5.0,"28":6.0, "29":7.0,"30":8.0,"31":9.0,"32":10.0,"33":5.0,"34":6.0,"35":7.0,"36":7.0,"37":6.0,"38":7.0, "39":8.0,"40":8.0,"41":9.0,"42":10.0,"43":11.0}}""") # Match bus.index net_cigre_lv.bus_geodata = net_cigre_lv.bus_geodata.loc[net_cigre_lv.bus.index] return net_cigre_lv
def impedance_values_close_to_zero(net, min_r_ohm, min_x_ohm, min_r_pu, min_x_pu): """ Checks, if there are lines, xwards or impedances with an impedance value close to zero. INPUT: **net** (pandapowerNet) - pandapower network OUTPUT: **implausible_lines** (list) - list that contains the indices of all lines with an impedance value of zero. """ check_results = [] implausible_elements = {} line = net.line[((net.line.r_ohm_per_km * net.line.length_km) <= min_r_ohm) | ((net.line.x_ohm_per_km * net.line.length_km) <= min_x_ohm) & net.line.in_service].index xward = net.xward[(net.xward.r_ohm <= min_r_ohm) | (net.xward.x_ohm <= min_x_ohm) & net.xward.in_service].index impedance = net.impedance[(net.impedance.rft_pu <= min_r_pu) | (net.impedance.xft_pu <= min_x_pu) | (net.impedance.rtf_pu <= min_r_pu) | (net.impedance.xtf_pu <= min_x_pu) & net.impedance.in_service].index if len(line) > 0: implausible_elements['line'] = list(line) if len(xward) > 0: implausible_elements['xward'] = list(xward) if len(impedance) > 0: implausible_elements['impedance'] = list(impedance) check_results.append(implausible_elements) # checks if loadflow converges when implausible lines or impedances are replaced by switches if ("line" in implausible_elements) or ("impedance" in implausible_elements): switch_copy = copy.deepcopy(net.switch) line_copy = copy.deepcopy(net.line) impedance_copy = copy.deepcopy(net.impedance) try: runpp(net) except: try: for key in implausible_elements: if key == 'xward': continue implausible_idx = implausible_elements[key] net[key].in_service.loc[implausible_idx] = False for idx in implausible_idx: pp.create_switch(net, net[key].from_bus.at[idx], net[key].to_bus.at[idx], et="b") runpp(net) switch_replacement = True except: switch_replacement = False check_results.append({ "loadflow_converges_with_switch_replacement": switch_replacement }) net.switch = switch_copy net.line = line_copy net.impedance = impedance_copy if implausible_elements: return check_results
c_nf_per_km=0, max_i_ka=0) # Switch for switch in breaker_list: bus, way_terminals = find_attached_busbar(switch) if switch.state == 'false': state = False else: state = True if isinstance(bus, list): from_bus = pp.get_element_index(net, "bus", bus[0].name) to_bus = pp.get_element_index(net, "bus", bus[1].name) pp.create_switch(net, from_bus, to_bus, et='b', type=state, name=switch.name) else: bus = pp.get_element_index(net, "bus", bus.name) list = find_CE_list(switch) for ce in list: if not check_busbar(ce): type = ce_type(ce) pp.create_switch(net, name=switch.name, bus=bus, et=type) # Generator for generator in generating_unit_list: bus, way_terminals = find_attached_busbar(generator) bus_name = bus[0].name bus_pp = pp.get_element_index(net, "bus", bus_name)
def _net_to_test(): # create test grid net = pp.create_empty_network() # buses hv_bus = pp.create_bus(net, 110, index=8, name="HV Bus 0") lv_buses = pp.create_buses(net, 6, 20, index=[2, 0, 5, 4, 3, 1], name=["MV Bus %i" % i for i in range(6)]) # trafo t0 = pp.create_transformer(net, hv_bus, lv_buses[1], "40 MVA 110/20 kV", name="T0") t1 = pp.create_transformer(net, hv_bus, lv_buses[4], "40 MVA 110/20 kV", name="T1") # lines l0 = pp.create_line(net, lv_buses[1], lv_buses[2], 1.11, "94-AL1/15-ST1A 20.0", index=3, name="L0") l1 = pp.create_line(net, lv_buses[2], lv_buses[3], 1.11, "94-AL1/15-ST1A 20.0", index=7, name="L1") l2 = pp.create_line(net, lv_buses[3], lv_buses[0], 2, "94-AL1/15-ST1A 20.0", name="L2") l3 = pp.create_line(net, lv_buses[1], lv_buses[3], 2.4, "94-AL1/15-ST1A 20.0", name="L3") # bus-bus switch pp.create_switch(net, lv_buses[5], lv_buses[2], "b", index=3) # trafo switches pp.create_switch(net, hv_bus, t0, "t", name="dfdfg", index=4) pp.create_switch(net, lv_buses[1], t0, "t", False, name="dfhgjdf") pp.create_switch(net, lv_buses[4], t1, "t", False, name="dfhgj", index=2) # line switches pp.create_switch(net, lv_buses[0], l2, "l", False, name="klar") pp.create_switch(net, lv_buses[3], l3, "l", False, name="klar", index=8) pp.create_switch(net, lv_buses[1], l0, "l") pp.create_switch(net, lv_buses[2], l0, "l") pp.create_switch(net, lv_buses[3], l1, "l") # create_generic_coordinates(net) net.bus_geodata["x"] = [1, 2, 1, 3, 0, 1, 2] net.bus_geodata["y"] = [0, 1, -1, 0, 0, 1, 0] net.bus_geodata.index = list(range(6)) + [8] return net
def test_repl_to_line_with_switch(): """ Same test as above, but this time in comparison to actual replacement """ net = nw.example_multivoltage() pp.runpp(net) for testindex in net.line.index: if net.line.in_service.loc[testindex]: # todo print weg print("testing line " + str(testindex)) line = net.line.loc[testindex] fbus = line.from_bus tbus = line.to_bus len = line.length_km if "184-AL1/30-ST1A" in net.line.std_type.loc[testindex]: std = "243-AL1/39-ST1A 110.0" elif "NA2XS2Y" in net.line.std_type.loc[testindex]: std = "NA2XS2Y 1x240 RM/25 6/10 kV" elif "NAYY" in net.line.std_type.loc[testindex]: std = "NAYY 4x150 SE" elif " 15-AL1/3-ST1A" in net.line.std_type.loc[testindex]: std = "24-AL1/4-ST1A 0.4" # create an oos line at the same buses REPL = pp.create_line(net, from_bus=fbus, to_bus=tbus, length_km=len, std_type=std) for bus in fbus, tbus: if bus in net.switch[(net.switch.closed == False) & (net.switch.element == testindex)].bus.values: pp.create_switch(net, bus=bus, element=REPL, closed=False, et="l", type="LBS") # calculate runpp with REPL net.line.in_service[testindex] = False net.line.in_service[REPL] = True pp.runpp(net) fbus_repl = net.res_bus.loc[fbus] tbus_repl = net.res_bus.loc[tbus] ploss_repl = (net.res_line.loc[REPL].p_from_mw - net.res_line.loc[REPL].p_to_mw ) qloss_repl =(net.res_line.loc[REPL].q_from_mvar - net.res_line.loc[REPL].q_to_mvar ) # get ne line impedances new_idx = tb.repl_to_line(net, testindex, std, in_service=True) # activate new idx line net.line.in_service[REPL] = False net.line.in_service[testindex] = True net.line.in_service[new_idx] = True pp.runpp(net) # compare lf results fbus_ne = net.res_bus.loc[fbus] tbus_ne = net.res_bus.loc[tbus] ploss_ne = (net.res_line.loc[testindex].p_from_mw - net.res_line.loc[testindex].p_to_mw)+\ (net.res_line.loc[new_idx].p_from_mw - net.res_line.loc[new_idx].p_to_mw) qloss_ne = (net.res_line.loc[testindex].q_from_mvar - net.res_line.loc[testindex].q_to_mvar )+\ (net.res_line.loc[new_idx].q_from_mvar - net.res_line.loc[new_idx].q_to_mvar) assert_series_equal(fbus_repl, fbus_ne, atol=1e-2) assert_series_equal(tbus_repl, tbus_ne) assert np.isclose(ploss_repl,ploss_ne, atol=1e-5) assert np.isclose(qloss_repl,qloss_ne) # and reset to unreinforced state again net.line.in_service[testindex] = True net.line.in_service[new_idx] = False net.line.in_service[REPL] = False
def create_network(): # carga la red de cigre de baja tensión y la modifica acrode a nuestros interese # retorna un objeto pandapower y la matriz de resistencias r y de reactancias x net = pn.create_cigre_network_lv() # Eliminar cargas que no se usarán for index in net.load.index: if not net.load['name'][index][5] == 'R': net.load.drop(index, inplace=True) net.load.drop(0, inplace=True) # Eliminar todos los switches y crear uno nuevo for index in net.switch.index: net.switch.drop(index, inplace=True) pp.create_switch(net, bus=2, element=0, et='l', closed=True, type='CB', z_ohm=0.0) pp.create_switch(net, bus=5, element=3, et='l', closed=True, type='CB', z_ohm=0.0) # Eliminar trafos que no se usarán for index in net.trafo.index: if not net.trafo['name'][index] == 'Trafo R0-R1': net.trafo.drop(index, inplace=True) # Eliminar lineas que no se usarán for index in net.line.index: if not net.line['name'][index][5] == 'R': net.line.drop(index, inplace=True) # Eliminar buses que no se usarán for index in net.bus.index: if not net.bus['name'][index][4] == 'R': net.bus.drop(index, inplace=True) net.bus_geodata.drop(index, inplace=True) # Cambio de lugar de la external grid net.ext_grid['bus'] = 1 # Agregar nodo 20 y linea respectiva pp.create_bus(net, vn_kv=0.4, index=20, type='m', zone='CIGRE_LV', in_service=True, geodata=(7, -1)) pp.create_line_from_parameters(net, from_bus=5, to_bus=20, std_type='UG3', length_km=0.030, r_ohm_per_km=0.822, x_ohm_per_km=0.0847, c_nf_per_km=0.0, g_us_per_km=0.0, max_i_ka=1.0) # Agregar GD pp.create_sgen(net, bus=16, p_mw=0.030, q_mvar=0.0, name='Microturbina', scaling=1.0, type='CHP', index=1, in_service=False) pp.create_sgen(net, bus=17, p_mw=0.010, q_mvar=0.0, name='WT', scaling=1.0, type='WP', index=2, in_service=False) pp.create_sgen(net, bus=17, p_mw=0.010, q_mvar=0.0, name='PV1', scaling=1.0, type='PV', index=3, in_service=True) pp.create_sgen(net, bus=18, p_mw=0.003, q_mvar=0.0, name='PV2', scaling=1.0, type='PV', index=4, in_service=True) pp.create_sgen(net, bus=19, p_mw=0.010, q_mvar=0.0, name='Celda combustible', scaling=1.0, type='CHP', index=5, in_service=False) pp.create_storage(net, bus=20, p_mw=0.03, max_e_mwh=0.060, q_mvar=0, min_e_mwh=0.012, in_service=False) # Cambiar consumos S_loads = [0.015, 0.072, 0.050, 0.015, 0.047] cos_phi = 0.85 for i in net.load.index: net.load['p_mw'][i] = S_loads[i - 1] * cos_phi net.load['q_mvar'][i] = S_loads[i - 1] * np.sqrt(1 - np.square(cos_phi)) # Modificar Geodata de los buses para graficar y = np.array( [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, 7, 7, 7, 6, 5, 2, 1, 7]) x = np.array( [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 2, 3, 3, -1, 1, -1, -1]) net.bus_geodata['x'] = 0.3 * x net.bus_geodata['y'] = 0.3 * y Zn = ((0.4 * 1e3)**2) / (net.sn_mva * 1e6) r = np.zeros((len(net.bus), len(net.bus))) x = np.zeros((len(net.bus), len(net.bus))) for index in net.line.index: r_line = net.line['r_ohm_per_km'][index] * net.line['length_km'][ index] / Zn x_line = net.line['x_ohm_per_km'][index] * net.line['length_km'][ index] / Zn r[net.line['from_bus'][index] - 1, net.line['to_bus'][index] - 1] = r_line x[net.line['from_bus'][index] - 1, net.line['to_bus'][index] - 1] = x_line r[net.line['to_bus'][index] - 1, net.line['from_bus'][index] - 1] = r_line x[net.line['to_bus'][index] - 1, net.line['from_bus'][index] - 1] = x_line return net, r, x
def create_cigre_network_lv(): net_cigre_lv = pp.create_empty_network() # Linedata # UG1 line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 0.162, 'x_ohm_per_km': 0.0832, 'imax_ka': 1.0, 'type': 'cs'} pp.create_std_type(net_cigre_lv, line_data, name='UG1', element='line') # UG2 line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 0.2647, 'x_ohm_per_km': 0.0823, 'imax_ka': 1.0, 'type': 'cs'} pp.create_std_type(net_cigre_lv, line_data, name='UG2', element='line') # UG3 line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 0.822, 'x_ohm_per_km': 0.0847, 'imax_ka': 1.0, 'type': 'cs'} pp.create_std_type(net_cigre_lv, line_data, name='UG3', element='line') # OH1 line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 0.4917, 'x_ohm_per_km': 0.2847, 'imax_ka': 1.0, 'type': 'ol'} pp.create_std_type(net_cigre_lv, line_data, name='OH1', element='line') # OH2 line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 1.3207, 'x_ohm_per_km': 0.321, 'imax_ka': 1.0, 'type': 'ol'} pp.create_std_type(net_cigre_lv, line_data, name='OH2', element='line') # OH3 line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 2.0167, 'x_ohm_per_km': 0.3343, 'imax_ka': 1.0, 'type': 'ol'} pp.create_std_type(net_cigre_lv, line_data, name='OH3', element='line') # Busses bus0 = pp.create_bus(net_cigre_lv, name='Bus 0', vn_kv=20.0, type='b', zone='CIGRE_LV') busR0 = pp.create_bus(net_cigre_lv, name='Bus R0', vn_kv=20.0, type='b', zone='CIGRE_LV') busR1 = pp.create_bus(net_cigre_lv, name='Bus R1', vn_kv=0.4, type='b', zone='CIGRE_LV') busR2 = pp.create_bus(net_cigre_lv, name='Bus R2', vn_kv=0.4, type='m', zone='CIGRE_LV') busR3 = pp.create_bus(net_cigre_lv, name='Bus R3', vn_kv=0.4, type='m', zone='CIGRE_LV') busR4 = pp.create_bus(net_cigre_lv, name='Bus R4', vn_kv=0.4, type='m', zone='CIGRE_LV') busR5 = pp.create_bus(net_cigre_lv, name='Bus R5', vn_kv=0.4, type='m', zone='CIGRE_LV') busR6 = pp.create_bus(net_cigre_lv, name='Bus R6', vn_kv=0.4, type='m', zone='CIGRE_LV') busR7 = pp.create_bus(net_cigre_lv, name='Bus R7', vn_kv=0.4, type='m', zone='CIGRE_LV') busR8 = pp.create_bus(net_cigre_lv, name='Bus R8', vn_kv=0.4, type='m', zone='CIGRE_LV') busR9 = pp.create_bus(net_cigre_lv, name='Bus R9', vn_kv=0.4, type='m', zone='CIGRE_LV') busR10 = pp.create_bus(net_cigre_lv, name='Bus R10', vn_kv=0.4, type='m', zone='CIGRE_LV') busR11 = pp.create_bus(net_cigre_lv, name='Bus R11', vn_kv=0.4, type='m', zone='CIGRE_LV') busR12 = pp.create_bus(net_cigre_lv, name='Bus R12', vn_kv=0.4, type='m', zone='CIGRE_LV') busR13 = pp.create_bus(net_cigre_lv, name='Bus R13', vn_kv=0.4, type='m', zone='CIGRE_LV') busR14 = pp.create_bus(net_cigre_lv, name='Bus R14', vn_kv=0.4, type='m', zone='CIGRE_LV') busR15 = pp.create_bus(net_cigre_lv, name='Bus R15', vn_kv=0.4, type='m', zone='CIGRE_LV') busR16 = pp.create_bus(net_cigre_lv, name='Bus R16', vn_kv=0.4, type='m', zone='CIGRE_LV') busR17 = pp.create_bus(net_cigre_lv, name='Bus R17', vn_kv=0.4, type='m', zone='CIGRE_LV') busR18 = pp.create_bus(net_cigre_lv, name='Bus R18', vn_kv=0.4, type='m', zone='CIGRE_LV') busI0 = pp.create_bus(net_cigre_lv, name='Bus I0', vn_kv=20.0, type='b', zone='CIGRE_LV') busI1 = pp.create_bus(net_cigre_lv, name='Bus I1', vn_kv=0.4, type='b', zone='CIGRE_LV') busI2 = pp.create_bus(net_cigre_lv, name='Bus I2', vn_kv=0.4, type='m', zone='CIGRE_LV') busC0 = pp.create_bus(net_cigre_lv, name='Bus C0', vn_kv=20.0, type='b', zone='CIGRE_LV') busC1 = pp.create_bus(net_cigre_lv, name='Bus C1', vn_kv=0.4, type='b', zone='CIGRE_LV') busC2 = pp.create_bus(net_cigre_lv, name='Bus C2', vn_kv=0.4, type='m', zone='CIGRE_LV') busC3 = pp.create_bus(net_cigre_lv, name='Bus C3', vn_kv=0.4, type='m', zone='CIGRE_LV') busC4 = pp.create_bus(net_cigre_lv, name='Bus C4', vn_kv=0.4, type='m', zone='CIGRE_LV') busC5 = pp.create_bus(net_cigre_lv, name='Bus C5', vn_kv=0.4, type='m', zone='CIGRE_LV') busC6 = pp.create_bus(net_cigre_lv, name='Bus C6', vn_kv=0.4, type='m', zone='CIGRE_LV') busC7 = pp.create_bus(net_cigre_lv, name='Bus C7', vn_kv=0.4, type='m', zone='CIGRE_LV') busC8 = pp.create_bus(net_cigre_lv, name='Bus C8', vn_kv=0.4, type='m', zone='CIGRE_LV') busC9 = pp.create_bus(net_cigre_lv, name='Bus C9', vn_kv=0.4, type='m', zone='CIGRE_LV') busC10 = pp.create_bus(net_cigre_lv, name='Bus C10', vn_kv=0.4, type='m', zone='CIGRE_LV') busC11 = pp.create_bus(net_cigre_lv, name='Bus C11', vn_kv=0.4, type='m', zone='CIGRE_LV') busC12 = pp.create_bus(net_cigre_lv, name='Bus C12', vn_kv=0.4, type='m', zone='CIGRE_LV') busC13 = pp.create_bus(net_cigre_lv, name='Bus C13', vn_kv=0.4, type='m', zone='CIGRE_LV') busC14 = pp.create_bus(net_cigre_lv, name='Bus C14', vn_kv=0.4, type='m', zone='CIGRE_LV') busC15 = pp.create_bus(net_cigre_lv, name='Bus C15', vn_kv=0.4, type='m', zone='CIGRE_LV') busC16 = pp.create_bus(net_cigre_lv, name='Bus C16', vn_kv=0.4, type='m', zone='CIGRE_LV') busC17 = pp.create_bus(net_cigre_lv, name='Bus C17', vn_kv=0.4, type='m', zone='CIGRE_LV') busC18 = pp.create_bus(net_cigre_lv, name='Bus C18', vn_kv=0.4, type='m', zone='CIGRE_LV') busC19 = pp.create_bus(net_cigre_lv, name='Bus C19', vn_kv=0.4, type='m', zone='CIGRE_LV') busC20 = pp.create_bus(net_cigre_lv, name='Bus C20', vn_kv=0.4, type='m', zone='CIGRE_LV') # Lines pp.create_line(net_cigre_lv, busR1, busR2, length_km=0.035, std_type='UG1', name='Line R1-R2') pp.create_line(net_cigre_lv, busR2, busR3, length_km=0.035, std_type='UG1', name='Line R2-R3') pp.create_line(net_cigre_lv, busR3, busR4, length_km=0.035, std_type='UG1', name='Line R3-R4') pp.create_line(net_cigre_lv, busR4, busR5, length_km=0.035, std_type='UG1', name='Line R4-R5') pp.create_line(net_cigre_lv, busR5, busR6, length_km=0.035, std_type='UG1', name='Line R5-R6') pp.create_line(net_cigre_lv, busR6, busR7, length_km=0.035, std_type='UG1', name='Line R6-R7') pp.create_line(net_cigre_lv, busR7, busR8, length_km=0.035, std_type='UG1', name='Line R7-R8') pp.create_line(net_cigre_lv, busR8, busR9, length_km=0.035, std_type='UG1', name='Line R8-R9') pp.create_line(net_cigre_lv, busR9, busR10, length_km=0.035, std_type='UG1', name='Line R9-R10') pp.create_line(net_cigre_lv, busR3, busR11, length_km=0.030, std_type='UG3', name='Line R3-R11') pp.create_line(net_cigre_lv, busR4, busR12, length_km=0.035, std_type='UG3', name='Line R4-R12') pp.create_line(net_cigre_lv, busR12, busR13, length_km=0.035, std_type='UG3', name='Line R12-R13') pp.create_line(net_cigre_lv, busR13, busR14, length_km=0.035, std_type='UG3', name='Line R13-R14') pp.create_line(net_cigre_lv, busR14, busR15, length_km=0.030, std_type='UG3', name='Line R14-R15') pp.create_line(net_cigre_lv, busR6, busR16, length_km=0.030, std_type='UG3', name='Line R6-R16') pp.create_line(net_cigre_lv, busR9, busR17, length_km=0.030, std_type='UG3', name='Line R9-R17') pp.create_line(net_cigre_lv, busR10, busR18, length_km=0.030, std_type='UG3', name='Line R10-R18') pp.create_line(net_cigre_lv, busI1, busI2, length_km=0.2, std_type='UG2', name='Line I1-I2') pp.create_line(net_cigre_lv, busC1, busC2, length_km=0.030, std_type='OH1', name='Line C1-C2') pp.create_line(net_cigre_lv, busC2, busC3, length_km=0.030, std_type='OH1', name='Line C2-C3') pp.create_line(net_cigre_lv, busC3, busC4, length_km=0.030, std_type='OH1', name='Line C3-C4') pp.create_line(net_cigre_lv, busC4, busC5, length_km=0.030, std_type='OH1', name='Line C4-C5') pp.create_line(net_cigre_lv, busC5, busC6, length_km=0.030, std_type='OH1', name='Line C5-C6') pp.create_line(net_cigre_lv, busC6, busC7, length_km=0.030, std_type='OH1', name='Line C6-C7') pp.create_line(net_cigre_lv, busC7, busC8, length_km=0.030, std_type='OH1', name='Line C7-C8') pp.create_line(net_cigre_lv, busC8, busC9, length_km=0.030, std_type='OH1', name='Line C8-C9') pp.create_line(net_cigre_lv, busC3, busC10, length_km=0.030, std_type='OH2', name='Line C3-C10') pp.create_line(net_cigre_lv, busC10, busC11, length_km=0.030, std_type='OH2', name='Line C10-C11') pp.create_line(net_cigre_lv, busC11, busC12, length_km=0.030, std_type='OH3', name='Line C11-C12') pp.create_line(net_cigre_lv, busC11, busC13, length_km=0.030, std_type='OH3', name='Line C11-C13') pp.create_line(net_cigre_lv, busC10, busC14, length_km=0.030, std_type='OH3', name='Line C10-C14') pp.create_line(net_cigre_lv, busC5, busC15, length_km=0.030, std_type='OH2', name='Line C5-C15') pp.create_line(net_cigre_lv, busC15, busC16, length_km=0.030, std_type='OH2', name='Line C15-C16') pp.create_line(net_cigre_lv, busC15, busC17, length_km=0.030, std_type='OH3', name='Line C15-C17') pp.create_line(net_cigre_lv, busC16, busC18, length_km=0.030, std_type='OH3', name='Line C16-C18') pp.create_line(net_cigre_lv, busC8, busC19, length_km=0.030, std_type='OH3', name='Line C8-C19') pp.create_line(net_cigre_lv, busC9, busC20, length_km=0.030, std_type='OH3', name='Line C9-C20') # Trafos pp.create_transformer_from_parameters(net_cigre_lv, busR0, busR1, sn_kva=500, vn_hv_kv=20.0, vn_lv_kv=0.4, vscr_percent=1.0, vsc_percent=4.123106, pfe_kw=0.0, i0_percent=0.0, shift_degree=30.0, tp_pos=0.0, name='Trafo R0-R1') pp.create_transformer_from_parameters(net_cigre_lv, busI0, busI1, sn_kva=150, vn_hv_kv=20.0, vn_lv_kv=0.4, vscr_percent=1.003125, vsc_percent=4.126896, pfe_kw=0.0, i0_percent=0.0, shift_degree=30.0, tp_pos=0.0, name='Trafo I0-I1') pp.create_transformer_from_parameters(net_cigre_lv, busC0, busC1, sn_kva=300, vn_hv_kv=20.0, vn_lv_kv=0.4, vscr_percent=0.993750, vsc_percent=4.115529, pfe_kw=0.0, i0_percent=0.0, shift_degree=30.0, tp_pos=0.0, name='Trafo C0-C1') # External grid pp.create_ext_grid(net_cigre_lv, bus0, vm_pu=1.0, va_degree=0.0, s_sc_max_mva=100.0, s_sc_min_mva=100.0, rx_max=1.0, rx_min=1.0) # Loads pp.create_load(net_cigre_lv, busR1, p_kw=190.0, q_kvar=62.449980, name='Load R1') pp.create_load(net_cigre_lv, busR11, p_kw=14.25, q_kvar=4.683748, name='Load R11') pp.create_load(net_cigre_lv, busR15, p_kw=49.4, q_kvar=16.236995, name='Load R15') pp.create_load(net_cigre_lv, busR16, p_kw=52.25, q_kvar=17.173744, name='Load R16') pp.create_load(net_cigre_lv, busR17, p_kw=33.25, q_kvar=10.928746, name='Load R17') pp.create_load(net_cigre_lv, busR18, p_kw=44.65, q_kvar=14.675745, name='Load R18') pp.create_load(net_cigre_lv, busI2, p_kw=85.0, q_kvar=52.678269, name='Load I2') pp.create_load(net_cigre_lv, busC1, p_kw=108.0, q_kvar=52.306787, name='Load C1') pp.create_load(net_cigre_lv, busC12, p_kw=18.0, q_kvar=8.717798, name='Load C12') pp.create_load(net_cigre_lv, busC13, p_kw=18.0, q_kvar=8.717798, name='Load C13') pp.create_load(net_cigre_lv, busC14, p_kw=22.5, q_kvar=10.897247, name='Load C14') pp.create_load(net_cigre_lv, busC17, p_kw=22.5, q_kvar=10.897247, name='Load C17') pp.create_load(net_cigre_lv, busC18, p_kw=7.2, q_kvar=3.487119, name='Load C18') pp.create_load(net_cigre_lv, busC19, p_kw=14.4, q_kvar=6.974238, name='Load C19') pp.create_load(net_cigre_lv, busC20, p_kw=7.2, q_kvar=3.487119, name='Load C20') # Switches pp.create_switch(net_cigre_lv, bus0, busR0, et='b', closed=True, type='CB', name='S1') pp.create_switch(net_cigre_lv, bus0, busI0, et='b', closed=True, type='CB', name='S2') pp.create_switch(net_cigre_lv, bus0, busC0, et='b', closed=True, type='CB', name='S3') return net_cigre_lv
net.trafo # show trafo table hv_bus_sw = pd.read_csv('example_advanced/hv_bus_sw.csv', sep=';', header=0, decimal=',') hv_bus_sw # Bus-bus switches for _, switch in hv_bus_sw.iterrows(): from_bus = pp.get_element_index(net, "bus", switch.from_bus) to_bus = pp.get_element_index(net, "bus", switch.to_bus) pp.create_switch(net, from_bus, to_bus, et=switch.et, closed=switch.closed, type=switch.type, name=switch.bus_name) # Bus-line switches hv_buses = net.bus[(net.bus.vn_kv == 380) | (net.bus.vn_kv == 110)].index hv_ls = net.line[(net.line.from_bus.isin(hv_buses)) & (net.line.to_bus.isin(hv_buses))] for _, line in hv_ls.iterrows(): pp.create_switch(net, line.from_bus, line.name, et='l', closed=True, type='LBS',
def example_simple(): """ Returns the simple example network from the pandapower tutorials. OUTPUT: net - simple example network EXAMPLE: >>> import pandapower.networks >>> net = pandapower.networks.example_simple() """ net = pp.create_empty_network() # create buses bus1 = pp.create_bus(net, name="HV Busbar", vn_kv=110., type="b") bus2 = pp.create_bus(net, name="HV Busbar 2", vn_kv=110., type="b") bus3 = pp.create_bus(net, name="HV Transformer Bus", vn_kv=110., type="n") bus4 = pp.create_bus(net, name="MV Transformer Bus", vn_kv=20., type="n") bus5 = pp.create_bus(net, name="MV Main Bus", vn_kv=20., type="b") bus6 = pp.create_bus(net, name="MV Bus 1", vn_kv=20., type="b") bus7 = pp.create_bus(net, name="MV Bus 2", vn_kv=20., type="b") # create external grid pp.create_ext_grid(net, bus1, vm_pu=1.02, va_degree=50) # create transformer pp.create_transformer(net, bus3, bus4, name="110kV/20kV transformer", std_type="25 MVA 110/20 kV") # create lines pp.create_line(net, bus1, bus2, length_km=10, std_type="N2XS(FL)2Y 1x300 RM/35 64/110 kV", name="Line 1") line2 = pp.create_line(net, bus5, bus6, length_km=2.0, std_type="NA2XS2Y 1x240 RM/25 12/20 kV", name="Line 2") line3 = pp.create_line(net, bus6, bus7, length_km=3.5, std_type="48-AL1/8-ST1A 20.0", name="Line 3") line4 = pp.create_line(net, bus7, bus5, length_km=2.5, std_type="NA2XS2Y 1x240 RM/25 12/20 kV", name="Line 4") # create bus-bus switches pp.create_switch(net, bus2, bus3, et="b", type="CB") pp.create_switch(net, bus4, bus5, et="b", type="CB") # create bus-line switches pp.create_switch(net, bus5, line2, et="l", type="LBS", closed=True) pp.create_switch(net, bus6, line2, et="l", type="LBS", closed=True) pp.create_switch(net, bus6, line3, et="l", type="LBS", closed=True) pp.create_switch(net, bus7, line3, et="l", type="LBS", closed=False) pp.create_switch(net, bus7, line4, et="l", type="LBS", closed=True) pp.create_switch(net, bus5, line4, et="l", type="LBS", closed=True) # create load pp.create_load(net, bus7, p_mw=2, q_mvar=4, scaling=0.6, name="load") # create generator pp.create_gen(net, bus6, p_mw=6, max_q_mvar=3, min_q_mvar=-3, vm_pu=1.03, name="generator") # create static generator pp.create_sgen(net, bus7, p_mw=2, q_mvar=-0.5, name="static generator") # create shunt pp.create_shunt(net, bus3, q_mvar=-0.96, p_mw=0, name='Shunt') return net
for i in stack_list: for j in i: if j.CE_type == 'Line': pp_line_list.append(pp.create_line(net, i[0].bus, i[-1].bus, length_km = 2, std_type = "N2XS(FL)2Y 1x300 RM/35 64/110 kV", name= j.name)) net.line # print(pp_line_list) # create switches pp_breaker_list = [] for i in stack_list: for j in i: if j.CE_type == 'Breaker': if j.breakeropen == 'false': pp_breaker_list.append(pp.create_switch(net, i[0].bus, i[-1].bus, et="b", type="CB", closed=True)) else: pp_breaker_list.append(pp.create_switch(net, i[0].bus, i[-1].bus, et="b", type="CB", closed=False)) net.switch # print(pp_breaker_list) # create generators pp_generator_list = [] for i in stack_list: for j in i: if j.CE_type == 'Generator': pp_generator_list.append(pp.create_sgen(net, i[0].bus, p_mw=2, q_mvar=-0.6, name = j.name)) net.sgen # print(pp_generator_list)
def test_drop_inactive_elements(): for service in (False, True): net = pp.create_empty_network() bus_sl = pp.create_bus(net, vn_kv=.4, in_service=service) pp.create_ext_grid(net, bus_sl, in_service=service) bus0 = pp.create_bus(net, vn_kv=.4, in_service=service) pp.create_switch(net, bus_sl, bus0, 'b', not service) bus1 = pp.create_bus(net, vn_kv=.4, in_service=service) pp.create_transformer(net, bus0, bus1, in_service=service, std_type='63 MVA 110/20 kV') bus2 = pp.create_bus(net, vn_kv=.4, in_service=service) pp.create_line(net, bus1, bus2, length_km=1, in_service=service, std_type='149-AL1/24-ST1A 10.0') pp.create_load(net, bus2, p_kw=0., in_service=service) pp.create_sgen(net, bus2, p_kw=0., in_service=service) bus3 = pp.create_bus(net, vn_kv=.4, in_service=service) bus4 = pp.create_bus(net, vn_kv=.4, in_service=service) pp.create_transformer3w_from_parameters(net, bus2, bus3, bus4, 0.4, 0.4, 0.4, 100, 50, 50, 3, 3, 3, 1, 1, 1, 5, 1) # drop them tb.drop_inactive_elements(net) sum_of_elements = 0 for element in net.keys(): # skip this one since we expect items here if element == "std_types" or element.startswith("_"): continue try: if service and (element == 'ext_grid' or (element == 'bus' and len(net.bus) == 1)): # if service==True, the 1 ext_grid and its bus are not dropped continue sum_of_elements += len(net[element]) if len(net[element]) > 0: print(element) except TypeError: # _ppc is initialized with None and clashes when checking continue assert sum_of_elements == 0 if service: assert len(net.ext_grid) == 1 assert len(net.bus) == 1 assert bus_sl in net.bus.index.values net = pp.create_empty_network() bus0 = pp.create_bus(net, vn_kv=.4, in_service=True) pp.create_ext_grid(net, bus0, in_service=True) bus1 = pp.create_bus(net, vn_kv=.4, in_service=False) pp.create_line(net, bus0, bus1, length_km=1, in_service=False, std_type='149-AL1/24-ST1A 10.0') gen0 = pp.create_gen(net, bus=bus1, p_kw=1) tb.drop_inactive_elements(net) assert gen0 not in net.gen.index
def sim_request(data): is_three_phase = utils.get_or_error("3phase", data) elements_dict = utils.get_or_error("elements", data) buses = {} # Used for matching bus UUIDs to index def process_potential_bus(key, value): """ Inner method for processing a positional argument that could be a bus This function checks if the value is in the bus keys. This should never cause issues so long as UUID's aren't used for any other purpose except for bus identification and as long as there are no UUID collisions. Both of those cases seem exceptionally unlikely, so this should work fine. """ if value in buses.keys(): return buses[value] else: return value bus_list = [(uuid, element) for uuid, element in elements_dict.items() if utils.get_or_error("etype", element) == "bus"] element_list = [(uuid, element) for uuid, element in elements_dict.items() if utils.get_or_error("etype", element) != "bus" and utils.get_or_error("etype", element) != "switch"] switch_list = [(uuid, element) for uuid, element in elements_dict.items() if utils.get_or_error("etype", element) == "switch"] net = pp.create_empty_network() for uuid, bus in bus_list: element_type = "bus" req_props = utils.required_props[element_type] positional_args = [ value for key, value in bus.items() if key in req_props ] optional_args = { key: value for key, value in bus.items() if (not key in req_props) and (not key == "etype")} index = pp.create_bus(net, *positional_args, **optional_args, name=uuid) buses[uuid] = index for uuid, element in element_list: element_type = utils.get_or_error("etype", element) req_props = utils.required_props[element_type] positional_args = [process_potential_bus(key, value) for key, value in element.items() if key in req_props] optional_args = { key: value for key, value in element.items() if (not key in req_props) and (not key == "etype")} if element_type == "load": pp.create_load(net, *positional_args, **optional_args, name=uuid) elif element_type == "gen": pp.create_gen(net, *positional_args, **optional_args, name=uuid) elif element_type == "ext_grid": pp.create_ext_grid(net, *positional_args, **optional_args, name=uuid) elif element_type == "line": pp.create_line(net, *positional_args, *optional_args, name=uuid) elif element_type == "trafo": pp.create_transformer_from_parameters(net, *positional_args, **optional_args, name=uuid) elif element_type == "storage": pp.create_storage(net, *positional_args, **optional_args, name=uuid) else: raise InvalidError(f"Element type {element_type} is invalid or not implemented!") for uuid, switch in switch_list: element_type = "switch" req_props = utils.required_props[element_type] positional_args = [process_potential_bus(key, value) for key, value in element.items() if key in req_props] optional_args = { key: value for key, value in element.items() if (not key in req_props) and (not key == "etype")} et = positional_args[2] if et == "b": pass # This is handled by process_potential_buses if et == "l": positional_args[1] = pp.get_element_index(net, "line", positional_args[1]) elif et == "t": positional_args[1] = pp.get_element_index(net, "trafo", positional_args[1]) elif et == "t3": positional_args[1] = pp.get_element_index(net, "trafo3w", positional_args[1]) else: raise InvalidError(f"Invalid element type {et}. Must be b,l,t, or t3.") pp.create_switch(net, *positional_args, **optional_args, name=uuid) try: if is_three_phase: pp.runpp_3ph(net) else: pp.runpp(net) except LoadflowNotConverged: report = pp.diagnostic(net, report_style="compact", warnings_only=True) raise ConvError("Load flow did not converge.") except (KeyError, ValueError) as e: raise PPError(str(e)) except Exception as e: raise PPError("Unknown exception has occured: " + str(e)) message = {} message["status"] = "SIM_RESULT" results = {} for uuid,element in elements_dict.items(): element_type = elements_dict[uuid]["etype"] if element_type == "switch": continue net["res_" + element_type] = net["res_" + element_type].fillna(0) results[uuid] = {} results[uuid]["etype"] = element_type index = pp.get_element_index(net, element_type, uuid, exact_match=True) results[uuid].update(net["res_" + element_type].iloc[index].to_dict()) message["elements"] = results return json.dumps(message)
def test_unsupplied_buses_with_switches(): net = pp.create_empty_network() pp.create_buses(net, 8, 20) pp.create_buses(net, 5, 0.4) pp.create_ext_grid(net, 0) pp.create_line(net, 0, 1, 1.2, "NA2XS2Y 1x185 RM/25 12/20 kV") pp.create_switch(net, 0, 0, "l", closed=True) pp.create_switch(net, 1, 0, "l", closed=False) pp.create_line(net, 0, 2, 1.2, "NA2XS2Y 1x185 RM/25 12/20 kV") pp.create_switch(net, 0, 1, "l", closed=False) pp.create_switch(net, 2, 1, "l", closed=True) pp.create_line(net, 0, 3, 1.2, "NA2XS2Y 1x185 RM/25 12/20 kV") pp.create_switch(net, 0, 2, "l", closed=False) pp.create_switch(net, 3, 2, "l", closed=False) pp.create_line(net, 0, 4, 1.2, "NA2XS2Y 1x185 RM/25 12/20 kV") pp.create_switch(net, 0, 3, "l", closed=True) pp.create_switch(net, 4, 3, "l", closed=True) pp.create_line(net, 0, 5, 1.2, "NA2XS2Y 1x185 RM/25 12/20 kV") pp.create_switch(net, 0, 6, "b", closed=True) pp.create_switch(net, 0, 7, "b", closed=False) pp.create_transformer(net, 0, 8, "0.63 MVA 20/0.4 kV") pp.create_switch(net, 0, 0, "t", closed=True) pp.create_switch(net, 8, 0, "t", closed=False) pp.create_transformer(net, 0, 9, "0.63 MVA 20/0.4 kV") pp.create_switch(net, 0, 1, "t", closed=False) pp.create_switch(net, 9, 1, "t", closed=True) pp.create_transformer(net, 0, 10, "0.63 MVA 20/0.4 kV") pp.create_switch(net, 0, 2, "t", closed=False) pp.create_switch(net, 10, 2, "t", closed=False) pp.create_transformer(net, 0, 11, "0.63 MVA 20/0.4 kV") pp.create_switch(net, 0, 3, "t", closed=True) pp.create_switch(net, 11, 3, "t", closed=True) pp.create_transformer(net, 0, 12, "0.63 MVA 20/0.4 kV") pp.create_buses(net, 2, 20) pp.create_impedance(net, 0, 13, 1, 1, 10) pp.create_impedance(net, 0, 14, 1, 1, 10, in_service=False) ub = top.unsupplied_buses(net) assert ub == {1, 2, 3, 7, 8, 9, 10, 14} ub = top.unsupplied_buses(net, respect_switches=False) assert ub == {14}
def test_end_points_of_continuously_connected_lines(): net = pp.create_empty_network() b0 = pp.create_bus(net, vn_kv=20.) b1 = pp.create_bus(net, vn_kv=20.) b2 = pp.create_bus(net, vn_kv=20.) b3 = pp.create_bus(net, vn_kv=20.) b4 = pp.create_bus(net, vn_kv=20.) b5 = pp.create_bus(net, vn_kv=20.) b5 = pp.create_bus(net, vn_kv=20.) b5 = pp.create_bus(net, vn_kv=20.) b6 = pp.create_bus(net, vn_kv=20.) b7 = pp.create_bus(net, vn_kv=20.) l1 = pp.create_line(net, from_bus=b0, to_bus=b1, length_km=2., std_type="34-AL1/6-ST1A 20.0") l2 = pp.create_line(net, from_bus=b1, to_bus=b2, length_km=2., std_type="34-AL1/6-ST1A 20.0") pp.create_switch(net, bus=b2, element=b3, et="b") pp.create_switch(net, bus=b3, element=b4, et="b") pp.create_switch(net, bus=b4, element=b5, et="b") l3 = pp.create_line(net, from_bus=b5, to_bus=b6, length_km=2., std_type="34-AL1/6-ST1A 20.0") l4 = pp.create_line(net, from_bus=b6, to_bus=b7, length_km=2., std_type="34-AL1/6-ST1A 20.0") f, t = top.get_end_points_of_continuously_connected_lines(net, lines=[l2, l1]) assert {f, t} == {b0, b2} f, t = top.get_end_points_of_continuously_connected_lines( net, lines=[l2, l1, l3]) assert {f, t} == {b0, b6} f, t = top.get_end_points_of_continuously_connected_lines(net, lines=[l3]) assert {f, t} == {b5, b6} with pytest.raises(UserWarning) as exception_info: top.get_end_points_of_continuously_connected_lines(net, lines=[l1, l2, l4]) assert str(exception_info.value) == "Lines not continuously connected" with pytest.raises(UserWarning) as exception_info: top.get_end_points_of_continuously_connected_lines(net, lines=[l1, l4]) assert str(exception_info.value) == "Lines not continuously connected" b8 = pp.create_bus(net, vn_kv=20.) l5 = pp.create_line(net, 8, b8, length_km=1., std_type="34-AL1/6-ST1A 20.0") with pytest.raises(UserWarning) as exception_info: top.get_end_points_of_continuously_connected_lines( net, lines=[l1, l2, l3, l4, l5]) assert str(exception_info.value) == "Lines have branching points"