def test_3ph_bus_mapping_order(): net = pp.create_empty_network() b2 = pp.create_bus(net, vn_kv=0.4, index=4) pp.create_bus(net, vn_kv=0.4, in_service=False, index=3) b1 = pp.create_bus(net, vn_kv=0.4, index=7) pp.create_ext_grid(net, b1, vm_pu=1.0, s_sc_max_mva=10, rx_max=0.1) net.ext_grid["x0x_max"] = 1. net.ext_grid["r0x0_max"] = 0.1 pp.create_std_type(net, {"r_ohm_per_km": 0.1013, "x_ohm_per_km": 0.06911504, "c_nf_per_km": 690, "g_us_per_km": 0, "max_i_ka": 0.44, "c0_nf_per_km": 312.4, "r0_ohm_per_km": 0.4053, "x0_ohm_per_km": 0.2764602}, "N2XRY 3x185sm 0.6/1kV") pp.create_line(net, b1, b2, 1.0, std_type="N2XRY 3x185sm 0.6/1kV", index=4) pp.create_line(net, b1, b2, 1.0, std_type="N2XRY 3x185sm 0.6/1kV", index=3, in_service=False) pp.create_line(net, b1, b2, 1.0, std_type="N2XRY 3x185sm 0.6/1kV", index=7) pp.add_zero_impedance_parameters(net) pp.create_load(net, b2, p_mw=0.030, q_mvar=0.030) pp.runpp(net) runpp_3ph_with_consistency_checks(net) assert net['converged'] assert np.allclose(net.res_bus_3ph.vm_a_pu.values, net.res_bus.vm_pu.values, equal_nan=True) assert net.res_bus_3ph.index.tolist() == net.res_bus.index.tolist() assert net.res_line_3ph.index.tolist() == net.res_line.index.tolist() assert np.allclose(net.res_line.p_from_mw, net.res_line_3ph.p_a_from_mw + net.res_line_3ph.p_b_from_mw + net.res_line_3ph.p_c_from_mw) assert np.allclose(net.res_line.loading_percent, net.res_line_3ph.loading_a_percent)
def test_find_line_type(): net = pp.create_empty_network() c = 40000 r = 1.5 x = 2.0 i = 10 name = "test_line1" typdata = { "c_nf_per_km": c, "r_ohm_per_km": r, "x_ohm_per_km": x, "max_i_ka": i } pp.create_std_type(net, data=typdata, name=name, element="line") fitting_type = pp.find_std_type_by_parameter(net, typdata) assert len(fitting_type) == 1 assert fitting_type[0] == name fitting_type = pp.find_std_type_by_parameter(net, {"r_ohm_per_km": r + 0.05}, epsilon=.06) assert len(fitting_type) == 1 assert fitting_type[0] == name fitting_type = pp.find_std_type_by_parameter(net, {"r_ohm_per_km": r + 0.07}, epsilon=.06) assert len(fitting_type) == 0
def test_3ph_isolated_nodes(): v_base = 110 # 110kV Base Voltage mva_base = 100 # 100 MVA net = pp.create_empty_network(sn_mva=mva_base) busn = pp.create_bus(net, vn_kv=v_base, name="busn", index=1) pp.create_bus(net, vn_kv=20., in_service=True, index=2, name="busx") busk = pp.create_bus(net, vn_kv=v_base, name="busk", index=5) busl = pp.create_bus(net, vn_kv=v_base, name="busl", index=6) pp.create_bus(net, vn_kv=20., in_service=False, index=3) busy = pp.create_bus(net, vn_kv=20., in_service=True, index=0, name="busy") pp.create_ext_grid(net, bus=busn, vm_pu=1.0, name="Grid Connection", s_sc_max_mva=5000, rx_max=0.1) net.ext_grid["r0x0_max"] = 0.1 net.ext_grid["x0x_max"] = 1.0 pp.create_std_type(net, {"r0_ohm_per_km": 0.0848, "x0_ohm_per_km": 0.4649556, "c0_nf_per_km": 230.6, "max_i_ka": 0.963, "r_ohm_per_km": 0.0212, "x_ohm_per_km": 0.1162389, "c_nf_per_km": 230}, "example_type") # Loads on supplied buses pp.create_asymmetric_load(net, busk, p_a_mw=50, q_a_mvar=50, p_b_mw=10, q_b_mvar=15, p_c_mw=10, q_c_mvar=5) pp.create_load(net, bus=busl, p_mw=7, q_mvar=0.070, name="Load 1") # Loads on unsupplied buses pp.create_load(net, bus=busy, p_mw=70, q_mvar=70, name="Load Y") pp.create_line(net, from_bus=busn, to_bus=busk, length_km=50.0, std_type="example_type") pp.create_line(net, from_bus=busl, to_bus=busk, length_km=50.0, std_type="example_type") pp.add_zero_impedance_parameters(net) runpp_3ph_with_consistency_checks(net) assert net['converged'] assert np.allclose(net.res_bus_3ph.T[[0, 2, 3]].T[["vm_a_pu", "va_a_degree", "vm_b_pu", "va_b_degree", "vm_c_pu", "va_c_degree"]], np.nan, equal_nan=True) assert np.allclose(net.res_bus_3ph.T[[0, 2, 3]].T[["p_a_mw", "q_a_mvar", "p_b_mw", "q_b_mvar", "p_c_mw", "q_c_mvar"]], 0.0)
def test_create_and_load_std_type_line(): net = pp.create_empty_network() c = 40 r = 0.01 x = 0.02 i = 0.2 name = "test_line" typdata = {} with pytest.raises(UserWarning): pp.create_std_type(net, name=name, data=typdata, element="line") typdata = {"c_nf_per_km": c} with pytest.raises(UserWarning): pp.create_std_type(net, name=name, data=typdata, element="line") typdata = {"c_nf_per_km": c, "r_ohm_per_km": r} with pytest.raises(UserWarning): pp.create_std_type(net, name=name, data=typdata, element="line") typdata = {"c_nf_per_km": c, "r_ohm_per_km": r, "x_ohm_per_km": x} with pytest.raises(UserWarning): pp.create_std_type(net, name=name, data=typdata, element="line") typdata = { "c_nf_per_km": c, "r_ohm_per_km": r, "x_ohm_per_km": x, "max_i_ka": i } pp.create_std_type(net, name=name, data=typdata, element="line") assert net.std_types["line"][name] == typdata loaded_type = pp.load_std_type(net, name) assert loaded_type == typdata
def test_change_type_line(): net = pp.create_empty_network() r1 = 0.01 x1 = 0.02 c1 = 40 i1 = 0.2 name1 = "test_line1" typ1 = {"c_nf_per_km": c1, "r_ohm_per_km": r1, "x_ohm_per_km": x1, "max_i_ka": i1} pp.create_std_type(net, data=typ1, name=name1, element="line") r2 = 0.02 x2 = 0.04 c2 = 20 i2 = 0.4 name2 = "test_line2" typ2 = {"c_nf_per_km": c2, "r_ohm_per_km": r2, "x_ohm_per_km": x2, "max_i_ka": i2} pp.create_std_type(net, data=typ2, name=name2, element="line") b1 = pp.create_bus(net, vn_kv=0.4) b2 = pp.create_bus(net, vn_kv=0.4) lid = pp.create_line(net, b1, b2, 1., std_type=name1) assert net.line.r_ohm_per_km.at[lid] == r1 assert net.line.x_ohm_per_km.at[lid] == x1 assert net.line.c_nf_per_km.at[lid] == c1 assert net.line.max_i_ka.at[lid] == i1 assert net.line.std_type.at[lid] == name1 pp.change_std_type(net, lid, name2) assert net.line.r_ohm_per_km.at[lid] == r2 assert net.line.x_ohm_per_km.at[lid] == x2 assert net.line.c_nf_per_km.at[lid] == c2 assert net.line.max_i_ka.at[lid] == i2 assert net.line.std_type.at[lid] == name2
def test_0gen_2ext_grid_decoupled(): net = create_test_network2() net.gen = net.gen.drop(0) net.shunt.q_mvar *= -1 pp.create_ext_grid(net, 1) net.ext_grid.in_service.at[1] = False pp.create_ext_grid(net, 3) net.ext_grid.in_service.at[2] = False auxbus = pp.create_bus(net, name="bus1", vn_kv=10.) net.trafo.shift_degree = 150 pp.create_std_type(net, {"type": "cs", "r_ohm_per_km": 0.876, "q_mm2": 35.0, "endtmp_deg": 160.0, "c_nf_per_km": 260.0, "max_i_ka": 0.123, "x_ohm_per_km": 0.1159876}, name="NAYSEY 3x35rm/16 6/10kV", element="line") pp.create_line(net, 0, auxbus, 1, name="line_to_decoupled_grid", std_type="NAYSEY 3x35rm/16 6/10kV") # NAYSEY 3x35rm/16 6/10kV pp.create_ext_grid(net, auxbus) pp.create_switch(net, auxbus, 2, et="l", closed=0, type="LS") pp.runpp(net, init='dc', calculate_voltage_angles=True) assert np.allclose(net.res_bus.p_mw.values*1e3, [-133.158732, 30.000000, 0.000000, 100.000000, 0.000000]) assert np.allclose(net.res_bus.q_mvar.values*1e3, [39.5843982697, 2.000000, -28.5636406913, 0.000000, 0.000000]) assert np.allclose(net.res_bus.va_degree.values, [0.000000, -155.752225311, -153.669395244, -0.0225931152895, 0.0]) assert np.allclose(net.res_bus.vm_pu.values, [1.000000, 0.930961, 0.975764, 0.998865, 1.0]) assert np.allclose(net.res_ext_grid.p_mw.values*1e3, [133.158732, 0.000000, 0.000000, -0.000000]) assert np.allclose(net.res_ext_grid.q_mvar*1e3, [-39.5843982697, 0.000000, 0.000000, -0.000000])
def test_parameter_from_std_type_line(): net = pp.create_empty_network() r1 = 0.01 x1 = 0.02 c1 = 40 i1 = 0.2 name1 = "test_line1" typ1 = { "c_nf_per_km": c1, "r_ohm_per_km": r1, "x_ohm_per_km": x1, "max_i_ka": i1 } pp.create_std_type(net, data=typ1, name=name1, element="line") r2 = 0.02 x2 = 0.04 c2 = 20 i2 = 0.4 endtemp2 = 40 endtemp_fill = 20 name2 = "test_line2" typ2 = { "c_nf_per_km": c2, "r_ohm_per_km": r2, "x_ohm_per_km": x2, "max_i_ka": i2, "endtemp_degree": endtemp2 } pp.create_std_type(net, data=typ2, name=name2, element="line") b1 = pp.create_bus(net, vn_kv=0.4) b2 = pp.create_bus(net, vn_kv=0.4) lid1 = pp.create_line(net, b1, b2, 1., std_type=name1) lid2 = pp.create_line(net, b1, b2, 1., std_type=name2) lid3 = pp.create_line_from_parameters(net, b1, b2, 1., r_ohm_per_km=0.03, x_ohm_per_km=0.04, c_nf_per_km=20, max_i_ka=0.3) pp.parameter_from_std_type(net, "endtemp_degree", fill=endtemp_fill) assert net.line.endtemp_degree.at[ lid1] == endtemp_fill #type1 one has not specified an endtemp assert net.line.endtemp_degree.at[ lid2] == endtemp2 #type2 has specified endtemp assert net.line.endtemp_degree.at[ lid3] == endtemp_fill #line3 has no standard type net.line.endtemp_degree.at[lid3] = 10 pp.parameter_from_std_type(net, "endtemp_degree", fill=endtemp_fill) assert net.line.endtemp_degree.at[ lid3] == 10 #check that existing values arent overwritten
def grid(): net = pp.create_empty_network() file = 'Sitel_Invade_MV_Topology.xlsx' xl = pd.ExcelFile(Path(str(os.getcwd()) + '/'+ file)) MVNetwork = xl.parse('Linies') x_ohm_per_km = MVNetwork['Reactancia_ohm_km'][0] c_uf_per_km = MVNetwork['Capacitat_uF_km'][0] r_ohm_per_km = MVNetwork['Resistencia_ohm_km'][0] #IMPORTANT: no change in the capacitance units has been made. In pandapower documentation it is #a the magnitude around 240, what we already have. if multiplied by 1000 to change it from micro #to nano farads, overload is of 300%. Make sure with Estabanell they are giving us micro. Meanwhile, #it is left as the value of micro as it is the most similar of a reasonable magnitude line_data = {"c_nf_per_km": c_uf_per_km , "r_ohm_per_km": r_ohm_per_km, "x_ohm_per_km": x_ohm_per_km, "max_i_ka":0.415} pp.create_std_type(net, line_data, "line_ESTABANELL", element='line') MVNetworkbusses = xl.parse('Busses') for i in MVNetworkbusses['name']: pp.create_bus(net, vn_kv=20.5,name=i, max_vm_pu=1.1, min_vm_pu=0.9) MVNetworkbussesTrafos = xl.parse('Trafos') for i in range(len(MVNetworkbussesTrafos['name'])): pp.create_bus(net, vn_kv= MVNetworkbussesTrafos['vn_lv_kv'][i], name=MVNetworkbussesTrafos['name'][i], max_vm_pu=1.1, min_vm_pu=0.9) ## per aconseguir els Id's tant dels empalmaments com els nusos a la banda LV dels trafos: l=MVNetworkbusses['Id Bus'] #dataframe r=l.append(MVNetworkbussesTrafos['Id Bus']) #r still a DataFrame r=r.values.tolist() #r list net.bus.insert(5, 'Id Bus', r) net.bus = net.bus.set_index("Id Bus", drop = False) pp.create_transformer_from_parameters(net, hv_bus=202, lv_bus=75, sn_mva=0.4, vn_hv_kv=20.5, vn_lv_kv=0.23, vk_percent=4., vkr_percent=0.04, pfe_kw=0.75, i0_percent=1.8, shift_degree=150, in_service=True, parallel=1, name='E.T. NODE 1', tap_side='hv', tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=False, df=1, index=75) pp.create_transformer_from_parameters(net, hv_bus=202, lv_bus=76, sn_mva=0.63, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4.09, vkr_percent=0.0409, pfe_kw=0.548, i0_percent=0.9, shift_degree=150, in_service=True, parallel=1, name='E.T. NODE 2', tap_side='hv',tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True, df=1, index=76) pp.create_transformer_from_parameters(net, hv_bus=204, lv_bus=22, sn_mva=1, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=6., vkr_percent=0.08, pfe_kw=1.4, i0_percent=1.3, shift_degree=150, in_service=True, parallel=1, name='E.T.CUARTEL', tap_side='hv', tap_pos=0,tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True,df=1, index=22) pp.create_transformer_from_parameters(net, hv_bus=209, lv_bus=26, sn_mva=0.63, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4., vkr_percent=0.053, pfe_kw=1.03, i0_percent=1.6, shift_degree=150, in_service=True, parallel=1, name='E.T.PEDRALS', tap_side='hv',tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True,df=1, index=26) pp.create_transformer_from_parameters(net, hv_bus=213, lv_bus=30, sn_mva=0.8, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=6., vkr_percent=0.06, pfe_kw=1.4, i0_percent=1.3, shift_degree=150, in_service=True, parallel=1, name='E.T. LA MUTUA',tap_side='hv', tap_pos=0,tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True, df=1,index=30) pp.create_transformer_from_parameters(net, hv_bus=219, lv_bus=34, sn_mva=0.63, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4.28, vkr_percent=0.0428, pfe_kw=1.3, i0_percent=1.05, shift_degree=150, in_service=True, parallel=1, name='E.T. LA LLEÓ', tap_side='hv',tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True,df=1, index=34) pp.create_transformer_from_parameters(net, hv_bus=220, lv_bus=64, sn_mva=0.63, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4., vkr_percent=0.04, pfe_kw=1.3, i0_percent=1.6, shift_degree=150, in_service=True, parallel=1, name='E.T. PRADES 1',tap_side='hv',tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True,df=1, index=64) pp.create_transformer_from_parameters(net, hv_bus=228, lv_bus=42, sn_mva=0.4, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4.05, vkr_percent=0.054, pfe_kw=0.768, i0_percent=1.72, shift_degree=150, in_service=True, parallel=1, name='E.T. ECUADOR', tap_side='hv', tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True,df=1, index=42) pp.create_transformer_from_parameters(net, hv_bus=230, lv_bus=46, sn_mva=0.4, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=5., vkr_percent=0.066, pfe_kw=1.193, i0_percent=0.45, shift_degree=150, in_service=True, parallel=1, name='E.T. URUGUAI', tap_side='hv',tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True, df=1, index=46) pp.create_transformer_from_parameters(net, hv_bus=232, lv_bus=50, sn_mva=0.63, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4., vkr_percent=0.053, pfe_kw=1.3, i0_percent=1.6, shift_degree=150, in_service=True, parallel=1, name='E.T. LA TORRETA', tap_side='hv',tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2,tap_step_percent=2.5,tap_step_degree=0,tap_phase_shifter=True,df=1, index=50) pp.create_transformer_from_parameters(net, hv_bus=234, lv_bus=54, sn_mva=0.4, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4., vkr_percent=0.04, pfe_kw=0.93, i0_percent=1.8, shift_degree=150, in_service=True, parallel=1,name='E.T. COSTA BRAVA 1', tap_side='hv',tap_pos=0, tap_neutral=0, tap_min=-2,tap_max=2,tap_step_percent=2.5,tap_step_degree=0,tap_phase_shifter=True, df=1, index=54) pp.create_transformer_from_parameters(net, hv_bus=236, lv_bus=58, sn_mva=0.4, vn_hv_kv=20.5, vn_lv_kv=0.23, vk_percent=4., vkr_percent=0.04, pfe_kw=0.93, i0_percent=1.8, shift_degree=150,in_service=True,parallel=1,name='E.T. NOVA VERDAGUER 1',tap_side='hv',tap_pos=0, tap_neutral=0,tap_min=-2,tap_max=2,tap_step_percent=2.5,tap_step_degree=0,tap_phase_shifter=True, df=1, index=58) pp.create_transformer_from_parameters(net, hv_bus=236, lv_bus=66, sn_mva=0.4, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4., vkr_percent=0.04, pfe_kw=0.75, i0_percent=1.8, shift_degree=150, in_service=True, parallel=1,name='E.T. NOVA VERDAGUER 2',tap_side='hv',tap_pos=0, tap_neutral=0,tap_min=-2,tap_max=2,tap_step_percent=2.5,tap_step_degree=0,tap_phase_shifter=True, df=1,index=66) pp.create_transformer_from_parameters(net, hv_bus=238, lv_bus=61, sn_mva=0.25, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4., vkr_percent=0.04, pfe_kw=0.65, i0_percent=2, shift_degree=150, in_service=True, parallel=1, name='E.T. GRANADA', tap_side='hv', tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True, df=1, index=61) for i in range(len(MVNetwork['Id TedisNet'])): pp.create_line(net, from_bus=MVNetworkbusses['Id Bus'][i], to_bus=MVNetworkbusses['Id Bus'][i+1], length_km=MVNetwork['Length_km'][i], std_type="line_ESTABANELL", name=MVNetwork['origen'][i]) net.line.insert(14, 'Id linia', MVNetwork['Id TedisNet']) #the slack bus will act as an external grid pp.create_ext_grid(net, bus=201, vm_pu=1.0, va_degree=0.0, in_service=True, name="Grid Connection") return(net)
def test_create_line_conductance(): net = pp.create_empty_network() pp.create_bus(net, 20) pp.create_bus(net, 20) pp.create_std_type(net, {'c_nf_per_km': 210, 'max_i_ka': 0.142, 'q_mm2': 50, 'r_ohm_per_km': 0.642, 'type': 'cs', 'x_ohm_per_km': 0.083, "g_us_per_km": 1}, "test_conductance") l = pp.create_line(net, 0, 1, 1., "test_conductance") assert net.line.g_us_per_km.at[l] == 1
def test_tap_phase_shifter_default(): expected_default = False net = pp.create_empty_network() pp.create_bus(net, 110) pp.create_bus(net, 20) data = pp.load_std_type(net, "25 MVA 110/20 kV", "trafo") if "tap_phase_shifter" in data: del data["tap_phase_shifter"] pp.create_std_type(net, data, "without_tap_shifter_info", "trafo") pp.create_transformer_from_parameters(net, 0, 1, 25e3, 110, 20, 0.4, 12, 20, 0.07) pp.create_transformer(net, 0, 1, "without_tap_shifter_info") assert (net.trafo.tap_phase_shifter == expected_default).all()
def add_tech_types(net, tech): """ Add std_type to an existing net """ for i, t in tech.iterrows(): # i is ID of tech, t is tech data data = dict(c_nf_per_km=t.C, r_ohm_per_km=t.R, x_ohm_per_km=t.X, max_i_ka=t.Imax / 1000, q_mm=t.Section, type='oh' if t.Type == 'Overhead' else 'cs') pp.create_std_type(net, name=i, data=data, element='line')
def test_3ph_two_bus_line_powerfactory(): net = pp.create_empty_network() b1 = pp.create_bus(net, vn_kv=0.4) b2 = pp.create_bus(net, vn_kv=0.4) pp.create_ext_grid(net, b1, vm_pu=1.0, s_sc_max_mva=10, rx_max=0.1) net.ext_grid["x0x_max"] = 1. net.ext_grid["r0x0_max"] = 0.1 pp.create_std_type(net, {"r_ohm_per_km": 0.1013, "x_ohm_per_km": 0.06911504, "c_nf_per_km": 690, "g_us_per_km": 0, "max_i_ka": 0.44, "c0_nf_per_km": 312.4, "r0_ohm_per_km": 0.4053, "x0_ohm_per_km": 0.2764602}, "N2XRY 3x185sm 0.6/1kV") pp.create_line(net, b1, b2, 0.4, std_type="N2XRY 3x185sm 0.6/1kV") pp.add_zero_impedance_parameters(net) pp.create_load(net, b2, p_mw=0.010, q_mvar=0.010) pp.create_asymmetric_load(net, b2, p_a_mw=0.020, q_a_mvar=0.010, p_b_mw=0.015, q_b_mvar=0.005, p_c_mw=0.025, q_c_mvar=0.010) runpp_3ph_with_consistency_checks(net) assert net['converged'] bus_pp = np.abs(net.res_bus_3ph[['vm_a_pu', 'vm_b_pu', 'vm_c_pu']].values) bus_pf = np.abs(np.array([[0.99939853552, 1.0013885141, 0.99921580141], [0.97401782343, 0.98945593737, 0.96329605983]])) assert np.max(np.abs(bus_pp-bus_pf)) < 4e-6 line_pp = np.abs(net.res_line_3ph[ ['i_a_from_ka', 'i_b_from_ka', 'i_c_from_ka', 'i_a_to_ka', 'i_b_to_ka', 'i_c_to_ka', 'p_a_from_mw', 'p_b_from_mw', 'p_c_from_mw', 'q_a_from_mvar', 'q_b_from_mvar', 'q_c_from_mvar', 'p_a_to_mw', 'p_b_to_mw', 'p_c_to_mw', 'q_a_to_mvar', 'q_b_to_mvar', 'q_c_to_mvar']].values) line_pf = np.abs(np.array( [[0.11946088987 , 0.08812337783 , 0.14074226065 , 0.1194708224 , 0.088131567331 , 0.14075063601 , 0.023810539354 , 0.01855791658 , 0.029375192747 , 0.013901720672 , 0.008421814704 , 0.013852398586 , -0.023333142958 , -0.018333405987 , -0.028331643666 , -0.013332756527 , -0.008333413919 , -0.013332422725 ]])) assert np.max(np.abs(line_pp - line_pf)) < 1e-5 line_load_pp = np.abs(net.res_line_3ph[ ['loading_a_percent', 'loading_b_percent', 'loading_c_percent', 'loading_percent']].values) line_load_pf = np.abs(np.array( [[27.1525 , 20.0299 , 31.98878 , 31.98878]])) assert np.max(np.abs(line_load_pp - line_load_pf)) < 1e-2
def test_create_std_types_from_net_line(): net1 = pp.create_empty_network() net2 = pp.create_empty_network() c = 40 r = 0.01 x = 0.02 i = 0.2 typdata = {"c_nf_per_km": c, "r_ohm_per_km": r, "x_ohm_per_km": x, "max_i_ka": i, "additional": 8} pp.create_std_type(net1, typdata, "test_copy") pp.copy_std_types(net2, net1, element="line") assert pp.std_type_exists(net2, "test_copy")
def test_init_slack_with_multiple_transformers(angles=True): np.random.seed(123) net = pp.create_empty_network() pp.create_bus(net, 220, index=0) pp.create_bus(net, 110, index=1) pp.create_bus(net, 110, index=2) pp.create_bus(net, 110, index=3) pp.create_bus(net, 10, index=4) pp.create_bus(net, 10, index=5) pp.create_bus(net, 10, index=6) pp.create_bus(net, 10, index=7, in_service=False) pp.create_std_type(net, {"sn_mva": 63, "vn_hv_kv": 110, "vn_lv_kv": 10, "vk_percent": 10.04, "vkr_percent": 0.31, "pfe_kw": 31.51, "i0_percent": 0.078, "shift_degree": 150, "tap_side": "hv", "tap_neutral": 0, "tap_min": -9, "tap_max": 9, "tap_step_degree": 0, "tap_step_percent": 1.5, "tap_phase_shifter": False}, "63 MVA 110/10 kV v1.4.3 and older", element="trafo") pp.create_transformer(net, 3, 7, std_type="63 MVA 110/10 kV v1.4.3 and older", in_service=False) pp.create_transformer(net, 3, 4, std_type="63 MVA 110/10 kV v1.4.3 and older") pp.create_transformer(net, 0, 1, std_type="100 MVA 220/110 kV") pp.create_line(net, 1, 2, 2.0, std_type="N2XS(FL)2Y 1x120 RM/35 64/110 kV") pp.create_line(net, 1, 3, 2.0, std_type="N2XS(FL)2Y 1x120 RM/35 64/110 kV") pp.create_line(net, 4, 5, 2.0, std_type="NA2XS2Y 1x95 RM/25 12/20 kV") pp.create_line(net, 5, 6, 2.0, std_type="NA2XS2Y 1x95 RM/25 12/20 kV") pp.create_load(net, 2, p_mw=5, q_mvar=3.3) pp.create_load(net, 5, p_mw=0.9, q_mvar=0.5) pp.create_load(net, bus=6, p_mw=0.7, q_mvar=0.3) pp.create_ext_grid(net, bus=0, vm_pu=1.04, va_degree=10., name="Slack 220 kV") pp.runpp(net, calculate_voltage_angles=angles) for bus, row in net.res_bus[net.bus.in_service == True].iterrows(): pp.create_measurement(net, "v", "bus", row.vm_pu * r(0.01), 0.01, bus) if row.p_mw != 0.: continue pp.create_measurement(net, "p", "bus", -row.p_mw * r(), max(0.001, abs(0.03 * row.p_mw)), bus) pp.create_measurement(net, "q", "bus", -row.q_mvar * r(), max(.0001, abs(0.03 * row.q_mvar)), bus) pp.create_measurement(net, "p", "line", net.res_line.p_from_mw[0], .01, side=1, element=0) pp.create_measurement(net, "q", "line", net.res_line.q_from_mvar[0], 0.01, side=1, element=0) pp.create_measurement(net, "p", "line", net.res_line.p_from_mw[2], .01, side=4, element=2) pp.create_measurement(net, "q", "line", net.res_line.q_from_mvar[2], .01, side=4, element=2) pp.create_measurement(net, "p", "line", net.res_line.p_from_mw[3], .01, side=5, element=3) pp.create_measurement(net, "q", "line", net.res_line.q_from_mvar[3], 0.01, side=5, element=3) success = estimate(net, init='slack', calculate_voltage_angles=angles, tolerance=1e-9) # pretty high error for vm_pu (half percent!) assert success assert (np.nanmax(np.abs(net.res_bus.vm_pu.values - net.res_bus_est.vm_pu.values)) < 0.006) assert (np.nanmax(np.abs(net.res_bus.va_degree.values- net.res_bus_est.va_degree.values)) < 0.006)
def convert_to_3ph(net): ### update external grid net.ext_grid["r0x0_max"] = 0.1 net.ext_grid["x0x_max"] = 1.0 net.ext_grid["s_sc_max_mva"] = 10000 net.ext_grid["s_sc_min_mva"] = 8000 net.ext_grid["rx_min"] = 0.1 net.ext_grid["rx_max"] = 0.1 ### update transformer net.trafo = net.trafo.head(0) pp.create_std_type(net, {"sn_mva": 0.3, "vn_hv_kv": 20, "vn_lv_kv": 0.4, "vk_percent": 6, "vkr_percent": 0.78125, "pfe_kw": 2.7, "i0_percent": 0.16875, "shift_degree": 0, "vector_group": "YNyn", "tap_side": "hv", "tap_neutral": 0, "tap_min": -2, "tap_max": 2, "tap_step_degree": 0, "tap_step_percent": 2.5, "tap_phase_shifter": False, "vk0_percent": 6, "vkr0_percent": 0.78125, "mag0_percent": 100, "mag0_rx": 0., "si0_hv_partial": 0.9,}, "YNyn", "trafo") pp.create_transformer(net, 0, 1, std_type="YNyn", parallel=1,tap_pos=0, index=pp.get_free_id(net.trafo)) net.trafo.reset_index() ### add zero sequence for lines net.line["r0_ohm_per_km"] = 0.0848 net.line["x0_ohm_per_km"] = 0.4649556 net.line["c0_nf_per_km"] = 230.6 ### convert loads to asymmertric loads for i in net.load.index: row = net.load.loc[i] phases = [0,0,0] p = i % 3 phases[p] = 1 pp.create_asymmetric_load(net, row['bus'], p_a_mw=row['p_mw']*phases[0], q_a_mvar=row['q_mvar']*phases[0], p_b_mw=row['p_mw']*phases[1], q_b_mvar=row['q_mvar']*phases[1], p_c_mw=row['p_mw']*phases[2], q_c_mvar=row['q_mvar']*phases[2], sn_mva=row['sn_mva']) net.load['p_mw'] = 0 net.load['q_mvar'] = 0 pp.add_zero_impedance_parameters(net) return net
def update_pandapower(self, net: pandapowerNet, name: str): """Update a pandapower model by adding this transformer type. Args: net: a pandapower network model. name: name of this transformer type. """ data = { "sn_mva": self.s_mva, "vn_hv_kv": self.v_high_kv, "vn_lv_kv": self.v_low_kv, "vk_percent": self.vk_percent, "vkr_percent": self.vkr_percent, "pfe_kw": self.pfe_kw, "i0_percent": self.i0_percent, "shift_degree": 0, } pp.create_std_type(net, data, name=name, element="trafo")
def net(): v_base = 110 # 110kV Base Voltage k_va_base = 100 # 100 MVA # I_base = (kVA_base/V_base) * 1e-3 # in kA net = pp.create_empty_network(sn_mva=k_va_base) pp.create_bus(net, vn_kv=v_base, index=1) pp.create_bus(net, vn_kv=v_base, index=5) pp.create_ext_grid(net, bus=1, vm_pu=1.0, s_sc_max_mva=5000, rx_max=0.1, r0x0_max=0.1, x0x_max=1.0) pp.create_std_type(net, {"r0_ohm_per_km": 0.0848, "x0_ohm_per_km": 0.4649556, "c0_nf_per_km": 230.6, "max_i_ka": 0.963, "r_ohm_per_km": 0.0212, "x_ohm_per_km": 0.1162389, "c_nf_per_km": 230}, "example_type") pp.create_line(net, from_bus=1, to_bus=5, length_km=50.0, std_type="example_type") pp.create_asymmetric_load(net, 5, p_a_mw=50, q_a_mvar=50, p_b_mw=10, q_b_mvar=15, p_c_mw=10, q_c_mvar=5) return net
def add_network(net, vector_group): b1 = pp.create_bus(net, 110, zone=vector_group, index=pp.get_free_id(net.bus)) b2 = pp.create_bus(net, 20, zone=vector_group) pp.create_bus(net, 20, in_service=False) b3 = pp.create_bus(net, 20, zone=vector_group) b4 = pp.create_bus(net, 20, zone=vector_group) pp.create_bus(net, 20) pp.create_ext_grid(net, b1, s_sc_max_mva=100, s_sc_min_mva=100, rx_min=0.35, rx_max=0.35) net.ext_grid["r0x0_max"] = 0.4 net.ext_grid["x0x_max"] = 1.0 net.ext_grid["r0x0_min"] = 0.4 net.ext_grid["x0x_min"] = 1.0 pp.create_std_type(net, {"r_ohm_per_km": 0.122, "x_ohm_per_km": 0.112, "c_nf_per_km": 304, "max_i_ka": 0.421, "endtemp_degree": 70.0, "r0_ohm_per_km": 0.244, "x0_ohm_per_km": 0.336, "c0_nf_per_km": 2000}, "unsymmetric_line_type") l1 = pp.create_line(net, b2, b3, length_km=10, std_type="unsymmetric_line_type", index=pp.get_free_id(net.line)+1) l2 = pp.create_line(net, b3, b4, length_km=15, std_type="unsymmetric_line_type") pp.create_line(net, b3, b4, length_km=15, std_type="unsymmetric_line_type", in_service=False) transformer_type = {"i0_percent": 0.071, "pfe_kw": 29, "vkr_percent": 0.282, "sn_mva": 25, "vn_lv_kv": 20.0, "vn_hv_kv": 110.0, "vk_percent": 11.2, "shift_degree": 150, "vector_group": vector_group, "tap_side": "hv", "tap_neutral": 0, "tap_min": -9, "tap_max": 9, "tap_step_degree": 0, "tap_step_percent": 1.5, "tap_phase_shifter": False, "vk0_percent": 5, "vkr0_percent": 0.4, "mag0_percent": 10, "mag0_rx": 0.4, "si0_hv_partial": 0.9} pp.create_std_type(net, transformer_type, vector_group, "trafo") t1 = pp.create_transformer(net, b1, b2, std_type=vector_group, parallel=2, index=pp.get_free_id(net.trafo)+1) pp.create_transformer(net, b1, b2, std_type=vector_group, in_service=False) pp.add_zero_impedance_parameters(net) return l1, l2, t1
def _pp_types_to_csv1(net, export_pp_std_types): """ Ensures that all line, trafo, trafo3w, storage and dcline have a type. Provides DataFrames in net for line, trafo and trafo3w elements considering export_pp_std_types. """ # --- add 'std_type' column to net.dcline and net.storage if missing for elm in ["dcline"]: # 'std_type' will be considered for converter. if "std_type" not in net[elm].columns: if "type" not in net[elm].columns: net[elm]["std_type"] = np.nan else: # if 'std_type' does not exist but 'type', here 'type' is renamed into 'std_type' new_index_dict = {(i): (i if i != "type" else "std_type") for i in net[elm].columns} net[elm].rename(columns=new_index_dict, inplace=True) # --- add new std_types to line, trafo, trafo3w, storage and dcline tables if missing type_params = { "line": [ "r_ohm_per_km", "x_ohm_per_km", "c_nf_per_km", "g_us_per_km", "max_i_ka" ], "trafo": [ "sn_mva", "vn_hv_kv", "vn_lv_kv", "vk_percent", "vkr_percent", "pfe_kw", "i0_percent", "shift_degree" ], "trafo3w": [ "sn_hv_mva", "sn_mv_mva", "sn_lv_mva", "vn_hv_kv", "vn_mv_kv", "vn_lv_kv", "vk_hv_percent", "vk_mv_percent", "vk_lv_percent", "vkr_hv_percent", "vkr_mv_percent", "vkr_lv_percent", "pfe_kw", "i0_percent", "shift_mv_degree", "shift_lv_degree" ], "dcline": ["p_mw", "loss_percent", "loss_mw", "vm_from_pu", "vm_to_pu"] } for elm in type_params.keys(): elms_without_type = net[elm][pd.isnull(net[elm].std_type)] uni_dupl_dict = get_unique_duplicated_dict(elms_without_type, subset=type_params[elm]) for uni, dupl in uni_dupl_dict.items(): new_typename = net[elm].name.loc[uni] + '_type' net[elm].std_type.loc[[uni] + dupl] = new_typename if elm in ["line", "trafo", "trafo3w"]: pp.create_std_type(net, dict(net[elm].loc[uni, type_params[elm]].T), new_typename, element=elm, overwrite=False) # --- determine line, trafo and trafo3w typenames to be converted, # --- considering export_pp_std_types. changes net.std_types dicts into dataframes dummy_net = pp.create_empty_network() pp_elms_with_type = ["line", "trafo", "trafo3w"] for elm in pp_elms_with_type: if export_pp_std_types: typenames2convert = set(net.std_types[elm].keys()) else: pp_typenames = set(dummy_net.std_types[elm].keys()) unused_pp_typenames = pp_typenames - set( net[elm].std_type.unique()) typenames2convert = set( net.std_types[elm].keys()) - unused_pp_typenames net.std_types[elm] = pd.DataFrame( net.std_types[elm]).T.loc[typenames2convert].reset_index() net.std_types[elm].rename(columns={"index": "std_type"}, inplace=True) convert_line_type_acronym(net)
in_service=True) pp.create_load(net, bus=bus4, p_mw=80000, q_mvar=49579.54707224818, name="Load_4") #create lines line_data_12 = { "c_nf_per_km": 616.76, "r_ohm_per_km": 5.33232, "x_ohm_per_km": 26.6616, "max_i_ka": 0.415 } pp.create_std_type(net, line_data_12, "line12", element='line') pp.create_line(net, from_bus=bus1, to_bus=bus2, length_km=1, std_type="line12", name="line_12") line_data_13 = { "c_nf_per_km": 466.63, "r_ohm_per_km": 3.93576, "x_ohm_per_km": 19.6788, "max_i_ka": 0.415 } pp.create_std_type(net, line_data_13, "line13", element='line') pp.create_line(net,
def _create_empty_network_with_transformer(trafotype, V_OS=10., V_US=0.4): """ Creates a Network with transformer and infeeder. The reference bus on the \ high-voltage side is called "Trafostation_OS". The bus on the low-voltage \ side is called "main_busbar". The voltage levels can be set manually and the transformer parameter can \ be set with "ti" """ pd_net = pp.create_empty_network() NFA2X4x70 = { "c_nf_per_km": 0, "r_ohm_per_km": 0.443, "x_ohm_per_km": 0.069, "max_i_ka": 0.270, "type": "ol", "q_mm2": 70 } NAYY4x50 = { "c_nf_per_km": 670, "r_ohm_per_km": 0.6417, "x_ohm_per_km": 0.084823, "max_i_ka": 0.141, "type": "cs", "q_mm2": 50 } NAYY4x150 = { "c_nf_per_km": 830, "r_ohm_per_km": 0.2067, "x_ohm_per_km": 0.08042478, "max_i_ka": 0.275, "type": "cs", "q_mm2": 150 } NAYY4x185 = { "c_nf_per_km": 830, "r_ohm_per_km": 0.165, "x_ohm_per_km": 0.08042478, "max_i_ka": 0.313, "type": "cs", "q_mm2": 185 } NYY4x35 = { "c_nf_per_km": 0, "r_ohm_per_km": 0.5240284, "x_ohm_per_km": 0.08513716, "max_i_ka": 0.156, "type": "cs", "q_mm2": 35 } pp.create_std_type(net=pd_net, data=NFA2X4x70, name="NFA2X 4x70", element="line") pp.create_std_type(net=pd_net, data=NAYY4x50, name="NAYY 4x50", element="line") pp.create_std_type(net=pd_net, data=NAYY4x150, name="NAYY 4x150", element="line") pp.create_std_type(net=pd_net, data=NAYY4x185, name="NAYY 4x185", element="line") pp.create_std_type(net=pd_net, data=NYY4x35, name="NYY 4x35", element="line") T100kVA = { "sn_kva": 100, "vn_hv_kv": 10, "vn_lv_kv": 0.4, "vsc_percent": 4, "vscr_percent": 1.2, "pfe_kw": 0.45, "i0_percent": 0.25, "shift_degree": 150, "vector_group": "Dyn5" } T160kVA = { "sn_kva": 160, "vn_hv_kv": 10, "vn_lv_kv": 0.4, "vsc_percent": 4, "vscr_percent": 1.2, "pfe_kw": 0.38, "i0_percent": 0.26, "shift_degree": 150, "vector_group": "Dyn5" } pp.create_std_type(net=pd_net, data=T100kVA, name="0.1 MVA 10/0.4 kV", element="trafo") pp.create_std_type(net=pd_net, data=T160kVA, name="0.16 MVA 10/0.4 kV", element="trafo") busnr1 = pp.create_bus(pd_net, name="Trafostation_OS", vn_kv=V_OS) pp.create_ext_grid(pd_net, bus=busnr1) main_busbar_nr = pp.create_bus(pd_net, name="main_busbar", vn_kv=V_US, type="b") pp.create_transformer(pd_net, hv_bus=busnr1, lv_bus=main_busbar_nr, std_type=trafotype, name="trafo 1") return pd_net, main_busbar_nr
## Read selected excel file xl = pd.ExcelFile(Path(str(os.getcwd()) + '/' + file)) ##Parse specified sheet(s) into a DataFrame. Equivalent to read_excel MVNetwork = xl.parse('Linies') x_ohm_per_km = MVNetwork['Reactancia_ohm_km'][0] c_uf_per_km = MVNetwork['Capacitat_uF_km'][0] r_ohm_per_km = MVNetwork['Resistencia_ohm_km'][0] line_data = { "c_nf_per_km": c_uf_per_km * 1000, "r_ohm_per_km": r_ohm_per_km, "x_ohm_per_km": x_ohm_per_km, "max_i_ka": 0.415 } pp.create_std_type(net, line_data, "line_ESTABANELL", element='line') ############################################################################## ################################ CREATE BUSES ################################ MVNetworkbusses = xl.parse('Busses') for i in MVNetworkbusses['name']: pp.create_bus(net, vn_kv=20.5, name=i, max_vm_pu=1.1, min_vm_pu=0.9) MVNetworkbussesTrafos = xl.parse('Trafos') for i in range(len(MVNetworkbussesTrafos['name'])): pp.create_bus(net, vn_kv=MVNetworkbussesTrafos['vn_lv_kv'][i], name=MVNetworkbussesTrafos['name'][i], max_vm_pu=1.1, min_vm_pu=0.9)
def create_network(): network = pp.create_empty_network() sn_vn_transformer_data = { "sn_mva": 1, "vn_hv_kv": 20, "vn_lv_kv": 0.4, "vk_percent": 5, "vkr_percent": 1.1, "pfe_kw": 1.95, "i0_percent": 0.27, "shift_degree": 0 } pp.create_std_type(network, sn_vn_transformer_data, "SN/NN 1MVA", element='trafo') slack_bus = pp.create_bus(network, vn_kv=110, name="Slack Bus") busNodes = [] lowVoltageBusNodes = [] pp.create_ext_grid(network, bus=slack_bus, vm_pu=1.01, name="Grid Connection") mediumVoltageBusNode = pp.create_bus(network, vn_kv=20, name="MV slack side") pp.create_transformer(network, hv_bus=slack_bus, lv_bus=mediumVoltageBusNode, std_type="40 MVA 110/20 kV", name="VN/SN Transformer") for i in range(0, 100): busNodes.append( pp.create_bus(network, vn_kv=20, name="Bus_" + str(i + 1))) lowVoltageBusNodes.append( pp.create_bus(network, vn_kv=0.4, name="LowVoltageBus_" + str(i + 1))) pp.create_load(network, bus=lowVoltageBusNodes[i], p_mw=0.14, q_mvar=0.05, name="Load_" + str(i + 1)) pp.create_transformer(network, hv_bus=busNodes[i], lv_bus=lowVoltageBusNodes[i], std_type="SN/NN 1MVA", name="Transformer_" + str(i + 1)) pp.create_line(network, from_bus=mediumVoltageBusNode, to_bus=busNodes[0], length_km=0.2, name="Line_0", std_type="NA2XS2Y 1x150 RM/25 12/20 kV") for i in range(0, 99): pp.create_line(network, from_bus=busNodes[i], to_bus=busNodes[i + 1], length_km=0.6, name="Line_" + str(i + 1), std_type="NA2XS2Y 1x150 RM/25 12/20 kV") # Add capacitors with regulating switches pp.create_bus(network, vn_kv=20, name="Bus_Cap1") pp.create_switch(network, pp.get_element_index(network, "bus", 'Bus_13'), pp.get_element_index(network, "bus", 'Bus_Cap1'), et="b", closed=False, type="LBS", name="CapSwitch1") pp.create_shunt_as_capacitor(network, pp.get_element_index(network, "bus", 'Bus_Cap1'), 0.125, 0, name="Cap1") pp.create_bus(network, vn_kv=20, name="Bus_Cap2") pp.create_switch(network, pp.get_element_index(network, "bus", 'Bus_39'), pp.get_element_index(network, "bus", 'Bus_Cap2'), et="b", closed=False, type="LBS", name="CapSwitch2") pp.create_shunt_as_capacitor(network, pp.get_element_index(network, "bus", 'Bus_Cap2'), 0.8, 0, name="Cap2") pp.create_bus(network, vn_kv=20, name="Bus_Cap3") pp.create_switch(network, pp.get_element_index(network, "bus", 'Bus_85'), pp.get_element_index(network, "bus", 'Bus_Cap3'), et="b", closed=False, type="LBS", name="CapSwitch3") pp.create_shunt_as_capacitor(network, pp.get_element_index(network, "bus", 'Bus_Cap3'), 0.125, 0, name="Cap3") pp.create_bus(network, vn_kv=20, name="Bus_Cap4") pp.create_switch(network, pp.get_element_index(network, "bus", 'Bus_28'), pp.get_element_index(network, "bus", 'Bus_Cap4'), et="b", closed=False, type="LBS", name="CapSwitch4") pp.create_shunt_as_capacitor(network, pp.get_element_index(network, "bus", 'Bus_Cap4'), 3, 0, name="Cap4") pp.create_bus(network, vn_kv=20, name="Bus_Cap5") pp.create_switch(network, pp.get_element_index(network, "bus", 'Bus_59'), pp.get_element_index(network, "bus", 'Bus_Cap5'), et="b", closed=False, type="LBS", name="CapSwitch5") pp.create_shunt_as_capacitor(network, pp.get_element_index(network, "bus", 'Bus_Cap5'), 0.25, 0, name="Cap5") pp.create_bus(network, vn_kv=20, name="Bus_Cap6") pp.create_switch(network, pp.get_element_index(network, "bus", 'Bus_70'), pp.get_element_index(network, "bus", 'Bus_Cap6'), et="b", closed=False, type="LBS", name="CapSwitch6") pp.create_shunt_as_capacitor(network, pp.get_element_index(network, "bus", 'Bus_Cap6'), 0.8, 0, name="Cap6") pp.create_bus(network, vn_kv=20, name="Bus_Cap7") pp.create_switch(network, pp.get_element_index(network, "bus", 'Bus_48'), pp.get_element_index(network, "bus", 'Bus_Cap7'), et="b", closed=False, type="LBS", name="CapSwitch7") pp.create_shunt_as_capacitor(network, pp.get_element_index(network, "bus", 'Bus_Cap7'), 0.25, 0, name="Cap7") pp.create_bus(network, vn_kv=20, name="Bus_Cap8") pp.create_switch(network, pp.get_element_index(network, "bus", 'Bus_95'), pp.get_element_index(network, "bus", 'Bus_Cap8'), et="b", closed=False, type="LBS", name="CapSwitch8") pp.create_shunt_as_capacitor(network, pp.get_element_index(network, "bus", 'Bus_Cap8'), 0.25, 0, name="Cap8") return network
def create_synthetic_voltage_control_lv_network(network_class="rural_1"): """ This function creates a LV network from M. Lindner, C. Aigner, R. Witzmann, F. Wirtz, \ I. Berber, M. Gödde and R. Frings. "Aktuelle Musternetze zur Untersuchung von \ Spannungsproblemen in der Niederspannung". 14. Symposium Energieinnovation TU Graz. 2014 which are representative, synthetic grids for voltage control analysis. According to Lindner \ the household loads are 5.1 kW and the special loads are 7.9 kW. The user is suggested to \ assume load distribution and load profile generation. OPTIONAL: **network_class** (str, 'rural_1') - specify which type of network will be created. Must \ be in ['rural_1', 'rural_2', 'village_1', 'village_2', 'suburb_1']. OUTPUT: **net** - returns the required synthetic voltage control lv network EXAMPLE: import pandapower.networks as nw net = nw.create_synthetic_voltage_control_lv_network() """ # process network choosing input data if network_class not in [ 'rural_1', 'rural_2', 'village_1', 'village_2', 'suburb_1' ]: raise ValueError( "network_class is not in ['rural_1', 'rural_2', 'village_1', 'village_2'," " 'suburb_1']") n_feeder = { 'rural_1': [1, 4, 7], 'rural_2': [1, 3, 3, 1], 'village_1': [9, 16, 5, 9], 'village_2': [9, 12, 5, 10], 'suburb_1': [9, 17, 5, 13, 8, 1, 9, 17, 5, 13, 4] } l_lines = { 'rural_1': [0.26, 0.133, 0.068], 'rural_2': [3e-3, 0.076, 0.076, 0.076], 'village_1': [0.053, 0.034, 0.08, 0.04], 'village_2': [0.021, 0.033, 0.023, 0.052], 'suburb_1': [ 0.041, 0.017, 0.056, 0.018, 0.035, 0.103, 0.046, 0.019, 0.065, 0.026, 0.031 ] } line_types = { 'rural_1': ['NAYY 4x150 SE'] * 2 + [('NAYY 4x150 SE', 'NAYY 4x120 SE')], 'rural_2': ['NAYY 4x35'] + ['NF 4x70'] * 3, 'village_1': ['NAYY 4x150 SE'] * 4, 'village_2': [('NAYY 4x70', 'NF 4x50'), ('NAYY 4x120 SE', 'NF 4x95'), ('NAYY 4x95', 'NF 4x70'), ('NAYY 4x150 SE', 'NF 4x120')], 'suburb_1': [('NAYY 4x150 SE', 'NAYY 4x120 SE')] * 3 + [('NAYY 4x120 SE', 'NAYY 4x95'), 'NAYY 4x150 SE', 'NAYY 4x95'] + ['NAYY 4x150 SE'] * 5 } line_type_change_at = { 'rural_1': [nan] * 2 + [5], 'rural_2': [nan] * 4, 'village_1': [nan] * 4, 'village_2': [8, 3, 4, 5], 'suburb_1': [5, 10, 3, 6] + [nan] * 7 } trafo_type = { 'rural_1': '0.16 MVA 20/0.4 kV vc', 'rural_2': '0.25 MVA 20/0.4 kV vc', 'village_1': '0.25 MVA 20/0.4 kV vc', 'village_2': '0.4 MVA 20/0.4 kV vc', 'suburb_1': '0.4 MVA 20/0.4 kV vc' } house_connection_length = { 'rural_1': 29e-3, 'rural_2': 4e-3, 'village_1': 21e-3, 'village_2': 17e-3, 'suburb_1': 18e-3 } house_connection_type = { 'rural_1': 'NAYY 4x50 SE', 'rural_2': 'NAYY 4x35', 'village_1': 'NAYY 4x50 SE', 'village_2': 'NAYY 4x35', 'suburb_1': 'NAYY 4x35' } # create network net = pp.create_empty_network( name='synthetic_voltage_control_lv_network: ' + network_class) # create std_types # cable data (r, x, i_max) from www.faberkabel.de if network_class in ["rural_2", "village_2", "suburb_1"]: pp.create_std_type(net, { "c_nf_per_km": 202, "r_ohm_per_km": 0.869, "x_ohm_per_km": 0.085, "max_i_ka": 0.123, "type": "cs", "q_mm2": 35 }, name="NAYY 4x35", element="line") if network_class != "suburb_1": pp.create_std_type(net, { "c_nf_per_km": 17.8, "r_ohm_per_km": 0.439, "x_ohm_per_km": 0.295, "max_i_ka": 0.28, "type": "ol", "q_mm2": 70 }, name="NF 4x70", element="line") if network_class == "village_2": pp.create_std_type(net, { "c_nf_per_km": 230, "r_ohm_per_km": 0.443, "x_ohm_per_km": 0.0823, "max_i_ka": 0.179, "type": "cs", "q_mm2": 70 }, name="NAYY 4x70", element="line") data = net.std_types['line']['48-AL1/8-ST1A 0.4'] data['q_mm2'] = 50 pp.create_std_type(net, data, name="NF 4x50", element="line") data = net.std_types['line']['94-AL1/15-ST1A 0.4'] data['q_mm2'] = 95 pp.create_std_type(net, data, name="NF 4x95", element="line") pp.create_std_type(net, { "c_nf_per_km": 16.2, "r_ohm_per_km": 0.274, "x_ohm_per_km": 0.31, "max_i_ka": 0.4, "type": "ol", "q_mm2": 120 }, name="NF 4x120", element="line") if network_class != "rural_2": pp.create_std_type(net, { "c_nf_per_km": 240, "r_ohm_per_km": 0.32, "x_ohm_per_km": 0.082, "max_i_ka": 0.215, "type": "cs", "q_mm2": 95 }, name="NAYY 4x95", element="line") # trafos if network_class == "rural_1": data = net.std_types['trafo']['0.25 MVA 20/0.4 kV'] data['sn_kva'] = 160 data['pfe_kw'] = 0.62 data['i0_percent'] = 0.31 data['vscr_percent'] = data['vscr_percent'] * 4 / data['vsc_percent'] data['vsc_percent'] = 4 pp.create_std_type(net, data, name=trafo_type[network_class], element="trafo") elif network_class in ["rural_2", "village_1"]: data = net.std_types['trafo']['0.25 MVA 20/0.4 kV'] data['vscr_percent'] = data['vscr_percent'] * 4 / data['vsc_percent'] data['vsc_percent'] = 4 pp.create_std_type(net, data, name=trafo_type[network_class], element="trafo") elif network_class in ["suburb_1", "village_2"]: data = net.std_types['trafo']['0.4 MVA 20/0.4 kV'] data['vscr_percent'] = data['vscr_percent'] * 4 / data['vsc_percent'] data['vsc_percent'] = 4 pp.create_std_type(net, data, name=trafo_type[network_class], element="trafo") # create mv connection mv_bus = pp.create_bus(net, 20, name='mv bus') bb = pp.create_bus(net, 0.4, name='busbar') pp.create_ext_grid(net, mv_bus) pp.create_transformer(net, mv_bus, bb, std_type=trafo_type[network_class]) # create lv network idx_feeder = range(len(n_feeder[network_class])) lv_buses = {} house_buses = {} for i in idx_feeder: # buses lv_buses[i] = pp.create_buses(net, n_feeder[network_class][i], 0.4, zone='Feeder' + str(i + 1), type='m') house_buses[i] = pp.create_buses(net, n_feeder[network_class][i], 0.4, zone='Feeder' + str(i + 1), type='n') # lines lines = pd.DataFrame() lines['from_bus'] = append(bb, append(lv_buses[i][:-1], lv_buses[i])) lines['to_bus'] = append(lv_buses[i], house_buses[i]) if line_type_change_at[network_class][i] is nan: lines['std_type'] = [line_types[network_class][i]]*n_feeder[network_class][i] + \ [house_connection_type[network_class]]*n_feeder[network_class][i] else: lines['std_type'] = \ [line_types[network_class][i][0]]*line_type_change_at[network_class][i] + \ [line_types[network_class][i][1]]*(n_feeder[network_class][i] - line_type_change_at[network_class][i]) + \ [house_connection_type[network_class]]*n_feeder[network_class][i] lines['length'] = [l_lines[network_class][i]]*n_feeder[network_class][i] + \ [house_connection_length[network_class]]*n_feeder[network_class][i] for _, lines in lines.iterrows(): pp.create_line(net, lines.from_bus, lines.to_bus, length_km=lines.length, std_type=lines.std_type) # load for i in house_buses[i]: pp.create_load(net, i, p_kw=5.1) # direct loads and DEA if network_class == "rural_1": special_load = [(2, 4), (3, 2)] DER = [(2, 1, 6.9), (2, 2, 15.3), (2, 4, 29.6), (3, 4, 15.8), (3, 5, 25.3)] elif network_class == "rural_2": special_load = [(1, 1), (2, 3), (3, 2)] DER = [(1, 1, 29.6), (2, 3, 25.4), (3, 2, 25), (3, 3, 10)] elif network_class == "village_1": special_load = [(2, 9), (2, 12), (2, 14), (2, 16), (3, 5), (4, 3), (4, 6), (4, 8)] DER = [(1, 6, 29.8), (1, 8, 22.8), (2, 3, 7.9), (2, 5, 4.2), (2, 11, 16.7), (2, 15, 7.3), (3, 1, 31.9), (3, 3, 17.4), (3, 5, 15), (4, 1, 8.8), (4, 3, 19.6), (4, 5, 9.3), (4, 6, 13)] elif network_class == "village_2": special_load = [] DER = [(1, 6, 29.8), (1, 2, 16), (1, 3, 4.6), (1, 6, 19), (1, 8, 29), (2, 1, 16), (2, 2, 5.2), (2, 3, 19), (2, 5, 12), (2, 10, 10), (2, 12, 8), (3, 1, 12.63), (3, 2, 30), (4, 3, 10), (4, 4, 33), (4, 10, 8)] elif network_class == "suburb_1": special_load = [(6, 1), (1, 4), (2, 17), (3, 5), (4, 5), (6, 1), (7, 7), (8, 17)] DER = [(1, 1, 9.36), (1, 2, 79.12), (7, 7, 30), (8, 7, 18.47), (8, 15, 9.54), (10, 10, 14.4)] for i in special_load: pp.create_load(net, lv_buses[i[0] - 1][i[1] - 1], p_kw=7.9) for i in DER: pp.create_sgen(net, house_buses[i[0] - 1][i[1] - 1], p_kw=-i[2]) # set bus geo data bus_geo = { "rural_1": '{"x":{"0":0.0,"1":0.0,"2":-1.6666666667,"3":-1.6666666667,"4":-0.1666666667,"5":-0.6666666667,"6":-1.1666666667,"7":-1.6666666667,"8":0.3333333333,"9":-0.1666666667,"10":-0.6666666667,"11":-1.6666666667,"12":1.8333333333,"13":1.3333333333,"14":0.8333333333,"15":0.3333333333,"16":-0.1666666667,"17":-0.6666666667,"18":-1.1666666667,"19":2.3333333333,"20":1.8333333333,"21":1.3333333333,"22":0.8333333333,"23":0.3333333333,"24":-0.1666666667,"25":-1.1666666667},"y":{"0":0.0,"1":1.0,"2":2.0,"3":3.0,"4":2.0,"5":3.0,"6":4.0,"7":5.0,"8":3.0,"9":4.0,"10":5.0,"11":6.0,"12":2.0,"13":3.0,"14":4.0,"15":5.0,"16":6.0,"17":7.0,"18":8.0,"19":3.0,"20":4.0,"21":5.0,"22":6.0,"23":7.0,"24":8.0,"25":9.0}}', "rural_2": '{"x":{"0":0.0,"1":0.0,"2":-2.5,"3":-2.5,"4":-1.0,"5":-1.5,"6":-2.0,"7":-0.5,"8":-1.0,"9":-2.0,"10":1.0,"11":0.5,"12":0.0,"13":1.5,"14":1.0,"15":0.0,"16":2.5,"17":2.5},"y":{"0":0.0,"1":1.0,"2":2.0,"3":3.0,"4":2.0,"5":3.0,"6":4.0,"7":3.0,"8":4.0,"9":5.0,"10":2.0,"11":3.0,"12":4.0,"13":3.0,"14":4.0,"15":5.0,"16":2.0,"17":3.0}}', "village_1": '{"x":{"0":0.0,"1":0.0,"2":-3.0,"3":-3.5,"4":-4.0,"5":-4.5,"6":-5.0,"7":-5.5,"8":-6.0,"9":-6.5,"10":-7.0,"11":-2.5,"12":-3.0,"13":-3.5,"14":-4.0,"15":-4.5,"16":-5.0,"17":-5.5,"18":-6.0,"19":-7.0,"20":-1.0,"21":-1.5,"22":-2.0,"23":-2.5,"24":-3.0,"25":-3.5,"26":-4.0,"27":-4.5,"28":-5.0,"29":-5.5,"30":-6.0,"31":-6.5,"32":-7.0,"33":-7.5,"34":-8.0,"35":-8.5,"36":-0.5,"37":-1.0,"38":-1.5,"39":-2.0,"40":-2.5,"41":-3.0,"42":-3.5,"43":-4.0,"44":-4.5,"45":-5.0,"46":-5.5,"47":-6.0,"48":-6.5,"49":-7.0,"50":-7.5,"51":-8.5,"52":1.0,"53":0.5,"54":0.0,"55":-0.5,"56":-1.0,"57":1.5,"58":1.0,"59":0.5,"60":0.0,"61":-1.0,"62":3.0,"63":2.5,"64":2.0,"65":1.5,"66":1.0,"67":0.5,"68":0.0,"69":-0.5,"70":-1.0,"71":3.5,"72":3.0,"73":2.5,"74":2.0,"75":1.5,"76":1.0,"77":0.5,"78":0.0,"79":-1.0},"y":{"0":0.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":3.0,"12":4.0,"13":5.0,"14":6.0,"15":7.0,"16":8.0,"17":9.0,"18":10.0,"19":11.0,"20":2.0,"21":3.0,"22":4.0,"23":5.0,"24":6.0,"25":7.0,"26":8.0,"27":9.0,"28":10.0,"29":11.0,"30":12.0,"31":13.0,"32":14.0,"33":15.0,"34":16.0,"35":17.0,"36":3.0,"37":4.0,"38":5.0,"39":6.0,"40":7.0,"41":8.0,"42":9.0,"43":10.0,"44":11.0,"45":12.0,"46":13.0,"47":14.0,"48":15.0,"49":16.0,"50":17.0,"51":18.0,"52":2.0,"53":3.0,"54":4.0,"55":5.0,"56":6.0,"57":3.0,"58":4.0,"59":5.0,"60":6.0,"61":7.0,"62":2.0,"63":3.0,"64":4.0,"65":5.0,"66":6.0,"67":7.0,"68":8.0,"69":9.0,"70":10.0,"71":3.0,"72":4.0,"73":5.0,"74":6.0,"75":7.0,"76":8.0,"77":9.0,"78":10.0,"79":11.0}}', "village_2": '{"x":{"0":0.0,"1":0.0,"2":-3.0,"3":-3.5,"4":-4.0,"5":-4.5,"6":-5.0,"7":-5.5,"8":-6.0,"9":-6.5,"10":-7.0,"11":-2.5,"12":-3.0,"13":-3.5,"14":-4.0,"15":-4.5,"16":-5.0,"17":-5.5,"18":-6.0,"19":-7.0,"20":-1.0,"21":-1.5,"22":-2.0,"23":-2.5,"24":-3.0,"25":-3.5,"26":-4.0,"27":-4.5,"28":-5.0,"29":-5.5,"30":-6.0,"31":-6.5,"32":-0.5,"33":-1.0,"34":-1.5,"35":-2.0,"36":-2.5,"37":-3.0,"38":-3.5,"39":-4.0,"40":-4.5,"41":-5.0,"42":-5.5,"43":-6.5,"44":1.0,"45":0.5,"46":0.0,"47":-0.5,"48":-1.0,"49":1.5,"50":1.0,"51":0.5,"52":0.0,"53":-1.0,"54":3.0,"55":2.5,"56":2.0,"57":1.5,"58":1.0,"59":0.5,"60":0.0,"61":-0.5,"62":-1.0,"63":-1.5,"64":3.5,"65":3.0,"66":2.5,"67":2.0,"68":1.5,"69":1.0,"70":0.5,"71":0.0,"72":-0.5,"73":-1.5},"y":{"0":0.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":3.0,"12":4.0,"13":5.0,"14":6.0,"15":7.0,"16":8.0,"17":9.0,"18":10.0,"19":11.0,"20":2.0,"21":3.0,"22":4.0,"23":5.0,"24":6.0,"25":7.0,"26":8.0,"27":9.0,"28":10.0,"29":11.0,"30":12.0,"31":13.0,"32":3.0,"33":4.0,"34":5.0,"35":6.0,"36":7.0,"37":8.0,"38":9.0,"39":10.0,"40":11.0,"41":12.0,"42":13.0,"43":14.0,"44":2.0,"45":3.0,"46":4.0,"47":5.0,"48":6.0,"49":3.0,"50":4.0,"51":5.0,"52":6.0,"53":7.0,"54":2.0,"55":3.0,"56":4.0,"57":5.0,"58":6.0,"59":7.0,"60":8.0,"61":9.0,"62":10.0,"63":11.0,"64":3.0,"65":4.0,"66":5.0,"67":6.0,"68":7.0,"69":8.0,"70":9.0,"71":10.0,"72":11.0,"73":12.0}}', "suburb_1": '{"x":{"0":0.0,"1":0.0,"2":-9.5,"3":-10.0,"4":-10.5,"5":-11.0,"6":-11.5,"7":-12.0,"8":-12.5,"9":-13.0,"10":-13.5,"11":-9.0,"12":-9.5,"13":-10.0,"14":-10.5,"15":-11.0,"16":-11.5,"17":-12.0,"18":-12.5,"19":-13.5,"20":-7.5,"21":-8.0,"22":-8.5,"23":-9.0,"24":-9.5,"25":-10.0,"26":-10.5,"27":-11.0,"28":-11.5,"29":-12.0,"30":-12.5,"31":-13.0,"32":-13.5,"33":-14.0,"34":-14.5,"35":-15.0,"36":-15.5,"37":-7.0,"38":-7.5,"39":-8.0,"40":-8.5,"41":-9.0,"42":-9.5,"43":-10.0,"44":-10.5,"45":-11.0,"46":-11.5,"47":-12.0,"48":-12.5,"49":-13.0,"50":-13.5,"51":-14.0,"52":-14.5,"53":-15.5,"54":-5.5,"55":-6.0,"56":-6.5,"57":-7.0,"58":-7.5,"59":-5.0,"60":-5.5,"61":-6.0,"62":-6.5,"63":-7.5,"64":-3.5,"65":-4.0,"66":-4.5,"67":-5.0,"68":-5.5,"69":-6.0,"70":-6.5,"71":-7.0,"72":-7.5,"73":-8.0,"74":-8.5,"75":-9.0,"76":-9.5,"77":-3.0,"78":-3.5,"79":-4.0,"80":-4.5,"81":-5.0,"82":-5.5,"83":-6.0,"84":-6.5,"85":-7.0,"86":-7.5,"87":-8.0,"88":-8.5,"89":-9.5,"90":-1.5,"91":-2.0,"92":-2.5,"93":-3.0,"94":-3.5,"95":-4.0,"96":-4.5,"97":-5.0,"98":-1.0,"99":-1.5,"100":-2.0,"101":-2.5,"102":-3.0,"103":-3.5,"104":-4.0,"105":-5.0,"106":0.0,"107":0.0,"108":1.5,"109":1.0,"110":0.5,"111":0.0,"112":-0.5,"113":-1.0,"114":-1.5,"115":-2.0,"116":-2.5,"117":2.0,"118":1.5,"119":1.0,"120":0.5,"121":0.0,"122":-0.5,"123":-1.0,"124":-1.5,"125":-2.5,"126":3.5,"127":3.0,"128":2.5,"129":2.0,"130":1.5,"131":1.0,"132":0.5,"133":0.0,"134":-0.5,"135":-1.0,"136":-1.5,"137":-2.0,"138":-2.5,"139":-3.0,"140":-3.5,"141":-4.0,"142":-4.5,"143":4.0,"144":3.5,"145":3.0,"146":2.5,"147":2.0,"148":1.5,"149":1.0,"150":0.5,"151":0.0,"152":-0.5,"153":-1.0,"154":-1.5,"155":-2.0,"156":-2.5,"157":-3.0,"158":-3.5,"159":-4.5,"160":5.5,"161":5.0,"162":4.5,"163":4.0,"164":3.5,"165":6.0,"166":5.5,"167":5.0,"168":4.5,"169":3.5,"170":7.5,"171":7.0,"172":6.5,"173":6.0,"174":5.5,"175":5.0,"176":4.5,"177":4.0,"178":3.5,"179":3.0,"180":2.5,"181":2.0,"182":1.5,"183":8.0,"184":7.5,"185":7.0,"186":6.5,"187":6.0,"188":5.5,"189":5.0,"190":4.5,"191":4.0,"192":3.5,"193":3.0,"194":2.5,"195":1.5,"196":9.5,"197":9.0,"198":8.5,"199":8.0,"200":10.0,"201":9.5,"202":9.0,"203":8.0},"y":{"0":0.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":3.0,"12":4.0,"13":5.0,"14":6.0,"15":7.0,"16":8.0,"17":9.0,"18":10.0,"19":11.0,"20":2.0,"21":3.0,"22":4.0,"23":5.0,"24":6.0,"25":7.0,"26":8.0,"27":9.0,"28":10.0,"29":11.0,"30":12.0,"31":13.0,"32":14.0,"33":15.0,"34":16.0,"35":17.0,"36":18.0,"37":3.0,"38":4.0,"39":5.0,"40":6.0,"41":7.0,"42":8.0,"43":9.0,"44":10.0,"45":11.0,"46":12.0,"47":13.0,"48":14.0,"49":15.0,"50":16.0,"51":17.0,"52":18.0,"53":19.0,"54":2.0,"55":3.0,"56":4.0,"57":5.0,"58":6.0,"59":3.0,"60":4.0,"61":5.0,"62":6.0,"63":7.0,"64":2.0,"65":3.0,"66":4.0,"67":5.0,"68":6.0,"69":7.0,"70":8.0,"71":9.0,"72":10.0,"73":11.0,"74":12.0,"75":13.0,"76":14.0,"77":3.0,"78":4.0,"79":5.0,"80":6.0,"81":7.0,"82":8.0,"83":9.0,"84":10.0,"85":11.0,"86":12.0,"87":13.0,"88":14.0,"89":15.0,"90":2.0,"91":3.0,"92":4.0,"93":5.0,"94":6.0,"95":7.0,"96":8.0,"97":9.0,"98":3.0,"99":4.0,"100":5.0,"101":6.0,"102":7.0,"103":8.0,"104":9.0,"105":10.0,"106":2.0,"107":3.0,"108":2.0,"109":3.0,"110":4.0,"111":5.0,"112":6.0,"113":7.0,"114":8.0,"115":9.0,"116":10.0,"117":3.0,"118":4.0,"119":5.0,"120":6.0,"121":7.0,"122":8.0,"123":9.0,"124":10.0,"125":11.0,"126":2.0,"127":3.0,"128":4.0,"129":5.0,"130":6.0,"131":7.0,"132":8.0,"133":9.0,"134":10.0,"135":11.0,"136":12.0,"137":13.0,"138":14.0,"139":15.0,"140":16.0,"141":17.0,"142":18.0,"143":3.0,"144":4.0,"145":5.0,"146":6.0,"147":7.0,"148":8.0,"149":9.0,"150":10.0,"151":11.0,"152":12.0,"153":13.0,"154":14.0,"155":15.0,"156":16.0,"157":17.0,"158":18.0,"159":19.0,"160":2.0,"161":3.0,"162":4.0,"163":5.0,"164":6.0,"165":3.0,"166":4.0,"167":5.0,"168":6.0,"169":7.0,"170":2.0,"171":3.0,"172":4.0,"173":5.0,"174":6.0,"175":7.0,"176":8.0,"177":9.0,"178":10.0,"179":11.0,"180":12.0,"181":13.0,"182":14.0,"183":3.0,"184":4.0,"185":5.0,"186":6.0,"187":7.0,"188":8.0,"189":9.0,"190":10.0,"191":11.0,"192":12.0,"193":13.0,"194":14.0,"195":15.0,"196":2.0,"197":3.0,"198":4.0,"199":5.0,"200":3.0,"201":4.0,"202":5.0,"203":6.0}}' } net.bus_geodata = pd.read_json(bus_geo[network_class]) # Match bus.index net.bus_geodata = net.bus_geodata.loc[net.bus.index] return net
def case34_3ph(): """ Create the IEEE 34 bus from IEEE PES Test Feeders: "https://site.ieee.org/pes-testfeeders/resources/”. OUTPUT: **net** - The pandapower format network. """ net = pp.create_empty_network() # Linedata # CF-300 line_data = { 'c_nf_per_km': 3.8250977, 'r_ohm_per_km': 0.69599766, 'x_ohm_per_km': 0.5177677, 'c0_nf_per_km': 1.86976748, 'r0_ohm_per_km': 1.08727498, 'x0_ohm_per_km': 1.47374703, 'max_i_ka': 0.23, 'type': 'ol' } pp.create_std_type(net, line_data, name='CF-300', element='line') # CF-301 line_data = { 'c_nf_per_km': 3.66884364, 'r_ohm_per_km': 1.05015841, 'x_ohm_per_km': 0.52265586, 'c0_nf_per_km': 1.82231544, 'r0_ohm_per_km': 1.48350255, 'x0_ohm_per_km': 1.60203942, 'max_i_ka': 0.18, 'type': 'ol' } pp.create_std_type(net, line_data, name='CF-301', element='line') # CF-302 line_data = { 'c_nf_per_km': 0.8751182, 'r_ohm_per_km': 0.5798427, 'x_ohm_per_km': 0.30768221, 'c0_nf_per_km': 0.8751182, 'r0_ohm_per_km': 0.5798427, 'x0_ohm_per_km': 0.30768221, 'max_i_ka': 0.14, 'type': 'ol' } pp.create_std_type(net, line_data, name='CF-302', element='line') # CF-303 line_data = { 'c_nf_per_km': 0.8751182, 'r_ohm_per_km': 0.5798427, 'x_ohm_per_km': 0.30768221, 'c0_nf_per_km': 0.8751182, 'r0_ohm_per_km': 0.5798427, 'x0_ohm_per_km': 0.30768221, 'max_i_ka': 0.14, 'type': 'ol' } pp.create_std_type(net, line_data, name='CF-303', element='line') # CF-304 line_data = { 'c_nf_per_km': 0.90382554, 'r_ohm_per_km': 0.39802955, 'x_ohm_per_km': 0.29436416, 'c0_nf_per_km': 0.90382554, 'r0_ohm_per_km': 0.39802955, 'x0_ohm_per_km': 0.29436416, 'max_i_ka': 0.18, 'type': 'ol' } pp.create_std_type(net, line_data, name='CF-304', element='line') # Busses bus0 = pp.create_bus(net, name='Bus 0', vn_kv=24.9, type='n', zone='34_BUS') bus_800 = pp.create_bus(net, name='Bus 800', vn_kv=24.9, type='n', zone='34_BUS') bus_802 = pp.create_bus(net, name='Bus 802', vn_kv=24.9, type='n', zone='34_BUS') bus_806 = pp.create_bus(net, name='Bus 806', vn_kv=24.9, type='n', zone='34_BUS') bus_808 = pp.create_bus(net, name='Bus 808', vn_kv=24.9, type='n', zone='34_BUS') bus_810 = pp.create_bus(net, name='Bus 810', vn_kv=24.9, type='n', zone='34_BUS') bus_812 = pp.create_bus(net, name='Bus 812', vn_kv=24.9, type='n', zone='34_BUS') bus_814 = pp.create_bus(net, name='Bus 814', vn_kv=24.9, type='n', zone='34_BUS') bus_850 = pp.create_bus(net, name='Bus 850', vn_kv=24.9, type='n', zone='34_BUS') bus_816 = pp.create_bus(net, name='Bus 816', vn_kv=24.9, type='n', zone='34_BUS') bus_818 = pp.create_bus(net, name='Bus 818', vn_kv=24.9, type='n', zone='34_BUS') bus_820 = pp.create_bus(net, name='Bus 820', vn_kv=24.9, type='n', zone='34_BUS') bus_822 = pp.create_bus(net, name='Bus 822', vn_kv=24.9, type='n', zone='34_BUS') bus_824 = pp.create_bus(net, name='Bus 824', vn_kv=24.9, type='n', zone='34_BUS') bus_826 = pp.create_bus(net, name='Bus 826', vn_kv=24.9, type='n', zone='34_BUS') bus_828 = pp.create_bus(net, name='Bus 828', vn_kv=24.9, type='n', zone='34_BUS') bus_830 = pp.create_bus(net, name='Bus 830', vn_kv=24.9, type='n', zone='34_BUS') bus_854 = pp.create_bus(net, name='Bus 854', vn_kv=24.9, type='n', zone='34_BUS') bus_852 = pp.create_bus(net, name='Bus 852', vn_kv=24.9, type='n', zone='34_BUS') bus_832 = pp.create_bus(net, name='Bus 832', vn_kv=24.9, type='n', zone='34_BUS') bus_858 = pp.create_bus(net, name='Bus 858', vn_kv=24.9, type='n', zone='34_BUS') bus_834 = pp.create_bus(net, name='Bus 834', vn_kv=24.9, type='n', zone='34_BUS') bus_842 = pp.create_bus(net, name='Bus 842', vn_kv=24.9, type='n', zone='34_BUS') bus_844 = pp.create_bus(net, name='Bus 844', vn_kv=24.9, type='n', zone='34_BUS') bus_846 = pp.create_bus(net, name='Bus 846', vn_kv=24.9, type='n', zone='34_BUS') bus_848 = pp.create_bus(net, name='Bus 848', vn_kv=24.9, type='n', zone='34_BUS') bus_860 = pp.create_bus(net, name='Bus 860', vn_kv=24.9, type='n', zone='34_BUS') bus_836 = pp.create_bus(net, name='Bus 836', vn_kv=24.9, type='n', zone='34_BUS') bus_840 = pp.create_bus(net, name='Bus 840', vn_kv=24.9, type='n', zone='34_BUS') bus_862 = pp.create_bus(net, name='Bus 862', vn_kv=24.9, type='n', zone='34_BUS') bus_838 = pp.create_bus(net, name='Bus 838', vn_kv=24.9, type='n', zone='34_BUS') bus_864 = pp.create_bus(net, name='Bus 864', vn_kv=24.9, type='n', zone='34_BUS') bus_888 = pp.create_bus(net, name='Bus 888', vn_kv=4.16, type='n', zone='34_BUS') bus_890 = pp.create_bus(net, name='Bus 890', vn_kv=4.16, type='n', zone='34_BUS') bus_856 = pp.create_bus(net, name='Bus 856', vn_kv=24.9, type='n', zone='34_BUS') # Lines pp.create_line(net, bus_800, bus_802, length_km=0.786384, std_type='CF-300', name='Line 0') pp.create_line(net, bus_802, bus_806, length_km=0.527304, std_type='CF-300', name='Line 1') pp.create_line(net, bus_806, bus_808, length_km=9.823704, std_type='CF-300', name='Line 2') pp.create_line(net, bus_808, bus_810, length_km=1.769059, std_type='CF-303', name='Line 3') pp.create_line(net, bus_808, bus_812, length_km=11.43000, std_type='CF-300', name='Line 4') pp.create_line(net, bus_812, bus_814, length_km=9.061704, std_type='CF-300', name='Line 5') # pp.create_line(net, bus_814, bus_850, length_km=0.003048, std_type='CF-301', # name='Line 6') pp.create_line(net, bus_816, bus_818, length_km=0.521208, std_type='CF-302', name='Line 7') pp.create_line(net, bus_816, bus_824, length_km=3.112008, std_type='CF-301', name='Line 8') pp.create_line(net, bus_818, bus_820, length_km=14.67612, std_type='CF-302', name='Line 9') pp.create_line(net, bus_820, bus_822, length_km=4.187952, std_type='CF-302', name='Line 10') pp.create_line(net, bus_824, bus_826, length_km=0.923544, std_type='CF-303', name='Line 11') pp.create_line(net, bus_824, bus_828, length_km=0.256032, std_type='CF-301', name='Line 12') pp.create_line(net, bus_828, bus_830, length_km=6.230112, std_type='CF-301', name='Line 13') pp.create_line(net, bus_830, bus_854, length_km=0.158496, std_type='CF-301', name='Line 14') pp.create_line(net, bus_832, bus_858, length_km=1.493520, std_type='CF-301', name='Line 15') pp.create_line(net, bus_834, bus_860, length_km=0.615696, std_type='CF-301', name='Line 16') pp.create_line(net, bus_834, bus_842, length_km=0.085344, std_type='CF-301', name='Line 17') pp.create_line(net, bus_836, bus_840, length_km=0.262128, std_type='CF-301', name='Line 18') pp.create_line(net, bus_836, bus_862, length_km=0.085344, std_type='CF-301', name='Line 19') pp.create_line(net, bus_842, bus_844, length_km=0.411480, std_type='CF-301', name='Line 20') pp.create_line(net, bus_844, bus_846, length_km=1.109472, std_type='CF-301', name='Line 21') pp.create_line(net, bus_846, bus_848, length_km=0.161544, std_type='CF-301', name='Line 22') pp.create_line(net, bus_850, bus_816, length_km=0.094488, std_type='CF-301', name='Line 23') # pp.create_line(net, bus_852, bus_832, length_km=0.003048, std_type='CF-301', # name='Line 24') pp.create_line(net, bus_854, bus_856, length_km=7.110984, std_type='CF-303', name='Line 25') pp.create_line(net, bus_854, bus_852, length_km=11.22578, std_type='CF-301', name='Line 26') pp.create_line(net, bus_858, bus_864, length_km=0.493776, std_type='CF-302', name='Line 27') pp.create_line(net, bus_858, bus_834, length_km=1.776984, std_type='CF-301', name='Line 28') pp.create_line(net, bus_860, bus_836, length_km=0.816864, std_type='CF-301', name='Line 29') pp.create_line(net, bus_860, bus_838, length_km=1.481328, std_type='CF-304', name='Line 30') pp.create_line(net, bus_888, bus_890, length_km=3.218688, std_type='CF-300', name='Line 31') # Substation pp.create_transformer_from_parameters(net, bus0, bus_800, sn_mva=2.5, vn_hv_kv=24.9, vn_lv_kv=24.9, vkr_percent=1.0, vk_percent=8.062257, pfe_kw=0.0, i0_percent=0.0, shift_degree=0.0, vkr0_percent=1.0, vk0_percent=8.062257, vector_group='YNyn', mag0_percent=100.0, mag0_rx=0, si0_hv_partial=0.9, tap_side='lv', tap_neutral=0, tap_max=2, tap_min=-2, tap_step_percent=2.5, tap_pos=-2, name='Substation') # Regulator 1 pp.create_transformer_from_parameters(net, bus_814, bus_850, sn_mva=1, vn_hv_kv=24.9, vn_lv_kv=24.9, vkr_percent=0.320088, vk_percent=0.357539, pfe_kw=0.0, i0_percent=0.0, shift_degree=0.0, vkr0_percent=0.452171, vk0_percent=0.665505, vector_group='YNyn', mag0_percent=100.0, mag0_rx=0, si0_hv_partial=0.9, tap_side='lv', tap_neutral=0, tap_max=16, tap_min=-16, tap_step_percent=0.625, tap_pos=0, tap_phase_shifter=False, name='Regulator 1') # Regulator 2 pp.create_transformer_from_parameters(net, bus_852, bus_832, sn_mva=1, vn_hv_kv=24.9, vn_lv_kv=24.9, vkr_percent=0.320088, vk_percent=0.357539, pfe_kw=0.0, i0_percent=0.0, shift_degree=0.0, vkr0_percent=0.452171, vk0_percent=0.665505, vector_group='YNyn', mag0_percent=100.0, mag0_rx=0, si0_hv_partial=0.9, tap_side='lv', tap_neutral=0, tap_max=16, tap_min=-16, tap_step_percent=0.625, tap_pos=0, tap_phase_shifter=False, name='Regulator 2') # Traformer pp.create_transformer_from_parameters(net, bus_832, bus_888, sn_mva=0.5, vn_hv_kv=24.9, vn_lv_kv=4.16, vkr_percent=1.9, vk_percent=4.5, pfe_kw=0.0, i0_percent=0.0, shift_degree=0.0, vkr0_percent=1.9, vk0_percent=4.5, vector_group='YNyn', mag0_percent=100.0, mag0_rx=0, si0_hv_partial=0.9, name='Traformer') # Loads pp.create_asymmetric_load(net, bus_806, p_a_mw=0, p_b_mw=0.03, p_c_mw=0.025, q_a_mvar=0, q_b_mvar=0.015, q_c_mvar=0.014, name='Load 806', type='wye') pp.create_asymmetric_load(net, bus_810, p_a_mw=0, p_b_mw=0.016, p_c_mw=0, q_a_mvar=0, q_b_mvar=0.008, q_c_mvar=0, name='Load 810', type='wye') pp.create_asymmetric_load(net, bus_820, p_a_mw=0.034, p_b_mw=0, p_c_mw=0, q_a_mvar=0.017, q_b_mvar=0, q_c_mvar=0, name='Load 820', type='wye') pp.create_asymmetric_load(net, bus_822, p_a_mw=0.135, p_b_mw=0, p_c_mw=0, q_a_mvar=0.07, q_b_mvar=0, q_c_mvar=0, name='Load 822', type='wye') pp.create_asymmetric_load(net, bus_824, p_a_mw=0, p_b_mw=0.005, p_c_mw=0, q_a_mvar=0, q_b_mvar=0.002, q_c_mvar=0, name='Load 824', type='delta') pp.create_asymmetric_load(net, bus_826, p_a_mw=0, p_b_mw=0.04, p_c_mw=0, q_a_mvar=0, q_b_mvar=0.02, q_c_mvar=0, name='Load 826', type='wye') pp.create_asymmetric_load(net, bus_828, p_a_mw=0, p_b_mw=0, p_c_mw=0.004, q_a_mvar=0, q_b_mvar=0, q_c_mvar=0.002, name='Load 828', type='wye') pp.create_asymmetric_load(net, bus_830, p_a_mw=0.007, p_b_mw=0, p_c_mw=0, q_a_mvar=0.003, q_b_mvar=0, q_c_mvar=0, name='Load 830', type='wye') pp.create_asymmetric_load(net, bus_856, p_a_mw=0, p_b_mw=0.004, p_c_mw=0, q_a_mvar=0, q_b_mvar=0.002, q_c_mvar=0, name='Load 856', type='wye') pp.create_asymmetric_load(net, bus_858, p_a_mw=0.007, p_b_mw=0.002, p_c_mw=0.006, q_a_mvar=0.003, q_b_mvar=0.001, q_c_mvar=0.003, name='Load 858', type='delta') pp.create_asymmetric_load(net, bus_864, p_a_mw=0.002, p_b_mw=0, p_c_mw=0, q_a_mvar=0.001, q_b_mvar=0, q_c_mvar=0, name='Load 864', type='wye') pp.create_asymmetric_load(net, bus_834, p_a_mw=0.004, p_b_mw=0.015, p_c_mw=0.013, q_a_mvar=0.002, q_b_mvar=0.008, q_c_mvar=0.007, name='Load 834', type='delta') pp.create_asymmetric_load(net, bus_860, p_a_mw=0.016, p_b_mw=0.02, p_c_mw=0.11, q_a_mvar=0.008, q_b_mvar=0.01, q_c_mvar=0.055, name='Load 860', type='delta') pp.create_asymmetric_load(net, bus_836, p_a_mw=0.03, p_b_mw=0.01, p_c_mw=0.042, q_a_mvar=0.015, q_b_mvar=0.006, q_c_mvar=0.022, name='Load 836', type='delta') pp.create_asymmetric_load(net, bus_840, p_a_mw=0.018, p_b_mw=0.022, p_c_mw=0, q_a_mvar=0.009, q_b_mvar=0.011, q_c_mvar=0, name='Load 840', type='delta') pp.create_asymmetric_load(net, bus_838, p_a_mw=0, p_b_mw=0.028, p_c_mw=0, q_a_mvar=0, q_b_mvar=0.014, q_c_mvar=0, name='Load 838', type='wye') pp.create_asymmetric_load(net, bus_844, p_a_mw=0.009, p_b_mw=0, p_c_mw=0, q_a_mvar=0.005, q_b_mvar=0, q_c_mvar=0, name='Load 844', type='wye') pp.create_asymmetric_load(net, bus_846, p_a_mw=0, p_b_mw=0.025, p_c_mw=0.012, q_a_mvar=0, q_b_mvar=0.02, q_c_mvar=0.011, name='Load 846', type='wye') pp.create_asymmetric_load(net, bus_848, p_a_mw=0, p_b_mw=0.023, p_c_mw=0, q_a_mvar=0, q_b_mvar=0.011, q_c_mvar=0, name='Load 848', type='wye') pp.create_asymmetric_load(net, bus_860, p_a_mw=0.02, p_b_mw=0.02, p_c_mw=0.02, q_a_mvar=0.016, q_b_mvar=0.016, q_c_mvar=0.016, name='Load 860 spot', type='wye') pp.create_asymmetric_load(net, bus_840, p_a_mw=0.009, p_b_mw=0.009, p_c_mw=0.009, q_a_mvar=0.007, q_b_mvar=0.007, q_c_mvar=0.007, name='Load 840 spot', type='wye') pp.create_asymmetric_load(net, bus_844, p_a_mw=0.135, p_b_mw=0.135, p_c_mw=0.135, q_a_mvar=0.105, q_b_mvar=0.105, q_c_mvar=0.105, name='Load 844 spot', type='wye') pp.create_asymmetric_load(net, bus_848, p_a_mw=0.02, p_b_mw=0.02, p_c_mw=0.02, q_a_mvar=0.016, q_b_mvar=0.016, q_c_mvar=0.016, name='Load 848 spot', type='delta') pp.create_asymmetric_load(net, bus_890, p_a_mw=0.15, p_b_mw=0.15, p_c_mw=0.15, q_a_mvar=0.075, q_b_mvar=0.075, q_c_mvar=0.075, name='Load 890 spot', type='delta') pp.create_asymmetric_load(net, bus_830, p_a_mw=0.01, p_b_mw=0.01, p_c_mw=0.025, q_a_mvar=0.005, q_b_mvar=0.005, q_c_mvar=0.01, name='Load 830 spot', type='delta') # External grid pp.create_ext_grid(net, bus0, vm_pu=1.0, va_degree=0.0, s_sc_max_mva=10.0, s_sc_min_mva=10.0, rx_max=1, rx_min=1, r0x0_max=1, x0x_max=1) # Distributed generators pp.create_sgen(net, bus_848, p_mw=0.66, q_mvar=0.500, name='DG 1', max_p_mw=0.66, min_p_mw=0, max_q_mvar=0.5, min_q_mvar=0) pp.create_sgen(net, bus_890, p_mw=0.50, q_mvar=0.375, name='DG 2', max_p_mw=0.50, min_p_mw=0, max_q_mvar=0.375, min_q_mvar=0) pp.create_sgen(net, bus_822, p_mw=0.2, type='PV', name='PV 1', max_p_mw=0.2, min_p_mw=0, max_q_mvar=0, min_q_mvar=0) pp.create_sgen(net, bus_856, p_mw=0.2, type='PV', name='PV 2', max_p_mw=0.2, min_p_mw=0, max_q_mvar=0, min_q_mvar=0) pp.create_sgen(net, bus_838, p_mw=0.2, type='PV', name='PV 3', max_p_mw=0.2, min_p_mw=0, max_q_mvar=0, min_q_mvar=0) pp.create_sgen(net, bus_822, p_mw=0.3, type='WP', name='WP 1', max_p_mw=0.3, min_p_mw=0, max_q_mvar=0, min_q_mvar=0) pp.create_sgen(net, bus_826, p_mw=0.3, type='WP', name='WP 2', max_p_mw=0.3, min_p_mw=0, max_q_mvar=0, min_q_mvar=0) pp.create_sgen(net, bus_838, p_mw=0.3, type='WP', name='WP 3', max_p_mw=0.3, min_p_mw=0, max_q_mvar=0, min_q_mvar=0) # Shunt capacity bank pp.create_shunt(net, bus_840, q_mvar=-0.12, name='SCB 1', step=4, max_step=4) pp.create_shunt(net, bus_864, q_mvar=-0.12, name='SCB 2', step=4, max_step=4) # storage pp.create_storage(net, bus_810, p_mw=0.2, max_e_mwh=1.0, sn_mva=1.0, soc_percent=50, min_e_mwh=0.2, name='Storage') pp.add_zero_impedance_parameters(net) return net # net = case34_3ph() # pp.pf.runpp_3ph.runpp_3ph(net) # print(net.res_bus_3ph) # print(net.sn_mva)
# process network choosing input data try: case = case if case != "bad" else "worse" net_data = parameters[feeders_range][linetype][customer][case] except KeyError: raise ValueError( "This combination of 'feeders_range', 'linetype', 'customer' and 'case' " "is no dickert network.") # add missing line types if 'NFA2X 4x70' not in net.std_types['line'].keys(): pp.create_std_type(net, { "c_nf_per_km": 12.8, "r_ohm_per_km": 0.443, "x_ohm_per_km": 0.07, "max_i_ka": 0.205, "type": "ol" }, name='NFA2X 4x70', element="line") # determine low voltage vn_kv lv_vn_kv = net.bus.vn_kv.at[busbar_index] # feeder without branch line _create_feeder(net, net_data, 0, busbar_index, linetype, lv_vn_kv) # feeder with one branch line if net_data[2]: _create_feeder(net, net_data, 1, busbar_index, linetype, lv_vn_kv) # feeder with two branch lines if net_data[3]: _create_feeder(net, net_data, 2, busbar_index, linetype, lv_vn_kv)
def test_3bus_with_transformer(): np.random.seed(12) # 1. Create network net = pp.create_empty_network() pp.create_bus(net, name="bus1", vn_kv=10.) pp.create_bus(net, name="bus2", vn_kv=10.) pp.create_bus(net, name="bus3", vn_kv=10.) pp.create_bus(net, name="bus4", vn_kv=110.) pp.create_ext_grid(net, bus=3, vm_pu=1.01) pp.create_line_from_parameters(net, 0, 1, 1, r_ohm_per_km=.01, x_ohm_per_km=.03, c_nf_per_km=0., max_i_ka=1) pp.create_line_from_parameters(net, 0, 2, 1, r_ohm_per_km=.02, x_ohm_per_km=.05, c_nf_per_km=0., max_i_ka=1) pp.create_line_from_parameters(net, 1, 2, 1, r_ohm_per_km=.03, x_ohm_per_km=.08, c_nf_per_km=0., max_i_ka=1) pp.create_std_type(net, {"sn_mva": 25, "vn_hv_kv": 110, "vn_lv_kv": 10, "vk_percent": 10.04, "vkr_percent": 0.276, "pfe_kw": 28.51, "i0_percent": 0.073, "shift_degree": 150, "tap_side": "hv", "tap_neutral": 0, "tap_min": -9, "tap_max": 9, "tap_step_degree": 0, "tap_step_percent": 1.5, "tap_phase_shifter": False}, "25 MVA 110/10 kV v1.4.3 and older", element="trafo") pp.create_transformer(net, 3, 0, std_type="25 MVA 110/10 kV v1.4.3 and older") pp.create_load(net, bus=1, p_mw=0.45, q_mvar=0.3) pp.create_load(net, bus=2, p_mw=0.35, q_mvar=0.2) pp.runpp(net, calculate_voltage_angles=True) pp.create_measurement(net, "v", "bus", r2(net.res_bus.vm_pu.iloc[0], .004), .004, element=0) pp.create_measurement(net, "v", "bus", r2(net.res_bus.vm_pu.iloc[1], .004), .004, element=1) pp.create_measurement(net, "v", "bus", r2(net.res_bus.vm_pu.iloc[3], .004), .004, element=3) pp.create_measurement(net, "p", "bus", -r2(net.res_bus.p_mw.iloc[1], .01), .01, element=1) pp.create_measurement(net, "q", "bus", -r2(net.res_bus.q_mvar.iloc[1], .01), .01, element=1) pp.create_measurement(net, "p", "bus", -r2(net.res_bus.p_mw.iloc[2], .01), .010, element=2) pp.create_measurement(net, "q", "bus", -r2(net.res_bus.q_mvar.iloc[2], .01), .01, element=2) pp.create_measurement(net, "p", "bus", 0., 0.001, element=0) pp.create_measurement(net, "q", "bus", 0., 0.001, element=0) pp.create_measurement(net, "p", "line", r2(net.res_line.p_from_mw.iloc[0], .008), .008, 0, 0) pp.create_measurement(net, "p", "line", r2(net.res_line.p_from_mw.iloc[1], .008), .008, 1, 0) pp.create_measurement(net, "p", "trafo", r2(net.res_trafo.p_hv_mw.iloc[0], .01), .01, side="hv", element=0) # transformer meas. pp.create_measurement(net, "q", "trafo", r2(net.res_trafo.q_hv_mvar.iloc[0], .01), .01, side=3, element=0) # at hv side # 2. Do state estimation success = estimate(net, init='slack', tolerance=1e-6, maximum_iterations=10, calculate_voltage_angles=True) v_result = net.res_bus_est.vm_pu.values delta_result = net.res_bus_est.va_degree.values diff_v = net.res_bus.vm_pu.values - v_result diff_delta = net.res_bus.va_degree.values - delta_result assert success assert (np.nanmax(abs(diff_v)) < 6e-4) assert (np.nanmax(abs(diff_delta)) < 8e-4) # Backwards check. Use state estimation results for power flow and check for equality net.load.drop(net.load.index, inplace=True) net.ext_grid.vm_pu = net.res_bus_est.vm_pu.iloc[net.ext_grid.bus.iloc[0]] pp.create_load(net, 0, net.res_bus_est.p_mw.iloc[0], net.res_bus_est.q_mvar.iloc[0]) pp.create_load(net, 1, net.res_bus_est.p_mw.iloc[1], net.res_bus_est.q_mvar.iloc[1]) pp.create_load(net, 2, net.res_bus_est.p_mw.iloc[2], net.res_bus_est.q_mvar.iloc[2]) _compare_pf_and_se_results(net)
def case34(): """ Create the IEEE 34 bus from IEEE PES Test Feeders: "https://site.ieee.org/pes-testfeeders/resources/”. OUTPUT: **net** - The pandapower format network. """ net = pp.create_empty_network() # Linedata # CF-300 line_data = { 'c_nf_per_km': 3.8250977, 'r_ohm_per_km': 0.69599766, 'x_ohm_per_km': 0.5177677, 'c0_nf_per_km': 1.86976748, 'r0_ohm_per_km': 1.08727498, 'x0_ohm_per_km': 1.47374703, 'max_i_ka': 0.23, 'type': 'ol' } pp.create_std_type(net, line_data, name='CF-300', element='line') # CF-301 line_data = { 'c_nf_per_km': 3.66884364, 'r_ohm_per_km': 1.05015841, 'x_ohm_per_km': 0.52265586, 'c0_nf_per_km': 1.82231544, 'r0_ohm_per_km': 1.48350255, 'x0_ohm_per_km': 1.60203942, 'max_i_ka': 0.18, 'type': 'ol' } pp.create_std_type(net, line_data, name='CF-301', element='line') # CF-302 line_data = { 'c_nf_per_km': 0.8751182, 'r_ohm_per_km': 0.5798427, 'x_ohm_per_km': 0.30768221, 'c0_nf_per_km': 0.8751182, 'r0_ohm_per_km': 0.5798427, 'x0_ohm_per_km': 0.30768221, 'max_i_ka': 0.14, 'type': 'ol' } pp.create_std_type(net, line_data, name='CF-302', element='line') # CF-303 line_data = { 'c_nf_per_km': 0.8751182, 'r_ohm_per_km': 0.5798427, 'x_ohm_per_km': 0.30768221, 'c0_nf_per_km': 0.8751182, 'r0_ohm_per_km': 0.5798427, 'x0_ohm_per_km': 0.30768221, 'max_i_ka': 0.14, 'type': 'ol' } pp.create_std_type(net, line_data, name='CF-303', element='line') # CF-304 line_data = { 'c_nf_per_km': 0.90382554, 'r_ohm_per_km': 0.39802955, 'x_ohm_per_km': 0.29436416, 'c0_nf_per_km': 0.90382554, 'r0_ohm_per_km': 0.39802955, 'x0_ohm_per_km': 0.29436416, 'max_i_ka': 0.18, 'type': 'ol' } pp.create_std_type(net, line_data, name='CF-304', element='line') # Busses # bus0 = pp.create_bus(net, name='Bus 0', vn_kv=69.0, type='n', zone='34_BUS') bus_800 = pp.create_bus(net, name='Bus 800', vn_kv=24.9, type='n', zone='34_BUS') bus_802 = pp.create_bus(net, name='Bus 802', vn_kv=24.9, type='n', zone='34_BUS') bus_806 = pp.create_bus(net, name='Bus 806', vn_kv=24.9, type='n', zone='34_BUS') bus_808 = pp.create_bus(net, name='Bus 808', vn_kv=24.9, type='n', zone='34_BUS') bus_810 = pp.create_bus(net, name='Bus 810', vn_kv=24.9, type='n', zone='34_BUS') bus_812 = pp.create_bus(net, name='Bus 812', vn_kv=24.9, type='n', zone='34_BUS') bus_814 = pp.create_bus(net, name='Bus 814', vn_kv=24.9, type='n', zone='34_BUS') bus_850 = pp.create_bus(net, name='Bus 850', vn_kv=24.9, type='n', zone='34_BUS') bus_816 = pp.create_bus(net, name='Bus 816', vn_kv=24.9, type='n', zone='34_BUS') bus_818 = pp.create_bus(net, name='Bus 818', vn_kv=24.9, type='n', zone='34_BUS') bus_820 = pp.create_bus(net, name='Bus 820', vn_kv=24.9, type='n', zone='34_BUS') bus_822 = pp.create_bus(net, name='Bus 822', vn_kv=24.9, type='n', zone='34_BUS') bus_824 = pp.create_bus(net, name='Bus 824', vn_kv=24.9, type='n', zone='34_BUS') bus_826 = pp.create_bus(net, name='Bus 826', vn_kv=24.9, type='n', zone='34_BUS') bus_828 = pp.create_bus(net, name='Bus 828', vn_kv=24.9, type='n', zone='34_BUS') bus_830 = pp.create_bus(net, name='Bus 830', vn_kv=24.9, type='n', zone='34_BUS') bus_854 = pp.create_bus(net, name='Bus 854', vn_kv=24.9, type='n', zone='34_BUS') bus_852 = pp.create_bus(net, name='Bus 852', vn_kv=24.9, type='n', zone='34_BUS') bus_832 = pp.create_bus(net, name='Bus 832', vn_kv=24.9, type='n', zone='34_BUS') bus_858 = pp.create_bus(net, name='Bus 858', vn_kv=24.9, type='n', zone='34_BUS') bus_834 = pp.create_bus(net, name='Bus 834', vn_kv=24.9, type='n', zone='34_BUS') bus_842 = pp.create_bus(net, name='Bus 842', vn_kv=24.9, type='n', zone='34_BUS') bus_844 = pp.create_bus(net, name='Bus 844', vn_kv=24.9, type='n', zone='34_BUS') bus_846 = pp.create_bus(net, name='Bus 846', vn_kv=24.9, type='n', zone='34_BUS') bus_848 = pp.create_bus(net, name='Bus 848', vn_kv=24.9, type='n', zone='34_BUS') bus_860 = pp.create_bus(net, name='Bus 860', vn_kv=24.9, type='n', zone='34_BUS') bus_836 = pp.create_bus(net, name='Bus 836', vn_kv=24.9, type='n', zone='34_BUS') bus_840 = pp.create_bus(net, name='Bus 840', vn_kv=24.9, type='n', zone='34_BUS') bus_862 = pp.create_bus(net, name='Bus 862', vn_kv=24.9, type='n', zone='34_BUS') bus_838 = pp.create_bus(net, name='Bus 838', vn_kv=24.9, type='n', zone='34_BUS') bus_864 = pp.create_bus(net, name='Bus 864', vn_kv=24.9, type='n', zone='34_BUS') bus_888 = pp.create_bus(net, name='Bus 888', vn_kv=4.16, type='n', zone='34_BUS') bus_890 = pp.create_bus(net, name='Bus 890', vn_kv=4.16, type='n', zone='34_BUS') bus_856 = pp.create_bus(net, name='Bus 856', vn_kv=24.9, type='n', zone='34_BUS') # Lines pp.create_line(net, bus_800, bus_802, length_km=0.786384, std_type='CF-300', name='Line 0') pp.create_line(net, bus_802, bus_806, length_km=0.527304, std_type='CF-300', name='Line 1') pp.create_line(net, bus_806, bus_808, length_km=9.823704, std_type='CF-300', name='Line 2') pp.create_line(net, bus_808, bus_810, length_km=1.769059, std_type='CF-303', name='Line 3') pp.create_line(net, bus_808, bus_812, length_km=11.43000, std_type='CF-300', name='Line 4') pp.create_line(net, bus_812, bus_814, length_km=9.061704, std_type='CF-300', name='Line 5') # pp.create_line(net, bus_814, bus_850, length_km=0.003048, std_type='CF-301', name='Line 6') pp.create_line(net, bus_816, bus_818, length_km=0.521208, std_type='CF-302', name='Line 7') pp.create_line(net, bus_816, bus_824, length_km=3.112008, std_type='CF-301', name='Line 8') pp.create_line(net, bus_818, bus_820, length_km=14.67612, std_type='CF-302', name='Line 9') pp.create_line(net, bus_820, bus_822, length_km=4.187952, std_type='CF-302', name='Line 10') pp.create_line(net, bus_824, bus_826, length_km=0.923544, std_type='CF-303', name='Line 11') pp.create_line(net, bus_824, bus_828, length_km=0.256032, std_type='CF-301', name='Line 12') pp.create_line(net, bus_828, bus_830, length_km=6.230112, std_type='CF-301', name='Line 13') pp.create_line(net, bus_830, bus_854, length_km=0.158496, std_type='CF-301', name='Line 14') pp.create_line(net, bus_832, bus_858, length_km=1.493520, std_type='CF-301', name='Line 15') pp.create_line(net, bus_834, bus_860, length_km=0.615696, std_type='CF-301', name='Line 16') pp.create_line(net, bus_834, bus_842, length_km=0.085344, std_type='CF-301', name='Line 17') pp.create_line(net, bus_836, bus_840, length_km=0.262128, std_type='CF-301', name='Line 18') pp.create_line(net, bus_836, bus_862, length_km=0.085344, std_type='CF-301', name='Line 19') pp.create_line(net, bus_842, bus_844, length_km=0.411480, std_type='CF-301', name='Line 20') pp.create_line(net, bus_844, bus_846, length_km=1.109472, std_type='CF-301', name='Line 21') pp.create_line(net, bus_846, bus_848, length_km=0.161544, std_type='CF-301', name='Line 22') pp.create_line(net, bus_850, bus_816, length_km=0.094488, std_type='CF-301', name='Line 23') # pp.create_line(net, bus_852, bus_832, length_km=0.003048, std_type='CF-301', name='Line 24') pp.create_line(net, bus_854, bus_856, length_km=7.110984, std_type='CF-303', name='Line 25') pp.create_line(net, bus_854, bus_852, length_km=11.22578, std_type='CF-301', name='Line 26') pp.create_line(net, bus_858, bus_864, length_km=0.493776, std_type='CF-302', name='Line 27') pp.create_line(net, bus_858, bus_834, length_km=1.776984, std_type='CF-301', name='Line 28') pp.create_line(net, bus_860, bus_836, length_km=0.816864, std_type='CF-301', name='Line 29') pp.create_line(net, bus_860, bus_838, length_km=1.481328, std_type='CF-304', name='Line 30') pp.create_line(net, bus_888, bus_890, length_km=3.218688, std_type='CF-300', name='Line 31') # Regulator 1 pp.create_transformer_from_parameters(net, bus_814, bus_850, sn_mva=2.5, vn_hv_kv=24.9, vn_lv_kv=24.9, vkr_percent=0.320088 * 2.5, vk_percent=0.357539 * 2.5, pfe_kw=0.0, i0_percent=0.0, shift_degree=0.0, tap_side='lv', tap_neutral=0, tap_max=16, tap_min=-16, tap_step_percent=0.625, tap_pos=0, tap_phase_shifter=False, name='Regulator 1') # Regulator 2 pp.create_transformer_from_parameters(net, bus_852, bus_832, sn_mva=2.5, vn_hv_kv=24.9, vn_lv_kv=24.9, vkr_percent=0.320088 * 2.5, vk_percent=0.357539 * 2.5, pfe_kw=0.0, i0_percent=0.0, shift_degree=0.0, tap_side='lv', tap_neutral=0, tap_max=16, tap_min=-16, tap_step_percent=0.625, tap_pos=0, tap_phase_shifter=False, name='Regulator 2') # # Substation # pp.create_transformer_from_parameters(net, bus0, bus_800, sn_mva=2.5, vn_hv_kv=69.0, # vn_lv_kv=24.9, vkr_percent=1.0, vk_percent=8.062257, # pfe_kw=0.0, i0_percent=0.0, shift_degree=0.0, # tap_side='lv', tap_neutral=0, tap_max=2, tap_min=-2, # tap_step_percent=2.5, tap_pos=0, tap_phase_shifter=False, # name='Substation') # Traformer pp.create_transformer_from_parameters(net, bus_832, bus_888, sn_mva=0.5, vn_hv_kv=24.9, vn_lv_kv=4.16, vkr_percent=1.9, vk_percent=4.5, pfe_kw=0.0, i0_percent=0.0, shift_degree=0.0, name='Transformer 1') # Loads pp.create_load(net, bus_806, p_mw=0.055, q_mvar=0.029, name='Load 806') pp.create_load(net, bus_810, p_mw=0.016, q_mvar=0.008, name='Load 810') pp.create_load(net, bus_820, p_mw=0.034, q_mvar=0.017, name='Load 820') pp.create_load(net, bus_822, p_mw=0.135, q_mvar=0.070, name='Load 822') pp.create_load(net, bus_824, p_mw=0.005, q_mvar=0.002, name='Load 824') pp.create_load(net, bus_826, p_mw=0.004, q_mvar=0.020, name='Load 826') pp.create_load(net, bus_828, p_mw=0.004, q_mvar=0.002, name='Load 828') pp.create_load(net, bus_830, p_mw=0.007, q_mvar=0.003, name='Load 830') pp.create_load(net, bus_856, p_mw=0.004, q_mvar=0.002, name='Load 856') pp.create_load(net, bus_858, p_mw=0.015, q_mvar=0.007, name='Load 858') pp.create_load(net, bus_864, p_mw=0.002, q_mvar=0.001, name='Load 864') pp.create_load(net, bus_834, p_mw=0.032, q_mvar=0.017, name='Load 834') pp.create_load(net, bus_860, p_mw=0.029, q_mvar=0.073, name='Load 860') pp.create_load(net, bus_836, p_mw=0.082, q_mvar=0.043, name='Load 836') pp.create_load(net, bus_840, p_mw=0.040, q_mvar=0.020, name='Load 840') pp.create_load(net, bus_838, p_mw=0.028, q_mvar=0.014, name='Load 838') pp.create_load(net, bus_844, p_mw=0.009, q_mvar=0.005, name='Load 844') pp.create_load(net, bus_846, p_mw=0.037, q_mvar=0.031, name='Load 846') pp.create_load(net, bus_848, p_mw=0.023, q_mvar=0.011, name='Load 848') pp.create_load(net, bus_860, p_mw=0.060, q_mvar=0.048, name='Load 860 spot') pp.create_load(net, bus_840, p_mw=0.027, q_mvar=0.021, name='Load 840 spot') pp.create_load(net, bus_844, p_mw=0.405, q_mvar=0.315, name='Load 844 spot') pp.create_load(net, bus_848, p_mw=0.060, q_mvar=0.048, name='Load 848 spot') pp.create_load(net, bus_890, p_mw=0.450, q_mvar=0.225, name='Load 890 spot') pp.create_load(net, bus_830, p_mw=0.045, q_mvar=0.020, name='Load 830 spot') # External grid pp.create_ext_grid(net, bus_800, vm_pu=1.0, va_degree=0.0, s_sc_max_mva=10.0, s_sc_min_mva=10.0, rx_max=1, rx_min=1, r0x0_max=1, x0x_max=1) # Distributed generators pp.create_sgen(net, bus_848, p_mw=0.66, q_mvar=0.500, name='DG 1', max_p_mw=0.66, min_p_mw=0, max_q_mvar=0.5, min_q_mvar=0) pp.create_sgen(net, bus_890, p_mw=0.50, q_mvar=0.375, name='DG 2', max_p_mw=0.50, min_p_mw=0, max_q_mvar=0.375, min_q_mvar=0) pp.create_sgen(net, bus_822, p_mw=0.1, type='PV', name='PV 1', max_p_mw=0.1, min_p_mw=0, max_q_mvar=0, min_q_mvar=0) pp.create_sgen(net, bus_856, p_mw=0.1, type='PV', name='PV 2', max_p_mw=0.1, min_p_mw=0, max_q_mvar=0, min_q_mvar=0) pp.create_sgen(net, bus_838, p_mw=0.1, type='PV', name='PV 3', max_p_mw=0.1, min_p_mw=0, max_q_mvar=0, min_q_mvar=0) pp.create_sgen(net, bus_822, p_mw=0.1, type='WP', name='WP 1', max_p_mw=0.1, min_p_mw=0, max_q_mvar=0, min_q_mvar=0) pp.create_sgen(net, bus_826, p_mw=0.1, type='WP', name='WP 2', max_p_mw=0.1, min_p_mw=0, max_q_mvar=0, min_q_mvar=0) pp.create_sgen(net, bus_838, p_mw=0.1, type='WP', name='WP 3', max_p_mw=0.1, min_p_mw=0, max_q_mvar=0, min_q_mvar=0) # Shunt capacity bank pp.create_shunt(net, bus_840, q_mvar=-0.12, name='SCB 1', step=4, max_step=4) pp.create_shunt(net, bus_864, q_mvar=-0.12, name='SCB 2', step=4, max_step=4) # storage pp.create_storage(net, bus_810, p_mw=0.5, max_e_mwh=2, sn_mva=1.0, soc_percent=50, min_e_mwh=0.2, name='Storage') return net # net = case34() # pp.runpp(net) # print(net.res_bus) # print(net.res_ext_grid) # print(net.trafo) # print(net.res_load['p_mw'].values.sum()) # import numpy as np # import pandas as pd # import pandapower.control as control # import pandapower.networks as nw # import pandapower.timeseries as timeseries # from pandapower.timeseries.data_sources.frame_data import DFData # # number of time steps # n_ts = 95 # # df = pd.read_csv("load_timeseries.csv") # # create a DataFrame with some random time series as an example # df = pd.DataFrame(np.random.normal(1., 0.1, size=(n_ts, len(net.load.index))), # index=list(range(n_ts)), columns=net.load.index) * net.load.p_mw.values # ds = DFData(df) # const_load = control.ConstControl(net, element='load', element_index=net.load.index, # variable='p_mw', data_source=ds, profile_name=net.load.index) # # initialising the outputwriter to save data to excel files in the current folder. You can change this to .json, .csv, or .pickle as well # ow = timeseries.OutputWriter(net, output_path="./", output_file_type=".xlsx") # # adding vm_pu of all buses and line_loading in percent of all lines as outputs to be stored # ow.log_variable('res_bus', 'vm_pu') # ow.log_variable('res_line', 'loading_percent') # # starting the timeseries simulation for one day -> 96 15 min values. # timeseries.run_timeseries(net) # # now checkout the folders res_bus and res_line in your current working dir # # number of time steps # n_ts = 1 # # df = pd.read_csv("load_timeseries.csv") # # create a DataFrame with some random time series as an example # df = pd.DataFrame(np.array([[0,0]]), # index=list(range(n_ts)), columns=net.trafo.index[1:]) # ds = DFData(df) # const_load = control.ConstControl(net, element='trafo', element_index=net.trafo.index[1:], # variable='tap_pos', data_source=ds, profile_name=net.trafo.index[1:]) # # initialising the outputwriter to save data to excel files in the current folder. You can change this to .json, .csv, or .pickle as well # ow = timeseries.OutputWriter(net, output_path="./", output_file_type=".xlsx") # # adding vm_pu of all buses and line_loading in percent of all lines as outputs to be stored # ow.log_variable('res_bus', 'vm_pu') # ow.log_variable('res_line', 'loading_percent') # ow.log_variable('res_trafo', 'tap_pos') # # starting the timeseries simulation for one day -> 96 15 min values. # timeseries.run_timeseries(net) # # now checkout the folders res_bus and res_line in your current working dir
def create_ardmore_network(): #### Create Network net = pp.create_empty_network() # create bus bus0 = pp.create_bus(net, vn_kv=0.4, name='bus0') # trafo input bus1 = pp.create_bus(net, vn_kv=0.4, name='bus1') # trafo output bus2 = pp.create_bus(net, vn_kv=0.4, name='bus2') # house 2 bus3 = pp.create_bus(net, vn_kv=0.4, name='bus3') # house 3 bus4 = pp.create_bus(net, vn_kv=0.4, name='bus4') # house 4 bus5 = pp.create_bus(net, vn_kv=0.4, name='bus5') # house 5 bus6 = pp.create_bus(net, vn_kv=0.4, name='bus6') # house 1 # create external grid pp.create_ext_grid(net, bus=bus0, vm_pu=1.02, name='Grid Connection') net.ext_grid["r0x0_max"] = 0.1 net.ext_grid["x0x_max"] = 1.0 net.ext_grid["s_sc_max_mva"] = 10000 net.ext_grid["s_sc_min_mva"] = 8000 net.ext_grid["rx_min"] = 0.1 net.ext_grid["rx_max"] = 0.1 # create new standards pp.create_std_type( net, { "sn_mva": 0.3, "vn_hv_kv": 0.4, "vn_lv_kv": 0.4, "vk_percent": 6, "vkr_percent": 0.78125, "pfe_kw": 2.7, "i0_percent": 0.16875, "shift_degree": 0, "vector_group": "YNyn", "tap_side": "hv", "tap_neutral": 0, "tap_min": -2, "tap_max": 2, "tap_step_degree": 0, "tap_step_percent": 2.5, "tap_phase_shifter": False, "vk0_percent": 6, "vkr0_percent": 0.78125, "mag0_percent": 100, "mag0_rx": 0., "si0_hv_partial": 0.9, }, "YNyn", "trafo") # pp.create_std_type(net, # { # "max_i_ka": 313, # "r_ohm_per_km": 0.164, # "x_ohm_per_km": 0.117, # "c_nf_per_km": 406, # "r0_ohm_per_km": 0.1, # "x0_ohm_per_km": 0.4, # "c0_nf_per_km": 230.6, # }, # "NAVY-J 4x185 SE 0.6/1kV", "line") # add trafo to the network trafo = pp.create_transformer(net, hv_bus=bus0, lv_bus=bus1, std_type='YNyn', parallel=1, tap_pos=0) # create lines line_0_2 = pp.create_line(net, from_bus=bus1, to_bus=bus2, length_km=0.250, std_type='NA2XS2Y 1x185 RM/25 6/10 kV') line_2_3 = pp.create_line(net, from_bus=bus2, to_bus=bus3, length_km=0.0001, std_type='NA2XS2Y 1x185 RM/25 6/10 kV') line_3_4 = pp.create_line(net, from_bus=bus3, to_bus=bus4, length_km=0.0001, std_type='NA2XS2Y 1x185 RM/25 6/10 kV') line_4_5 = pp.create_line(net, from_bus=bus4, to_bus=bus5, length_km=0.0001, std_type='NA2XS2Y 1x185 RM/25 6/10 kV') line_5_1 = pp.create_line(net, from_bus=bus5, to_bus=bus6, length_km=0.010, std_type='NA2XS2Y 1x185 RM/25 6/10 kV') net.line["r0_ohm_per_km"] = 0.161 net.line["x0_ohm_per_km"] = 0.11 net.line["c0_nf_per_km"] = 406 # create loads house1 = pp.create_asymmetric_load(net, bus=bus6, sn_mva=0.15, p_A_mw=0.01, q_A_mvar=(0.015**2 - 0.01**2)**0.5, p_B_mw=0, q_B_mvar=0, p_C_mw=0, q_C_mvar=0) house2 = pp.create_asymmetric_load(net, bus=bus2, sn_mva=0.15, p_A_mw=0, q_A_mvar=0, p_B_mw=0.01, q_B_mvar=(0.015**2 - 0.01**2)**0.5, p_C_mw=0, q_C_mvar=0) house3 = pp.create_asymmetric_load(net, bus=bus3, sn_mva=0.15, p_A_mw=0, q_A_mvar=0, p_B_mw=0, q_B_mvar=0, p_C_mw=0.01, q_C_mvar=(0.015**2 - 0.01**2)**0.5) house4 = pp.create_asymmetric_load( net, bus=bus4, sn_mva=0.15, p_A_mw=0, q_A_mvar=0, p_B_mw=0.01, q_B_mvar=(0.015**2 - 0.01**2)**0.5, p_C_mw=0, q_C_mvar=0, ) house5 = pp.create_asymmetric_load( net, bus=bus5, sn_mva=0.15, p_A_mw=0, q_A_mvar=0, p_B_mw=0, q_B_mvar=0, p_C_mw=0.01, q_C_mvar=(0.015**2 - 0.01**2)**0.5, ) pp.add_zero_impedance_parameters(net) return net
def test_4bus_network(): v_base = 110 # 110kV Base Voltage mva_base = 100 # 100 MVA net = pp.create_empty_network(sn_mva=mva_base) # ============================================================================= # Main Program # ============================================================================= busn = pp.create_bus(net, vn_kv=v_base, name="busn") busk = pp.create_bus(net, vn_kv=v_base, name="busk") busm = pp.create_bus(net, vn_kv=v_base, name="busm") busp = pp.create_bus(net, vn_kv=v_base, name="busp") pp.create_ext_grid(net, bus=busn, vm_pu=1.0, name="Grid Connection", s_sc_max_mva=5000, rx_max=0.1, r0x0_max=0.1, x0x_max=1.0) pp.create_std_type( net, { "r0_ohm_per_km": .154, "x0_ohm_per_km": 0.5277876, "c0_nf_per_km": 170.4, "max_i_ka": 0.741, "r_ohm_per_km": .0385, "x_ohm_per_km": 0.1319469, "c_nf_per_km": 170 }, "example_type3") pp.create_line(net, from_bus=busn, to_bus=busm, length_km=1.0, std_type="example_type3") pp.create_line(net, from_bus=busn, to_bus=busp, length_km=1.0, std_type="example_type3") pp.create_line_from_parameters(net, from_bus=busn, to_bus=busk, length_km=1.0, r0_ohm_per_km=.1005, x0_ohm_per_km=0.4900884, c0_nf_per_km=200.5, max_i_ka=0.89, r_ohm_per_km=.0251, x_ohm_per_km=0.1225221, c_nf_per_km=210) pp.create_line_from_parameters(net, from_bus=busk, to_bus=busm, length_km=1.0, r0_ohm_per_km=0.0848, x0_ohm_per_km=0.4649556, c0_nf_per_km=230.6, max_i_ka=0.963, r_ohm_per_km=0.0212, x_ohm_per_km=0.1162389, c_nf_per_km=230) pp.create_line_from_parameters(net, from_bus=busk, to_bus=busp, length_km=1.0, r0_ohm_per_km=.3048, x0_ohm_per_km=0.6031856, c0_nf_per_km=140.3, max_i_ka=0.531, r_ohm_per_km=.0762, x_ohm_per_km=0.1507964, c_nf_per_km=140) pp.add_zero_impedance_parameters(net) pp.create_asymmetric_load(net, busk, p_a_mw=50, q_a_mvar=20, p_b_mw=80, q_b_mvar=60, p_c_mw=20, q_c_mvar=5) pp.create_asymmetric_load(net, busm, p_a_mw=50, q_a_mvar=50, p_b_mw=10, q_b_mvar=15, p_c_mw=10, q_c_mvar=5) pp.create_asymmetric_load(net, busp, p_a_mw=50, q_a_mvar=20, p_b_mw=60, q_b_mvar=20, p_c_mw=10, q_c_mvar=5) runpp_3ph_with_consistency_checks(net) assert net['converged'] bus_pp = np.abs(net.res_bus_3ph[[ 'vm_a_pu', 'vm_b_pu', 'vm_c_pu' ]][~np.isnan(net.res_bus_3ph.vm_a_pu)].values) bus_pf = np.abs( np.array([[0.98085729, 0.97711997, 1.04353786], [0.97828577, 0.97534651, 1.04470864], [0.97774307, 0.97648197, 1.04421233], [0.9780892, 0.97586805, 1.04471106]])) assert np.max(np.abs(bus_pp - bus_pf)) < 1e-8 line_pp = np.abs(net.res_line_3ph[[ 'i_a_from_ka', 'i_b_from_ka', 'i_c_from_ka', 'i_a_to_ka', 'i_b_to_ka', 'i_c_to_ka', 'p_a_from_mw', 'p_b_from_mw', 'p_c_from_mw', 'q_a_from_mvar', 'q_b_from_mvar', 'q_c_from_mvar', 'p_a_to_mw', 'p_b_to_mw', 'p_c_to_mw', 'q_a_to_mvar', 'q_b_to_mvar', 'q_c_to_mvar', 'loading_a_percent', 'loading_b_percent', 'loading_c_percent', 'loading_percent' ]].values) line_pf = np.abs( np.array([[ 0.98898804851, 0.68943734, 0.19848961, 0.99093993, 0.69146384, 0.19966503, 49.87434308, 33.86579548, 12.44659879, 36.16562613, 26.14426519, 4.25746428, -49.75842138, -33.90236497, -12.45155362, -36.19862688, -26.25675246, -4.50384238, 133.730100000000, 93.314960000000, 26.945350000000, 133.730100000000 ], [ 0.87075816277, 1.03463205, 0.19072622, 0.87210779, 1.03599167, 0.19188991, 49.59359423, 58.53676842, 11.97553941, 21.96967200, 26.37559958, 4.04458873, -49.47110289, -58.55284705, -11.98669516, -22.07474008, -26.34476811, -4.29078447, 117.693400000000, 139.809900000000, 25.896070000000, 139.809900000000 ], [ 0.95760407055, 1.14786582, 0.24829126, 0.95975383, 1.15028040, 0.24975553, 50.87938854, 57.53628873, 15.54470531, 31.13888557, 41.99378843, 5.39758513, -50.76249094, -57.56374777, -15.56099267, -31.28560646, -41.99056453, -5.69609575, 107.837500000000, 129.245000000000, 28.062420000000, 129.245000000000 ], [ 0.21780921494, 0.42795803, 0.03706412, 0.22229619, 0.42603286, 0.03771703, 0.23292404, -23.88471674, -2.45255095, 13.53037092, -11.49972060, 0.17971665, -0.24157862, 23.90236497, 2.45155361, -13.80137312, 11.25675247, -0.49615762, 23.083720000000, 44.440090000000, 3.916618000000, 44.440090000000 ], [ 0.03712221482, 0.10766244, 0.03093505, 0.03446871, 0.10500386, 0.03179428, 0.52956690, 1.44846452, -1.98645639, -2.24476446, -6.50971485, 0.51637910, -0.52889712, -1.44715295, 1.98669515, 2.07474008, 6.34476812, -0.70921554, 6.991001000000, 20.275410000000, 5.987624000000, 20.275410000000 ]])) assert np.max(np.abs(line_pp - line_pf)) < 1e-4