Escolar Documentos
Profissional Documentos
Cultura Documentos
Web application implementation for load flow calculation using the Gauss-
Siedel method for solving a problem with three bars for didactic purposes
RESUMO
O cálculo de fluxo de carga é uma tarefa primordial nas atividades de geração, transmissão e
distribuição de energia. Com o uso de tal técnica, é possível verificar os possíveis gargalos na
rede, permitindo assim antecipar faltas, as quais tem alto valor punitivo por partes do Operador
do Sistema Elétrico. Assim, um bom planejamento possibilita a adequação e expansão de forma
responsável por parte dos atores que operam o sistema elétrico. Entretanto, o uso de ferramentas
computacionais tem elevado custo, haja vista o elevado grau de especificidade e a necessidade
de compra de licenças para cada terminal o qual será utilizado. Neste contexto, este trabalho
tem por objetivo demonstrar as possiblidades do uso da Internet para a resolução de tal tarefa,
reduzindo o custo e aumentando a sua disponibilidade. Para tanto, foi utilizado a linguagem de
programação Python, por intermédio do framework Django e biblioteca de computação
matemática NumPy. Com isso, foi desenvolvido um protótipo de interface, orientado para a
resolução de um determinado tipo de problema. A solução foi hospedada num servidor online
de alto desempenho (AWS, Amazon Web Services). Foi possível comprovar a funcionalidade
da ferramenta, utilizando dados de um problema pré-existente, o qual já possuía resolução.
ABSTRACT
The calculation of the load flow is a primary task in the activities of generation, transmission
and distribution of energy. With the use of this technique, it is possible to check the possible
KEY-WORDS: Load flow, Internet, Cloud Computing, Python, Django, Power Electrical
Systems
1 INTRODUÇÃO
2
O incremento do poder computacional, bem com o amplo acesso à Internet, possibilita o
desenvolvimento de aplicações hospedadas em nuvens computacionais, onde é possível realizar
o incremento de recursos computacionais sob demanda, tal qual Amazon Web Services ou
Microsoft Azure, viabilizando o acesso remoto à aplicação, utilizando-se apenas de um
navegador Web [6].
Este trabalho teve como objetivo criar uma infraestrutura computacional que permita a
execução de cálculos de fluxo de carga, de forma remota, e desenvolver um protótipo que seja
capaz de receber as informações pertinentes ao cálculo de fluxo de carga de forma amigável,
com uma planilha, exibir o resultado da computação no navegador WEB, e, além de discutir os
resultados, apresentar proposições para os próximos trabalhos.
2 FUNDAMENTAÇÃO TEÓRICA
Para que seja possível o entendimento adequado do que este trabalho trata, inicialmente
será definido o que é cálculo de fluxo de potência. Fluxo de potência é o estudo de sistemas de
potência em condição de regime permanente. A utilização de um diagrama unifilar, possibilita
um melhor entendimento de tal sistema, onde cada componente é descrito como um elemento
visual, como pode ser visto na Figura X a seguir [3].
3
Fonte: (STEVENSON, 1986)
Neste caso, as soluções apresentadas são descritas na forma matricial, permitindo o cálculo
utilizando computadores digitais, objetivando a redução de tempo do projetista e a minimizando
os erros associados ao cálculo e foram obtidas a partir da literatura levantada [3].
A potência aparente complexa em função da tensão e corrente na barra pode ser escrita
como: .
𝑆 = 𝑉 . 𝐼 ∗̇ (2.1)
Onde: [𝐼 ̇] é o vetor coluna das correntes injetadas nas barras e [𝑉̇ ] é o vetor coluna das
tensões nas barras, e [𝑌barra ]é a matriz admitância nodal. Reescrevendo (2.3) para a linha i, vem:
𝐼𝑖̇ = 𝑌𝑖1 . 𝑉1̇ + 𝑌𝑖2 . 𝑉̇2 + ... + 𝑌in . 𝑉𝑛̇ (2.4)
Das equações (2.1) e (2.4), resulta:
𝑃𝑖 − jQ𝑖 = 𝑉̇𝑖∗ ∑𝑛𝑗=1 𝑌ij × 𝑉𝑗̇ (2.5)
Por convenção, na equação (2.5) é utilizado apenas valores positivos para 𝑃𝑖 e 𝑄𝑖 quando
for injetadas potências nas barras e negativo para potências absorvidas.
4
Figura 3: Fluxo em um elemento de rede.
Fonte: (OLIVEIRA, 1998)
𝑆ij = 𝑃ij + jQij = 𝑉̇𝑖 . 𝐼ij∗̇ , realizando a substituição de 𝐼ij̇ por suas componentes em termos de
tensão, tem-se:
(𝑉̇ ∗ −𝑉̇ ∗ ) 2 ∗
𝑆ij = 𝑉̇𝑖 . 𝑖 ∗ 𝑗 + |𝑉̇𝑖 | . 𝑦pi (2.6)
𝑧ij
Para realizar os cálculos de fluxo de carga, são necessários dados de rede, dados de carga,
dados de geração e dados de barras. Dados de rede são os parâmetros das linhas de transmissão,
taps, potência nominal dos transformadores e topologia da rede, enquanto os dados de carga
são a projeção de carga para todas as barras na condição desejada para o estudo de fluxo de
potência. Os dados de geração se referem ao despacho de geração e a tensão em quer se
controlar a barra de geração para todas as barras desse tipo, e os dados de barras são necessárias
todas as tensões nominais de todas as barras do sistema.
A solução das equações básicas permite obter tensões em toda a rede, derivação de todos
os transformadores, carregamento de todo o sistema, perdas e potência reativa.
Para que seja possível utilizar a equação (2.5), é necessário definir quais são as constantes
e as variáveis envolvidas no problema. Tal equação é complexa, e pode ser decomposta em
duas equações reais para cada barra do sistema, tornando possível uma solução [3].
Uma das formas de escrever as equações do sistema, é utilizando a forma matricial, como
pode ser visto abaixo:
5
A matriz Y é simétrica e denominada de 𝑌𝑏𝑎𝑟𝑟𝑎 e chamada de matriz admitância de barra.
Os elementos 𝑌11 , 𝑌22 , 𝑌33 𝑒 𝑌44 são chamados de elementos próprios da matriz. Os elementos
fora da diagonal são chamados de elementos mútuos [3].
1. Elementos próprios
𝑁
𝑌𝑖𝑖 = ∑ 𝑦𝑖𝑗
𝑗=1
2. Elementos mútuos
𝑌𝑖𝑗 = −𝑦𝑖𝑗
Para sistemas elétricos de potência, são definidos três tipos de barras em função da dupla
de variáveis que são fixadas: Barra de tipo 1 (PQ) ou carga, Barra de tipo 2 (PV) ou tensão
controlada e Barra do tipo 3 (Swing) ou oscilante.
Para a barra de tipo 1, as potências ativa e reativa de carga 𝑃𝑐 e 𝑄𝑐 estão definidas, logo,
essas são as variáveis fixadas. Já para a barra de tipo 2, é conhecida a potência ativa gerada 𝑃𝑔
e o módulo da tensão de barra, e tem-se como incógnitas a potência reativa 𝑄𝑔 e a fase da
tensão de barra. Para a barra de tipo 3 as variáveis fixadas são o módulo e a fase da tensão, e
possuindo como incógnitas as potências 𝑃𝑔 e 𝑄𝑔 . Esse tipo de barra é necessário para que seja
possível quantificar as perdas, que serão estimadas ao final da solução.
Para que seja possível obter uma solução correta, é necessário considerar as perdas,
obedecendo a seguinte equação:
Para que seja executado o cálculo de fluxo de carga de forma prática, é necessário a
utilização de processos iterativos. Tais processos permitem o uso de soluções digitais para a
computação das soluções. Para tanto, são estimados valores para as tensões de barra
desconhecidos e, posteriormente, calcula-se um novo valor para cada tensão de barra a partir
dos valores estimados das outras barras. Esses valores partem ora da potência real e reativa ora
do módulo de tensão especificados.
6
Com isso, é obtido um novo conjunto de valores para as tensões de cada barra, o qual é
usado para calcular outro conjunto de tensões de barra. Cada novo conjunto de tensões é
chamado de iteração e é repetido até chegar ao valor mínimo estipulado do erro [7].
Para um total de N barras, a tensão calculada em qualquer barra k, onde 𝑃𝑘 e 𝑄𝑘 são dados,
é
1 𝑃𝑘 −𝑗𝑄𝑘
𝑉𝑘 = 𝑌 ( − ∑𝑁
𝑛=1 𝑌𝑘𝑛 𝑉𝑛 ) (2.9)
𝑘𝑘 𝑉𝑘∗
onde, 𝑛 ≠ 𝑘. Os valores para as tensões no lado direito da equação são os mais recentes
calculados para as barras correspondentes.
onde, 𝑛 ≠ 𝑘. Se 𝑛 = 𝑘:
𝑃𝑘 − 𝑗𝑄𝑘 = 𝑉𝑘∗ ∑𝑁
𝑛=1 𝑌𝑘𝑛 𝑉𝑛 (2.11)
𝑄𝑘 = −ℑ𝑚{𝑉𝑘∗ ∑𝑁
𝑛=1 𝑌𝑘𝑛 𝑉𝑛 } (2.12)
A potência reativa 𝑄𝑘 é calculada pela equação (2.12) para os melhores valores anteriores
de tensão nas barras, e esse valor de 𝑄𝑘 é substituído na eq. (2.9) para achar um novo 𝑉𝑘 . Assim,
as componentes do novo 𝑉𝑘 são, então, multiplicadas pela razão do módulo constante de 𝑉𝑘
especificado pelo módulo de 𝑉𝑘 obtido na eq. (2.9). O resultado é a tensão complexa corrigida
do módulo especificado [7].
7
2.4 Linguagem de programação de alto nível
Para realizar a implementação das rotinas referentes aos métodos iterativos, é necessária
uma linguagem de programação. Estes se fundamentam, basicamente, na manipulação das
equações utilizando matrizes, e operações correlatas, como multiplicações e inversas [3,7].
O SciPy é uma biblioteca Open Source em linguagem Python, que possui como biblioteca
central o NumPy, a qual fornece uma manipulação conveniente e rápida para array N-
dimensional[11].
2.4.1 – NumPy
O núcleo da biblioteca está relacionado ao objeto ndarray. Ele encapsula array de tipos de
dados homogêneos, com várias operações sendo realizadas com código compilado para
performance [12]. Existem diferenças básicas entre os arrays do NumPy e as sequências do
Python:
Arrays em NumPy tem tamanho fixo na sua criação, diferentemente das listas em
Python (que crescem dinamicamente). Aumentar o tamanho de um ndarray causa a
criação de um novo array e a remoção do original;
Os elementos um array NumPy devem ser do mesmo tipo, ocasionando que todos eles
tem o mesmo tamanho em memória. Uma exceção é para os arrays de objetos, que
estes permitem ter propriedades do tipo arrays com tamanhos variados;
Arrays do NumPy facilitam matemática avançada e outros tipos de operaçãos com
grandes quantidades de dados. Tipicamente, tais operações são executadas de forma
mais eficiente e com menos código do que as sequências existentes no próprio Python;
Uma grande quantidade de pacotes científicos e matemáticos estão utilizando arrays
NumPy. [12]
Por exemplo, a operação da inversa de uma matriz, que consiste na multiplicação de uma
matriz X por sua inversa Y, obtendo a matriz identidade. Para tanto, é utilizado o comando
numpy.linalg.inv(). O procedimento pode ser visto na Figura 1 e o seu resultado na Figura 2
[13]:
8
Figura 4: Inversa de uma matriz
Fonte: TutorialsPoint
2.4.2 – Django
9
Figura 6: Django MVT
Fonte: Tutorials Point
HTTP é um protocolo baseado em texto sem conexão. Isso significa que as pessoas que
acessam o site da sua empresa enviam solicitações a servidores que as exibem na forma do seu
site em formato de texto, imagens, e outros tipos de mídia. Depois que a solicitação é atendida
por um servidor, a conexão entre o usuário e o servidor é desconectada [17,18,19].
Uma nova conexão deve ser feita para cada solicitação, isto é, cada vez que alguém acessa
o seu site. Em suma, quando alguém digita a URL do seu site em um navegador, é isto que
acontece:
10
II. o navegador se conecta ao servidor e envia uma solicitação HTTP para a página da web
desejada (que, neste exemplo, é o seu site);
III. o servidor recebe a solicitação e verifica a página desejada. Se a página existir, o
servidor a mostrará. Se o servidor não conseguir encontrar a página solicitada, ele
enviará uma mensagem de erro HTTP 404, ou seja, página não encontrada;
IV. o navegador, então, recebe a página de volta e a conexão é fechada;
V. caso a página exista (e é isso que se espera), o navegador a analisa e procura outros
elementos necessários para concluir a sua exibição, o que inclui seus textos, imagens e
afins;
VI. para cada um desses elementos, o navegador faz conexões adicionais e solicitações
HTTP para o servidor para cada elemento e,
VII. quando o navegador terminar de carregar todos os elementos, a página será carregada
na janela do navegador[17].
11
Figura 9: Resposta HTTP
Fonte: (AUTORES,2020)
Para que seja possível enviar arquivos para o servidor, é realizar algumas adequações nos
formulários WEB, que são as estruturas que gerenciam estes, haja vista serem dados binários.
Para tanto, é necessária que seja realizada duas alterações no formulário, para que o mesmo
funcione de maneira adequada: a alteração de um atributo chamado ‘HTTP Content-Type’ para
‘multipart/form-data’ e a definição do ‘Method’ de envio do formulário para o servidor como
‘POST’. Após as alterações, a estrutura HTML que será apresentada no fonte é o exibido na
Figura 10.
3 MATERIAIS E MÉTODOS
Para que fosse possível a consecução deste trabalho, foi realizada uma criteriosa revisão
no estado da técnica, com o objetivo de utilizar a mais recente infraestrutura computacional
para o uso neste projeto. Assim, foi definido o setup, constante na Tabela 1.
12
Biblioteca numérica NumPy 1.19.3
Após a definição da estrutura, foi definido um modelo de dados, para que fosse possível
realizar a importação dos dados dos problemas de fluxo de carga para o domínio da aplicação.
Para tanto, foi definido um modelo baseado em valores separados por vírgula, onde cada campo
representa uma das dimensões do problema. A definição dos campos é apresentada na próxima
seção. Após o correto preenchimento do modelo de dados, este é enviado para o processamento
no servidor, por intermédio de uma interface WEB, onde é processado pelo algoritmo de Gauss-
Siedel, para posterior exibição dos dados.
4 RESULTADOS E DISCUSSÃO
Para que fosse possível realizar a verificação funcional, um problema foi selecionado
para ser utilizado como modelo e contra prova do sistema em questão. A origem deste é a
segunda avaliação da disciplina de Fluxo de Carga e Estabilidade, do período 2020.1. Tal
questão pode ser vista na Figura 11.
Para que os dados constantes no problema fossem carregados no problema, estes foram
convertidos em um arquivo CSV (Comma Separated Values). Além disso, foi necessária a
definição de um formato em que tais unidades fossem identificadas adequadamente pelo
algoritmo. O arquivo pode ser visto na Figura 12.
13
Figura 12: Arquivo CSV com dados
Fonte: (AUTORES, 2020)
Cada elemento existente no problema foi mapeado como uma linha do arquivo. Assim,
dependendo do elemento, a linha possui uma configuração diferente. As três primeiras linhas
são as barras do sistema, que pode ser distinguidas pelo segundo campo definido como “1”. A
próxima coluna se refere ao tipo de barra. Para o valor “1” existe uma barra de balanço e para
o valor “2”, uma barra de carga. Após isso, é definido o valor da potência aparente e em seguida
a sua referida tensão. Todos os valores são expressos como número complexos na forma
retangular. As barras que não possuíam valores de tensão, foi assumido o valor inicial de 1 +
𝑗0.
Já os três últimos itens se referem as admitâncias do sistema, como pode ser verificado pela
segunda coluna informando o valor “2”. Na terceira coluna é indicada a interligação entre quais
barras do sistema. Cada identificador da barra é separada por um “;” para que seja possível a
correta identificação dos elementos. Na última coluna, para o caso de uma admitância, é
definido o seu valor, como número complexo na forma retangular.
PARA BARRAS
PARA ADMITÂNCIAS
14
O campo TIPO_ELEMENTO tem os como valores os descritos na Tabela 2.
1 Barra
2 Admitância
1 Balanço
2 Carga
15
A codificação da tela, utlizando o módulo de templates do Django, pode ser visualizada
em duas etapas. Na primeira, a definição do cabeçalho com informações do tipo da página,
charset, carregamento de bibliotecas Javascript e CSS3, bem como a definição do título desta.
Após tal etapa, é criado um formulário HTML, o qual receberá o arquivo com os dados do
problema em questão, como pode ser visualizado na Figura 14.
Após isso, caso seja enviado os dados e computados com sucesso, é realizado a exibição do
processo, por intermédio da combinação do Python e HTML, podendo ser vista a
implementação na Figura 15.
16
Figura 15: Implementação da exibição de dados pós algoritmo de Gauss-Siedel
Fonte: (AUTORES, 2020)
Nela, é possível associar o arquivo CSV para que seja possível realizar o cálculo de fluxo
de carga. Ao associar o arquivo no botão ‘Browse’ e clicar no ‘Enviar’, é realizada a
computação. Para tanto, é exibida o resultado parcial da computação, referente a barra de
balanço (ID 1) na Figura 16.
17
Figura 16: Resultado da computação
Fonte: (AUTORES, 2020)
Como a barra é de balanço, e como incialmente não existe computação utilizando o valor
de potência na forma que foi modelada o problema, o seu valor é apresentado com ‘-‘, evitando
assim problemas na interpretação da fonte de potência para o sistema.
18
Figura 18: Resultado da computação para a barra de carga 3
Fonte: (AUTORES, 2020)
Como o problema definia que era necessário resolver os valores de tensão do problema,
foram exibidas 15 iterações, para cada barra.
Para verificação dos valores, foi utilizado a resposta de tal prova, a qual pode ser visualizada
na Figura 19.
19
Figura 19: Questão resolvida.
Fonte: Nassau
5 CONSIDERAÇÕES FINAIS
6 REFERÊNCIAS
[1] – ANATEL. Sistema Interligado Nacional. Acesso em: abril/2020. Disponível em:
https://www.aneel.gov.br/transmissao5
[2] – WANG, X.; SONG, Y.; IRVING, M. Modern Power Systems Analysis. Boston:
Springer, 2008.
20
[3] – OLIVEIRA, José Tavares. Elementos Básicos de Análise de Sistemas de Potência.
Natal, 1998.
[6] – SORRENTINO, E.; ZAVALA, A.; RODRÍGUEZ, J. Web application for Load Flow
Problems. IEEE Latin America Transactions, vol 12, no 6, pp. 1094 – 1100, Set/2014.
[8] - J. Jangra and S. Vadhera, "Load flow analysis for three phase unbalanced distribution
feeders using Matlab," 2017 2nd International Conference for Convergence in Technology
(I2CT), Mumbai, 2017, pp. 862-866, doi: 10.1109/I2CT.2017.8226252.
[9] - T. Phongtrakul, Y. Kongjeen and K. Bhumkittipich, "Analysis of Power Load Flow for
Power Distribution System based on PyPSA Toolbox," 2018 15th International Conference
on Electrical Engineering/Electronics, Computer, Telecommunications and Information
Technology (ECTI-CON), Chiang Rai, Thailand, 2018, pp. 764-767, doi:
10.1109/ECTICon.2018.8619954.
[11] – NUMPY. In: In: WIKIPÉDIA: a enciclopédia livre. Wikimedia, 2020. Disponível em: <
https://pt.wikipedia.org/wiki/SciPy>. Acesso em: 18 jun. 2020.
[14] – NET GURU. Top Django Apps. Acesso em: Junho/2020. Disponível em:
https://www.netguru.com/blog/top-django-apps
[15] – DJANGO BOOK. Django Structure. Acesso em: Junho /2020. Disponível em:
https://djangobook.com/mdj2-django-structure/
[16] – TUTORIALS POINT. Django Overview. Acesso em: Junho/2020. Disponível em:
https://www.tutorialspoint.com/django/django_overview.htm
21
[18] – DEVELOPER MOZILLA. Client and Server Overview. Acesso em: Novembro/2020.
Disponível em: https://developer.mozilla.org/pt-BR/docs/Learn/Server-side/First_steps/Client-
Server_overview
22