Você está na página 1de 22

Implementação de uma aplicação web para cálculo de fluxo de potência

utilizando o método de Gauss-Siedel para a resolução de um problema com


três barras pra uso didático

Web application implementation for load flow calculation using the Gauss-
Siedel method for solving a problem with three bars for didactic purposes

Elliott Victor de Sousa Chaves 1

Felipe Marcell dos Santos Lucena2

Tarcísio Oliveira Trajano3

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.

PALAVRAS-CHAVE: fluxo de carga, internet, Computação em Nuvem, Python, Django,


Sistema Elétrico.

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

1-Discente. UNINASSAU - João Pessoa, PB, Brasil. E-mail: elliott.chaves@gmail.com

2-Discente. UNINASSAU - João Pessoa, PB, Brasil. E-mail: fellipemarcell@hotmail.com

3-Docente. UNINASSAU - João Pessoa, PB, Brasil. E-mail: tarcisiootrajano@gmail.com


bottlenecks in the network, thus allowing to anticipate faults, which have a high punitive value
for parts of the Electric System Operator. Thus, a good planning, allows the adaptation and
expansion in a responsible way by the actors that operate the electrical system. However, the
use of computational tools is expensive, given the high degree of specificity and the need to
purchase licenses for each terminal to be used. In this context, this work aims to demonstrate
the possibilities of using the Internet to solve this task, reducing the cost and increasing its
availability, through the Web. For this purpose, the Python programming language was used,
through the Django framework and NumPy mathematical computing library. As a result, an
interface prototype was developed, aimed at solving a certain type of problem. The solution
was hosted on a high performance online server (AWS, Amazon Web Services). It was possible
to prove the functionality of the tool, using data from a pre-existing problem, which already
had resolution.

KEY-WORDS: Load flow, Internet, Cloud Computing, Python, Django, Power Electrical
Systems

1 INTRODUÇÃO

Com os avanços tecnológicos, o uso da energia elétrica se tornou imprescindível para a


rotina das pessoas. São inúmeros os casos do seu uso, podendo ser citado o bom
acondicionamento da comida numa geladeira, a melhoria do bem-estar numa boa climatização
ou um banho quente num dia chuvoso, o transporte em massa de pessoas, com a concomitante
redução direta dos gases provenientes da queima de combustíveis fósseis, e o uso de
dispositivos computacionais na nossa rotina de trabalho, como o computador e o celular.
Entretanto, para que seja possível manter todo esse consumo de forma quase ininterrupta,
é necessária uma infraestrutura gigantesca, envolvendo unidades geradoras, que podem ser
hidroelétricas, termoelétricas, solares, eólicas, por exemplo.
Após a geração, a potência é transmitida por uma extensa rede de transmissão para
subestações. Nas subestações, dependendo do objetivo, a potência pode ser rebaixada, para que
seja possível o uso em uma rede de distribuição que atende consumidores, como indústrias,
comércios, imóveis rurais e residenciais, possibilitando assim a modelagem de tal estrutura
como um sistema.
Um exemplo brasileiro é o Sistema Interligado Nacional (SIN), onde coexistem centenas
de subsistemas como este conectados [1]. Assim, pensar em uma análise de um sistema de tal
magnitude de forma analítica se torna uma tarefa impraticável. Para tanto, é necessário o uso
do estudo de fluxo de potência. Com isso, é possível verificar se um projeto atende as projeções
de carga ao longo do tempo em relação à demanda. Além disso, o estudo de fluxo de carga pode
ser voltado também para a área de operação de sistemas de distribuição.
Para tanto, o uso de métodos numéricos se torna desejável para que seja possível calcular
os valores de fluxo de potência entre as barras dos sistemas de forma rápida e com uma
tolerância adequada. De acordo com a literatura consultada [2,3], alguns métodos são
amplamente utilizados como Gauss, Gauss-Siedel, Newton-Raphson e fluxo de carga
desacoplado.
O uso de ferramentas e/ou aplicações standalone, ou seja, que são executadas na máquina
local são comumente utilizadas para a resolução de métodos numéricos, bem como aplicações
de fluxo de carga [4,5]. Apesar de tais facilidades, nem sempre a aplicação encontra-se
disponível, ou o seu interpretador, como MatLab e/ou Simulink, ANAREDE, ou o próprio
dispositivo possui alguma restrição de ordem de poder de processamento.

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

2.1 Fluxo de Carga

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].

Figura 1: Diagrama unifilar de um sistema elétrico


Fonte: (STEVENSON, 1986)

Após tal levantamento, e com o intuito de calcular o desempenho de um sistema sob


