def add_test_impedance(net): b1, b2, ln = add_grid_connection(net, zone="test_impedance") b3 = pp.create_bus(net, vn_kv=220., zone="test_impedance") rij = 0.02 xij = 0.01 rji = 0.03 xji = 0.005 s = 2. pl = 1 ql = 0.5 pp.create_impedance(net, b2, b3, rft_pu=rij, xft_pu=xij, rtf_pu=rji, xtf_pu=xji, sn_mva=s, index=pp.get_free_id(net.impedance) + 1) pp.create_impedance(net, b2, b3, rft_pu=rij, xft_pu=xij, rtf_pu=rji, xtf_pu=xji, sn_mva=s, index=pp.get_free_id(net.impedance) + 1, in_service=False) pp.create_load(net, b3, p_mw=pl, q_mvar=ql) net.last_added_case = "test_impedance" return net
def add_test_trafo3w(net): b1, b2, ln = add_grid_connection(net, zone="test_trafo3w") b3 = pp.create_bus(net, vn_kv=0.6, zone="test_trafo3w") pp.create_load(net, b3, p_kw=200, q_kvar=0) b4 = pp.create_bus(net, vn_kv=0.4, zone="test_trafo3w") pp.create_load(net, b4, p_kw=100, q_kvar=0) pp.create_transformer3w_from_parameters(net, hv_bus=b2, mv_bus=b3, lv_bus=b4, vn_hv_kv=22, vn_mv_kv=.64, vn_lv_kv=.42, sn_hv_kva=1000, sn_mv_kva=700, sn_lv_kva=300, vsc_hv_percent=1., vscr_hv_percent=.03, vsc_mv_percent=.5, vscr_mv_percent=.02, vsc_lv_percent=.25, vscr_lv_percent=.01, pfe_kw=.5, i0_percent=0.1, name="test", index=pp.get_free_id(net.trafo3w) + 1, tp_side="hv", tp_pos=2, tp_st_percent=1.25, tp_min=-5, tp_mid=0, tp_max=5) # adding out of service 3w trafo should not change results pp.create_transformer3w_from_parameters(net, hv_bus=b2, mv_bus=b3, lv_bus=b4, vn_hv_kv=20, vn_mv_kv=.6, vn_lv_kv=.4, sn_hv_kva=1000, sn_mv_kva=700, sn_lv_kva=300, vsc_hv_percent=2., vscr_hv_percent=.3, vsc_mv_percent=1., vscr_mv_percent=.2, vsc_lv_percent=.5, vscr_lv_percent=.1, pfe_kw=50., i0_percent=1., name="test", in_service=False, index=pp.get_free_id(net.trafo3w) + 1) net.last_added_case = "test_trafo3w" return net
def add_test_gen(net): b1, b2, ln = add_grid_connection(net, zone="test_gen") pl = 1.200 ql = 1.100 ps = 0.500 vm_set_pu = 1.0 b3 = pp.create_bus(net, zone="test_gen", vn_kv=.4) pp.create_line_from_parameters(net, b2, b3, 12.2, r_ohm_per_km=0.08, x_ohm_per_km=0.12, c_nf_per_km=300, max_i_ka=.2, df=.8) pp.create_load(net, b3, p_mw=pl, q_mvar=ql) pp.create_gen(net, b3, p_mw=ps, vm_pu=vm_set_pu) # adding out of serivce gens should not change the result pp.create_gen(net, b2, p_mw=ps, vm_pu=vm_set_pu, in_service=False, index=pp.get_free_id(net.gen) + 1) net.last_added_case = "test_gen" return net
def add_test_xward(net): b1, b2, ln = add_grid_connection(net, zone="test_xward") pz = 1.200 qz = 1.100 ps = 0.500 qs = 0.200 vm_pu = 1.06 r_ohm = 50 x_ohm = 70 # one xward at a bus pp.create_xward(net, b2, pz_mw=pz, qz_mvar=qz, ps_mw=ps, qs_mvar=qs, vm_pu=vm_pu, x_ohm=x_ohm, r_ohm=r_ohm) # add out of service xward should not change the result pp.create_xward(net, b2, pz_mw=pz, qz_mvar=qz, ps_mw=ps, qs_mvar=qs, vm_pu=vm_pu, x_ohm=x_ohm, r_ohm=r_ohm, in_service=False, index=pp.get_free_id(net.xward) + 1) net.last_added_case = "test_xward" return net
def add_test_load_sgen(net): b1, b2, ln = add_grid_connection(net, zone="test_load_sgen") pl = 1200 ql = 1100 ps = -500 qs = 100 # load and sgen at one bus pp.create_load(net, b2, p_kw=pl, q_kvar=ql) pp.create_sgen(net, b2, p_kw=ps, q_kvar=qs) # adding out of serivce loads and sgens should not change the result pp.create_load(net, b2, p_kw=pl, q_kvar=ql, in_service=False, index=pp.get_free_id(net.load) + 1) pp.create_sgen(net, b2, p_kw=ps, q_kvar=qs, in_service=False, index=pp.get_free_id(net.sgen) + 1) net.last_added_case = "test_load_sgen" return net
def add_grid_connection(net, vn_kv=20., zone=None): """Creates a new grid connection for create_result_test_network() """ b1 = pp.create_bus(net, vn_kv=vn_kv, zone=zone) pp.create_ext_grid(net, b1, vm_pu=1.01) b2 = pp.get_free_id(net.bus) + 2 # shake up the indices so that non-consecutive indices are tested b2 = pp.create_bus(net, vn_kv=vn_kv, zone=zone, index=b2) l1 = create_test_line(net, b1, b2) return b1, b2, l1
def add_test_trafo(net): b1, b2, ln = add_grid_connection(net, zone="test_trafo") b3 = pp.create_bus(net, vn_kv=0.4, zone="test_trafo") pp.create_transformer_from_parameters(net, b2, b3, vk_percent=5., vkr_percent=2., i0_percent=.4, pfe_kw=2., sn_mva=0.4, vn_hv_kv=22, vn_lv_kv=0.42, tap_max=10, tap_neutral=5, tap_min=0, tap_step_percent=1.25, tap_pos=3, shift_degree=150, tap_side="hv", parallel=2) t2 = pp.create_transformer_from_parameters( net, b2, b3, vk_percent=5., vkr_percent=2., i0_percent=.4, pfe_kw=2, sn_mva=0.4, vn_hv_kv=22, vn_lv_kv=0.42, tap_max=10, tap_neutral=5, tap_min=0, tap_step_percent=1.25, tap_pos=3, tap_side="hv", shift_degree=150, index=pp.get_free_id(net.trafo) + 1) pp.create_switch(net, b3, t2, et="t", closed=False) pp.create_transformer_from_parameters(net, b2, b3, vk_percent=5., vkr_percent=2., i0_percent=1., pfe_kw=20, sn_mva=0.4, vn_hv_kv=20, vn_lv_kv=0.4, in_service=False) pp.create_load(net, b3, p_mw=0.2, q_mvar=0.05) net.last_added_case = "test_trafo" return net
def create_test_line(net, b1, b2, in_service=True): return pp.create_line_from_parameters(net, b1, b2, 12.2, r_ohm_per_km=0.08, x_ohm_per_km=0.12, c_nf_per_km=300, max_i_ka=.2, df=.8, in_service=in_service, index=pp.get_free_id(net.line) + 1)
def add_test_ward(net): b1, b2, ln = add_grid_connection(net, zone="test_ward") pz = 1200 qz = 1100 ps = 500 qs = 200 # one shunt at a bus pp.create_ward(net, b2, pz_kw=pz, qz_kvar=qz, ps_kw=ps, qs_kvar=qs) # add out of service ward shuold not change the result pp.create_ward(net, b2, pz_kw=pz, qz_kvar=qz, ps_kw=ps, qs_kvar=qs, in_service=False, index=pp.get_free_id(net.ward) + 1) net.last_added_case = "test_ward" 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 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 network_with_trafo3ws(): net = pp.create_empty_network() add_test_trafo(net) slack, hv, ln = add_grid_connection(net, zone="test_trafo3w") for _ in range(2): mv = pp.create_bus(net, vn_kv=0.6, zone="test_trafo3w") pp.create_load(net, mv, p_mw=0.8, q_mvar=0) lv = pp.create_bus(net, vn_kv=0.4, zone="test_trafo3w") pp.create_load(net, lv, p_mw=0.5, q_mvar=0) t3 = pp.create_transformer3w_from_parameters(net, hv_bus=hv, mv_bus=mv, lv_bus=lv, vn_hv_kv=22, vn_mv_kv=.64, vn_lv_kv=.42, sn_hv_mva=1, sn_mv_mva=0.7, sn_lv_mva=0.3, vk_hv_percent=1., vkr_hv_percent=.03, vk_mv_percent=.5, vkr_mv_percent=.02, vk_lv_percent=.25, vkr_lv_percent=.01, pfe_kw=.5, i0_percent=0.1, name="test", index=pp.get_free_id(net.trafo3w) + 1, tap_side="hv", tap_pos=2, tap_step_percent=1.25, tap_min=-5, tap_neutral=0, tap_max=5) return (net, t3, hv, mv, lv)
def add_test_impedance(net): b1, b2, ln = add_grid_connection(net, zone="test_impedance") b3 = pp.create_bus(net, vn_kv=220., zone="test_impedance") r = 0.02 x = 0.01 s = 2000 pl = 1000 ql = 500 pp.create_impedance(net, b2, b3, r_pu=r, x_pu=x, sn_kva=s, index=pp.get_free_id(net.impedance) + 1) pp.create_load(net, b3, p_kw=pl, q_kvar=ql) net.last_added_case = "test_impedance" return net
def add_test_trafo(net): b1, b2, ln = add_grid_connection(net, zone="test_trafo") b3 = pp.create_bus(net, vn_kv=0.4, zone="test_trafo") pp.create_transformer_from_parameters(net, b2, b3, vsc_percent=5., vscr_percent=2., i0_percent=1., pfe_kw=20, sn_kva=400, vn_hv_kv=20, vn_lv_kv=0.4) t2 = pp.create_transformer_from_parameters( net, b2, b3, vsc_percent=5., vscr_percent=2., i0_percent=1., pfe_kw=20, sn_kva=400, vn_hv_kv=20, vn_lv_kv=0.4, index=pp.get_free_id(net.trafo) + 1) pp.create_switch(net, b3, t2, et="t", closed=False) pp.create_transformer_from_parameters(net, b2, b3, vsc_percent=5., vscr_percent=2., i0_percent=1., pfe_kw=20, sn_kva=400, vn_hv_kv=20, vn_lv_kv=0.4, in_service=False) pp.create_load(net, b3, p_kw=200, q_kvar=50) net.last_added_case = "test_trafo" return net
res_vm_kv = np.concatenate( (net.res_bus_3ph[(net.bus.zone == vc) & (net.bus.in_service)].vm_a_pu, net.res_bus_3ph[(net.bus.zone == vc) & (net.bus.in_service)].vm_b_pu, net.res_bus_3ph[(net.bus.zone == vc) & (net.bus.in_service)].vm_c_pu), axis=0) assert np.allclose(result, res_vm_kv, atol=1e-4) if not np.allclose(result, res_vm_kv, atol=1e-4): raise ValueError("Incorrect results for vector group %s" % vc, res_vm_kv, result) def make_nw(net, bushv, tap_ps, case, vector_group): b1 = pp.create_bus(net, bushv, zone=vector_group, index=pp.get_free_id(net.bus)) b2 = pp.create_bus(net, 0.4, zone=vector_group) b3 = pp.create_bus(net, 0.4, zone=vector_group) pp.create_ext_grid(net, b1, s_sc_max_mva=10000, rx_max=0.1, r0x0_max=0.1, x0x_max=1.0) pp.create_transformer_from_parameters(net, hv_bus=b1, lv_bus=b2, sn_mva=1.6, vn_hv_kv=10, vn_lv_kv=0.4, vk_percent=6,
'Dyn': 1e-03, 'Yzn': 1e-03} assert np.allclose(result, res_trafo_i_ka, atol=tolerances[trafo_vector_group]) if not np.allclose(result, res_trafo_i_ka, atol=tolerances[trafo_vector_group]): raise ValueError("Incorrect results for vector group %s" % trafo_vector_group, res_trafo_i_ka, result) def check_results(net, trafo_vector_group, results): check_bus_voltages(net, results[0], trafo_vector_group) check_line_currents(net, results[1], trafo_vector_group) check_trafo_currents(net, results[2], trafo_vector_group) def make_nw(net, bushv, tap_ps, case, vector_group): b1 = pp.create_bus(net, bushv, zone=vector_group, index=pp.get_free_id(net.bus)) b2 = pp.create_bus(net, 0.4, zone=vector_group) b3 = pp.create_bus(net, 0.4, zone=vector_group) pp.create_ext_grid(net, b1, s_sc_max_mva=10000, rx_max=0.1, r0x0_max=0.1, x0x_max=1.0) pp.create_transformer_from_parameters(net, hv_bus=b1, lv_bus=b2, sn_mva=1.6, vn_hv_kv=10, vn_lv_kv=0.4, vk_percent=6, vkr_percent=0.78125, pfe_kw=2.7, i0_percent=0.16875, shift_degree=0, tap_side='lv', 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,
def test_trafo3w_switches(): net = pp.create_empty_network() add_test_trafo(net) slack, hv, ln = add_grid_connection(net, zone="test_trafo3w") for _ in range(2): mv = pp.create_bus(net, vn_kv=0.6, zone="test_trafo3w") pp.create_load(net, mv, p_kw=800, q_kvar=0) lv = pp.create_bus(net, vn_kv=0.4, zone="test_trafo3w") pp.create_load(net, lv, p_kw=500, q_kvar=0) t3 = pp.create_transformer3w_from_parameters( net, hv_bus=hv, mv_bus=mv, lv_bus=lv, vn_hv_kv=22, vn_mv_kv=.64, vn_lv_kv=.42, sn_hv_kva=1000, sn_mv_kva=700, sn_lv_kva=300, vsc_hv_percent=1., vscr_hv_percent=.03, vsc_mv_percent=.5, vscr_mv_percent=.02, vsc_lv_percent=.25, vscr_lv_percent=.01, pfe_kw=.5, i0_percent=0.1, name="test", index=pp.get_free_id(net.trafo3w) + 1, tp_side="hv", tp_pos=2, tp_st_percent=1.25, tp_min=-5, tp_mid=0, tp_max=5) # open switch at hv side - t3 is disconnected s1 = pp.create_switch(net, bus=hv, element=t3, et="t3", closed=False) runpp_with_consistency_checks(net) assert np.isnan(net.res_bus.vm_pu.at[mv]) assert np.isnan(net.res_bus.vm_pu.at[lv]) assert np.isnan(net.res_trafo3w.p_hv_kw.at[t3]) == 0 # open switch at mv side - mv is disconnected, lv is connected net.switch.bus.at[s1] = mv runpp_with_consistency_checks(net) assert np.isnan(net.res_bus.vm_pu.at[mv]) assert not np.isnan(net.res_bus.vm_pu.at[lv]) assert net.res_trafo3w.i_lv_ka.at[t3] > 1e-5 assert net.res_trafo3w.i_mv_ka.at[t3] < 1e-5 assert 490 < net.res_trafo3w.p_hv_kw.at[t3] < 510 # open switch at lv side - lv is disconnected, mv is connected net.switch.bus.at[s1] = lv runpp_with_consistency_checks(net) assert np.isnan(net.res_bus.vm_pu.at[lv]) assert not np.isnan(net.res_bus.vm_pu.at[mv]) assert net.res_trafo3w.i_lv_ka.at[t3] < 1e-5 assert net.res_trafo3w.i_mv_ka.at[t3] > 1e-5 assert 790 < net.res_trafo3w.p_hv_kw.at[t3] < 810 # open switch at lv and mv side - lv and mv is disconnected, t3 in open loop pp.create_switch(net, bus=mv, element=t3, et="t3", closed=False) runpp_with_consistency_checks(net) assert np.isnan(net.res_bus.vm_pu.at[lv]) assert np.isnan(net.res_bus.vm_pu.at[mv]) assert net.res_trafo3w.i_lv_ka.at[t3] < 1e-5 assert net.res_trafo3w.i_mv_ka.at[t3] < 1e-5 assert 0 < net.res_trafo3w.p_hv_kw.at[t3] < 1
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=80, rx_min=0.20, rx_max=0.35) net.ext_grid["r0x0_max"] = 0.4 net.ext_grid["x0x_max"] = 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 = copy.copy( pp.load_std_type(net, "25 MVA 110/20 kV v1.4.3 and older", "trafo")) transformer_type.update({ "vsc0_percent": 5, "vscr0_percent": 0.4, "mag0_percent": 10, "mag0_rx": 0.4, "mag0_rx": 0.4, "si0_hv_partial": 0.9, "vector_group": vector_group }) 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