def _csv_types_to_pp2(net): """ Moves all DataFrames in net named with "std_types|" to net.std_types as dict and loads type data into element tables. """ element_types = ["line", "trafo", "trafo3w"] for element_type in element_types: # --- copy type data from dataframes like net["LineType*std_types|line"] into net.std_types # --- as dict tablename = "std_types|" + element_type type_table = net[tablename] merged_type_table = merge_dataframes( [type_table, pd.DataFrame(net.std_types[element_type]).T], sort_index=False, sort_column=False) if element_type == "line": _assume_cs_ohl_line_type(merged_type_table) data = merged_type_table.to_dict("index") pp.create_std_types(net, data, element_type) # --- load type data into element tables type_columns = net[element_type].columns.intersection( net[tablename].columns) uniq_types = net[element_type].std_type.unique() for uniq_type in uniq_types: this_type_elm = net[element_type].std_type == uniq_type net[element_type].loc[this_type_elm, type_columns] = merged_type_table.loc[ uniq_type, type_columns].values.reshape( 1, -1).repeat(sum(this_type_elm), axis=0) # --- delete dataframes like net["LineType*std_types|line"] del net[tablename]
def test_create_std_types_trafo(): net = pp.create_empty_network() sn_kva = 40 vn_hv_kv = 110 vn_lv_kv = 20 vsc_percent = 5. vscr_percent = 2. pfe_kw = 50 i0_percent = 0.1 shift_degree = 30 typdata = { "sn_kva": sn_kva, "vn_hv_kv": vn_hv_kv, "vn_lv_kv": vn_lv_kv, "vsc_percent": vsc_percent, "vscr_percent": vscr_percent, "pfe_kw": pfe_kw, "i0_percent": i0_percent, "shift_degree": shift_degree } typdatas = {"typ1": typdata, "typ2": typdata} pp.create_std_types(net, data=typdatas, element="trafo") assert net.std_types["trafo"]["typ1"] == typdata assert net.std_types["trafo"]["typ2"] == typdata
def test_create_std_types_line(): net = 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} typdatas = {"typ1": typdata, "typ2": typdata} pp.create_std_types(net, data=typdatas, element="line") assert net.std_types["line"]["typ1"] == typdata assert net.std_types["line"]["typ1"] == typdata
def test_create_std_types_trafo3w(): net = pp.create_empty_network() sn_hv_mva = 40 sn_mv_mva = 20 sn_lv_mva = 20 vn_hv_kv = 110 vn_mv_kv = 50 vn_lv_kv = 20 vk_hv_percent = 5. vk_mv_percent = 5. vk_lv_percent = 5. vkr_hv_percent = 2. vkr_mv_percent = 2. vkr_lv_percent = 2. pfe_kw = 50 i0_percent = 0.1 shift_mv_degree = 30 shift_lv_degree = 30 typdata = { "vn_hv_kv": vn_hv_kv, "vn_mv_kv": vn_mv_kv, "vn_lv_kv": vn_lv_kv, "sn_hv_mva": sn_hv_mva, "sn_mv_mva": sn_mv_mva, "sn_lv_mva": sn_lv_mva, "vk_hv_percent": vk_hv_percent, "vk_mv_percent": vk_mv_percent, "vk_lv_percent": vk_lv_percent, "vkr_hv_percent": vkr_hv_percent, "vkr_mv_percent": vkr_mv_percent, "vkr_lv_percent": vkr_lv_percent, "pfe_kw": pfe_kw, "i0_percent": i0_percent, "shift_mv_degree": shift_mv_degree, "shift_lv_degree": shift_lv_degree } typdatas = {"typ1": typdata, "typ2": typdata} pp.create_std_types(net, data=typdatas, element="trafo3w") assert net.std_types["trafo3w"]["typ1"] == typdata assert net.std_types["trafo3w"]["typ2"] == typdata
def createnet(include_load_shedding=False, include_bat=False): GENDATA,DEMDATA,LINDATA,STODATA = ld.loadsystemdata() NUMNODES = 3 numgen = len(GENDATA) numlin = len(LINDATA) numdem = len(DEMDATA) numsto = len(STODATA) # ========================================================================= # CREATE EMPTY NET # ========================================================================= net = pp.create_empty_network(f_hz=50.0, sn_mva=100) # ========================================================================= # CREATE BUSES # ========================================================================= for i in range(numgen): pp.create_bus(net,vn_kv=220, index = i, max_vm_pu=1.05, min_vm_pu=0.95) cntidx = NUMNODES j=-1 for i in range(numgen): barcon = GENDATA[i][1] if(barcon>j): j=j+1 pp.create_bus(net, index = cntidx+j, vn_kv=13.8, max_vm_pu=1.05, min_vm_pu=0.95) # ========================================================================= # CREATE GENERATORS # ========================================================================= j=-1 indexgen=0 for i in range(numgen): pp.create_gen(net, vm_pu=1.02, index=indexgen, bus=GENDATA[i][1], p_mw = 0, sn_mva = GENDATA[i][13], max_p_mw = GENDATA[i][9], min_p_mw = GENDATA[i][10],max_q_mvar=GENDATA[i][11], min_q_mvar=GENDATA[i][12], controllable=True) indexgen = indexgen + 1 #create trafos barcon = GENDATA[i][1] if(barcon>j): j=j+1 pp.create_transformer(net, hv_bus=GENDATA[i][1], lv_bus=cntidx+j, std_type="500 MVA 220/13.8 kV") # ========================================================================= # CREATE LINES # ========================================================================= for i in range(numlin): fmax = LINDATA[i][1]/(3**0.5*220) ltype = {'typ'+str(i):{"r_ohm_per_km": LINDATA[i][5], "x_ohm_per_km": LINDATA[i][4], "c_nf_per_km": 10, "max_i_ka": fmax, "type": "ol", "qmm2":490, "alpha":4.03e-3}} pp.create_std_types(net,data=ltype,element='line') pp.create_line(net, from_bus=LINDATA[i][2], to_bus=LINDATA[i][3], length_km=LINDATA[i][6], std_type="typ"+str(i)) # ========================================================================= # CREATE LOADS # ========================================================================= for i in range(numdem): pp.create_load(net, index=i, bus=DEMDATA[i][0], p_mw = DEMDATA[i][1], q_mvar=DEMDATA[i][2], max_p_mw = DEMDATA[i][1], min_p_mw=DEMDATA[i][1], max_q_mvar = DEMDATA[i][2], min_q_mvar=DEMDATA[i][5], controllable = include_load_shedding) pp.create_poly_cost(net,i,'load',cp1_eur_per_mw=DEMDATA[i][3]) # ========================================================================= # CREATE STORAGE # ========================================================================= for i in range(numsto): pp.create_storage(net, index=i, bus=NUMNODES + i, p_mw = 0, q_mvar=0, max_e_mwh=100000, max_p_mw = STODATA[i][7], min_p_mw=STODATA[i][8], max_q_mvar=STODATA[i][9], min_q_mvar= STODATA[i][10], in_service=include_bat, controllable=include_bat) pp.create_poly_cost(net,i,'storage',cp1_eur_per_mw=STODATA[i][2]) return net
def evalTec(NUMNODES, PGEN, GENDATA, DEMDATA, LINDATA, BATDATA, slack_gen1, slack_gen2, filename_res, s, print_results=False): numgen = len(GENDATA) numlin = len(LINDATA) numdem = len(DEMDATA) # ========================================================================= # CREATE EMPTY NET # ========================================================================= net = pp.create_empty_network(f_hz=50.0, sn_mva=100) # ========================================================================= # CREATE BUSES # ========================================================================= for i in range(numgen): pp.create_bus(net, vn_kv=220, index=i, max_vm_pu=1.1, min_vm_pu=0.9) cntidx = NUMNODES j = -1 for i in range(numgen): barcon = GENDATA[i][1] if (barcon > j): j = j + 1 pp.create_bus(net, index=cntidx + j, vn_kv=13.8, max_vm_pu=1.03, min_vm_pu=0.97) # ========================================================================= # CREATE GENERATORS # ========================================================================= j = -1 for i in range(numgen): pp.create_gen(net, bus=GENDATA[i][1], p_mw=PGEN[i], sn_mva=GENDATA[i][11], in_service=(s != (i + 1)), max_p_mw=GENDATA[i][7], min_p_mw=GENDATA[i][8], max_q_mvar=GENDATA[i][9], min_q_mvar=GENDATA[i][10], controllable=False, slack=False) #create trafos barcon = GENDATA[i][1] if (barcon > j): j = j + 1 pp.create_transformer(net, hv_bus=GENDATA[i][1], lv_bus=cntidx + j, std_type="250 MVA 220/13.8 kV") #set slack gen if (s == 1): net.gen['slack'][slack_gen2] = True else: net.gen['slack'][slack_gen1] = True # ========================================================================= # CREATE LINES # ========================================================================= for i in range(numlin): fmax = LINDATA[i][1] / (3**0.5 * 220) ltype = { 'typ' + str(i): { "r_ohm_per_km": LINDATA[i][5], "x_ohm_per_km": LINDATA[i][4], "c_nf_per_km": 10, "max_i_ka": fmax, "type": "ol", "qmm2": 490, "alpha": 4.03e-3 } } pp.create_std_types(net, data=ltype, element='line') pp.create_line(net, from_bus=LINDATA[i][2], to_bus=LINDATA[i][3], length_km=LINDATA[i][6], std_type="typ" + str(i), in_service=(s != numgen + 1 + i)) # ========================================================================= # CREATE LOADS # ========================================================================= #create loads for i in range(numdem): pp.create_load(net, bus=DEMDATA[i][0], p_mw=DEMDATA[i][1], q_mvar=DEMDATA[i][2]) # ========================================================================= # PRINT # ========================================================================= pp.runpp(net) if (print_results): print('----- Buses Results -----') print(net.res_bus) print('----- Lines Results -----') print(net.res_line) print('----- Transformers Results -----') print(net.res_trafo) print('----- Generators Results -----') print(net.res_gen) # ========================================================================= # SAVE # ========================================================================= row = [3, 13, 23, 33, 43, 53, 63] wb = xw.Book(filename_res) sht = wb.sheets['Tecnicos'] sht.range('B' + str(row[s])).value = net.res_bus sht.range('I' + str(row[s])).value = net.res_line sht.range('Z' + str(row[s])).value = net.res_trafo sht.range('AP' + str(row[s])).value = net.res_gen return