condições de carga ou de falta, o diagrama unifilar é usado para traçar o circuito equivalente
monofásico do sistema. Baseado na Figura 1, obtêm-se o seguinte diagrama de impedância do
sistema, mostrado na Figura 2.

Figura 2: Diagrama unifilar de admitância

3
Fonte: (STEVENSON, 1986)

Com isso, é possível verificar se um projeto atende as projeções de carga ao longo do


tempo, em relação à demanda. Além disso, o estudo de fluxo de carga pode ser voltado também
para a área de operação de sistemas de distribuição.

O estudo baseia-se na determinação da tensão, da corrente da potência e do fator de


potência ou potência reativa nos diversos pontos de uma rede elétrica [7]. Para tanto, o sistema
é modelado utilizando-se equações algébricas não diferenciais e não lineares [3], evitando
cálculos analíticos demorados, devido complexidade da rede.

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)

Da equação (2.1), considera-se o conjugado de ambos os membros e explicitando a


potência aparente, em função e suas componentes retangulares, tem-se:
.
𝑃 − jQ = 𝑉 ∗ . 𝐼 ̇ (2.2)

Para redes elétricas, a relação é válida:

[𝐼 ]̇ = [𝑌barra ]. [𝑉̇ ] (2.3)

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.

Tanto os transformadores quanto as linhas são representados por um modelo 𝜋, e


assumindo que a potência flui de i para j, tem-se:

𝐼ij̇ = 𝐼si̇ 𝑗 + 𝐼pi̇


(𝑉̇𝑖 − 𝑉𝑗̇ )
𝐼si̇ 𝑗 =
𝑧ij
𝐼pi̇ = 𝑉̇𝑖 . 𝑦pi

Tal fluxo pode ser visto na Figura X abaixo:

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].

2.1.1 Matriz Admitância

Uma das formas de escrever as equações do sistema, é utilizando a forma matricial, como
pode ser visto abaixo:

𝐼1 𝑌11 𝑌12 𝑌13 𝑌14 𝑉1


𝐼2 𝑌21 𝑌22 𝑌23 𝑌24 𝑉2
[ ]=[ ].[ ] (2.7)
𝐼3 𝑌31 𝑌32 𝑌33 𝑌34 𝑉3
𝐼4 𝑌41 𝑌42 𝑌43 𝑌44 𝑉4

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].

Assim, os elementos são formados de uma forma genérica, por:

1. Elementos próprios
𝑁

𝑌𝑖𝑖 = ∑ 𝑦𝑖𝑗
𝑗=1

2. Elementos mútuos
𝑌𝑖𝑗 = −𝑦𝑖𝑗

2.2 Tipos de barra

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:

𝑃𝐶𝑇𝑂𝑇𝐴𝐿 + 𝑝𝑒𝑟𝑑𝑎𝑠 = 𝑃𝐺𝑇𝑂𝑇𝐴𝐿


{ (2.8)
𝑄𝐶𝑇𝑂𝑇𝐴𝐿 + 𝑝𝑒𝑟𝑑𝑎𝑠 = 𝑄𝐺𝑇𝑂𝑇𝐴𝐿

Em apenas um sistema conexo, apenas uma barra de swing é especificada. Entretanto, se


o sistema for constituído por vários subsistemas desconexos, haverá necessidade de n barras de
swing quantos forem os sistemas [3].

2.3 Métodos iterativos

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].

Nesta seção é abordado o método de Gauss-Seidel para a resolução de problemas de fluxo


de carga.

2.3.1 Método de Gauss-Seidel

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.

Numa barra onde é especificado o módulo da tensão em vez da potência reativa, as


componentes real e imaginária da tensão são obtidas, para cada iteração, calculando
primeiramente um valor para a potência reativa. Da equação (2.9), tem-se:

𝑃𝑘 − 𝑗𝑄𝑘 = (𝑌𝑘𝑘 𝑉𝑘 + ∑𝑁
𝑁=1 𝑌𝑘𝑛 𝑉𝑛 )𝑉𝑘 (2.10)

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].

Para que seja possível um melhor entendimento da execução do algoritmo, é descrito o


pseudocódigo do método de Gauss-Siedel para fluxo de potência:

I. Determinar a matriz admitância do sistema;


II. Aplicar o conjugado sobre a potência da barra desejada dividido pela tensão inicial
da barra;
III. Realizar a multiplicação da admitância que interconecta as barras com a a tensão
da barra localizada na outra extremidade, multiplicando o seu resultado por -1;
IV. Repetir o passo III para todas as barras conectadas a barra que deseja saber a tensão;
V. Somar os valores encontrados no passo II e IV e,
VI. Multiplicar o resultado obtido no passo V pelo inverso da admitância 𝑌𝑖𝑖 , onde i é
o índice da barra que deseja realizar o cálculo da tensão e ângulo.

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].

