コード例 #1
0
def create_case14_PV_Wind_Storage():
    """
    creates IEEE 14 node network fitted for providing cranking power to 
    islanded areas i.e. storage units are treated as slack nodes
    
    Return
    ------
    pp IEEE 14 node network
    """

    net = nw.case14()
    for gen in net.gen.index:
        net["gen"].drop(gen, inplace=True)

    net["shunt"].drop(0, inplace=True)

    pp.create_storage(net, 2, p_mw=-10, max_e_mwh=10, soc_percent=1)
    pp.create_gen(net, 2, p_mw=0, slack=True, type="bat")

    pp.create_storage(net, 12, p_mw=-10, max_e_mwh=10, soc_percent=1)
    pp.create_gen(net, 12, p_mw=0, slack=True, type="bat")

    pp.create_sgen(net, 7, p_mw=200, type="solar")
    pp.create_sgen(net, 10, p_mw=200, type="solar")

    pp.create_sgen(net, 11, p_mw=200, type="wind")
    pp.create_sgen(net, 13, p_mw=200, type="wind")

    return net
コード例 #2
0
def test_storage_opt():
    net = nw.case5()
    pp.create_storage(net,
                      2,
                      p_mw=1.,
                      max_e_mwh=.2,
                      soc_percent=100.,
                      q_mvar=1.)
    pp.create_storage(net,
                      3,
                      p_mw=1.,
                      max_e_mwh=.3,
                      soc_percent=100.,
                      q_mvar=1.)

    # optimize for 24 time steps. At the end the SOC is 0%
    storage_results = pp.runpm_storage_opf(net, n_timesteps=24)
    assert np.allclose(storage_results[0].loc[22, "soc_mwh"],
                       0.004960,
                       rtol=1e-4,
                       atol=1e-4)
    assert np.allclose(storage_results[0].loc[23, "soc_mwh"], 0.)
    assert np.allclose(storage_results[1].loc[22, "soc_percent"],
                       29.998074,
                       rtol=1e-4,
                       atol=1e-4)
    assert np.allclose(storage_results[1].loc[23, "soc_mwh"], 0.)
コード例 #3
0
def add_battery(net,
                bus_number,
                p_init,
                energy_capacity,
                init_soc=0.5,
                max_p=50,
                min_p=-50,
                eff=1.0,
                capital_cost=0,
                min_e=0.):
    """Change the network by adding a battery / storage unit.

    This function creates a storage element in net, and adds two non-standard columns: efficiency and capital cost.

    Parameters
    ----------
    net: class
        The pandapower network model
    bus_number: int
        Where the battery will be added
    p_init: float
        The power draw / input of the battery on initialization
    init_soc: float
        The state of charge
    max_p: float
        The max rate that power can be drawn by the battery
    min_p: float
        The max rate that power can be pulled from the battery (negative).
    eff: float
        The efficiency
    capital_cost: float
        The capital cost of the battery
    min_e: float
        The minimum energy in the battery
    """
    pp.create_storage(net,
                      bus_number,
                      p_init,
                      energy_capacity,
                      soc_percent=init_soc,
                      max_p_kw=max_p,
                      min_p_kw=min_p,
                      min_e_kwh=min_e)
    idx = net.storage.index[-1]
    net.storage.loc[idx, 'eff'] = eff
    net.storage.loc[idx, 'cap_cost'] = capital_cost
コード例 #4
0
ファイル: test_runpp.py プロジェクト: vandersonpc/pandapower
def test_storage_pf():
    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_line(net, b1, b2, length_km=5, std_type="NAYY 4x50 SE")

    pp.create_ext_grid(net, b2)
    pp.create_load(net, b1, p_kw=10)
    pp.create_sgen(net, b1, p_kw=-10)

    # test generator behaviour
    pp.create_storage(net, b1, p_kw=-10, max_e_kwh=10)
    pp.create_sgen(net, b1, p_kw=-10, in_service=False)

    res_gen_beh = runpp_with_consistency_checks(net)
    res_ll_stor = net["res_line"].loading_percent.iloc[0]

    net["storage"].in_service.iloc[0] = False
    net["sgen"].in_service.iloc[1] = True

    runpp_with_consistency_checks(net)
    res_ll_sgen = net["res_line"].loading_percent.iloc[0]

    assert np.isclose(res_ll_stor, res_ll_sgen)

    # test load behaviour
    pp.create_load(net, b1, p_kw=10, in_service=False)
    net["storage"].in_service.iloc[0] = True
    net["storage"].p_kw.iloc[0] = 10
    net["sgen"].in_service.iloc[1] = False

    res_load_beh = runpp_with_consistency_checks(net)
    res_ll_stor = net["res_line"].loading_percent.iloc[0]

    net["storage"].in_service.iloc[0] = False
    net["load"].in_service.iloc[1] = True

    runpp_with_consistency_checks(net)
    res_ll_load = net["res_line"].loading_percent.iloc[0]

    assert np.isclose(res_ll_stor, res_ll_load)

    assert res_gen_beh and res_load_beh
コード例 #5
0
def create_4GS_PV_Wind_Storage():
    """
    creates a simple 4 node network fitted for providing cranking power to 
    islanded areas i.e. storage units are treated as slack nodes
    
    Return
    -------
    4 node pp network
    """
    net = nw.case4gs()
    net["gen"].drop(0, inplace=True)

    pp.create_storage(net, 1, p_mw=-50, max_e_mwh=10)
    pp.create_gen(net, 1, p_mw=0, slack=True, type="bat")
    pp.create_sgen(net, 2, p_mw=500, type="solar")
    pp.create_sgen(net, 3, p_mw=500, type="wind")

    net.load.p_mw = 0.5 * net.load.p_mw

    return net
コード例 #6
0
ファイル: pandapower.py プロジェクト: mukundwadhwa/d3a-1
 def add_storage_device(self, area):
     soc_ratio = convert_percent_to_ratio(area.strategy.initial_soc)
     battery_capacity_mwh = convert_kilo_to_mega(
         area.strategy.state.capacity)
     min_energy_mwh = area.strategy.state.min_allowed_soc_ratio * battery_capacity_mwh
     return pp.create_storage(self.network,
                              bus=area.parent.bus,
                              p_mw=battery_capacity_mwh,
                              max_e_mwh=battery_capacity_mwh,
                              min_e_mwh=min_energy_mwh,
                              soc_percent=soc_ratio,
                              name=area.name)
コード例 #7
0
def test_storage_pf():
    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_line(net, b1, b2, length_km=5, std_type="NAYY 4x50 SE")

    pp.create_ext_grid(net, b2)
    pp.create_load(net, b1, p_kw=10)
    pp.create_sgen(net, b1, p_kw=-10)

    # test generator behaviour
    pp.create_storage(net, b1, p_kw=-10, max_e_kwh=10)

    res_gen_beh = runpp_with_consistency_checks(net)

    # test load behaviour
    net["storage"].p_kw.iloc[0] = 10

    res_load_beh = runpp_with_consistency_checks(net)

    assert res_gen_beh and res_load_beh
コード例 #8
0
def create_case39_PV_Wind_Storage():
    """
    creates IEEE 39 bus test case a pp network. 
    
    Return
    ------
    pp IEEE 39 nide test case
    """
    net = nw.case39()

    for gen in net.gen.index:
        net["gen"].drop(gen, inplace=True)

    pp.create_storage(net, 1, p_mw=-20, max_e_mwh=20, soc_percent=1)
    pp.create_storage(net, 21, p_mw=-20, max_e_mwh=40, soc_percent=1)
    pp.create_storage(net, 12, p_mw=-10, max_e_mwh=20, soc_percent=1)
    pp.create_storage(net, 32, p_mw=-20, max_e_mwh=40, soc_percent=1)

    pp.create_gen(net, 1, p_mw=0, slack=True, type="bat")
    pp.create_gen(net, 21, p_mw=0, slack=True, type="bat")
    pp.create_gen(net, 12, p_mw=0, slack=True, type="bat")
    pp.create_gen(net, 32, p_mw=0, slack=True, type="bat")

    pp.create_sgen(net, 29, p_mw=250, type="solar")
    pp.create_sgen(net, 31, p_mw=100, type="solar")
    pp.create_sgen(net, 33, p_mw=50, type="wind")
    pp.create_sgen(net, 34, p_mw=500, type="solar")
    pp.create_sgen(net, 35, p_mw=100, type="solar")
    pp.create_sgen(net, 36, p_mw=250, type="solar")
    pp.create_sgen(net, 37, p_mw=300, type="wind")
    pp.create_sgen(net, 38, p_mw=100, type="wind")
    pp.create_sgen(net, 16, p_mw=200, type="wind")
    pp.create_sgen(net, 4, p_mw=250, type="solar")

    #    decrease load size to match size of sgen capacity
    net.load.p_mw = .2 * net.load.p_mw

    return net
コード例 #9
0
ファイル: simulation.py プロジェクト: ignacio3009/SIPS-V2
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
コード例 #10
0
def def_EV_QReg(net, bus, df, pers):
    ev = pp.create_storage(net, bus, p_mw = 0, max_e_mwh = pers.cap_bat, name = "ev bus"+str(bus), soc_percent=0.5)
    ds = pt.DFData(df)
    EVQRegControl(net, gid = ev, data_source=ds, efficiency = pers.efficiency)
