Escolar Documentos
Profissional Documentos
Cultura Documentos
FACULDADE DE ENGENHARIA
Santos – SP
2019
2
Santos - SP
2019
3
Banca Examinadora
___________________________________________________________________
Prof. Msc Alexandre Shozo Onuki
__________________________________________________________________
Engenheiro David Almeida
___________________________________________________________________
Engenheiro Msc. José de Melo Camargo
__________________________________________________________________
Prof. Engenheiro Sérgio Schina de Andrade
4
DEDICATÓRIA
AGRADECIMENTOS
E aos nossos Pais por terem nos dado todo apoio e força necessários para
alcançarmos nossos objetivos.
6
EPÍGRAFE
(Nikola Tesla)
7
RESUMO
ABSTRACT
Keywords: Power flow; Power Systems II; Power flow calculation; Application.
9
LISTA DE FIGURAS
LISTA DE TABELAS
Sumário
CAPÍTULO 01 – INTRODUÇÃO ...................................................................................................14
1.1 Considerações Iniciais....................................................................................................14
1.2 Objetivo ............................................................................................................................15
1.3 Metodologia .....................................................................................................................15
1.4 Estado da Arte.................................................................................................................17
1.5 Organização do Trabalho ...............................................................................................18
CAPÍTULO 02 - FUNDAMENTAÇÃO TEÓRICA PARA O CÁLCULO DE FLUXO DE
POTÊNCIA......................................................................................................................................20
2.1 Introdução ao Fluxo de Potência ...................................................................................20
2.2 Parâmetros de Rede e Fundamentos do “Estudo Estático”........................................21
2.3 Definição do Tipo das Barras.........................................................................................23
2.4 Convenção do Sentido do Fluxo ...................................................................................24
2.5 Solução das Equações de Fluxo de Potência pelo Método de Newton-Raphson ....24
2.6 Exemplo para Referência ...............................................................................................30
2.6.1 Determinação das Matrizes de Condutância e Susceptância. ...............................31
2.6.2 Cálculos Referentes a Primeira Iteração. .................................................................31
2.6.3 Cálculos Referentes a Segunda Iteração .................................................................33
2.6.4 Cálculos Referentes a Terceira Iteração ..................................................................35
2.7 Conclusões Parciais .......................................................................................................35
CAPÍTULO 03 – ESTRUTURAÇÃO E IMPLANTAÇÃO DO APLICATIVO PARA CÁLCULO
DO FLUXO DE POTÊNCIA...........................................................................................................37
3.1 Definição da Plataforma para Implantação do Conjunto de Algoritmos para o
Cálculo de Fluxo de Potência....................................................................................................37
3.2 Implementação do Conjunto de Algoritmos para o Cálculo do Fluxo de Potência ...39
3.2.1 Determinação do Fluxograma do Processo do Cálculo de Fluxo de Potência .....39
3.2.2 Desenvolvimento dos Códigos Utilizados para o Cálculo de Fluxo de Potência
Envolvendo Duas Barras ..........................................................................................................40
3.2.3 Testes Preliminares para Avaliação do Conjunto de Algoritmos para Cálculo do
Fluxo de Potência......................................................................................................................48
3.3 Desenvolvimento dos Códigos Utilizados para o Cálculo de Fluxo de Potência
Envolvendo Múltiplas Barras .....................................................................................................49
3.4 Conclusões parciais........................................................................................................61
CAPÍTULO 4 – AVALIAÇÃO DA PRECISÃO DO CONJUNTO DE ALGORITMOS PARA
CÁLCULO DO FLUXO DE POTÊNCIA .......................................................................................62
4.1 Metodologia Utilizada nos Testes da Avaliação do Sistema ......................................62
12
CAPÍTULO 01 – INTRODUÇÃO
Neste capítulo são apresentadas as considerações iniciais que motivaram o
desenvolvimento deste tema, assim como o objetivo final e a metodologia utilizada
para alcançar o mesmo. Além do levantamento do estado da arte e, por fim, o escopo
das divisões dos capítulos deste trabalho.
1.2 Objetivo
Este trabalho tem como objetivo o desenvolvimento de um aplicativo gratuito e
de fácil acesso para que os estudantes de engenharia elétrica possam realizar
simulações de problemas envolvendo fluxos de potência, apresentando as variações
e proporções relacionadas às mudanças da topologia da rede e dos dados
operacionais de forma dinâmica e eficaz.
A fim de que este aplicativo seja de fácil uso, ele será para multiplataformas
mobiles (framework), a fim de fornecer disponibilidade para todo o público alvo
(estudantes com diversos sistemas operacionais nos smartphones).
Por fim, o programa tem como propósito trazer mais uma ferramenta de ensino
para as aulas de Sistemas de Potência II do curso de Engenharia Elétrica da
Universidade Santa Cecília, otimizando o tempo hábil para ministrá-las, pois os
cálculos e demonstrações poderão ser finalizados em segundos.
1.3 Metodologia
Com o intuito de atingir de forma satisfatória o objetivo estabelecido por este
trabalho, foi elaborado um planejamento de atividades sequenciais, sendo pautado
pelo roteiro a seguir:
16
d) Desenvolvimento do algoritmo
f) Desenvolvimento da IHM
Uma rede elétrica, para efeito de análise do fluxo, é composta pelos seguintes
componentes:
• Barras: São subestações de transmissão, subtransmissão ou distribuição, nas
quais estão ligadas as cargas do sistema e as usinas de geração.
• Linhas de Transmissão: É o componente da rede responsável pela condução
do fluxo de potência entre as barras do sistema. Estas são representadas por
uma impedância, que possui os valores de resistência e reatância do condutor
utilizado.
• Tensão na Barra: Este parâmetro é o módulo (em valor por unidade) da tensão
em uma determinada barra do sistema;
Onde:
Onde:
• 𝑉𝑘 : Módulo da tensão;
• 𝜃𝑘 : Ângulo da tensão;
• 𝑉𝑚 : Módulo da tensão;
• 𝜃𝑚 : Ângulo da tensão.
Vθ. Pretende-se calcular 𝑉𝑘 e 𝜃𝑘 nas barras PQ e 𝜃𝑘 nas barras PV. Quando este
problema for resolvido, serão obtidos os valores de 𝑉𝑘 e 𝜃𝑘 para todas as barras da
rede, sendo assim, será possível calcular 𝑃𝑘 e 𝑄𝑘 através das equações (2.1) e (2.2)
para as barras 𝑉𝜃, 𝑄𝑘 para as barras PV e outras variáveis de interesse.
As equações que compõem este sistema podem ser escritas do seguinte modo:
𝑒𝑠𝑝
Δ𝑃𝑘 = 𝑃𝑘 − 𝑃𝑘 (𝑉, 𝜃) = 0 (2.3)
Onde:
𝑒𝑠𝑝
𝑃𝑘 = Injeção de potência ativa especificada na barra k.
𝑒𝑠𝑝
Δ𝑄𝑘 = 𝑄𝑘 − 𝑄𝑘 (𝑉, 𝜃) = 0 (2.4)
Onde:
𝑒𝑠𝑝
𝑄𝑘 = Injeção de potência reativa especificada na barra k.
Seja 𝑔(𝑥 ) descrita pela expressão (2.5) uma função composta pelos valores
calculadas através das equações (2.3) e (2.4), em função do vetor “x” demonstradas
em (2.6), composto pelas incógnitas a serem determinadas:
Δ𝑃
𝑔 (𝑥 ) = [ ] (2.5)
Δ𝑄
26
𝜃
𝑥=[ ] (2.6)
𝑉
Sendo que, em (2.6), θ representa os ângulos (em radianos) das tensões das
barras PQ e PV, e, V, os módulos das tensões em p.u. (por unidade) das barras PQ.
a) Passo 01
b) Passo 02
(ℎ) (ℎ)
Posteriormente, determinam–se os resíduos Δ𝑃𝑘 e Δ𝑄𝑘 , ou seja, a diferença
entre os valores especificados e os calculados.
c) Passo 03
solução (𝑉 (ℎ) , 𝜃 (ℎ) ), e, portanto, os vetores em 𝑥 (ℎ) são a solução para g(x) = 0. Caso
contrário passa-se ao próximo passo, até que sejam alcançados valores dentro da
margem de erro.
d) Passo 04
Lineariza-se a função g(x) em torno do ponto (𝑥 (ℎ) : 𝑔(𝑥 (ℎ) )) por intermédio da
𝜕𝑔
série de Taylor, conforme equação (2.7), sendo que 𝑔′ (𝑥 ) = 𝜕𝑥 .
𝛿𝑃 𝛿𝑃
(ℎ) 𝛿𝜃 𝛿𝑉 𝐻 𝑁
𝐽 = [𝛿𝑄 𝛿𝑄
] =[ ] (2.8)
𝑀 𝐿
𝛿𝜃 𝛿𝑉
28
𝛿𝑃
𝐻𝑘𝑚 = 𝛿𝜃 𝑘 = 𝑉𝑘 𝑉𝑚 (𝐺𝑘𝑚 𝑠𝑖𝑛 𝜃𝑘𝑚 − 𝐵𝑘𝑚 𝑐𝑜𝑠 𝜃𝑘𝑚 ) (2.9)
𝑚
𝛿𝑃𝑘
𝐻𝑘𝑘 = = −𝑉𝑘2 𝐵𝑘𝑘 − 𝑉𝑘 ∑𝑚∈𝜙𝑘 𝑉𝑚 (𝐺𝑘𝑚 𝑠𝑖𝑛 𝜃𝑘𝑚 − 𝐵𝑘𝑚 𝑐𝑜𝑠 𝜃𝑘𝑚 ) (2.10)
𝛿𝜃𝑘
𝛿𝑃
𝑁𝑘𝑚 = 𝛿𝑉 𝑘 = 𝑉𝑘 (𝐺𝑘𝑚 𝑐𝑜𝑠 𝜃𝑘𝑚 + 𝐵𝑘𝑚 𝑠𝑖𝑛 𝜃𝑘𝑚 ) (2.11)
𝑚
𝛿𝑃
𝑁𝑘𝑘 = 𝛿𝑉𝑘 = 𝑉𝑘2 𝐺𝑘𝑘 + ∑𝑚∈𝜙𝑘 𝑉𝑚(𝐺𝑘𝑚 𝑐𝑜𝑠 𝜃𝑘𝑚 + 𝐵𝑘𝑚 𝑠𝑖𝑛 𝜃𝑘𝑚 ) (2.12)
𝑘
𝛿𝑄
𝑀𝑘𝑚 = 𝛿𝜃 𝑘 = −𝑉𝑘 𝑉𝑚 (𝐺𝑘𝑚 𝑐𝑜𝑠 𝜃𝑘𝑚 + 𝐵𝑘𝑚 𝑠𝑖𝑛 𝜃𝑘𝑚 ) (2.13)
𝑚
𝛿𝑄
𝑀𝑘𝑘 = 𝛿𝜃𝑘 = −𝑉𝑘2 𝐺𝑘𝑘 + 𝑉𝑘 ∑𝑚∈𝜙𝑘 𝑉𝑚(𝐺𝑘𝑚 𝑐𝑜𝑠 𝜃𝑘𝑚 + 𝐵𝑘𝑚 𝑠𝑖𝑛 𝜃𝑘𝑚 ) (2.14)
𝑘
𝛿𝑄
𝐿𝑘𝑚 = 𝛿𝑉 𝑘 = −𝑉𝑘 (𝐺𝑘𝑚 sin 𝜃𝑘𝑚 − 𝐵𝑘𝑚 cos 𝜃𝑘𝑚 ) (2.15)
𝑚
29
𝛿𝑄
𝐿𝑘𝑘 = 𝛿𝑉𝑘 = −𝑉𝑘2 𝐵𝑘𝑘 + ∑𝑚∈𝜙𝑘 𝑉𝑚(𝐺𝑘𝑚 sin 𝜃𝑘𝑚 − 𝐵𝑘𝑚 cos 𝜃𝑘𝑚 ) (2.16)
𝑘
Pode-se observar que existem vários tipos de equação para uma rede simples
com duas barras, porém para a montagem da matriz são necessários somente 4
elementos, sendo assim, faz-se necessário a escolhas de 4 das equações listadas
para então prosseguir com a solução da matriz.
Esta escolha é determinada pelo tipo das barras em questão e pelos valores
de grandezas (potência ativa e reativa) que já são conhecidos previamente.
Se em uma rede de duas barras tem-se uma barra “m” de referência V𝜃 (onde
é conhecido o valor de tensão e ângulo de fase) e uma barra “k” do tipo PV (onde é
conhecido a potência ativa e a tensão de fase), tem-se então a escolha dos seguintes
elementos para a montagem da matriz:
𝛿𝑃
𝐻𝑘𝑘 = 𝛿𝜃𝑘 (2.17)
𝑘
𝛿𝑃
𝑁𝑘𝑘 = 𝛿𝑉𝑘 (2.18)
𝑘
𝛿𝑄𝑘
𝑀𝑘𝑘 = (2.19)
𝛿𝜃𝑘
𝛿𝑄
𝐿𝑘𝑘 = 𝛿𝑉𝑘 (2.20)
𝑘
e) Passo 05
Determinando os valores de H, N, M e L, e os residuais das potências (obtidos
no passo 02) obtém-se a matriz jacobiana em (2.21), possibilitando calcular as
variações de 𝜃𝑘 e 𝑉𝑘 .
Δ𝑃 𝐻 𝑁 Δ𝜃
[ ]=[ ][ ] (2.21)
Δ𝑄 𝑀 𝐿 Δ𝑉
30
f) Passo 06
Determinam-se, então, o novo valor para o vetor 𝑥 (ℎ+1) = 𝑥 (ℎ) + Δ𝑥 (ℎ) ,
utilizando as equações (2.22) e (2.23).
𝜃 ℎ+1 = 𝜃 ℎ + Δ𝜃 (2.22)
𝑉 ℎ+1 = 𝑉 ℎ + ΔV (2.23)
g) Passo 07
Para iniciar a próxima iteração, faz-se ℎ′ = ℎ + 1 e retorna-se ao passo 02.
Repete-se este passo a passo até que, no item 03, se obtenha valores dentro
da margem de erro. Sendo que esta é determinada por quem está solucionando o
problema.
Com isso, tem-se a matriz admitância nodal, que pode ser subdivida em
condutância (G) e susceptância (B). Sendo que seus componentes são necessários
para que que sejam montadas as equações (2.1) e (2.2).
4 − 𝑗7,98 −4 + 𝑗8,0
𝑌 = 𝐺 + 𝑗𝐵 = [ ]
−4 + 𝑗8,0 4 − 𝑗7,98
4 −4 −7,98 8,0
𝐺=[ ] 𝐵=[ ]
−4 4 8,0 −7,98
a) Passo 01:
Para a primeira iteração (h=0), tem-se 𝜃2 (0) = 0,0 𝑟𝑎𝑑.
32
b) Passo 02:
Para determinação de 𝑃2 (𝜃2 (ℎ) ), para a barra 2 do tipo PV, utilizando a equação
2.1 e adotando os valores iniciais das incógnitas apontados no passo anterior, tem-
se:
c) Passo 03:
Neste caso, o processo continua, devido ao residual ainda ser maior que a
tolerância.
(ℎ)
|Δ𝑃𝑘 | > 𝜀 , 𝑝𝑜𝑖𝑠 0,40 > 0,001
d) Passo 04:
Como este sistema contém somente 2 barras, sendo uma V𝜃 e outra 𝑃𝑉, para
solucionar todas as equações de potência ativa e reativa, necessita-se somente de
descobrir o valor de 𝜃2 , pois já se tem conhecimento sobre as demais incógnitas.
Sendo assim, para identificar o valor da incógnita em questão, calcula-se a variação de 𝑃2
(0)
em função de 𝜃2 , utilizando o elemento 𝐻𝑘𝑘 da matriz jacobiana, exposto na equação
(2.10).
𝛿𝑃
𝐻𝑘𝑘 = 𝛿𝜃𝑘 = −𝑉𝑘2 𝐵𝑘𝑘 − 𝑉𝑘 ∑𝑚∈𝜙𝑘 𝑉𝑚 (𝐺𝑘𝑚 𝑠𝑖𝑛 𝜃𝑘𝑚 − 𝐵𝑘𝑚 𝑐𝑜𝑠 𝜃𝑘𝑚 )
𝑘
𝜕𝑃2
(0) = −(12 × −7,98) − 1 × [1 × (−4 sin 𝜃21 − 8 𝑐𝑜𝑠 𝜃21 ) + 1 × (4 sin 𝜃22 −
𝜕𝜃2
𝜕𝑃2
Chega-se ao resultado: (0) = 4 si n𝜃2 + 8 co s𝜃2 = 8
𝜕𝜃2
e) Passo 05:
𝜕𝑃2 (0)
[Δ𝑃2 ] = [ (0) ] × [Δ𝜃2 ]
𝜕𝜃2
f) Passo 06:
g) Passo 07:
a) Passo 02:
(1)
Com 𝜃2 = −0,05 𝑟𝑎𝑑, obtém-se um novo valor de 𝑃2 (𝜃2 (ℎ) ):
34
b) Passo 03:
c) Passo 04:
(1)
Calcula-se a variação de 𝑃2 em função de 𝜃2 :
𝜕𝑃2
(1) = 4 sin 𝜃2 + 8 cos 𝜃2 = 7,79
𝜕𝜃2
d) Passo 05:
e) Passo 06:
f) Passo 07:
a) Passo 02:
b) Passo 03:
Diante de tais necessidades foi optado pelo uso da linguagem WEB, pois a
mesma possibilita o desenvolvimento de softwares utilizando a tecnologia HTML, CSS
e JavaScript e tem várias finalidades que podem ser desde uma propaganda animada
de uma página da internet até um aplicativo que cálculo fluxo de potência, vale
destacar que, cada linguagem de programação em uma aplicação WEB interage entre
si e é responsável por uma parte de sua estrutura. Tal sistema é formado por uma
parte estática que utiliza as linguagens HTML e o CSS para criar o layout da tela para
inserção de dados e uma dinâmica que foi desenvolvida a partir do JavaScript sendo
esta responsável pela lógica do aplicativo e a operacionalização dos algoritmos.
Por ser uma plataforma de teste com poucos dados a serem inseridos, foi
desenvolvido uma IHM (Interface Homem Máquina) com uma única tela inicial de
inserção de dados previamente programada através do HTML. Nesta tela estão
disponíveis a seleção do tipo de uma das barras, os valores das linhas e os valores
dos parâmetros de cada uma das barras. Para criação da interface em questão foi
desenvolvido um código cujos comandos estão descritos a seguir:
</script>
</head>
<body>
<td>1-2</td>
<td>
<input type=“text” maxlength="7" name=“rs” id="rs" onKeyUp="decimal(this);"
onkeypress="return keypressed( this , event );" />
</td>
<td>
<input type=“text” maxlength="7" name=“xs” id="xs" onKeyUp="decimal(this);"
onkeypress="return keypressed( this , event );" />
</td>
<td>
<input type=“text” maxlength="7" name=“jbsh” id="jbsh"
onKeyUp="decimal(this);" onkeypress="return keypressed( this , event );" />
</td>
</tr>
</table>
<p align=center> DADOS DO SISTEMA (P.U.)</p>
<table id="DADOS" align=center border="3">
<tr align=center>
<td>Barra</td>
<td>Tipo</td>
<td>P</td>
<td>Q</td>
<td>V</td>
<td>θ</td>
</tr>
<tr align=center>
<td>1</td>
<td>V0 (Referência)</td>
<td>valor 1.1</td>
<td>valor 1.2</td>
<td>1</td>
<td>0</td>
</tr>
<tr align=center>
<td>2</td>
<td>
<select id="selectid" name="select" onchange="ativacampos()">
<option value="PV" selected>PV</option>
<option value="PQ">PQ</option>
</select>
</td>
<td><input type=“text” maxlength="7" name=“campoP” id="campoP"
onKeyUp="decimal(this);" onkeypress="return keypressed( this , event );" /></td>
<td><input type=“text” maxlength="7" name=“campoQ” id="campoQ"
onKeyUp="decimal(this);" onkeypress="return keypressed( this , event );"
disabled/></td>
42
</table>
<button onclick="selecionarequação()">CALCULAR</button>
</body>
</html>
Para inserção dos dados nas tabelas foi desenvolvido um código que permite
automaticamente a liberação de digitação dentro dos campos de parâmetros (potência
ativa, potência reativa, ângulo de fase da tensão e módulo da tensão) de acordo com
a barra em questão (sendo do tipo PQ ou PV), o código em questão possibilita que
seja inserido um ponto para indicar a separação decimal e o bloqueio de inserção de
dados que não fazem parte do problema a ser analisado. A seguir o código que
permite a realização das funções anteriormente citadas:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<title> 2 Barras </title>
43
<script language="javascript">
if ( tecla == 8 || tecla == 0 )// tecla 8 backspace, tecla 44 ",", tecla 46 ".", teclas do
48 ao 57: numeros do 0 ao 9
return true;
if ( tecla != 44 && tecla != 46 && tecla != 45 && tecla < 48 || tecla > 57 )
return false;
if (tecla == 44) { if (indexvir !== -1 || indexpon !== -1) {return false} }
if (tecla == 46) { if (indexvir !== -1 || indexpon !== -1) {return false} }
}
var selecionado;
function ativacampos()
{
selecionado = document.getElementById("selectid").value;
if(selecionado=="PV")
{
document.getElementById("campoP").disabled = false;
document.getElementById("campoQ").disabled = true;
document.getElementById("campoV").disabled = false;
document.getElementById("campoQ").value = "";
}
else //selecionado é PQ
{
document.getElementById("campoP").disabled = false;
document.getElementById("campoQ").disabled = false;
document.getElementById("campoV").disabled = true;
document.getElementById("campoV").value = "";
}
}
function decimal(z){
v = z.value;
v=v.replace(/[^-0-9]/,"") //permite digitar apenas números e o símbolo de negativo
v = v.replace(/(\d{1})(\d{3})$/, "$1.$2"); //coloca ponto automaticamente
z.value = v;
}
44
function selecionarequação(){
selecionado = document.getElementById("selectid").value;
if(selecionado=="PV"){
barraPV();
}
else{
barraPQ()};
}
function barraPV(){
var rs=document.getElementById("rs").value;
var xs=document.getElementById("xs").value;
var P2=document.getElementById("campoP").value;
var V2=document.getElementById("campoV").value;
var G22=rs/((rs*rs)+(xs*xs));//convertendo em condutância
var G21=-G22;
var B21=-(-xs/((rs*rs)+(xs*xs)));//convertendo em susceptância
theta=0;
45
do {
var V2aoquadrado= Math.pow(V2,2);
var costheta2= Math.cos(theta);
var sentheta2= Math.sin(theta);
var deltaP2=P2-((G22*V2aoquadrado)+(G21*V2*costheta2)+(B21*V2*sentheta2));
var modulodeltaP2= Math.abs(deltaP2);
var deriv=G21*V2*sentheta2+B21*V2*costheta2;
var y=deltaP2/deriv;
var t=theta+y;
theta=t;
} while (modulodeltaP2 > 0.001); // comparação do resultado com erro admitido de
0,1%
var provareal=(G22*V2aoquadrado)+(G21*V2*costheta2)+(B21*V2*sentheta2);
alert(theta); // Exibição do resultado da incógnita em questão por meio de um “alet”
}
Para o caso em que o usuário tenha selecionado uma barra do tipo PQ, é
executado um código diferente, porém que segue a mesma linha de raciocínio descrito
anteriormente. Neste caso os valores de potência ativa e reativa devem ser inseridos
nos campos dentro da tabela da IHM. A seguir é exibido o código responsável pela
captação dos dados inseridos pelo usuário e criação das variáveis contendo estes
valores, para que posteriormente sejam usados nos cálculos, também é apresentada
a conversão dos valores de impedância das linhas em admitâncias das linhas.
function barraPQ()
{
var rs=document.getElementById("rs").value;
var xs=document.getElementById("xs").value;
var P2=document.getElementById("campoP").value;
var Q2=document.getElementById("campoQ").value;
var V2=1;
var G22=rs/((rs*rs)+(xs*xs));
var G21=-G22;
var B21=-(-xs/((rs*rs)+(xs*xs)));
var B22=(-xs/((rs*rs)+(xs*xs)));
theta=0;
Nesta configuração de rede são geradas duas incógnitas, sendo uma o módulo
da tensão e o ângulo de fase da barra PQ. O código a seguir, define a matriz a as
equações de injeção líquida de potência a serem utilizadas para o cálculo.
do {
47
var matriz = [
[(a=inversa*derivQ2V2),(b=inversa*(-derivP2V2))], // primeira linha da matriz com
duas colunas, no sistema conta como linha zero
[(c=inversa*(-derivQ2theta2)),(d=inversa*(derivP2theta2))]//segunda linha da
matriz com duas colunas, linha 1
48
var t=theta+(a*deltaP2+b*deltaQ2);
var v=V2+(c*deltaP2+d*deltaQ2);
theta=t;
V2=v;
} while (modulodeltaP2&&modulodeltaQ2 > 0.001);
var provareal=V2*(G21*costheta2+B21*sentheta2)+V2aoquadrado*G22;
var provareal2=V2*(G21*sentheta2-B21*costheta2)-V2aoquadrado*B22;
alert(theta);
alert(V2);
}
function barras_insert()
{
//window.location = 'lista de componentes.html';
db.transaction(barras_insert_db, errorDB, successDB);
}
function barras_insert_db(tx){
if(Tipo_de_Componente=="Barra")
{
else{
tx.executeSql('INSERT INTO barras (nome, Tipo_de_Barra, P, Q, V, theta) VALUES
("'+ nome +'", "'+ Tipo_de_Barra +'", "'+ P +'", "'+ Q +'", "'+ V +'", "'+ theta
+'")');
window.location = 'lista de componentes.html';
}
}
51
if(Tipo_de_Componente=="Linha")
{
if(rs&&xs&&bsh&&origem&&destino !==""){
tx.executeSql('INSERT INTO linhas (nome, rs, xs, bsh, origem, destino) VALUES ("'+
nome +'", "'+ rs +'", "'+ xs +'", "'+ bsh +'", "'+ origem +'", "'+ destino +'")');
window.location = 'lista de componentes.html';
}
else{
alert("Preencha Todos os Campos!")
}
function barras_view(){
db.transaction(barras_view_db, errorDB, successDB);
}
function linhas_view(){
db.transaction(linhas_view_db, errorDB, successDB);
function barras_view_db(tx){
tx.executeSql('SELECT * FROM barras', [], barras_view_data, errorDB);
}
function linhas_view_db(tx){
tx.executeSql('SELECT * FROM linhas', [], linhas_view_data, errorDB);
}
$("#barras_listagem").empty();
$("#barras_listagem").append("<tr class='barras_item_lista'>"+
"<td width='100'><img src='img/Barra.png' class='LT_icon'></td>"+
"<td width='200'><h5 class='título'>Barra " +
results.rows.item(i).id + "</h5><h5>" + results.rows.item(i).nome +
"</h5><h5>Tipo:" + results.rows.item(i).Tipo_de_Barra + "</h5><h5>P:" +
results.rows.item(i).P + " V:" + results.rows.item(i).V + "</h5></td>"+
"<td><input type='button' class='button_del'
onclick='barras_delete(" + results.rows.item(i).id + ")'></td>"+
"<td><input type='button' class='button_edit'
onclick='barras_update(" + results.rows.item(i).id + ")'></td>"+
"<tr>");
}
if(results.rows.item(i).Tipo_de_Barra=="PQ"){
$("#barras_listagem").append("<tr class='barras_item_lista'>"+
"<td width='100'><img src='img/Barra.png' class='LT_icon'></td>"+
"<td width='200'><h5 class='título'>Barra " + results.rows.item(i).id +
"</h5><h5>" + results.rows.item(i).nome + "</h5><h5>Tipo: " +
results.rows.item(i).Tipo_de_Barra + "</h5><h5>P:" + results.rows.item(i).P +
" Q:" + results.rows.item(i).Q + "</h5></td>"+
"<td><input type='button' class='button_del' onclick='barras_delete(" +
results.rows.item(i).id + ")'></td>"+
"<td><input type='button' class='button_edit' onclick='barras_update(" +
results.rows.item(i).id + ")'></td>"+
"<tr>");
}
if(results.rows.item(i).Tipo_de_Barra=="V0"){
$("#barras_listagem").append("<tr class='barras_item_lista'>"+
"<td width='100'><img src='img/Barra.png' class='LT_icon'></td>"+
"<td width='200'><h5 class='título'>Barra " + results.rows.item(i).id +
"</h5><h5>" + results.rows.item(i).nome + "</h5><h5>Tipo: " +
results.rows.item(i).Tipo_de_Barra + "</h5><h5>V:" + results.rows.item(i).V +
" θ:" + results.rows.item(i).theta + "</h5></td>"+
$("#linhas_listagem").empty();
$("#linhas_listagem").append("<tr class='linhas_item_lista'>"+
"<td width='100'><img src='img/LT.png' class='LT_icon'></td>"+
"<td width='200'><h5 class='título'>Linha " + results.rows.item(i).id1 +
"</h5><h5>" + results.rows.item(i).nome + "</h5><h5>Rs: " +
results.rows.item(i).rs + "  Xs: " + results.rows.item(i).xs +
"</h5><h5>Bsh: " + results.rows.item(i).bsh + "</h5><h5>Entre
barras " + results.rows.item(i).origem + " e " +
results.rows.item(i).destino + "</h5></td>"+
"<td><input type='button' class='button_del' onclick='linhas_delete(" +
results.rows.item(i).id1 + ")'></td>"+
"<td><input type='button' class='button_edit' onclick='linhas_update(" +
results.rows.item(i).id1 + ")'></td>"+
"<tr>");
}
}
{
if(i == qtde_linhas)
{
break;
}
for(var a=0;a<qtde_barras;a++){
for(var b=0;b<qtde_barras;b++){
matrizadmitancia.subset(math.index(a,b),ObjetoGlobal.matriz_rs[a][b]);
}
}
55
var equação_ativa=0;
var soma_ativa=0;
var numerodeequacoes=0;
var f=0;
var equação_ativa=0;
var equação_reativa=0;
var soma_reativa=0;
for(var a=0;a<qtde_barras;a++){
if (results.rows.item(a).P !=""){
Valores_de_entrada.subset(math.index(f,0),results.rows.item(a).P);
f++
if(ObjetoGlobal.matriz_rs[a][i] == 0)
{
var Gkm= ObjetoGlobal.matriz_rs[a][i];
var Bkm= ObjetoGlobal.matriz_rs[a][i];
}
else
{
var Gkm= ObjetoGlobal.matriz_rs[a][i].re;
var Bkm= ObjetoGlobal.matriz_rs[a][i].im;
}
if(Vk==="")
56
{
Vk='V'+(a+1)+''
}
if(Vm==="")
{
Vm='V'+(i+1)+''
}
if(thetak==="")
{
thetak='theta'+(a+1)+''
}
if(thetam==="")
{
thetam='theta'+(i+1)+''
}
equação_ativa = math.parse(''+ Vk +'*('+ Vm +'*('+Gkm+'*cos('+thetak+'-
'+thetam+')+'+Bkm+'*sin('+thetak+'-'+thetam+')))')
soma_ativa= math.parse(''+soma_ativa+'+'+equação_ativa+'')
}
}
if(soma_ativa !==0){
equacoes.subset(math.index(numerodeequacoes,0), simplificaP);
numerodeequacoes++
}
soma_ativa = 0
}
for(var a=0;a<qtde_barras;a++){
if (results.rows.item(a).Q !=""){
Valores_de_entrada.subset(math.index(f,0),results.rows.item(a).Q);
f++
if(ObjetoGlobal.matriz_rs[a][i] == 0)
{
var Gkm= ObjetoGlobal.matriz_rs[a][i];
var Bkm= ObjetoGlobal.matriz_rs[a][i];
}
else
{
57
if(Vk==="")
{
Vk='V'+(a+1)+''
}
if(Vm==="")
{
Vm='V'+(i+1)+''
}
if(thetak==="")
{
thetak='theta'+(a+1)+''
}
if(thetam==="")
{
thetam='theta'+(i+1)+''
}
equação_reativa = math.parse(''+ Vk +'*('+ Vm +'*('+Gkm+'*sin('+thetak+'-
'+thetam+')-'+Bkm+'*cos('+thetak+'-'+thetam+')))')
soma_reativa= math.parse(''+soma_reativa+'+'+equação_reativa+'')
}
}
var simplificaQ= math.simplify(soma_reativa)
if(soma_reativa !==0){
equacoes.subset(math.index(numerodeequacoes,0), simplificaQ);
numerodeequacoes++
}
soma_reativa = 0
}
math.derivative(''+equacoes.get([i,0])+'',''+todasincognitas.get([a,0])+'' )
jacobiana.subset(math.index(i,a),math.derivative(''+equacoes.get([i,0])+'',''+todasinc
ognitas.get([a,0])+'' ))
}
}
var g=0;
for(var i=0;i<numerodeequacoes;i++){
if(deltaMod.get([i,0])<localStorage.getItem("erromaximo")){
g++
}
}
if(g==numerodeequacoes||numerodeiteraçoes==localStorage.getItem("num_iter")){
if(numerodeiteraçoes==localStorage.getItem("num_iter")){
alert("Limite de iterações atingido.")
if(localStorage.getItem("num_iter")==1){
var preenchejacob = 0
var auxiliar = 0
var n =0
if(n==0){
for (var i = 0; i < numerodeequacoes; i++){
for(var x=0;x<numerodeequacoes;x++){
auxiliar= math.simplify(''+preenchejacob+'', {[''+todasincognitas.get([x,0])+'']:
valor_das_incognitas.get([x,0]) })
preenchejacob = auxiliar;
}
submatrizjacob.subset(math.index(i,a),math.eval(''+preenchejacob+''))
}
}
const deltathetaV = math.multiply(math.divide(1,submatrizjacob),deltaPQ)
valor_das_incognitas.subset(math.index(i,0),math.add(valor_das_incognitas,deltathet
aV).get([i,0]))
}
var m2=0
for (var m=0;m<e;m++){
valorestheta.subset(math.index(m,0),valor_das_incognitas.get([m2,0]))
m2++
}
for (m=0;m<d;m++){
valorestensao.subset(math.index(m,0),valor_das_incognitas.get([m2,0]))
m2++
}
}
}
final_das_iteracoes()
}
perdareativa.subset(math.index(a,b),math.add(potenciareativa.get([a,b]),potenciareat
iva.get([b,a])))
}
}
}
Na Tabela 3 são apresentados os tipos de cada uma das 3 barras assim como
seus respectivos parâmetros. E, na Tabela 4 são expostos os dados de impedância.
Ambas as tabelas possuem as informações essenciais para que seja possível calcular
o fluxo de potência do sistema.
Tabela 4 – Dados de impedância (em p.u.) das linhas do sistema elétrico com 3 barras
b) Resultados obtidos
Tabela 5 - Valores das incógnitas calculados, assim como seus erros percentuais, no Power Flow e
no ANAREDE para o sistema elétrico de 3 barras
Tabela 6 – Fluxos e perdas calculados (em p.u.) pelo ANAREDE e pelo Power Flow para o sistema
elétrico de 3 barras e os erros percentuais entre os dois programas
Nas Tabelas 8 e 9 são apresentados os tipos de cada uma das 5 barras, assim
como seus respectivos parâmetros e os dados de impedância do sistema utilizado.
65
Tabela 8 - Dados de impedância (em p.u.) das linhas do sistema elétrico com 5 barras
b) Resultados obtidos
Tabela 9 - Valores das incógnitas encontrados no Power Flow e no ANAREDE, assim como os erros
percentuais, para o sistema elétrico de 5 barras
Tabela 10 - Fluxos calculados (em p.u.) pelo ANAREDE e pelo Power Flow para o sistema elétrico de
5 barras e os erros percentuais entre os dois programas
Tabela 12 - Dados de impedância (em p.u.) das linhas do sistema elétrico com 9 barras
b) Resultados obtidos
Tabela 13 - Valores dos ângulos de defasagem calculados no Power Flow e no ANAREDE, assim
como os erros percentuais, para o sistema elétrico de 9 barras
VALORES CALCULADOS
INCÓGNITAS Power Flow Calc ANAREDE Erro (%)
Radianos Graus Graus
θ2 -0,096068 -5,5 -5,5 0,0%
θ3 -0,220207 -12,6 -12,6 0,0%
θ4 -0,17842 -10,2 -10,2 0,0%
θ5 -0,150939 -8,6 -8,6 0,0%
θ6 -0,274925 -15,7 -15,7 0,0%
θ7 -0,259157 -14,8 -14,8 0,0%
θ8 -0,260172 -14,9 -14,9 0,0%
θ9 -0,283331 -16,2 -16,2 0,0%
Tabela 14 - Valores das tensões (em p.u.) calculadas no Power Flow e no ANAREDE, assim como os
respectivos erros percentuais, para o sistema elétrico de 9 barras
VALORES CALCULADOS
INCÓGNITAS Erro (%)
Power Flow Calc ANAREDE
V4 1,043 1,043 0,0%
V5 1,048 1,048 0,0%
V7 1,054 1,054 0,0%
V9 1,025 1,025 0,0%
Tabela 15 - Fluxos calculados (em p.u.) pelo ANAREDE e pelo Power Flow para o sistema elétrico de
9 barras e os erros percentuais entre os dois programas
Tabela 17 - Dados de impedância (em p.u.) das linhas do sistema elétrico com 14 barras
b) Resultados obtidos
Tabela 18 - Valores dos ângulos de defasagem calculados no Power Flow e no ANAREDE, assim
como os erros percentuais, para o sistema elétrico de 14 barras
VALORES CALCULADOS
INCÓGNITAS Power Flow Calc ANAREDE Erro (%)
Radianos Graus Graus
θ2 -0,128174 -7,3 -7,3 0,0%
θ3 -0,272558 -15,6 -15,6 0,0%
θ4 -0,242407 -13,9 -13,9 0,0%
θ5 -0,211923 -12,1 -12,1 0,0%
θ6 -0,543664 -31,2 -31,2 0,0%
θ7 -0,404911 -23,2 -23,2 0,0%
θ8 -0,406651 -23,3 -23,3 0,0%
θ9 -0,472562 -27,1 -27,1 0,0%
θ10 -0,490465 -28,1 -28,1 0,0%
θ11 -0,51897 -29,7 -29,7 0,0%
72
VALORES CALCULADOS
INCÓGNITAS Power Flow Calc ANAREDE Erro (%)
Radianos Graus Graus
θ12 -0,553662 -31,7 -31,7 0,0%
θ13 -0,548545 -31,4 -31,4 0,0%
θ14 -0,524864 -30,1 -30,1 0,0%
Tabela 19 - Valores das tensões (em p.u.) calculadas no Power Flow e no ANAREDE, assim como os
respectivos erros percentuais, para o sistema elétrico de 14 barras
Tabela 20 - Fluxos calculados (em p.u.) pelo ANAREDE e pelo Power Flow para o sistema elétrico de
14 barras e os erros entre os dois programas
A rede deve ser composta por barras e linhas de transmissão com opção de
colocar valores de resistência, reatância indutiva e capacitores shunt. Os resultados
deveriam ser apresentados em forma de tabela com os fluxos entre barras, perdas
nas linhas, módulo de tensão e ângulo de fase das barras; e, os valores de entrada e
os resultados obtidos teriam que ser expressos em p.u.. Estas foram a necessidades
apontadas para o projeto e que nortearam o desenvolvimento da interface.
determinar a quantidade e o tipo das barras, além dos valores das grandezas elétricas
de cada uma de acordo com seu tipo (potência ativa, reativa, módulo da tensão, etc.)
em p.u.. Depois, determina-se a topologia da rede com as impedâncias das linhas de
transmissão (onde pode-se incluir os capacitores shunt para linhas que seguem o
modelo pi) também em p.u.. Por fim, deve-se ajustar o número máximo de iterações,
o erro admitido e a potência de base do sistema. A partir da determinação dos
parâmetros anteriormente citados, o aplicativo define as incógnitas que serão
calculadas e a metodologia para a solução do problema.
1 INÍCIO
Início da Iteração
Definição da Cálculo pelo Método “n”
quantidade de Barras Newton-Raphson
Resolução das
Definição do tipo das Definição do Erro %
derivadas parciais com
Barras Admitido
os valores adotados
Os valores NÃO
Convergem?
SIM
NÃO
Reiniciar Cálculos? Fechar Aplicativo
SIM
O código começa pelo comando “div” para dividir a tela de acordo com os
elementos. Na linha 60, foi definido a parte superior da tela através dos comandos
“div” e “id”. O intuito de nomear uma divisão é para configura-la por meio do CSS, isto
pode ser percebido pela faixa vermelha na parte superior das telas do aplicativo.
Também foi definido para a mesma divisão, o título da página com o comando “h1” e
o botão com a forma de engrenagem que dá acesso ao menu de configuração dos
parâmetros matemáticos com os comandos “button” e “onclik”.
O programa segue com a divisão denominada “row” na linha 69. Este espaço
foi configurado em forma de tabela pelo comando “table” e é preenchido pelos
componentes adicionados.
E por último, foram declarados os botões da página que vão para as próximas
etapas nas linhas 97 a 101. O diferencial desta parte está nos botões com o símbolo
“+” e “x”, que ao invés de direcionar o usuário para outra tela, abre e fecha
respectivamente, um sub menu contendo os demais botões. Também, o botão
81
“APAGAR TUDO” não direciona para a próxima tela, mas sim, apaga os componentes
adicionados. Todos esses botões estão organizados no espaço definido pelo “div” e
nomeado como “menu”.
O código desta página conta com o comando “div” para dividi-la em: título, barra
de nome dos componentes, botão de seleção do tipo de componente e o botão
“INSERIR”. O botão do tipo de componente abre uma subdivisão de acordo com a
escolha do usuário onde fica as caixas de coleta de dados para o banco de dados.
Na linha 131 foi declarado o título da página “Entrada de dados” com o comando
“h1” na divisão feita na linha 130 e nomeada como “superior”.
Seguindo o código, na linha 133 foi utilizado o comando “p” para a inserção do
texto “Informe o Nome do Componente (Opcional)”. A diferença entre os comandos
“h1” e “p” é apenas a formatação padrão da fonte, mas a programação do CSS pode
83
altera-la e por isso os dois acabam tendo apenas a finalidade de escrever o texto que
aparece na tela.
Na linha 141, foi declarada uma caixa de texto para nomear os componentes
inseridos. Se caso não for preenchida, o programa cria um nome de acordo com a
posição no banco de dados. A mesma foi inserida com o comando “input” e
configurada para receber texto através do “type=’text’”. O tamanho da caixa foi
determinado pelo comando “style” para ocupar 8% da tela.
Da linha 172 a 182 foi adicionado a tela para os parâmetros de barras também
ativada pelo botão de seleção de componentes. O comando “select” foi utilizado para
inserir o botão de seleção de tipos de barra. As caixas de texto de entradas de dados
seguem o mesmo padrão da tela de LT, muda apenas nos nomes dos parâmetros e
84
Por último foi o botão “INSERIR” que utiliza o comando “input” configurado com
o “type=button” e com o “onclick” que direciona o usuário para a página “lista de
componentes” onde os elementos adicionados são organizados em forma de tabela.
Figura 20 - Tela Add Componentes para barra Figura 21 - Tela Add Componentes para LT
Na linha 33 foi adicionado o título com o comando “h1” na parte superior da tela
e logo abaixo a mesma imagem e texto de advertência presentes na página Add
Componentes.
Nas linhas 51, 54 e 57 foram inseridos os textos “Erro Máx:”, “Número Máximo
de Iterações” e “Sbase(MVA)” respectivamente através do comando “p” e nas linhas
52, 55 e 58 as caixas de texto com o mesmo padrão presente no menu ativado para
LT. Por último foi o botão “CONFIRMAR” feito através do comando “input” e
configurado para direcionar o usuário de volta a tela Lista de Componentes com o
“onclick”.
Figura 27 - Tela Lista de Componentes com Figura 28 - Tela Lista de Componentes com
CSS CSS e sub menu
3 BARRAS 14 BARRAS
MARCA MODELO PROCESSADOR
ERRO TEMPO ERRO TEMPO
Motorola G5 Plus Octa-core 2GHz 0% 4.59s 0% 4min19s
Samsung Galaxy S7 Octa-core 2,3GHz 0% 3.15s 0% 2min27s
Motorola G7 Play Octa-core 1,8GHz 0% 3.22s 0% 10min36s
Xiaomi MI A1 Octa-core 2GHz 0% 3.96s 0% 4min6s
CAPÍTULO 6 – CONCLUSÕES
Neste último capítulo são apresentadas as considerações finais em relação ao
objetivo do programa desenvolvido.
REFERÊNCIAS
A seguir, as referências dos materiais consultados para base do desenvolvimento e estudo
do conteúdo teórico.
GOMES, Daniel Armando Arias. Identificação das barras críticas do ponto de vista de
estabilidade de tensão. Dissertação de Mestrado apresentada na Pontifícia
Universidade Católica do Rio de Janeiro, Rio de Janeiro, 2015, cap. 3. <Disponível
em: https://www.maxwell.vrac.puc-
rio.br/colecao.php?strSecao=resultado&nrSeq=26243@1>. Acessado em
16/05/2019, 21h:15min.
99
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no" />
<meta name="msapplication-tap-highlight" content="no" />
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-
scale=1, minimum-scale=1, width=device-width" />
<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline';
style-src 'self' 'unsafe-inline'; media-src *" />
<link rel="stylesheet" type="text/css" href="css/index.css" />
<div id="superior">
<h1>Power Flow</h1>
</div>
</head>
<body>
</body>
</html>
102
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no" />
<meta name="msapplication-tap-highlight" content="no" />
function onDeviceReady() {
document.addEventListener("backbutton", onBackKeyDown, false);
}
function onBackKeyDown() {
window.location='index.html';
}
103
function SUBMENU_VISÍVEL() {
document.getElementById("addcompo").hidden = false;
document.getElementById("calcflux").hidden = false;;
document.getElementById("X").hidden = false;;
document.getElementById("apagtudo").hidden = false;;
}
function SUBMENU_INVISÍVEL() {
document.getElementById("addcompo").hidden = true;
document.getElementById("calcflux").hidden = true;
document.getElementById("X").hidden = true;
document.getElementById("apagtudo").hidden = true;
onLoad();
}
</script>
<div id="superior">
<h1>Lista de Componentes</h1>
<div id="alinhamento_config">
<input type='button' class='button_config'
onclick="window.location='configuracoes.html'">
</div>
</div>
<input type="hidden" id="barras_id_delete">
<input type="hidden" id="linhas_id_delete">
<div class="row">
<div class="col-md-12">
<table class="table">
<thead>
<tr>
</tr>
104
</thead>
<tbody id ="barras_listagem">
</tbody>
</table>
</div>
</div>
<div class="row">
<div class="col-md-12">
<table class="table">
<thead>
<tr>
</tr>
</thead>
<tbody id ="linhas_listagem">
</tbody>
</table>
</div>
</div>
<body onload="SUBMENU_INVISÍVEL()">
<div id="menu">
<button class="button_close" id="X" onclick="SUBMENU_INVISÍVEL()"
hidden>x</button></br></br>
<button class="button_option" id="addcompo" onclick="window.location =
'addcomponente.html'"hidden>ADD COMPONENTE</button></br></br>
<button class="button_option" id="calcflux"onclick="window.location =
'calcularfluxo.html'" hidden>CALCULAR FLUXO</button></br></br>
<button class="button_option" id="apagtudo"onclick="nova_simulação()"
hidden>APAGAR TUDO</button></br></br>
<button class="button_open" onclick="SUBMENU_VISÍVEL()">+</button></br></br>
</div>
105
<script>
barras_view();
linhas_view();
</script>
</body>
</html>
106
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no" />
<meta name="msapplication-tap-highlight" content="no" />
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-
scale=1, minimum-scale=1, width=device-width" />
<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline';
style-src 'self' 'unsafe-inline'; media-src *" />
<link rel="stylesheet" type="text/css" href="css/index.css" />
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-
awesome.min.css" rel="stylesheet" integrity="sha384-
wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVn
N" crossorigin="anonymous">
<title>Entrada de Dados</title>
</head>
<body style="margin-left:5%;margin-top:15%;">
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<script type="text/javascript">
function ativacampos(){
selecionado = document.getElementById("tipocomp").value;
if(selecionado=="Barra"){
document.getElementById("opcoes_barra").style.display = "inline";
document.getElementById("opcoes_linha").style.display = "none";
document.getElementById("rs").value = "";
107
document.getElementById("xs").value = "";
document.getElementById("bsh").value = "";
document.getElementById("linhaorig").value = "";
document.getElementById("linhadest").value = "";
}
else{
document.getElementById("opcoes_barra").style.display = "none";
document.getElementById("opcoes_linha").style.display = "inline";
}
}
function ativadados(){
escolhido = document.getElementById("tipobar").value;
if(escolhido=="V0"){
document.getElementById("indicadorV").style.display = "inline";
document.getElementById("V").style.display = "inline";
document.getElementById("V").value = "1";
document.getElementById("V").disabled = true;
document.getElementById("indicadortheta").style.display = "inline";
document.getElementById("theta").style.display = "inline";
document.getElementById("theta").value = "0";
document.getElementById("theta").disabled = true;
document.getElementById("indicadorP").style.display = "none";
document.getElementById("P").style.display = "none";
document.getElementById("P").value = "";
document.getElementById("P").disabled = true;// add agr
document.getElementById("indicadorQ").style.display = "none";
document.getElementById("Q").style.display = "none";
document.getElementById("Q").value = "";
document.getElementById("Q").disabled = true;// add agr
108
else if(escolhido=="PV"){
document.getElementById("indicadorV").style.display = "inline";
document.getElementById("V").style.display = "inline";
document.getElementById("V").value = "";
document.getElementById("V").disabled = false;
document.getElementById("indicadortheta").style.display = "none";
document.getElementById("theta").style.display = "none";
document.getElementById("theta").value = "";
document.getElementById("theta").disabled = true;// original era disabled
document.getElementById("indicadorP").style.display = "inline";
document.getElementById("P").style.display = "inline";
document.getElementById("P").value = "";
document.getElementById("P").disabled = false;
document.getElementById("indicadorQ").style.display = "none";
document.getElementById("Q").style.display = "none";
document.getElementById("Q").disabled = true; // add agr
document.getElementById("Q").value = "";
}
else{
document.getElementById("indicadorV").style.display = "none";
document.getElementById("V").style.display = "none";
document.getElementById("V").value = "";
document.getElementById("V").disabled = true;
document.getElementById("indicadortheta").style.display = "none";
document.getElementById("theta").style.display = "none";
document.getElementById("theta").value = "";
document.getElementById("theta").disabled = true;
document.getElementById("indicadorP").style.display = "inline";
109
document.getElementById("P").style.display = "inline";
document.getElementById("P").value = "";
document.getElementById("P").disabled = false;// add agr
document.getElementById("indicadorQ").style.display = "inline";
document.getElementById("Q").style.display = "inline";
document.getElementById("Q").value = "";
document.getElementById("Q").disabled = false;// add agr
}
}
function EnterTab(InputId,InputId1,InputId2,Evento){
escolhido = document.getElementById("tipobar").value;
selecionado = document.getElementById("tipocomp").value;
if(Evento.keyCode == 13){
document.getElementById(InputId).focus();
document.getElementById(InputId1).focus();
if(escolhido=="V0"&& selecionado=="Barra"){
document.getElementById(InputId2).focus();
}
}
}
</script>
<div id="superior">
<h1>Entrada de dados</h1>
</div>
<p class="fonte">Informe o Nome do Componente(Opcional):</p>
<div class="row">
<div class="col-md-12">
<input type="text" class="form-control" id="box" style="margin-bottom:8%;"
onkeydown="javascript:EnterTab('P','rs','inserir',event)"/>
<br>
<span>Aviso</span>
</div>
<div class="message-body">Utilize ponto para indicar números decimais.</div>
</div>
</div>
</div>
<br>
<p class="fonte">Selecione o Tipo de Componente:</p>
<select id="tipocomp" name="selectcomp" onchange="ativacampos()"
class="select">
class="dados"onkeydown="javascript:EnterTab('bsh',0,0,event)"/></br></br>
<div id="opcoes_barra">
<label id=indicadortipobar><p class="fonte" style="display:inline-block;">Tipo de
Barra:</p></label><select id="tipobar" name="selectbar" onchange="ativadados()"
class="select">
<option value="V0" selected>Vθ</option>
<option value="PV">PV</option>
<option value="PQ">PQ</option>
</select></br></br>
<br>
<br>
<input type="button" class="button_insert" value="INSERIR" onclick="barras_insert()"
id="inserir">
<br>
<br>
</div>
</div>
<div class="row">
<div class="col-md-12">
<table class="table">
<thead>
<tr>
</tr>
</thead>
<tbody id ="barras_listagem">
</tbody>
</table>
</div>
</div>
<div class="row">
<div class="col-md-12">
<table class="table">
<thead>
<tr>
</tr>
</thead>
<tbody id ="linhas_listagem">
</tbody>
</table>
113
</div>
</div>
</div>
</body>
</html>
114
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no" />
<meta name="msapplication-tap-highlight" content="no" />
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-
scale=1, minimum-scale=1, width=device-width" />
<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline';
style-src 'self' 'unsafe-inline'; media-src *" />
<link rel="stylesheet" type="text/css" href="css/index.css" />
<title>Configurações</title>
</head>
document.getElementById(InputId).focus();
}
}
</script>
<div id="superior">
<h1>Configurações</h1>
</div>
115
<div class="message-container">
<div class="apparent-message-icon fa fa-fw fa-2x fa-exclamation-triangle">
<td width='100'><img src='img/aviso.png' class="imagem-aviso"></td>
</div>
<div class="content-container">
<div class="message-header">
<span>Aviso</span>
</div>
<div class="message-body">Utilize ponto para indicar números decimais.</div>
</div>
</div>
</div>
<br>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<link rel="stylesheet" href="css/carregamento-de-pagina.css"/>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no" />
<div id="superior">
<h1>Fluxos Calculados</h1>
</div>
<body onload="calcular_fluxo()">
</div>
<div id="resultados2" align="center" class="tabcontent">
</div>
</body>
<script type="text/javascript" src="cordova.js"></script>
</script>
118
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no" />
escolhido = document.getElementById("tipobar").value;
if(escolhido=="V0")
{
document.getElementById("indicadorV").style.display = "inline";
document.getElementById("V").style.display = "inline";
document.getElementById("V").value = "1";
document.getElementById("V").disabled = true;
document.getElementById("indicadortheta").style.display = "inline";
119
document.getElementById("theta").style.display = "inline";
document.getElementById("theta").value = "0";
document.getElementById("theta").disabled = true;
document.getElementById("indicadorP").style.display = "none";
document.getElementById("P").style.display = "none";
document.getElementById("P").value = "";
document.getElementById("P").disabled = true;// add agr
document.getElementById("indicadorQ").style.display = "none";
document.getElementById("Q").style.display = "none";
document.getElementById("Q").value = "";
document.getElementById("Q").disabled = true;// add agr
}
else if(escolhido=="PV")//caso PV{
document.getElementById("indicadorV").style.display = "inline";
document.getElementById("V").style.display = "inline";
document.getElementById("V").value = "";
document.getElementById("V").disabled = false;
document.getElementById("indicadortheta").style.display = "none";
document.getElementById("theta").style.display = "none";
document.getElementById("theta").value = "";
document.getElementById("Q").style.display = "none";
document.getElementById("Q").disabled = true; // add agr
document.getElementById("Q").value = "";
120
document.getElementById("theta").style.display = "none";
document.getElementById("theta").value = "";
document.getElementById("theta").disabled = true;
document.getElementById("indicadorP").style.display = "inline";
document.getElementById("P").style.display = "inline";
document.getElementById("P").value = "";
document.getElementById("P").disabled = false;// add agr
document.getElementById("indicadorQ").style.display = "inline";
document.getElementById("Q").style.display = "inline";
document.getElementById("Q").value = "";
document.getElementById("Q").disabled = false;// add agr
}
}
function EnterTab(InputId,InputId1,InputId2,Evento){
escolhido = document.getElementById("tipobar").value;
if(Evento.keyCode == 13){
document.getElementById(InputId).focus();
document.getElementById(InputId1).focus();
if(escolhido=="V0"&& tipo_elemento=="barra"){
document.getElementById(InputId2).focus();
}
}
121
</script>
<div id="superior">
<h1>Editar Componente</h1>
</div>
<input type="hidden" id="barras_id_delete">
<div class="message-container">
<div class="apparent-message-icon fa fa-fw fa-2x fa-exclamation-triangle">
<td width='100'><img src='img/aviso.png' class="imagem-aviso"></td>
</div>
<div class="content-container">
122
<div class="message-header">
<span>Aviso</span>
</div>
<div class="message-body">Utilize ponto para indicar números decimais.</div>
</div>
</div>
</div>
<br>
<div id="opcoes_linha" style="display:none;">
<label id=indicadorrs><p class="fonte" style="display:inline-
block;">Rs</p>:</label><input type="tel" pattern="[0-9]{8}" maxlength="8" size="4"
name="rs" id="rs" class="dados" onkeydown="javascript:EnterTab('xs',0,0,event)"/>
<label id=indicadorxs><p class="fonte" style="display:inline-
block;">Xs:</p></label><input type="tel" pattern="[0-9]{8}" maxlength="8" size="4"
name="xs" id="xs" class="dados"
onkeydown="javascript:EnterTab('bsh',0,0,event)"/></br></br>
</div>
<div id="opcoes_barra">
<label id=indicadortipobar><p class="fonte" style="display:inline-block;">Tipo de
Barra:</p></label><select id="tipobar" name="selectbar" onchange="ativadados()"
class="select">
<option value="V0">Vθ</option>
<option value="PV">PV</option>
<option value="PQ">PQ</option>
123
</select></br></br>
</div>
</div>
<div class="row">
<div class="col-md-12">
<table class="table">
<thead>
<tr>
</tr>
</thead>
<tbody id ="barras_listagem">
</tbody>
124
</table>
</div>
</div>
<div class="row">
<div class="col-md-12">
<table class="table">
<thead>
<tr>
</tr>
</thead>
<tbody id ="linhas_listagem">
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>