É encontrado na literatura diversas linguagens de programação, como PHP, MATLAB e


Python [6,8,9]. Neste trabalho, será apresentado uma abordagem utilizando Python, utilizando
o ecossistema SciPy[10].

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 NumPy é o pacote fundamental para computação científica em Python. Ela provê um


objeto do tipo array multidimensional, que permite o uso de matrizes. Também possibilita o
uso de álgebra linear, o uso de dispositivo e arquivos de entrada e saída, dentre outros [12].

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

Figura 5: Saída da inversa da matriz


Fonte: TutorialsPoint

2.4.2 – Django

Como forma de mediar a recepção das informações a partir do usuário e o núcleo de


cálculo, e também facilitar a prototipagem de uma aplicação de forma rápida, o uso de
framework se faz necessário. No escopo do Python, o Django tem uma relevante aceitação. Tal
informação pode ser verificada, pela quantidade de empresas de grande porte que o adotam
[14].

O Django é baseado na premissa do MTV (Model-Template-View), cada parte da aplicação


é separada. Pode-se descrever as seguintes:

 Model: responsável pela abstração dos dados constantes no banco de dados,


possibilitando que os mesmos sejam associados a objetos, utilizando-se do conceito de
ORM (Object Relational Modeling);
 Template: tem por objetivo criar a interface que será exibida para o usuário, na qual
será inserida as informações recuperadas do banco de dados, por exemplo e,
 View: é responsável pela mediação das requisições advindas do usuário, onde são
analisadas. Após a análise, se necessário, é realizada uma requisição ao banco de dados,
por intermédio do model, onde será recuperada as informações. Após isso, é montada
a resposta, utilizando um template com os dados recuperados do Model [15,16].

Tal estrutura pode ser vista na Figura 3.

9
Figura 6: Django MVT
Fonte: Tutorials Point

2.5 – Modelo cliente-servidor na WEB

Atualmente, o modelo que prevalece na Internet é o cliente-servidor, onde um dispositivo


requisitará um determinado recurso, o cliente, a um outro dispositivo que disponibilizará o
recurso ou serviço, o servidor.
Para que esta estrutura seja funcional, é necessário que uma mensagem seja enviada para
o servidor. Para que ela possa ser entendida pelo outro ponto, é necessário que tenha um padrão
que seja comum entre o cliente e o provedor. Outro detalhe importante é que, no provedor deve
existir uma aplicação que consiga realizar a interpretação de tais mensagens e realize o
processamento, adequação, gestão dos requisitantes e o retorno das informações. [17,18]

2.5.1 – Protocolo HTTP

O entendimento do funcionamento do protocolo HTTP é de suma importância, haja vista a


necessidade da compreensão de como o serviço WEB transmite as informações e dados do
computador cliente para o servidor, bem como a sua resposta e processamento pelo browser.

O protocolo HTTP é a sigla de Protocolo de Transferência de HyperTexto, do inglês


HyperText Transfer Protocol. Com ele, é definido um padrão para comunicação entre o cliente,
um navegador Web como Firefox ou Google Chrome, e o servidor HTTP, como o Apache.

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:

I. se a URL pertencer a um domínio próprio, o navegador primeiro se conecta a um


servidor e recuperará o endereço IP correspondente ao servidor;

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].

Supondo que no servidor web exista um arquivo introWebServer.html com o conteúdo


da Figura 7

Figura 7: Conteúdo HTML


Fonte: (AUTORES, 2020)
A requisição para este conteúdo, descrita na Figura 8, a partir de um cliente seria:

Figura 8: Requisição HTTP – GET


Fonte: (AUTORES, 2020)

A resposta esperada oriunda do servidor pode ser verificada na Figura 9:

11
Figura 9: Resposta HTTP
Fonte: (AUTORES,2020)

2.5.2 – Envio de arquivos para o servidor

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.

Figura 10: Formulário com submissão de arquivo


Fonte: Mozilla Developer

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.

Tabela 1:Infraestrutura computacional selecionada


Item de infraestrutura computacional Nome

Sistema operacional Linux/Ubuntu

Linguagem de programação Python 3.9.0

12
Biblioteca numérica NumPy 1.19.3

Framework para desenvolvimento WEB Django 3.10

Sistema para virtualização Docker

Automatização de deploy Docker-Compose

