Primeira Rede Teste:
Importando bibliotecas
from mygrid.grid import GridElements, ExternalGrid, Generation
from mygrid.grid import Shunt_Capacitor
from mygrid.grid import Substation, Sector, Switch, LineModel, UnderGroundLine
from mygrid.grid import Under_Ground_Conductor
from mygrid.grid import Section, LoadNode, TransformerModel, Conductor
from mygrid.grid import Auto_TransformerModel
from mygrid.util import R, P
from mygrid.util import p2r, r2p
from terminaltables import AsciiTable
import time
import numpy as np
Definindo chaves, espaçamento dos cabos de uma linha elétrica e as impendâncias internas de uma geração distribuida
spacing500=[0.0 + 29.0j,
2.5 + 29.0j,
7.0 + 29.0j,
4.0 + 25.0j]
# switchs do alimentador 1 de S1
ch1 = Switch(name='1', state=1)
ch2 = Switch(name='2', state=1)
ch3 = Switch(name='3', state=1)
# Switchs do alimentador 2 de S1
ch9 = Switch(name='9', state=1)
ch10 = Switch(name='10', state=1)
# switchs de Fronteira
ch4 = Switch(name='4', state=0)
ch5 = Switch(name='5', state=0)
ch8 = Switch(name='8', state=0)
ch11 = Switch(name='11', state=0)
# switchs do alimentador de S2
ch6 = Switch(name='6', state=1)
ch7 = Switch(name='7', state=1)
Z = np.eye(3, dtype=complex)*(15+100j)
Z1 = np.eye(3, dtype=complex)
Z2 = np.eye(3, dtype=complex)*(1.5+5j)
Definindo as tensões nominais da rede
# tensao nominal
vll_mt = p2r(13.8e3, 0.0)
vll_bt = p2r(380.0, 0.0)
Transformador
t1 = TransformerModel(name="T1",
primary_voltage=vll_mt,
secondary_voltage=vll_bt,
power=225e3,
impedance=0.01 + 0.2j)
Rede externa
eg1 = ExternalGrid(name='extern grid 1', vll=vll_mt)
Definição de GD's
C2_PV = Generation(name="C2_PV",
P=0e3+0j,
Qmin=-200.0e3j,
Qmax=200.0e3j,
Vmin=0.975,
Vmax=1.05,
Vspecified=0.98,
DV_presc=0.002,
generation_type="PV",
Z=Z)
A3_PV = Generation(name="A3_PV",
P=0e3+0j,
Qmin=-200.0e3j,
Qmax=200.0e3j,
Vmin=0.975,
Vmax=1.05,
Vspecified=0.98,
DV_presc=0.002,
generation_type="PV",
Z=Z)
B3_PV = Generation(name="B3_PV",
P=0e3+0j,
Qmin=-200.0e3j,
Qmax=200.0e3j,
Vmin=0.975,
Vmax=1.05,
Vspecified=0.98,
DV_presc=0.002,
generation_type="PV",
Z=Z)
B1_PV = Generation(name="B1_PV",
P=0e3+0j,
Qmin=-200.0e3j,
Qmax=200.0e3j,
Vmin=0.975,
Vmax=1.05,
Vspecified=0.98,
DV_presc=0.002,
generation_type="PV",
Z=Z)
C3_PV = Generation(name="C3_PV",
P=10e3+0j,
Qmin=-200.0e3j,
Qmax=200.0e3j,
Vmin=0.975,
Vmax=1.05,
Vspecified=1.0,
DV_presc=0.002,
generation_type="PV",
Z=Z)
G1_PV = Generation(name="G1_PV",
P=10e3+0j,
Qmin=-200.0e3j,
Qmax=200.0e3j,
Vmin=0.975,
Vmax=1.05,
Vspecified=1.0,
DV_presc=0.002,
generation_type="PV",
Z=Z2)
b2_PV = Generation(name="b2_PV",
P=0e3+0j,
Qmin=-200.0e3j,
Qmax=200.0e3j,
Vmin=0.975,
Vmax=1.05,
Vspecified=0.98,
DV_presc=0.0002,
generation_type="PV",
Z=Z)
aa1_PQ = Generation(name="aa1_PV",
Pa=-2.62e3j,
Pb=-2.62e3j,
Pc=-2.62e3j,
generation_type="PQ",
Z=Z)
aa2_PQ = Generation(name="aa2_PV",
Pa=8.12e3j,
Pb=8.12e3j,
Pc=8.12e3j,
generation_type="PQ",
Z=Z)
Capacitor shunt
SC_C1 = Shunt_Capacitor(vll=13.8e3,
Qa=1000e3, Qb=1000e3, Qc=1000e3,
type_connection="wye")
Nos de carga do alimentador S1_AL1
s1 = LoadNode(name='S1',
voltage=vll_mt,
external_grid=eg1)
a1 = LoadNode(name='A1',
power=120+160j,
voltage=vll_mt)
a2 = LoadNode(name='A2',
power=150.0e3 + 110.0e3j,
voltage=vll_mt)
a3 = LoadNode(name='A3',
generation=A3_PV,
ppa=100.0e3 + 36.670e3j,
ppb=100.0e3 + 36.670e3j,
ppc=100.0e3 + 36.670e3j,
voltage=vll_mt)
b1 = LoadNode(name='B1',
generation=B1_PV,
ppa=100.0e3 + 36.670e3j,
ppb=100.0e3 + 36.670e3j,
ppc=100.0e3 + 36.670e3j,
voltage=vll_mt)
b2 = LoadNode(name='B2',
generation = b2_PV,
power=150.0e3 + 110.0e3j,
voltage=vll_mt)
b3 = LoadNode(name='B3',
generation=B3_PV,
power=100.0e3 + 80.0e3j,
voltage=vll_mt)
c1 = LoadNode(name='C1',
power=200.0e3 + 140.0e3j,
voltage=vll_mt)
c2 = LoadNode(name='C2',
generation=C2_PV,
power=150.0e3 + 110.0e3j,
voltage=vll_mt)
c3 = LoadNode(name='C3',
#generation=C3_PV,
ppa=20.0e3 + 36.670e3j,
ppb=150.0e3 + 36.670e3j,
ppc=100.0e3 + 36.670e3j,
voltage=vll_mt)
Nos de carga do alimentador S1_AL2
f1 = LoadNode(name='F1',
power=100.0e3 + 80.0e3j,
voltage=vll_mt)
g1 = LoadNode(name='G1',
power=100.0e3 + 80.0e3j,
# generation=G1_PV,
voltage=vll_mt)
Nos de carga do alimentador S2_AL1
s2 = LoadNode(name='S2',
voltage=vll_mt,
external_grid=eg1)
d1 = LoadNode(name='D1',
power=200.0e3 + 160.0e3j,
voltage=vll_mt)
d2 = LoadNode(name='D2',
power=900.0e3 + 40.0e3j,
voltage=vll_mt)
d3 = LoadNode(name='D3',
power=100.0e3 + 80.0e3j,
voltage=vll_mt,)
e1 = LoadNode(name='E1',
power=100.0e3 + 40.0e3j,
voltage=vll_mt)
e2 = LoadNode(name='E2',
power=110.0e3 + 70.0e3j,
voltage=vll_mt)
e3 = LoadNode(name='E3',
power=150.0e3 + 80.0e3j,
voltage=vll_mt)
Rede de baixa tensão conectada em A1
aa1 = LoadNode(name='AA1',
power=0.0 + 0.0j,
voltage=vll_bt)
aa2 = LoadNode(name='AA2',
# generation=aa2_PQ,
power=20.0e3 + 5.0e3j,
voltage=vll_bt)
aa3 = LoadNode(name='AA3',
# generation=aa1_PQ,
power=20.0e3 + 5.0e3j,
voltage=vll_bt)
Definição das linhas elétricas
phase_conduct = Conductor(id=57)
neutral_conduct = Conductor(id=44)
line_model_a = LineModel(loc=spacing500,
phasing=['a','b','c','n'],
conductor=phase_conduct,
neutral_conductor=neutral_conduct)
phase_conduct_bt = Conductor(id=32)
line_model_b = LineModel(loc=spacing500,
phasing=['a','b','c','n'],
conductor=phase_conduct_bt,
neutral_conductor=neutral_conduct)
Trechos do alimentador S1_AL1
s1_a2 = Section(name='S1A2',
n1=s1,
n2=a2,
switch=ch1,
line_model=line_model_a,
length=4)
a2_a1 = Section(name='A2A1',
n1=a2,
n2=a1,
line_model=line_model_a,
length=4)
a2_a3 = Section(name='A2A3',
n1=a2,
n2=a3,
line_model=line_model_a,
length=4)
a2_c1 = Section(name='A2C1',
n1=a2,
n2=c1,
switch=ch3,
line_model=line_model_a,
length=4)
c1_c2 = Section(name='C1C2',
n1=c1,
n2=c2,
line_model=line_model_a,
length=4)
c1_c3 = Section(name='C1C3',
n1=c1,
n2=c3,
line_model=line_model_a,
length=4)
a3_b1 = Section(name='A3B1',
n1=a3,
n2=b1,
switch=ch2,
line_model=line_model_a,
length=4)
b1_b2 = Section(name='B1B2',
n1=b1,
n2=b2,
line_model=line_model_a,
length=4)
b2_b3 = Section(name='B2B3',
n1=b2,
n2=b3,
line_model=line_model_a,
length=4)
Trechos do alimentador S1_AL2
s1_f1 = Section(name='S1F1',
n1=s1,
n2=f1,
switch=ch9,
line_model=line_model_a,
length=1.0)
f1_g1 = Section(name='F1G1',
n1=f1,
n2=g1,
switch=ch10,
line_model=line_model_a,
length=1.0)
g1_d2 = Section(name='G1D2',
n1=g1,
n2=d2,
switch=ch11,
line_model=line_model_a,
length=1.0)
Trechos do alimentador S2_AL1
s2_d1 = Section(name='S2D1',
n1=s2,
n2=d1,
switch=ch6,
line_model=line_model_a,
length=1.0)
d1_d2 = Section(name='D1D2',
n1=d1,
n2=d2,
line_model=line_model_a,
length=1.0)
d1_d3 = Section(name='D1D3',
n1=d1,
n2=d3,
line_model=line_model_a,
length=1.0)
d1_e1 = Section(name='D1E1',
n1=d1,
n2=e1,
switch=ch7,
line_model=line_model_a,
length=1.0)
e1_e2 = Section(name='E1E2',
n1=e1,
n2=e2,
line_model=line_model_a,
length=1.0)
e1_e3 = Section(name='E1E3',
n1=e1,
n2=e3,
line_model=line_model_a,
length=1.0)
Trechos de encontro de alimentador
c3_e3 = Section(name='C3E3',
n1=c3,
n2=e3,
switch=ch8,
line_model=line_model_a,
length=1.0)
b2_e2 = Section(name='B2E2',
n1=b2,
n2=e2,
switch=ch4,
line_model=line_model_a,
length=1.0)
b3_c3 = Section(name='B3C3',
n1=b3,
n2=c3,
switch=ch5,
line_model=line_model_a,
length=0.5)
Trechos em baixa tensão a montante de A1
a1_aa1 = Section(name='A1AA1',
n1=a1,
n2=aa1,
transformer=t1,
length=3.0e-2)
aa1_aa2 = Section(name='AA1AA2',
n1=aa1,
n2=aa2,
line_model=line_model_b,
length=3.0e-2)
aa1_aa3 = Section(name='AA1AA3',
n1=aa1,
n2=aa3,
line_model=line_model_b,
length=3.0e-2)
Listando nós, trechos e chaves:
load_nodes = [s1, a1, a2, a3, b1, b2, b3, c1, c2, c3,
s2, d1, d2, d3, e1, e2, e3, f1, g1, aa1, aa2, aa3]
sections = [s1_a2, a2_a1, a2_a3, a2_c1, c1_c2, c1_c3, c3_e3, a3_b1, b1_b2,
b2_b3, b2_e2, b3_c3, s2_d1, d1_d2, d1_d3, d1_e1, e1_e2, e1_e3,
s1_f1, f1_g1, g1_d2, a1_aa1, aa1_aa2, aa1_aa3]
switchs = [ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10, ch11]
Criando o objeto rede:
grid_elements = GridElements(name='my_grid_elements')
Adicionando os elementos constituintes da rede.
grid_elements.add_switch(switchs)
grid_elements.add_load_node(load_nodes)
grid_elements.add_section(sections)
Criando a rede:
grid_elements.create_grid()
Fluxo de Carga
from mygrid.power_flow.backward_forward_sweep_3p import calc_power_flow
inicio = time.time()
calc_power_flow(grid_elements.dist_grids['F0'])
fim = time.time()
print(fim - inicio)
grid_elements.nodes_table_voltage(Df=False)
grid_elements.dist_grids
retorna, em lista, objetos contidos em alimentadores que pertecem a uma mesma subestação.
grid_elements.nodes_table_voltage
. Retorna em tela uma tabela que contém as principais informações do fluxo de carga para toda a rede. Caso Df = True
, retorna um objeto no formato DataFrame.
Curto-Circuito
Curto circuito em componentes de fase:
from mygrid.short_circuit import phase_components
phase_components
possui os seguintes métodos para o cálculo do curto-circuito.
-
phase_components.biphasic
para curto bifásico. -
phase_components.biphasic_to_ground
para curto bifásico com contato para terra. -
phase_components.three_phase_to_ground
para curto trifásico com contato para terra. -
phase_components.three_phase
para curto trifásico. -
phase_components.mono_phase
para curto monofásico. -
phase_components.min_mono_phase
para curto monofásico mínimo.
Esses métodos possuem os seguintes argumentos:
-
distgrid
objeto rede. -
node_name
nome do nó em falta. -
fs='Higher'
Indica que fases considerar na execução do cálculo do curto-circuito.Higher
indica que será considerado a combinação de fases que gere o maior nível de curto.- Para curto bifásico três combinações são aceitas:
Fab
,Fac
eFbc
- Para curto bifásico com contato para terra três combinações são aceitas:
Fab_g
,Fac_g
eFbc_g
- Para curto monofásico três combinações são aceitas:
Fag
,Fcg
eFbg
. - Para curto monofásico mínimo três combinações são aceitas:
Fag_min
,Fcg_min
eFbg_min
-
Df
Indica se o resultado retornado será no formato de dicionário ou de dataframe. -
zc=0+0j
Impedância de contato. -
zt
Impedância do solo. Usada somente emphase_components.min_mono_phase
.
Exemplo
from mygrid.short_circuit.phase_components import biphasic
from mygrid.short_circuit.phase_components import biphasic_to_ground
from mygrid.short_circuit.phase_components import three_phase, mono_phase
from mygrid.short_circuit.phase_components import min_mono_phase
from mygrid.short_circuit.phase_components import three_phase_to_ground
distgrid=grid_elements.dist_grids['F0']
Iftg=three_phase_to_ground(distgrid, 'C1')
Ifb=biphasic(distgrid, 'C1')
Ifbg=biphasic_to_ground(distgrid, 'A2', fs='Fab_g')
ft= three_phase(distgrid, 'C1')