コード例 #11
0
def create_cigre_network_lv():
    """
    Create the CIGRE LV Grid from final Report of Task Force C6.04.02:
    "Benchmark Systems for Network Integration of Renewable and Distributed Energy Resources”, 2014.

    OUTPUT:
        **net** - The pandapower format network.
    """
    net_cigre_lv = pp.create_empty_network()

    # Linedata
    # UG1
    line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 0.162,
                 'x_ohm_per_km': 0.0832, 'max_i_ka': 1.0,
                 'type': 'cs'}
    pp.create_std_type(net_cigre_lv, line_data, name='UG1', element='line')

    # UG2
    line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 0.2647,
                 'x_ohm_per_km': 0.0823, 'max_i_ka': 1.0,
                 'type': 'cs'}
    pp.create_std_type(net_cigre_lv, line_data, name='UG2', element='line')

    # UG3
    line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 0.822,
                 'x_ohm_per_km': 0.0847, 'max_i_ka': 1.0,
                 'type': 'cs'}
    pp.create_std_type(net_cigre_lv, line_data, name='UG3', element='line')

    # OH1
    line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 0.4917,
                 'x_ohm_per_km': 0.2847, 'max_i_ka': 1.0,
                 'type': 'ol'}
    pp.create_std_type(net_cigre_lv, line_data, name='OH1', element='line')

    # OH2
    line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 1.3207,
                 'x_ohm_per_km': 0.321, 'max_i_ka': 1.0,
                 'type': 'ol'}
    pp.create_std_type(net_cigre_lv, line_data, name='OH2', element='line')

    # OH3
    line_data = {'c_nf_per_km': 0.0, 'r_ohm_per_km': 2.0167,
                 'x_ohm_per_km': 0.3343, 'max_i_ka': 1.0,
                 'type': 'ol'}
    pp.create_std_type(net_cigre_lv, line_data, name='OH3', element='line')

    # Busses
    bus0 = pp.create_bus(net_cigre_lv, name='Bus 0', vn_kv=20.0, type='b', zone='CIGRE_LV')
    busR0 = pp.create_bus(net_cigre_lv, name='Bus R0', vn_kv=20.0, type='b', zone='CIGRE_LV')
    busR1 = pp.create_bus(net_cigre_lv, name='Bus R1', vn_kv=0.4, type='b', zone='CIGRE_LV')
    busR2 = pp.create_bus(net_cigre_lv, name='Bus R2', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR3 = pp.create_bus(net_cigre_lv, name='Bus R3', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR4 = pp.create_bus(net_cigre_lv, name='Bus R4', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR5 = pp.create_bus(net_cigre_lv, name='Bus R5', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR6 = pp.create_bus(net_cigre_lv, name='Bus R6', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR7 = pp.create_bus(net_cigre_lv, name='Bus R7', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR8 = pp.create_bus(net_cigre_lv, name='Bus R8', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR9 = pp.create_bus(net_cigre_lv, name='Bus R9', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR10 = pp.create_bus(net_cigre_lv, name='Bus R10', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR11 = pp.create_bus(net_cigre_lv, name='Bus R11', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR12 = pp.create_bus(net_cigre_lv, name='Bus R12', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR13 = pp.create_bus(net_cigre_lv, name='Bus R13', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR14 = pp.create_bus(net_cigre_lv, name='Bus R14', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR15 = pp.create_bus(net_cigre_lv, name='Bus R15', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR16 = pp.create_bus(net_cigre_lv, name='Bus R16', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR17 = pp.create_bus(net_cigre_lv, name='Bus R17', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busR18 = pp.create_bus(net_cigre_lv, name='Bus R18', vn_kv=0.4, type='m', zone='CIGRE_LV')

    busI0 = pp.create_bus(net_cigre_lv, name='Bus I0', vn_kv=20.0, type='b', zone='CIGRE_LV')
    busI1 = pp.create_bus(net_cigre_lv, name='Bus I1', vn_kv=0.4, type='b', zone='CIGRE_LV')
    busI2 = pp.create_bus(net_cigre_lv, name='Bus I2', vn_kv=0.4, type='m', zone='CIGRE_LV')

    busC0 = pp.create_bus(net_cigre_lv, name='Bus C0', vn_kv=20.0, type='b', zone='CIGRE_LV')
    busC1 = pp.create_bus(net_cigre_lv, name='Bus C1', vn_kv=0.4, type='b', zone='CIGRE_LV')
    busC2 = pp.create_bus(net_cigre_lv, name='Bus C2', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC3 = pp.create_bus(net_cigre_lv, name='Bus C3', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC4 = pp.create_bus(net_cigre_lv, name='Bus C4', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC5 = pp.create_bus(net_cigre_lv, name='Bus C5', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC6 = pp.create_bus(net_cigre_lv, name='Bus C6', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC7 = pp.create_bus(net_cigre_lv, name='Bus C7', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC8 = pp.create_bus(net_cigre_lv, name='Bus C8', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC9 = pp.create_bus(net_cigre_lv, name='Bus C9', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC10 = pp.create_bus(net_cigre_lv, name='Bus C10', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC11 = pp.create_bus(net_cigre_lv, name='Bus C11', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC12 = pp.create_bus(net_cigre_lv, name='Bus C12', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC13 = pp.create_bus(net_cigre_lv, name='Bus C13', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC14 = pp.create_bus(net_cigre_lv, name='Bus C14', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC15 = pp.create_bus(net_cigre_lv, name='Bus C15', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC16 = pp.create_bus(net_cigre_lv, name='Bus C16', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC17 = pp.create_bus(net_cigre_lv, name='Bus C17', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC18 = pp.create_bus(net_cigre_lv, name='Bus C18', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC19 = pp.create_bus(net_cigre_lv, name='Bus C19', vn_kv=0.4, type='m', zone='CIGRE_LV')
    busC20 = pp.create_bus(net_cigre_lv, name='Bus C20', vn_kv=0.4, type='m', zone='CIGRE_LV')

    # Lines
    pp.create_line(net_cigre_lv, busR1, busR2, length_km=0.035, std_type='UG1',
                   name='Line R1-R2')
    pp.create_line(net_cigre_lv, busR2, busR3, length_km=0.035, std_type='UG1',
                   name='Line R2-R3')
    pp.create_line(net_cigre_lv, busR3, busR4, length_km=0.035, std_type='UG1',
                   name='Line R3-R4')
    pp.create_line(net_cigre_lv, busR4, busR5, length_km=0.035, std_type='UG1',
                   name='Line R4-R5')
    pp.create_line(net_cigre_lv, busR5, busR6, length_km=0.035, std_type='UG1',
                   name='Line R5-R6')
    pp.create_line(net_cigre_lv, busR6, busR7, length_km=0.035, std_type='UG1',
                   name='Line R6-R7')
    pp.create_line(net_cigre_lv, busR7, busR8, length_km=0.035, std_type='UG1',
                   name='Line R7-R8')
    pp.create_line(net_cigre_lv, busR8, busR9, length_km=0.035, std_type='UG1',
                   name='Line R8-R9')
    pp.create_line(net_cigre_lv, busR9, busR10, length_km=0.035, std_type='UG1',
                   name='Line R9-R10')
    pp.create_line(net_cigre_lv, busR3, busR11, length_km=0.030, std_type='UG3',
                   name='Line R3-R11')
    pp.create_line(net_cigre_lv, busR4, busR12, length_km=0.035, std_type='UG3',
                   name='Line R4-R12')
    pp.create_line(net_cigre_lv, busR12, busR13, length_km=0.035, std_type='UG3',
                   name='Line R12-R13')
    pp.create_line(net_cigre_lv, busR13, busR14, length_km=0.035, std_type='UG3',
                   name='Line R13-R14')
    pp.create_line(net_cigre_lv, busR14, busR15, length_km=0.030, std_type='UG3',
                   name='Line R14-R15')
    pp.create_line(net_cigre_lv, busR6, busR16, length_km=0.030, std_type='UG3',
                   name='Line R6-R16')
    pp.create_line(net_cigre_lv, busR9, busR17, length_km=0.030, std_type='UG3',
                   name='Line R9-R17')
    pp.create_line(net_cigre_lv, busR10, busR18, length_km=0.030, std_type='UG3',
                   name='Line R10-R18')

    pp.create_line(net_cigre_lv, busI1, busI2, length_km=0.2, std_type='UG2',
                   name='Line I1-I2')

    pp.create_line(net_cigre_lv, busC1, busC2, length_km=0.030, std_type='OH1',
                   name='Line C1-C2')
    pp.create_line(net_cigre_lv, busC2, busC3, length_km=0.030, std_type='OH1',
                   name='Line C2-C3')
    pp.create_line(net_cigre_lv, busC3, busC4, length_km=0.030, std_type='OH1',
                   name='Line C3-C4')
    pp.create_line(net_cigre_lv, busC4, busC5, length_km=0.030, std_type='OH1',
                   name='Line C4-C5')
    pp.create_line(net_cigre_lv, busC5, busC6, length_km=0.030, std_type='OH1',
                   name='Line C5-C6')
    pp.create_line(net_cigre_lv, busC6, busC7, length_km=0.030, std_type='OH1',
                   name='Line C6-C7')
    pp.create_line(net_cigre_lv, busC7, busC8, length_km=0.030, std_type='OH1',
                   name='Line C7-C8')
    pp.create_line(net_cigre_lv, busC8, busC9, length_km=0.030, std_type='OH1',
                   name='Line C8-C9')
    pp.create_line(net_cigre_lv, busC3, busC10, length_km=0.030, std_type='OH2',
                   name='Line C3-C10')
    pp.create_line(net_cigre_lv, busC10, busC11, length_km=0.030, std_type='OH2',
                   name='Line C10-C11')
    pp.create_line(net_cigre_lv, busC11, busC12, length_km=0.030, std_type='OH3',
                   name='Line C11-C12')
    pp.create_line(net_cigre_lv, busC11, busC13, length_km=0.030, std_type='OH3',
                   name='Line C11-C13')
    pp.create_line(net_cigre_lv, busC10, busC14, length_km=0.030, std_type='OH3',
                   name='Line C10-C14')
    pp.create_line(net_cigre_lv, busC5, busC15, length_km=0.030, std_type='OH2',
                   name='Line C5-C15')
    pp.create_line(net_cigre_lv, busC15, busC16, length_km=0.030, std_type='OH2',
                   name='Line C15-C16')
    pp.create_line(net_cigre_lv, busC15, busC17, length_km=0.030, std_type='OH3',
                   name='Line C15-C17')
    pp.create_line(net_cigre_lv, busC16, busC18, length_km=0.030, std_type='OH3',
                   name='Line C16-C18')
    pp.create_line(net_cigre_lv, busC8, busC19, length_km=0.030, std_type='OH3',
                   name='Line C8-C19')
    pp.create_line(net_cigre_lv, busC9, busC20, length_km=0.030, std_type='OH3',
                   name='Line C9-C20')

    # Trafos
    pp.create_transformer_from_parameters(net_cigre_lv, busR0, busR1, sn_mva=0.5, vn_hv_kv=20.0,
                                          vn_lv_kv=0.4, vkr_percent=1.0, vk_percent=4.123106,
                                          pfe_kw=0.0, i0_percent=0.0, shift_degree=30.0,
                                          tap_pos=0.0, name='Trafo R0-R1')

    pp.create_transformer_from_parameters(net_cigre_lv, busI0, busI1, sn_mva=0.15, vn_hv_kv=20.0,
                                          vn_lv_kv=0.4, vkr_percent=1.003125, vk_percent=4.126896,
                                          pfe_kw=0.0, i0_percent=0.0, shift_degree=30.0,
                                          tap_pos=0.0, name='Trafo I0-I1')

    pp.create_transformer_from_parameters(net_cigre_lv, busC0, busC1, sn_mva=0.3, vn_hv_kv=20.0,
                                          vn_lv_kv=0.4, vkr_percent=0.993750, vk_percent=4.115529,
                                          pfe_kw=0.0, i0_percent=0.0, shift_degree=30.0,
                                          tap_pos=0.0, name='Trafo C0-C1')

    # External grid
    pp.create_ext_grid(net_cigre_lv, bus0, vm_pu=1.0, va_degree=0.0, s_sc_max_mva=100.0,
                       s_sc_min_mva=100.0, rx_max=1.0, rx_min=1.0)

    # Loads
    pp.create_load(net_cigre_lv, busR1, p_mw=0.0, q_mvar=0.062449980, name='Load R1')
    pp.create_load(net_cigre_lv, busR11, p_mw=0.01425, q_mvar=0.004683748, name='Load R11')
    pp.create_load(net_cigre_lv, busR15, p_mw=0.0494, q_mvar=0.016236995, name='Load R15')
    pp.create_load(net_cigre_lv, busR16, p_mw=0.05225, q_mvar=0.017173744, name='Load R16')
    pp.create_load(net_cigre_lv, busR17, p_mw=0.03325, q_mvar=0.010928746, name='Load R17')
    pp.create_load(net_cigre_lv, busR18, p_mw=0.04465, q_mvar=0.014675745, name='Load R18')
    pp.create_load(net_cigre_lv, busI2, p_mw=0.0850, q_mvar=0.052678269, name='Load I2')
    pp.create_load(net_cigre_lv, busC1, p_mw=0.0, q_mvar=0.052306787, name='Load C1')
    pp.create_load(net_cigre_lv, busC12, p_mw=0.018, q_mvar=0.008717798, name='Load C12')
    pp.create_load(net_cigre_lv, busC13, p_mw=0.018, q_mvar=0.008717798, name='Load C13')
    pp.create_load(net_cigre_lv, busC14, p_mw=0.0225, q_mvar=0.010897247, name='Load C14')
    pp.create_load(net_cigre_lv, busC17, p_mw=0.0225, q_mvar=0.010897247, name='Load C17')
    pp.create_load(net_cigre_lv, busC18, p_mw=0.0072, q_mvar=0.003487119, name='Load C18')
    pp.create_load(net_cigre_lv, busC19, p_mw=0.0144, q_mvar=0.006974238, name='Load C19')
    pp.create_load(net_cigre_lv, busC20, p_mw=0.0072, q_mvar=0.003487119, name='Load C20')

    # Switches
    pp.create_switch(net_cigre_lv, bus0, busR0, et='b', closed=True, type='CB', name='S1')
    pp.create_switch(net_cigre_lv, bus0, busI0, et='b', closed=True, type='CB', name='S2')
    pp.create_switch(net_cigre_lv, bus0, busC0, et='b', closed=True, type='CB', name='S3')

    # Distributed generators
    pp.create_sgen(net_cigre_lv, busR15, p_mw=0.0, q_mvar=0.0, name='MT 1', max_p_mw=0.03, min_p_mw=0, max_q_mvar=0.025, min_q_mvar=-0.025)
    pp.create_sgen(net_cigre_lv, busR18, p_mw=0.0, q_mvar=0.0, name='FC 1', max_p_mw=0.05, min_p_mw=0, max_q_mvar=0.0375, min_q_mvar=-0.0375)
    pp.create_sgen(net_cigre_lv, busC17, p_mw=0.0, q_mvar=0.0, name='MT 2', max_p_mw=0.04, min_p_mw=0, max_q_mvar=0.03, min_q_mvar=-0.03)
    pp.create_sgen(net_cigre_lv, busR16, p_mw=0.01, type='PV', name='PV 1', max_p_mw=0.01, min_p_mw=0, max_q_mvar=0, min_q_mvar=0)
    pp.create_sgen(net_cigre_lv, busR17, p_mw=0.01, type='PV', name='PV 2', max_p_mw=0.01, min_p_mw=0, max_q_mvar=0, min_q_mvar=0)
    pp.create_sgen(net_cigre_lv, busC19, p_mw=0.01, type='PV', name='PV 3', max_p_mw=0.01, min_p_mw=0, max_q_mvar=0, min_q_mvar=0)
    pp.create_sgen(net_cigre_lv, busR16, p_mw=0.01, type='WP', name='WP 1', max_p_mw=0.01, min_p_mw=0, max_q_mvar=0, min_q_mvar=0)
    pp.create_sgen(net_cigre_lv, busC20, p_mw=0.01, type='WP', name='WP 2', max_p_mw=0.01, min_p_mw=0, max_q_mvar=0, min_q_mvar=0)

    # storage
    pp.create_storage(net_cigre_lv, busR11, p_mw=0.1, max_e_mwh=0.5, sn_mva=0.1, soc_percent=50, min_e_mwh=0.05, name='Battery 1')
    pp.create_storage(net_cigre_lv, busC13, p_mw=0.06, max_e_mwh=0.3, sn_mva=0.1, soc_percent=50, min_e_mwh=0.03, name='Battery 2')

    # Bus geo data
    net_cigre_lv.bus_geodata = read_json(
        """{"x":{"0":0.2,"1":0.2,"2":-1.4583333333,"3":-1.4583333333,"4":-1.4583333333,
        "5":-1.9583333333,"6":-2.7083333333,"7":-2.7083333333,"8":-3.2083333333,"9":-3.2083333333,
        "10":-3.2083333333,"11":-3.7083333333,"12":-0.9583333333,"13":-1.2083333333,
        "14":-1.2083333333,"15":-1.2083333333,"16":-1.2083333333,"17":-2.2083333333,
        "18":-2.7083333333,"19":-3.7083333333,"20":0.2,"21":0.2,"22":0.2,"23":0.2,"24":1.9166666667,
        "25":1.9166666667,"26":1.9166666667,"27":0.5416666667,"28":0.5416666667,"29":-0.2083333333,
        "30":-0.2083333333,"31":-0.2083333333,"32":-0.7083333333,"33":3.2916666667,
        "34":2.7916666667,"35":2.2916666667,"36":3.2916666667,"37":3.7916666667,"38":1.2916666667,
        "39":0.7916666667,"40":1.7916666667,"41":0.7916666667,"42":0.2916666667,"43":-0.7083333333},
        "y":{"0":1.0,"1":1.0,"2":2.0,"3":3.0,"4":4.0,"5":5.0,"6":6.0,"7":7.0,"8":8.0,"9":9.0,
        "10":10.0,"11":11.0,"12":5.0,"13":6.0,"14":7.0,"15":8.0,"16":9.0,"17":8.0,"18":11.0,
        "19":12.0,"20":1.0,"21":2.0,"22":3.0,"23":1.0,"24":2.0,"25":3.0,"26":4.0,"27":5.0,"28":6.0,
        "29":7.0,"30":8.0,"31":9.0,"32":10.0,"33":5.0,"34":6.0,"35":7.0,"36":7.0,"37":6.0,"38":7.0,
        "39":8.0,"40":8.0,"41":9.0,"42":10.0,"43":11.0}}""")
    # Match bus.index
    net_cigre_lv.bus_geodata = net_cigre_lv.bus_geodata.loc[net_cigre_lv.bus.index]

    return net_cigre_lv
コード例 #12
0
def test_example_simple():
    net = example_simple()

    # --- fix scaling
    net.load["scaling"] = 1.

    # --- add some additional data
    net.bus["subnet"] = ["net%i" % i for i in net.bus.index]
    pp.create_measurement(net, "i", "trafo", np.nan, np.nan, 0, "hv", name="1")
    pp.create_measurement(net, "i", "line", np.nan, np.nan, 1, "to", name="2")
    pp.create_measurement(net, "v", "bus", np.nan, np.nan, 0, name="3")

    net.shunt["max_step"] = np.nan
    stor = pp.create_storage(net, 6, 0.01, 0.1, -0.002, 0.05, 80, name="sda", min_p_mw=-0.01,
                             max_p_mw=0.008, min_q_mvar=-0.01, max_q_mvar=0.005)
    net.storage.loc[stor, "efficiency_percent"] = 90
    net.storage.loc[stor, "self-discharge_percent_per_day"] = 0.3
    pp.create_dcline(net, 4, 6, 0.01, 0.1, 1e-3, 1.0, 1.01, name="df", min_q_from_mvar=-0.01)
    pp.runpp(net)
    to_drop = pp.create_bus(net, 7, "to_drop")

    # --- add names to elements
    for i in pp.pp_elements():
        net[i] = ensure_full_column_data_existence(net, i, 'name')
        avoid_duplicates_in_column(net, i, 'name')

    # --- create geodata
    net.bus_geodata["x"] = [0, 1, 2, 3, 4, 5, 5, 3.63]
    net.bus_geodata["y"] = [0]*5+[-5, 5, 2.33]
    merge_busbar_coordinates(net)

    # --- convert
    csv_data = pp2csv_data(net, export_pp_std_types=True, drop_inactive_elements=True)
    net_from_csv_data = csv_data2pp(csv_data)

    # --- adjust net appearance
    pp.drop_buses(net, [to_drop])
    del net["OPF_converged"]
    net.load["type"] = np.nan
    del net_from_csv_data["substation"]
    del net_from_csv_data["profiles"]
    for key in net.keys():
        if isinstance(net[key], pd.DataFrame):
            # drop unequal columns
            dummy_columns = net[key].columns
            extra_columns = net_from_csv_data[key].columns.difference(dummy_columns)
            net_from_csv_data[key].drop(columns=extra_columns, inplace=True)
            # drop result table rows
            if "res_" in key:
                if not key == "res_bus":
                    net[key].drop(net[key].index, inplace=True)
                else:
                    net[key].loc[:, ["p_mw", "q_mvar"]] = np.nan
            # adjust dtypes
            if net[key].shape[0]:
                try:
                    net_from_csv_data[key] = net_from_csv_data[key].astype(dtype=dict(net[
                        key].dtypes))
                except:
                    logger.error("dtype adjustment of %s failed." % key)

    eq = pp.nets_equal(net, net_from_csv_data, tol=1e-7)
    assert eq
コード例 #13
0
ファイル: test_toolbox.py プロジェクト: znicoy/pandapower
def test_opf_task():
    net = pp.create_empty_network()
    pp.create_buses(net, 6, [10, 10, 10, 0.4, 7, 7],
                    min_vm_pu=[0.9, 0.9, 0.88, 0.9, np.nan, np.nan])
    idx_ext_grid = 1
    pp.create_ext_grid(net, 0, max_q_mvar=80, min_p_mw=0, index=idx_ext_grid)
    pp.create_gen(net, 1, 10, min_q_mvar=-50, max_q_mvar=-10, min_p_mw=0, max_p_mw=60)
    pp.create_gen(net, 2, 8)
    pp.create_gen(net, 3, 5)
    pp.create_load(net, 3, 120, max_p_mw=8)
    pp.create_sgen(net, 1, 8, min_q_mvar=-50, max_q_mvar=-10, controllable=False)
    pp.create_sgen(net, 2, 8)
    pp.create_storage(net, 3, 2, 100, min_q_mvar=-10, max_q_mvar=-50, min_p_mw=0, max_p_mw=60,
                      controllable=True)
    pp.create_dcline(net, 4, 5, 0.3, 1e-4, 1e-2, 1.01, 1.02, min_q_from_mvar=-10,
                     min_q_to_mvar=-10)
    pp.create_line(net, 3, 4, 5, "122-AL1/20-ST1A 10.0", max_loading_percent=50)
    pp.create_transformer(net, 2, 3, "0.25 MVA 10/0.4 kV")

    # --- run and check opf_task()
    out1 = pp.opf_task(net, keep=True)
    assert out1["flexibilities_without_costs"] == "all"
    assert sorted(out1["flexibilities"].keys()) == [i1 + i2 for i1 in ["P", "Q"] for i2 in [
        "dcline", "ext_grid", "gen", "storage"]]
    for key, df in out1["flexibilities"].items():
        assert df.shape[0]
        if "gen" in key:
            assert df.shape[0] > 1
    assert out1["flexibilities"]["Pext_grid"].loc[0, "index"] == [1]
    assert np.isnan(out1["flexibilities"]["Pext_grid"].loc[0, "max"])
    assert out1["flexibilities"]["Pext_grid"].loc[0, "min"] == 0
    assert np.isnan(out1["flexibilities"]["Qext_grid"].loc[0, "min"])
    assert out1["flexibilities"]["Qext_grid"].loc[0, "max"] == 80
    assert sorted(out1["network_constraints"].keys()) == ["LOADINGline", "VMbus"]
    assert out1["network_constraints"]["VMbus"].shape[0] == 3

    # check delta_pq
    net.gen.loc[0, "min_p_mw"] = net.gen.loc[0, "max_p_mw"] - 1e-5
    out2 = pp.opf_task(net, delta_pq=1e-3, keep=True)
    assert out2["flexibilities"]["Pgen"].shape[0] == 1

    net.gen.loc[0, "min_p_mw"] = net.gen.loc[0, "max_p_mw"] - 1e-1
    out1["flexibilities"]["Pgen"].loc[0, "min"] = out1["flexibilities"]["Pgen"].loc[
                                                      0, "max"] - 1e-1
    out3 = pp.opf_task(net, delta_pq=1e-3, keep=True)
    for key in out3["flexibilities"]:
        assert pp.dataframes_equal(out3["flexibilities"][key], out1["flexibilities"][key])

    # check costs
    pp.create_poly_cost(net, idx_ext_grid, "ext_grid", 2)
    pp.create_poly_cost(net, 1, "gen", 1.7)
    pp.create_poly_cost(net, 0, "dcline", 2)
    pp.create_pwl_cost(net, 2, "gen", [[-1e9, 1, 3.1], [1, 1e9, 0.5]], power_type="q")
    out4 = pp.opf_task(net)
    for dict_key in ["flexibilities", "network_constraints"]:
        for key in out4[dict_key]:
            assert pp.dataframes_equal(out4[dict_key][key], out1[dict_key][key])
    assert isinstance(out4["flexibilities_without_costs"], dict)
    expected_elm_without_cost = ["gen", "storage"]
    assert sorted(out4["flexibilities_without_costs"].keys()) == expected_elm_without_cost
    for elm in expected_elm_without_cost:
        assert len(out4["flexibilities_without_costs"][elm]) == 1
コード例 #14
0
def gls_network_builder():
    #%% Import modules
    import numpy as np
    import os
    import pandas as pd
    import pandapower as pp

    #%% Define folder for input data
    directory_path = os.path.dirname(__file__)
    input_folder_path = r'{}/input'.format(
        directory_path)  # path to be created\

    try:
        os.makedirs(input_folder_path)
    except OSError:
        pass

    #%% Load initial data
    filename = input_folder_path + '/network_data.xlsx'

    # Bus data
    bus_data_raw = pd.read_excel(filename, sheet_name='Buses')

    # Transformer data
    transformer_data_raw = pd.read_excel(filename, sheet_name='Transformers')

    # Cable data
    cable_data_raw = pd.read_excel(filename, sheet_name='Cables')

    # Load data
    load_data_raw = pd.read_excel(filename, sheet_name='Loads')

    # Electrical storage data
    storage_data_raw = pd.read_excel(filename, sheet_name='Storage')

    # Generator data
    generator_data_raw = pd.read_excel(filename, sheet_name='Generators')

    #%% Create empty pandapower model
    gls_network = pp.create_empty_network()

    #%% Add 10 kV feeder buses to model
    number_of_buses = len(bus_data_raw)

    variable_name = {}

    for i in range(number_of_buses):
        bus_name = bus_data_raw.loc[i, 'name']
        bus_voltage = bus_data_raw.loc[i, 'voltage_kv']
        bus_type = bus_data_raw.loc[i, 'type']
        bus_zone = bus_data_raw.loc[i, 'zone']

        variable_name['BUS' + str(i)] = pp.create_bus(gls_network,
                                                      name=bus_name,
                                                      vn_kv=bus_voltage,
                                                      type=bus_type,
                                                      zone=bus_zone,
                                                      geodata=None)

        locals().update(variable_name)

    #%% Write bus information
    bus_information = gls_network.bus

    #%% Make connection to external network
    pp.create_ext_grid(gls_network,
                       0,
                       name='Upstream_60_kV_system',
                       vm_pu=1.04,
                       va_degree=0)  # create an external network connection

    #%% Write information about external connection
    external_network_information = gls_network.ext_grid  # show external network table

    #%% Add transformers to model
    number_of_transformers = len(transformer_data_raw)
    variable_name = {}

    for i in range(number_of_transformers):
        transformer_from_bus_index = np.where(
            transformer_data_raw.loc[i, 'from'] == bus_information.iloc[:, 0])
        transformer_to_bus_index = np.where(
            transformer_data_raw.loc[i, 'to'] == bus_information.iloc[:, 0])
        transformer_name = transformer_data_raw.loc[i, 'name']
        transformer_apparent_power = transformer_data_raw.loc[i, 'rating_mva']
        transformer_shift_degree = transformer_data_raw.loc[i, 'shift_deg']
        transformer_hv = transformer_data_raw.loc[i, 'high_voltage_kv']
        transformer_lv = transformer_data_raw.loc[i, 'low_voltage_kv']
        transformer_uk = transformer_data_raw.loc[i, 'vk_%']
        transformer_ukr = transformer_data_raw.loc[i, 'vr_%']
        transformer_pfe = transformer_data_raw.loc[i, 'pfe_kw']
        transformer_i0 = transformer_data_raw.loc[i, 'i0_%']

        variable_name['TRAFO' +
                      str(i)] = pp.create_transformer_from_parameters(
                          gls_network,
                          transformer_from_bus_index[0],
                          transformer_to_bus_index[0],
                          name=transformer_name,
                          sn_mva=transformer_apparent_power,
                          vn_hv_kv=transformer_hv,
                          vn_lv_kv=transformer_lv,
                          vk_percent=transformer_uk,
                          vkr_percent=transformer_ukr,
                          pfe_kw=transformer_pfe,
                          i0_percent=transformer_i0,
                          shift_degree=transformer_shift_degree)

        locals().update(variable_name)

    #%% Write transformer information
    trafo_information = gls_network.trafo

    #%% Add cables to model
    number_of_cables = len(cable_data_raw)

    variable_name = {}

    for i in range(number_of_cables):
        cable_from_bus_index = np.where(
            cable_data_raw.loc[i, 'from'] == bus_information.iloc[:, 0])
        cable_to_bus_index = np.where(
            cable_data_raw.loc[i, 'to'] == bus_information.iloc[:, 0])
        cable_name = cable_data_raw.loc[i, 'name']
        cable_length = cable_data_raw.loc[i, 'length_km']
        cable_r_per_km = cable_data_raw.loc[i, 'r_ohm_per_km']
        cable_x_per_km = cable_data_raw.loc[i, 'x_ohm_per_km']
        cable_c_per_km = cable_data_raw.loc[
            i, 'c_nf_per_km']  # get capacitance in nF
        cable_I_max = cable_data_raw.loc[i,
                                         'max_i_a'] / 1000  # get current in kA
        cable_type = cable_data_raw.loc[i, 'type']
        cable_state = cable_data_raw.loc[i, 'in_service']
        cable_parallel = cable_data_raw.loc[i, 'parallel']

        variable_name['CABLE' + str(i)] = pp.create_line_from_parameters(
            gls_network,
            from_bus=cable_from_bus_index[0],
            to_bus=cable_to_bus_index[0],
            length_km=cable_length,
            r_ohm_per_km=cable_r_per_km,
            x_ohm_per_km=cable_x_per_km,
            c_nf_per_km=cable_c_per_km,
            max_i_ka=cable_I_max,
            name=cable_name,
            index=None,
            type=cable_type,
            geodata=None,
            in_service=cable_state,
            df=1.0,
            parallel=cable_parallel)

        locals().update(variable_name)

    #%% Write cable information
    cable_information = gls_network.line

    #%% Add loads
    number_of_loads = len(load_data_raw)

    variable_name = {}
    load_scaling = 1  # loading scale coefficient

    for i in range(number_of_loads):
        load_active_power = load_data_raw.loc[
            i, 'p_mw']  #!!! modify this to change p_mw
        load_reactive_power = load_data_raw.loc[
            i, 'q_mvar']  #!!! modify this to change q_mvar
        load_bus_index = np.where(
            load_data_raw.loc[i, 'bus'] == bus_information.iloc[:, 0])
        load_state = load_data_raw.loc[i, 'in_service']
        load_name = load_data_raw.loc[i, 'name']

        variable_name['LOAD' + str(i)] = pp.create_load(
            gls_network,
            bus=load_bus_index[0],
            p_mw=load_active_power,
            q_mvar=load_reactive_power,
            scaling=load_scaling,
            name=load_name,
            in_service=load_state,
            controllable=False)

        locals().update(variable_name)

    #%% Write load information
    load_information = gls_network.load

    #%% Add electrical storage
    number_of_storage = len(storage_data_raw)

    for i in range(number_of_storage):
        storage_bus_index = np.where(
            storage_data_raw.loc[i, 'bus'] == bus_information.iloc[:, 0])
        storage_p_mw = storage_data_raw.loc[
            i, 'p_mw']  #!!! modify this to change p_mw
        storage_q_mvar = storage_data_raw.loc[
            i, 'q_mvar']  #!!! modify this to change q_mvar
        storage_max_e_mwh = storage_data_raw.loc[i, 'max_e_mwh']
        storage_name = storage_data_raw.loc[i, 'name']
        storage_state = storage_data_raw.loc[i, 'in_service']

        variable_name['STORAGE' + str(i)] = pp.create_storage(
            gls_network,
            bus=storage_bus_index[0],
            p_mw=storage_p_mw,
            q_mvar=storage_q_mvar,
            max_e_mwh=storage_max_e_mwh,
            name=storage_name,
            in_service=storage_state)

        locals().update(variable_name)

    #%% Write storage information
    storage_information = gls_network.storage

    #%% Add generators
    number_of_generators = len(generator_data_raw)

    for i in range(number_of_generators):
        generator_bus_index = np.where(
            generator_data_raw.loc[i, 'bus'] == bus_information.iloc[:, 0])
        generator_p_mw = generator_data_raw.loc[
            i, 'p_mw']  #!!! modify this to change p_mw
        generator_q_mvar = generator_data_raw.loc[
            i, 'q_mvar']  #!!! modify this to change q_mvar
        generator_name = generator_data_raw.loc[i, 'name']
        generator_state = generator_data_raw.loc[i, 'in_service']

        variable_name['STORAGE' + str(i)] = pp.create_sgen(
            gls_network,
            bus=generator_bus_index[0],
            p_mw=generator_p_mw,
            q_mvar=generator_q_mvar,
            name=generator_name,
            in_service=generator_state)

        locals().update(variable_name)

    #%% Write generator information
    generator_information = gls_network.sgen

    #%% Combine network tables in the dictionary
    gls_network_information = {}
    gls_network_information['Bus'] = bus_information
    gls_network_information['External_grid'] = external_network_information
    gls_network_information['Transformer'] = trafo_information
    gls_network_information['Cable'] = cable_information
    gls_network_information['Load'] = load_information
    gls_network_information['Storage'] = storage_information
    gls_network_information['Generator'] = generator_information

    #%% Perform power flow
    pp.runpp(gls_network,
             trafo_loading='power',
             algorithm='iwamoto_nr',
             calculate_voltage_angles='auto')

    #%% Write results in the dictionary
    # Add names of the rows
    gls_network.res_bus.insert(0,
                               'name',
                               pd.Series(gls_network.bus.loc[:, 'name']),
                               allow_duplicates=False)
    gls_network.res_trafo.insert(0,
                                 'name',
                                 pd.Series(gls_network.trafo.loc[:, 'name']),
                                 allow_duplicates=False)
    gls_network.res_line.insert(0,
                                'name',
                                pd.Series(gls_network.line.loc[:, 'name']),
                                allow_duplicates=False)
    gls_network.res_load.insert(0,
                                'name',
                                pd.Series(gls_network.load.loc[:, 'name']),
                                allow_duplicates=False)
    gls_network.res_storage.insert(0,
                                   'name',
                                   pd.Series(gls_network.storage.loc[:,
                                                                     'name']),
                                   allow_duplicates=False)
    gls_network.res_sgen.insert(0,
                                'name',
                                pd.Series(gls_network.sgen.loc[:, 'name']),
                                allow_duplicates=False)

    # Write all results in the dictionary
    gls_network_results = {}
    gls_network_results['Bus'] = gls_network.res_bus
    gls_network_results['External_grid'] = gls_network.res_ext_grid
    gls_network_results['Transformer'] = gls_network.res_trafo
    gls_network_results['Cable'] = gls_network.res_line
    gls_network_results['Load'] = gls_network.res_load
    gls_network_results['Storage'] = gls_network.res_storage
    gls_network_results['Generator'] = gls_network.res_sgen

    return gls_network, gls_network_results
コード例 #15
0
def test_storage_opf():
    """ Testing a simple network with storage to ensure the correct behaviour
    of the storage OPF-Functions """

    # boundaries
    vm_max = 1.1
    vm_min = 0.9
    max_line_loading_percent = 100

    # create network
    net = pp.create_empty_network()

    b1 = pp.create_bus(net, vn_kv=0.4, max_vm_pu=vm_max, min_vm_pu=vm_min)
    b2 = pp.create_bus(net, vn_kv=0.4, max_vm_pu=vm_max, min_vm_pu=vm_min)

    pp.create_line(net,
                   b1,
                   b2,
                   length_km=5,
                   std_type="NAYY 4x50 SE",
                   max_loading_percent=max_line_loading_percent)

    # test elements static
    pp.create_ext_grid(net, b2)
    pp.create_load(net, b1, p_kw=7.5, controllable=False)
    pp.create_sgen(net,
                   b1,
                   p_kw=-25,
                   controllable=True,
                   max_p_kw=-10,
                   min_p_kw=-25,
                   max_q_kvar=25,
                   min_q_kvar=-25)

    # test elements
    pp.create_storage(net,
                      b1,
                      p_kw=-25,
                      max_e_kwh=50,
                      controllable=True,
                      max_p_kw=0,
                      min_p_kw=-25,
                      max_q_kvar=25,
                      min_q_kvar=-25)
    pp.create_sgen(net,
                   b1,
                   p_kw=-25,
                   controllable=True,
                   max_p_kw=0,
                   min_p_kw=-25,
                   max_q_kvar=25,
                   min_q_kvar=-25)
    pp.create_load(net,
                   b1,
                   p_kw=2.5,
                   controllable=True,
                   max_p_kw=2.5,
                   min_p_kw=0,
                   max_q_kvar=2.5,
                   min_q_kvar=-2.5)

    # costs
    pp.create_polynomial_cost(net, 0, "ext_grid", array([0, 3, 0]))
    pp.create_polynomial_cost(net, 0, "load", array([0, -1, 0]))
    pp.create_polynomial_cost(net, 0, "sgen", array([0, 2, 0]))
    pp.create_polynomial_cost(net, 0, "storage", array([0, 1, 0]))
    pp.create_polynomial_cost(net, 1, "sgen", array([0, 1, 0]))
    pp.create_polynomial_cost(net, 1, "load", array([0, -1, 0]))

    # test storage generator behaviour
    net["storage"].in_service.iloc[0] = True
    net["storage"].p_kw.iloc[0] = -25
    net["sgen"].in_service.iloc[1] = False
    net["load"].in_service.iloc[1] = False

    pp.runopp(net, verbose=True)
    #consistency_checks(net)
    assert net["OPF_converged"]
    '''
コード例 #16
0
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)
#Create Generation Zone Buses

Zone1Bus = pp.create_bus(net, vn_kv=500, name="Zone 1 Bus")
Zone2Bus = pp.create_bus(net, vn_kv=500, name="Zone 2 Bus")
Zone3Bus = pp.create_bus(net, vn_kv=500, name="Zone 3 Bus")
Zone4Bus = pp.create_bus(net, vn_kv=500, name="Zone 4 Bus")
Zone5Bus = pp.create_bus(net, vn_kv=GBV, name="Zone 5 Bus")
Zone6Bus = pp.create_bus(net, vn_kv=500, name="Zone 6 Bus")
Zone7Bus = pp.create_bus(net, vn_kv=500, name="Zone 7 Bus")
Zone8Bus = pp.create_bus(net, vn_kv=500, name="Zone 8 Bus")

#Create storage buses

store_1 = pp.create_storage(net,
                            Zone1Bus,
                            p_mw=17 * 1000,
                            max_e_mwh=100 * 1000,
                            min_e_mwh=5.0 * 1000,
                            name="Storage_1")
store_2 = pp.create_storage(net,
                            Zone2Bus,
                            p_mw=15 * 1000,
                            max_e_mwh=90 * 1000,
                            min_e_mwh=5.0 * 1000,
                            name="Storage_2")
store_7 = pp.create_storage(net,
                            Zone7Bus,
                            p_mw=20 * 1000,
                            max_e_mwh=120 * 1000,
                            min_e_mwh=5.0 * 1000,
                            name="Storage_7")
store_8 = pp.create_storage(net,
コード例 #18
0
    pv_profile_raw = pd.read_csv("PVProfile1440.csv", sep=";", decimal=".")

    pv_profile_raw['pv_output_power_kw'] = pv_profile_raw['pv_output_power_kw'].apply(
        convertkWToMW).iloc[::10].reset_index(drop=True)

    pv_profile = fd.DFData(pd.DataFrame(pv_profile_raw))

    sgen_controller = ConstControl(
        net, element='sgen', element_index=sgen_index, variable='p_mw',
        data_source=pv_profile, profile_name='pv_output_power_kw',
        recycle=False)

    # initialize storage elements

    storage_index = pp.create_storage(
        net, bus=row.bus, p_mw=0, max_e_mwh=0.0077, soc_percent=50, sn_mva=0.003, max_p_mw=0.003, min_p_mw=-0.003)

    storage_controller = ZeroTargetStorage(
        net, load_index=load_index, storage_index=storage_index, generator_index=sgen_index)


time_steps = range(0, 144)

ow = OutputWriter(net, output_path="./result",
                  output_file_type=".csv")

ow.log_variable("storage", "soc_percent", index=[0])
ow.log_variable("load", "p_mw", index=[0])
ow.log_variable("sgen", "p_mw", index=[0])
ow.log_variable("storage", "p_mw", index=[0])
コード例 #19
0
# create empty net
net = pp.create_empty_network()

# create buses
bus1 = pp.create_bus(net, vn_kv=20., name="Bus Grid 1")
bus_trafo = pp.create_bus(net, vn_kv=0.4, name="Bus Trafo")
bus_h1 = pp.create_bus(net, vn_kv=0.4, name="Bus House 1")
bus_h2 = pp.create_bus(net, vn_kv=0.4, name="Bus House 2")

# create bus elements
pp.create_ext_grid(net, bus=bus1, vm_pu=1.0, name="Grid Connection")
pp.create_load(net, bus=bus_h1, p_kw=0.1, q_kvar=0.005, name="H1 Load")
pp.create_sgen(net, bus=bus_h1, p_kw=-0.1, name="H1 PV")
pp.create_load(net, bus=bus_h2, p_kw=0.1, name="H2 Load")
pp.create_storage(net, bus=bus_h2, p_kw=-0.1, max_e_kwh=3, name="H2 Storage")

# create branch elements
trafo = pp.create_transformer(net, hv_bus=bus1, lv_bus=bus_trafo,
                              std_type="0.25 MVA 20/0.4 kV", name="Trafo")
line = pp.create_line(net, from_bus=bus_h1, to_bus=bus_trafo,
                      length_km=0.1, std_type="NAYY 4x150 SE", name="Line")
line2 = pp.create_line(net, from_bus=bus_h2, to_bus=bus_trafo,
                       length_km=0.1, std_type="NAYY 4x150 SE", name="Line")

pp.runpp(net)

print(net.res_load)
print(net.res_sgen)
print(net.res_trafo)
コード例 #20
0

net = nw.create_cigre_network_mv("pv_wind")
# set some limits
min_vm_pu = 0.95
max_vm_pu = 1.05

net["bus"].loc[:, "min_vm_pu"] = min_vm_pu
net["bus"].loc[:, "max_vm_pu"] = max_vm_pu

net["line"].loc[:, "max_loading_percent"] = 100.

# close all switches
net.switch.loc[:, "closed"] = True
# add storage to bus 10
pp.create_storage(net, 10, p_mw=0.5, max_e_mwh=.2, soc_percent=0., q_mvar=0., controllable=True)

# net.load["controllable"] = False
# net.sgen["controllable"] = False

net["load"].loc[:, "type"] = "residential"
net.sgen.loc[:, "type"] = "pv"
net.sgen.loc[8, "type"] = "wind"

input_file = r"C:\Users\x230\.julia\dev\PandaModels\test\pycodes\cigre_timeseries_15min.json"
time_series = pd.read_json(input_file)


time_series.sort_index(inplace=True)

load_df = pd.DataFrame(time_series["residential"]).dot([net["load"]["p_mw"].values])
コード例 #21
0
def simulate_network(scenario, installations_percent, cooperation_percent,
                     installation_buses, cooperating_buses, individual_buses):
    scenario_name = get_scenario_name(scenario)

    full_dir_path = "data/results/{}/03-simulation/{}_installations/{}_cooperative".format(
        scenario_name, installations_percent, cooperation_percent)

    if os.path.exists(full_dir_path) and SKIP_EXISTING:
        if PRINT_SKIPPING_LINES:
            print("[{}] [{}%] [{}%] Simulating network... [skipping]".format(
                scenario_name, installations_percent, cooperation_percent))
        return False

    print("[{}] [{}%] [{}%] Simulating network...".format(
        scenario_name, installations_percent, cooperation_percent))

    net = ieee_european_lv_asymmetric('on_peak_566')

    for index, _ in net.asymmetric_load.iterrows():
        net.asymmetric_load.in_service.at[index] = False

    pandapower.runpp(net)

    for original_index, row in buses.iterrows():
        load_index = pandapower.create_load(net, bus=row.bus, p_mw=0)
        load_profile_raw = pandas.read_csv(
            "data/source/load_profiles/Load_profile_{}.csv".format(
                original_index + 1),
            sep=",",
            decimal=".")
        load_profile_raw['mult'] = load_profile_raw['mult'].apply(
            convertkWToMW).iloc[::10].reset_index(drop=True)
        load_profile = frame_data.DFData(pandas.DataFrame(load_profile_raw))
        load_controller = ConstControl(net,
                                       element='load',
                                       element_index=load_index,
                                       variable='p_mw',
                                       data_source=load_profile,
                                       profile_name='mult',
                                       recycle=False)

    for original_index, row in installation_buses.iterrows():
        if scenario.get('EV') == True:
            ev_index = pandapower.create_load(net, bus=row.bus, p_mw=0)
            ev_profile_raw = pandas.read_csv(
                "data/source/ev_profiles/EV_home_profiles_{}.csv".format(
                    original_index + 1),
                sep=";",
                decimal=",")
            ev_profile_raw['load'] = ev_profile_raw['load'].apply(
                convert10minkWhTokW).apply(convertkWToMW)
            ev_profile = frame_data.DFData(pandas.DataFrame(ev_profile_raw))
            ev_controller = ConstControl(net,
                                         element='load',
                                         element_index=ev_index,
                                         variable='p_mw',
                                         data_source=ev_profile,
                                         profile_name='load',
                                         recycle=False)

        if scenario.get('PV') == True:
            sgen_index = pandapower.create_sgen(net,
                                                bus=row.bus,
                                                p_mw=0,
                                                sn_mva=0,
                                                type='PV')
            pv_profile_raw = pandas.read_csv("data/source/PVProfile1440.csv",
                                             sep=";",
                                             decimal=".")
            pv_profile_raw['pv_output_power_kw'] = pv_profile_raw[
                'pv_output_power_kw'].apply(
                    convertkWToMW).iloc[::10].reset_index(drop=True)
            pv_profile = frame_data.DFData(pandas.DataFrame(pv_profile_raw))
            sgen_controller = ConstControl(net,
                                           element='sgen',
                                           element_index=sgen_index,
                                           variable='p_mw',
                                           data_source=pv_profile,
                                           profile_name='pv_output_power_kw',
                                           recycle=False)

    for original_index, row in cooperating_buses.iterrows():
        storage_index = pandapower.create_storage(
            net,
            bus=row.bus,
            p_mw=0,
            max_e_mwh=BATTERY_ENERGY_MAX / 1000.0,
            soc_percent=(INITIAL_BATTERY_CHARGE / BATTERY_ENERGY_MAX) * 100.0,
            max_p_mw=RATED_P / 1000.0,
            min_p_mw=-RATED_P / 1000.0)
        storage_profile_raw = pandas.read_csv(
            "data/results/{}/02-collective/{}_installations/{}_cooperation/Storage_profile_{}.csv"
            .format(scenario_name, installations_percent, cooperation_percent,
                    original_index + 1),
            sep=",",
            decimal=".")
        storage_profile_raw['power_kW'] = storage_profile_raw[
            'power_kW'].apply(convertkWToMW).apply(convertStorage)
        storage_profile = frame_data.DFData(
            pandas.DataFrame(storage_profile_raw))
        storage_controller = ConstControl(net,
                                          element='storage',
                                          element_index=storage_index,
                                          variable='p_mw',
                                          data_source=storage_profile,
                                          profile_name='power_kW',
                                          recycle=False)

    for original_index, row in individual_buses.iterrows():
        storage_index = pandapower.create_storage(
            net,
            bus=row.bus,
            p_mw=0,
            max_e_mwh=BATTERY_ENERGY_MAX / 1000.0,
            soc_percent=(INITIAL_BATTERY_CHARGE / BATTERY_ENERGY_MAX) * 100.0,
            max_p_mw=RATED_P / 1000.0,
            min_p_mw=-RATED_P / 1000.0)
        storage_profile_raw = pandas.read_csv(
            "data/results/{}/01-individual/storage-profiles/Storage_profile_{}.csv"
            .format(scenario_name, original_index + 1),
            sep=",",
            decimal=".")
        storage_profile_raw['power_kW'] = storage_profile_raw[
            'power_kW'].apply(convertkWToMW).apply(convertStorage)
        storage_profile = frame_data.DFData(
            pandas.DataFrame(storage_profile_raw))
        storage_controller = ConstControl(net,
                                          element='storage',
                                          element_index=storage_index,
                                          variable='p_mw',
                                          data_source=storage_profile,
                                          profile_name='power_kW',
                                          recycle=False)

    time_steps = range(0, T)

    ow = OutputWriter(net,
                      output_path=full_dir_path,
                      output_file_type=".csv",
                      log_variables=[])

    ow.log_variable("load", "p_mw")
    ow.log_variable("res_bus", "vm_pu", index=buses_nodes)
    ow.log_variable("res_line", "p_to_mw", index=line_nodes)
    ow.log_variable("res_trafo", "vm_lv_pu")
    ow.log_variable("res_trafo", "p_lv_mw")

    if scenario.get('PV') == True:
        ow.log_variable("sgen", "p_mw")

    if cooperating_buses.size > 0 or individual_buses.size > 0:
        ow.log_variable("storage", "p_mw")

    run_timeseries(net, time_steps, continue_on_divergence=True, verbose=False)

    return True
コード例 #22
0
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
コード例 #23
0
def sim_request(data):
    is_three_phase = utils.get_or_error("3phase", data)
    elements_dict = utils.get_or_error("elements", data)
    buses = {} # Used for matching bus UUIDs to index

    def process_potential_bus(key, value):
        """ Inner method for processing a positional argument that could be a bus
            This function checks if the value is in the bus keys. This should never cause issues so long as UUID's aren't used for
            any other purpose except for bus identification and as long as there are no UUID collisions. Both of those cases seem
            exceptionally unlikely, so this should work fine.
        """
        if value in buses.keys():
            return buses[value]
        else:
            return value

    bus_list = [(uuid, element) for uuid, element in elements_dict.items() if utils.get_or_error("etype", element) == "bus"]
    element_list = [(uuid, element) for uuid, element in elements_dict.items() if utils.get_or_error("etype", element) != "bus" and utils.get_or_error("etype", element) != "switch"]
    switch_list = [(uuid, element) for uuid, element in elements_dict.items() if utils.get_or_error("etype", element) == "switch"]

    net = pp.create_empty_network()

    for uuid, bus in bus_list:
        element_type = "bus"
        req_props = utils.required_props[element_type]
        positional_args = [ value for key, value in bus.items() if key in req_props ]
        optional_args = { key: value for key, value in bus.items() if (not key in req_props) and (not key == "etype")}
        index = pp.create_bus(net, *positional_args, **optional_args, name=uuid)
        buses[uuid] = index
    
    for uuid, element in element_list:
        element_type = utils.get_or_error("etype", element)
        req_props = utils.required_props[element_type]
        positional_args = [process_potential_bus(key, value) for key, value in element.items() if key in req_props]
        optional_args = { key: value for key, value in element.items() if (not key in req_props) and (not key == "etype")}
        
        if element_type == "load":
            pp.create_load(net, *positional_args, **optional_args, name=uuid)
        elif element_type == "gen":
            pp.create_gen(net, *positional_args, **optional_args, name=uuid)
        elif element_type == "ext_grid":
            pp.create_ext_grid(net, *positional_args, **optional_args, name=uuid)
        elif element_type == "line":
            pp.create_line(net, *positional_args, *optional_args, name=uuid)
        elif element_type == "trafo":
            pp.create_transformer_from_parameters(net, *positional_args, **optional_args, name=uuid)
        elif element_type == "storage":
            pp.create_storage(net, *positional_args, **optional_args, name=uuid)
        else:
            raise InvalidError(f"Element type {element_type} is invalid or not implemented!")

    for uuid, switch in switch_list:
        element_type = "switch"
        req_props = utils.required_props[element_type]
        positional_args = [process_potential_bus(key, value) for key, value in element.items() if key in req_props]
        optional_args = { key: value for key, value in element.items() if (not key in req_props) and (not key == "etype")}
        et = positional_args[2]
        if et == "b":
            pass # This is handled by process_potential_buses
        if et == "l":
            positional_args[1] = pp.get_element_index(net, "line", positional_args[1])
        elif et == "t":
            positional_args[1] = pp.get_element_index(net, "trafo", positional_args[1])
        elif et == "t3":
            positional_args[1] = pp.get_element_index(net, "trafo3w", positional_args[1])
        else:
            raise InvalidError(f"Invalid element type {et}. Must be b,l,t, or t3.")
        pp.create_switch(net, *positional_args, **optional_args, name=uuid)
            
    try:
        if is_three_phase:
            pp.runpp_3ph(net)
        else:
            pp.runpp(net)
    except LoadflowNotConverged:
        report = pp.diagnostic(net, report_style="compact", warnings_only=True)
        raise ConvError("Load flow did not converge.")
    except (KeyError, ValueError) as e:
        raise PPError(str(e))
    except Exception as e:
        raise PPError("Unknown exception has occured: " + str(e))

    message = {}
    message["status"] = "SIM_RESULT"
    results = {}

    for uuid,element in elements_dict.items():
        element_type = elements_dict[uuid]["etype"]
        if element_type == "switch": continue
        net["res_" + element_type] = net["res_" + element_type].fillna(0)
        results[uuid] = {}
        results[uuid]["etype"] = element_type
        index = pp.get_element_index(net, element_type, uuid, exact_match=True)
        results[uuid].update(net["res_" + element_type].iloc[index].to_dict())

    message["elements"] = results
    return json.dumps(message)
コード例 #24
0
ファイル: test_base_scenario.py プロジェクト: zypher22/vpplib
                                obstacle_height=obstacle_height,
                                hellman_exp=hellman_exp))
    
    vpp.components[list(vpp.components.keys())[-1]].prepare_time_series()

#%% create elements in the pandapower.net

for bus in vpp.buses_with_pv:
    
    pp.create_sgen(net, bus=net.bus[net.bus.name == bus].index[0],
                   p_mw=(vpp.components[bus+'_PV'].module.Impo*vpp.components[bus+'_PV'].module.Vmpo/1000000),
                   name=(bus+'_PV'), type='PV')

for bus in vpp.buses_with_storage:
    
    pp.create_storage(net, bus=net.bus[net.bus.name == bus].index[0],
                      p_mw=0, max_e_mwh=capacity, name=(bus+'_storage'), type='LiIon')
  
for bus in vpp.buses_with_bev:
    
    pp.create_load(net, bus=net.bus[net.bus.name == bus].index[0], 
                   p_mw=(vpp.components[bus+'_BEV'].charging_power/1000), name=(bus+'_BEV'), type='BEV')
    
for bus in vpp.buses_with_hp:
    
    pp.create_load(net, bus=net.bus[net.bus.name == bus].index[0], 
                   p_mw=(vpp.components[bus+'_HP'].el_power/1000), name=(bus+'_HP'), type='HP')
    
for bus in vpp.buses_with_wind:
    
    pp.create_sgen(net, bus=net.bus[net.bus.name == bus].index[0],
                   p_mw=(vpp.components[bus+'_Wind'].wind_turbine.nominal_power/1000000),
コード例 #25
0
net = pp.create_empty_network()

# create buses
bus1 = pp.create_bus(net, vn_kv=20., name="Bus Grid 1")
bus_trafo = pp.create_bus(net, vn_kv=0.4, name="Bus Trafo")
bus_h1 = pp.create_bus(net, vn_kv=0.4, name="Bus House 1")
bus_h2 = pp.create_bus(net, vn_kv=0.4, name="Bus House 2")

# create bus elements
pp.create_ext_grid(net, bus=bus1, vm_pu=1.0, name="Grid Connection")
pp.create_load(net, bus=bus_h1, p_mw=0.1e-3, q_mvar=0.005e-3, name="H1 Load")
pp.create_sgen(net, bus=bus_h1, p_mw=-0.1e-3, name="H1 PV")
pp.create_load(net, bus=bus_h2, p_mw=0.1e-3, name="H2 Load")
pp.create_storage(net,
                  bus=bus_h2,
                  p_mw=-0.1e-3,
                  max_e_mwh=3e-3,
                  name="H2 Storage")

# create branch elements
trafo = pp.create_transformer(net,
                              hv_bus=bus1,
                              lv_bus=bus_trafo,
                              std_type="0.25 MVA 20/0.4 kV",
                              name="Trafo")
line = pp.create_line(net,
                      from_bus=bus_h1,
                      to_bus=bus_trafo,
                      length_km=0.1,
                      std_type="NAYY 4x150 SE",
                      name="Line")
コード例 #26
0
def test_storage_opf():
    """ Testing a simple network with storage to ensure the correct behaviour
    of the storage OPF-Functions """

    # boundaries
    vm_max = 1.1
    vm_min = 0.9
    max_line_loading_percent = 100

    # create network
    net = pp.create_empty_network()

    b1 = pp.create_bus(net, vn_kv=0.4, max_vm_pu=vm_max, min_vm_pu=vm_min)
    b2 = pp.create_bus(net, vn_kv=0.4, max_vm_pu=vm_max, min_vm_pu=vm_min)

    pp.create_line(net, b1, b2, length_km=5, std_type="NAYY 4x50 SE",
                   max_loading_percent=max_line_loading_percent)

    # test elements static
    pp.create_ext_grid(net, b2)
    pp.create_load(net, b1, p_mw=0.0075, controllable=False)
    pp.create_sgen(net, b1, p_mw=0.025, controllable=True, min_p_mw=0.01, max_p_mw=0.025,
                   max_q_mvar=0.025, min_q_mvar=-0.025)

    # test elements
    pp.create_storage(net, b1, p_mw=-.0025, max_e_mwh=50, controllable=True, max_p_mw=0,
                      min_p_mw=-0.025, max_q_mvar=0.025, min_q_mvar=-0.025)
    pp.create_sgen(net, b1, p_mw=0.025, controllable=True, min_p_mw=0, max_p_mw=0.025,
                   max_q_mvar=0.025, min_q_mvar=-0.025)
    pp.create_load(net, b1, p_mw=0.025, controllable=True, max_p_mw=0.025, min_p_mw=0,
                   max_q_mvar=0.025, min_q_mvar=-0.025)

    # costs
    pp.create_poly_cost(net, 0, "ext_grid", cp1_eur_per_mw=3)
    pp.create_poly_cost(net, 0, "sgen", cp1_eur_per_mw=2)
    pp.create_poly_cost(net, 0, "storage", cp1_eur_per_mw=-1)
    pp.create_poly_cost(net, 1, "sgen", cp1_eur_per_mw=1)

    pp.create_poly_cost(net, 1, "load", cp1_eur_per_mw=-3)

    # test storage generator behaviour
    net["storage"].in_service.iloc[0] = True
    net["storage"].p_mw.iloc[0] = -0.025
    net["sgen"].in_service.iloc[1] = False
    net["load"].in_service.iloc[1] = False

    pp.runopp(net)
    assert net["OPF_converged"]

    res_stor_p_mw = net["res_storage"].p_mw.iloc[0]
    res_stor_q_mvar = net["res_storage"].q_mvar.iloc[0]
    res_cost_stor = net["res_cost"]

    net["storage"].in_service.iloc[0] = False
    net["storage"].p_mw.iloc[0] = -0.025
    net["sgen"].in_service.iloc[1] = True
    net["load"].in_service.iloc[1] = False

    pp.runopp(net, )
    assert net["OPF_converged"]

    res_sgen_p_mw = net["res_sgen"].p_mw.iloc[1]
    res_sgen_q_mvar = net["res_sgen"].q_mvar.iloc[1]
    res_cost_sgen = net["res_cost"]

    # assert storage generator behaviour
    assert np.isclose(res_stor_p_mw, -res_sgen_p_mw)
    assert np.isclose(res_stor_q_mvar, -res_sgen_q_mvar)
    assert np.isclose(res_cost_stor, res_cost_sgen)

    # test storage load behaviour
    net["storage"].in_service.iloc[0] = True
    net["storage"].p_mw.iloc[0] = 0.025
    net["storage"].max_p_mw.iloc[0] = 0.025
    net["storage"].min_p_mw.iloc[0] = 0
    net["storage"].max_q_mvar.iloc[0] = 0.025
    net["storage"].min_q_mvar.iloc[0] = -0.025
    # gencost for storages: positive costs in pandapower per definition
    # --> storage gencosts are similar to sgen gencosts (make_objective.py, l.128ff. and l.185ff.)
    net["poly_cost"].cp1_eur_per_mw.iloc[2] = net.poly_cost.cp1_eur_per_mw.iloc[4]
    net["sgen"].in_service.iloc[1] = False
    net["load"].in_service.iloc[1] = False

    pp.runopp(net)
    assert net["OPF_converged"]

    res_stor_p_mw = net["res_storage"].p_mw.iloc[0]
    res_stor_q_mvar = net["res_storage"].q_mvar.iloc[0]
    res_cost_stor = net["res_cost"]

    net["storage"].in_service.iloc[0] = False
    net["storage"].p_mw.iloc[0] = 0.025
    net["sgen"].in_service.iloc[1] = False
    net["load"].in_service.iloc[1] = True

    pp.runopp(net)
    assert net["OPF_converged"]

    res_load_p_mw = net["res_load"].p_mw.iloc[1]
    res_load_q_mvar = net["res_load"].q_mvar.iloc[1]
    res_cost_load = net["res_cost"]

    # assert storage load behaviour
    assert np.isclose(res_stor_p_mw, res_load_p_mw)
    assert np.isclose(res_stor_q_mvar, res_load_q_mvar)
    assert np.isclose(res_cost_stor, res_cost_load)
コード例 #27
0
def create_network():
    # carga la red de cigre de baja tensión y la modifica acrode a nuestros interese
    # retorna un objeto pandapower y la matriz de resistencias r y de reactancias x
    net = pn.create_cigre_network_lv()

    # Eliminar cargas que no se usarán
    for index in net.load.index:
        if not net.load['name'][index][5] == 'R':
            net.load.drop(index, inplace=True)
    net.load.drop(0, inplace=True)

    # Eliminar todos los switches y crear uno nuevo
    for index in net.switch.index:
        net.switch.drop(index, inplace=True)
    pp.create_switch(net,
                     bus=2,
                     element=0,
                     et='l',
                     closed=True,
                     type='CB',
                     z_ohm=0.0)
    pp.create_switch(net,
                     bus=5,
                     element=3,
                     et='l',
                     closed=True,
                     type='CB',
                     z_ohm=0.0)

    # Eliminar trafos que no se usarán
    for index in net.trafo.index:
        if not net.trafo['name'][index] == 'Trafo R0-R1':
            net.trafo.drop(index, inplace=True)

    # Eliminar lineas que no se usarán
    for index in net.line.index:
        if not net.line['name'][index][5] == 'R':
            net.line.drop(index, inplace=True)

    # Eliminar buses que no se usarán
    for index in net.bus.index:
        if not net.bus['name'][index][4] == 'R':
            net.bus.drop(index, inplace=True)
            net.bus_geodata.drop(index, inplace=True)

    # Cambio de lugar de la external grid
    net.ext_grid['bus'] = 1

    # Agregar nodo 20 y linea respectiva
    pp.create_bus(net,
                  vn_kv=0.4,
                  index=20,
                  type='m',
                  zone='CIGRE_LV',
                  in_service=True,
                  geodata=(7, -1))
    pp.create_line_from_parameters(net,
                                   from_bus=5,
                                   to_bus=20,
                                   std_type='UG3',
                                   length_km=0.030,
                                   r_ohm_per_km=0.822,
                                   x_ohm_per_km=0.0847,
                                   c_nf_per_km=0.0,
                                   g_us_per_km=0.0,
                                   max_i_ka=1.0)

    # Agregar GD
    pp.create_sgen(net,
                   bus=16,
                   p_mw=0.030,
                   q_mvar=0.0,
                   name='Microturbina',
                   scaling=1.0,
                   type='CHP',
                   index=1,
                   in_service=False)
    pp.create_sgen(net,
                   bus=17,
                   p_mw=0.010,
                   q_mvar=0.0,
                   name='WT',
                   scaling=1.0,
                   type='WP',
                   index=2,
                   in_service=False)
    pp.create_sgen(net,
                   bus=17,
                   p_mw=0.010,
                   q_mvar=0.0,
                   name='PV1',
                   scaling=1.0,
                   type='PV',
                   index=3,
                   in_service=True)
    pp.create_sgen(net,
                   bus=18,
                   p_mw=0.003,
                   q_mvar=0.0,
                   name='PV2',
                   scaling=1.0,
                   type='PV',
                   index=4,
                   in_service=True)
    pp.create_sgen(net,
                   bus=19,
                   p_mw=0.010,
                   q_mvar=0.0,
                   name='Celda combustible',
                   scaling=1.0,
                   type='CHP',
                   index=5,
                   in_service=False)
    pp.create_storage(net,
                      bus=20,
                      p_mw=0.03,
                      max_e_mwh=0.060,
                      q_mvar=0,
                      min_e_mwh=0.012,
                      in_service=False)

    # Cambiar consumos
    S_loads = [0.015, 0.072, 0.050, 0.015, 0.047]
    cos_phi = 0.85
    for i in net.load.index:
        net.load['p_mw'][i] = S_loads[i - 1] * cos_phi
        net.load['q_mvar'][i] = S_loads[i - 1] * np.sqrt(1 -
                                                         np.square(cos_phi))

    # Modificar Geodata de los buses para graficar
    y = np.array(
        [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 8, 7, 7, 7, 6, 5, 2, 1, 7])
    x = np.array(
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 2, 3, 3, -1, 1, -1, -1])
    net.bus_geodata['x'] = 0.3 * x
    net.bus_geodata['y'] = 0.3 * y

    Zn = ((0.4 * 1e3)**2) / (net.sn_mva * 1e6)
    r = np.zeros((len(net.bus), len(net.bus)))
    x = np.zeros((len(net.bus), len(net.bus)))

    for index in net.line.index:
        r_line = net.line['r_ohm_per_km'][index] * net.line['length_km'][
            index] / Zn
        x_line = net.line['x_ohm_per_km'][index] * net.line['length_km'][
            index] / Zn
        r[net.line['from_bus'][index] - 1,
          net.line['to_bus'][index] - 1] = r_line
        x[net.line['from_bus'][index] - 1,
          net.line['to_bus'][index] - 1] = x_line
        r[net.line['to_bus'][index] - 1,
          net.line['from_bus'][index] - 1] = r_line
        x[net.line['to_bus'][index] - 1,
          net.line['from_bus'][index] - 1] = x_line

    return net, r, x