Beispiel #1
0
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
Beispiel #4
0
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
Beispiel #5
0
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