Infraestrutura hospedeira escalável Amazon EC2

Fonte: (AUTORES, 2020)

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.

Figura 11: Questão exemplo


Fonte: Nassau

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.

Em resumo, podemos definir o seguinte modelo de dados:

PARA BARRAS

ID_BARRA TIPO_ELEMENTO TIPO_BARRA POT_APARENTE TENSAO

PARA ADMITÂNCIAS

ID_ADMITANCIA TIPO_ELEMENTO BARRAS_CONECTADAS VALOR

14
O campo TIPO_ELEMENTO tem os como valores os descritos na Tabela 2.

Tabela 2: Valores do campo TIPO_ELEMENTO


CÓDIGO REPRESENTA

1 Barra

2 Admitância

Fonte: (AUTORES, 2020)

O campo TIPO_BARRA tem os valores possíveis descritos na Tabela 3.

Tabela 3: Valores do campo TIPO_BARRA


CÓDIGO REPRESENTA

1 Balanço

2 Carga

Fonte: (AUTORES, 2020)

Após isso, foi implementado um algoritmo na linguagem de programação Python, e portado


para Web, utilizando o framework Django. Como resultado do desenvolvimento, foi obtido a
seguinte tela interativa, disponível pela Internet, como pode ser visto na Figura 13.

Figura 13:Tela da implementação do software


Fonte: (AUTORES, 2020)

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.

Figura 14: Implementação do cabeçalho e formulário de recepção de dados.


Fonte: (AUTORES, 2020)

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.

O resultado da computação para as duas barras de carga, ID 2 e 3, são apresentadas como


seções distintas, com as informações para cada barra. Os dados que são desejados, tensão, são
apresentados na forma de uma tabela de iterações versus tensão. Tal exibição pode ser
visualizada nas Figuras 17 e 18, respectivamente.

Figura 17: Resultado da computação da barra de carga 2


Fonte: (AUTORES, 2020)

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

Este trabalho objetivou o desenvolvimento de um protótipo de um sistema WEB para


resolução de problemas de fluxo de carga, o qual utiliza o método numérico de Gauss-Siedel
para resolução dos sistemas de equações pertinentes ao problema.
No que tange ao resultado final do projeto, a experiência foi considerada exitosa, haja vista
conseguir demonstrar a possibilidade da execução de cálculos de fluxo de carga por intermédio
da Internet, utilizando softwares livres. A solução se mostrou estável, respondendo prontamente
as solicitações, bem como com alta velocidade para realização dos cálculos computacionais.
O acesso ao serviço se mostrou estável, sem variações durante o período e sempre
disponível. Cabe ressaltar que o sistema foi desenvolvido em uma arquitetura modular,
possibilitando a expansão e inclusão de novas ferramentas e/ou funcionalidades, sem alterar as
já existentes.
Pode-se citar como sugestão para trabalhos futuros o melhoramento da interface homem-
máquina, podendo citar o aumento de funcionalidades de controle da aplicação (número de
iterações, tipo de método de resolução, por exemplo). Outra funcionalidade desejável é a
extensão das funcionalidades para inclusão de barras do tipo PV no cálculo de fluxo de potência.
Além disso, a implementação de outros algoritmos de resolução de problemas de fluxo de
potência, tais como Newton-Raphson e Método Rápido Desacoplado.

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.

[4] – PEQUENO, L. E. B. Novas facilidades de operação do programa ANAREDE. Rio de


Janeiro, 2010.

[5] – CEPEL. ANAREDE. Acesso em: abril/2020. Disponível em:


http://www.cepel.br/pt_br/produtos/anarede-analise-de-redes-eletricas.htm

[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.

[7] – STEVENSON, William D. Elementos de análise de sistemas de potência. 2ª Edição,


São Paulo, McGraw-Hill, 1986.

[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.

[10] - SciPy. Acesso: Junho/2020. Disponível em: https://www.scipy.org/

[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.

[12] – NUMPY. NumPy. Acesso em: junho/2020. Disponível em:


<https://numpy.org/doc/stable/numpy-user.pdf>

[13] – TUTORIALS POINT. NumPy. Acesso em: Junho/2020. Disponível em:


https://www.tutorialspoint.com/numpy

[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

[17] – ROCK CONTENT. HTTP. Acesso em: Junho/2020. Disponível em:


https://rockcontent.com/blog/http/

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

[19] – DEVELOPER MOZILLA. Sending and retrieving form data. Dezembor/2020.


Disponível em: https://developer.mozilla.org/pt-
BR/docs/Web/Guide/HTML/Forms/Sending_and_retrieving_form_data

22

Você também pode gostar