66
DESENVOLVIMENTO DE UM PROGRAMA DE ANÁLISE DE TRANSITÓRIOS UTILIZANDO DESLOCAMENTO EM FREQUÊNCIA Carlos Augusto Machado Gomes Projeto de Graduação apresentado ao Curso de Engenharia Elétrica da Escola Politécnica, Universidade Federal do Rio de Janeiro, como parte dos requisitos necessários ao título de Engenheiro Orientador: Antonio Carlos Siqueira de Lima Rio de Janeiro Fevereiro de 2015

DESENVOLVIMENTO DE UM PROGRAMA DE ANÁLISE DE …monografias.poli.ufrj.br/monografias/monopoli10014340.pdf · passos de simulação maiores, permitindo simulações mais eficientes

Embed Size (px)

Citation preview

DESENVOLVIMENTO DE UM PROGRAMA DE ANÁLISE DE TRANSITÓRIOS UTILIZANDO DESLOCAMENTO EM FREQUÊNCIA

Carlos Augusto Machado Gomes

Projeto de Graduação apresentado ao Curso de

Engenharia Elétrica da Escola Politécnica,

Universidade Federal do Rio de Janeiro, como parte

dos requisitos necessários ao título de Engenheiro

Orientador: Antonio Carlos Siqueira de Lima

Rio de Janeiro

Fevereiro de 2015

DESENVOLVIMENTO DE UM PROGRAMA DE ANÁLISE DE TRANSITÓRIOS UTILIZANDO DESLOCAMENTO EM FREQUÊNCIA

Carlos Augusto Machado Gomes

PROJETO DE GRADUAÇÃO SUBMETIDO AO CORPO DOCENTE DO CURSO DE

ENGENHARIA ELÉTRICA DA ESCOLA POLITÉCNICA DA UNIVERSIDADE FEDERAL DO

RIO DE JANEIRO COMO PARTE DOS REQUISITOS NECESSÁRIOS PARA A

OBTENÇÃO DO GRAU DE ENGENHEIRO ELETRICISTA

Examinado por:

_____________________________________________ Prof. Antonio Carlos Siqueira de Lima, D.Sc

_____________________________________________ Eng. Felipe Camara Neto, M.Sc.

_____________________________________________ Prof. João Pedro Lopes Salvador, M.Sc

RIO DE JANEIRO, RJ – BRASIL FEVEREIRO DE 2015

iii

Gomes, Carlos Augusto Machado

Desenvolvimento de um Programa de Análise de

Transitórios Utilizando Deslocamento em Frequência/ Carlos

Augusto Machado Gomes – Rio de Janeiro: UFRJ/ Escola

Politécnica

X, 56 p .:il; 29,7 cm

Orientador: Antonio Carlos Siqueira de Lima

Projeto de Graduação – UFRJ/ Escola Politécnica / Curso

de Engenharia Elétrica, 2015

Referências Bibliográficas: p. 45-46 .

1.Transitórios Eletromagnéticos 2. Deslocamento em

frequência 3. Programação Orientada a objetos, I. Lima, Antonio

Carlos Siqueira de II. Universidade Federal do Rio de Janeiro,

Escola Politécnica, Departamento de Engenharia Elétrica. III.

Título

iv

Agradecimentos

Agradeço a Deus pelo dom da vida e por ter tornado possível todo o caminho traçado até

hoje

Agradeço aos meus pais pela minha vida, pela minha educação e por todos os

ensinamentos, possibilitando me tornar a pessoa que sou.

Ao meu pai que infelizmente, não está mais presente para mais esta etapa de minha vida,

mas que tenho certeza que acompanhará sempre meus passos.

À minha mãe pelo apoio e incentivo durante todos os anos de faculdade e da vida.

Aos meus tios, irmãos e a todos os demais familiares pelo apoio e convívio durante toda a

vida.

Aos amigos que tive a oportunidade de fazer e conviver durante os anos de faculdade, que

tornaram os anos de graduação mais agradáveis.

Aos amigos de todas as épocas, atualmente mais próximos ou mais distantes, pelos bons

momentos de convívio.

Aos futuros colegas de profissão e atuais engenheiros com quem tive o prazer de conviver

estes anos.

Ao professor Antonio Carlos Siqueira de Lima pela disponibilidade de orientação e ajuda

durante o desenvolvimento deste trabalho

Aos professores com que tive a oportunidade de conviver e aprender, desde a educação

básica até a faculdade.

À empresa GT2 Energia e aos profissionais com quem tive a oportunidade de conviver nos

últimos anos de faculdade, me possibilitando aprendizado e amadurecimento pessoal e

profissional.

A todos, meus sinceros agradecimentos.

v

Resumo do Projeto de Graduação apresentado à Escola Politécnica/ UFRJ como parte dos

requisitos necessários para a obtenção do grau de Engenheiro Eletricista.

DESENVOLVIMENTO DE UM PROGRAMA DE ANÁLISE DE TRANSITÓRIOS UTILIZANDO DESLOCAMENTO EM FREQUÊNCIA

Carlos Augusto Machado Gomes

Fevereiro/2015

Orientador: Antonio Carlos Siqueira de Lima

Curso: Engenharia Elétrica

A simulação acurada de transitórios eletromagnéticos tem se tornado cada vez mais

necessária para análises precisas do comportamento dos sistemas de energia elétrica. O

recente desenvolvimento da modelagem de fasores girantes aplicado a simulações

eletromagnéticas permite que tais simulações sejam realizadas com passos de simulação

maiores. Neste trabalho foi desenvolvido um programa para simulação de transitórios

eletromagnéticos com a modelagem de deslocamento em frequência, utilizando os

conceitos de fasores girantes em sua modelagem. O programa desenvolvido utiliza

linguagem de programação C++, com foco em programação orientada a objetos. São

apresentados os conceitos de fasores girantes, Transformada de Hilbert e sinais analíticos

no domínio do tempo, necessários para a modelagem do deslocamento em frequência.

Além disso, são apresentados os modelos de elementos resistivos, elementos capacitivos,

elementos indutivos, transformadores de dois enrolamentos e fontes alternadas no domínio.

Os resultados apresentados foram obtidos em simulações envolvendo tais elementos,

juntamente com eventos de chaveamento.

Palavras-chave: Transitórios eletromagnéticos, Deslocamento em frequência, Fasores

girantes, Programação orientada a objetos.

vi

Abstract of Undergraduate Project presented to POLI/UFRJ as a partial fulfillment of

the requirements for the degree of Electrical Engineer.

DEVELOPMENT OF AN ELECTROMAGNETIC TRANSIENTS ANALYSIS PROGRAM USING SHIFTED FREQUENCY ANALYSIS

Carlos Augusto Machado Gomes

February/2015

Advisor: Antonio Carlos Siqueira de Lima

Course: Electrical Engineering

The accurate simulation of electromagnetic transients has become increasingly necessary

for precise analysis of electrical power system behaviour. The recent development of

dynamic phasor modelling applied to the electromagnetic analysis allows such simulations to

be performed with higher simulation steps. In this work, a program for the accurate

simulation of electromagnetic transients with shifted frequency modelling was developed

using the concepts of dynamic phasors. The software uses C ++ programming language,

focusing on object-oriented programming. The concepts of dynamic phasors, analytic signals

in the time domain and Hilbert transformer, required for the shifted frequency analysis, are

also addressed. Furthermore, the modelling of resistive elements, capacitive elements,

inductive elements, two-winding transformers and ac sources are presented. The results

were obtained from simulations involving such elements, along with switching events.

keywords: Eletromagnetical transients, Shifted frequency analysis, Dinamyc phasors,

Objected-oriented programming.

vii

Sumário 1. Introdução ....................................................................................................................... 1

1.1. Contextualização do problema .................................................................................... 1

1.2. Motivação .................................................................................................................... 1

1.1. Objetivos ..................................................................................................................... 2

1.2. Estrutura do Trabalho .................................................................................................. 2

2. Modelagem Matemática .................................................................................................. 3

2.1. Solução de transitórios utilizando o modelo EMTP ...................................................... 3

2.2. Modelagem dos elementos no modelo do deslocamento em frequência ..................... 5

2.2.1. Formulação Matemática ........................................................................................ 5

2.2.2. Modelagem de uma indutância acoplada a uma resistência ................................. 8

2.2.3. Modelagem da capacitância ................................................................................. 9

2.2.4. Modelagem do transformador ............................................................................. 11

2.2.5. Modelagem das fontes ........................................................................................ 12

2.3. Estrutura da Solução da rede elétrica – Método de Solução Nodal ........................... 13

2.3.1. Montagem da Matriz de Admitância Nodal .......................................................... 13

2.3.2. Matriz de Admitância Nodal Modificada .............................................................. 15

2.3.3. Montagem da Matriz de Admitância Nodal Modificada ........................................ 16

3. Desenvolvimento do programa ..................................................................................... 20

3.1. Estrutura do programa ............................................................................................... 20

3.2. Programação orientada a objetos .............................................................................. 21

3.3. Classes de elementos do circuito .............................................................................. 22

3.3.1. Classe elementos_passivos ................................................................................ 22

3.3.2. Classe transformadores ...................................................................................... 23

3.3.3. Classe fontes ...................................................................................................... 24

3.3.4. Classe switch ...................................................................................................... 24

3.3.5. Classe eventos ................................................................................................... 25

3.3.6. Classe power_sys ............................................................................................... 26

3.4. Algoritmo para solução do sistema ............................................................................ 27

4. Resultados da Simulação ............................................................................................. 29

4.1. Circuito RL série ........................................................................................................ 29

4.2. Circuito RC série ....................................................................................................... 31

4.3. Circuito RLC série ..................................................................................................... 33

4.4. Circuito RLC chaveado .............................................................................................. 37

4.5. Fonte de tensão acoplada a um transformador ......................................................... 39

viii

4.6. Energização e Desenergização de um Sistema Simplificado .................................... 41

5. Conclusão ..................................................................................................................... 44

6. Referências Bibliográficas ............................................................................................ 45

Apêndice A – Classes de programação ............................................................................... 47

I. Classe elementos_passivos ...................................................................................... 47

II. Classe transformadores ............................................................................................ 48

III. Classe fontes ......................................................................................................... 49

IV. Classe switch ......................................................................................................... 49

V. Classe eventos .......................................................................................................... 50

VI. Classe power_sys.................................................................................................. 51

ix

Lista de figuras

Figura 1 – Representação reduzida de um sistema .............................................................. 3

Figura 2 – Modelo EMTP de um circuito RL série ................................................................. 8

Figura 3 – Modelo do circuito RL série no modelo deslocado em frequência (SFA) .............. 9

Figura 4 - Modelo EMTP de um elemento capacitivo .......................................................... 10

Figura 5 – Modelo do capacitor no modelo deslocado em frequência (SFA) ....................... 11

Figura 6 – Modelo do transformador de dois enrolamentos................................................. 12

Figura 7 – Circuito exemplo para montagem da matriz de admitância nodal ....................... 14

Figura 8 – Circuito simplificado para montagem da matriz de admitância nodal .................. 14

Figura 9 – Circuito para montagem da Matriz de admitância nodal modificada ................... 17

Figura 10 – Fluxograma de atuação do programa ............................................................... 28

Figura 11 – Circuito de teste para a simulação - RL série ................................................... 30

Figura 12 – Envelope de tensão sobre o indutor ................................................................. 30

Figura 13 Tensão sobre a indutância .................................................................................. 30

Figura 14 – Comparação da tensão sobre o indutor, entre programa criado e o programa

ATP ..................................................................................................................................... 31

Figura 15 - Circuito de teste para a simulação - RC série ................................................... 31

Figura 16 – Envelope de tensão no elemento capacitivo .................................................... 32

Figura 17 – Tensão sobre o capacitor ................................................................................. 32

Figura 18 – Comparação da tensão no capacitor, entre o programa criado e o programa

ATP. .................................................................................................................................... 33

Figura 19 - Circuito de teste para a simulação - RLC série ................................................. 34

Figura 20 – Envelope de tensão no nó 2 ............................................................................. 34

Figura 21 – Tensão sobre o nó 2 ........................................................................................ 35

Figura 22 – Comparação da tensão no terminal 2, entre o programa criado e o programa

ATP. .................................................................................................................................... 35

Figura 23 – Espectro da corrente no circuito RLC série ...................................................... 36

Figura 24 – Corrente no circuito RLC série ......................................................................... 36

Figura 25 - Comparação da corrente no circuito, entre o programa criado e o programa ATP.

............................................................................................................................................ 37

Figura 26 - Circuito de teste para a simulação – Circuito Linear com chaveamento ............ 38

Figura 27 – Espectro da corrente entre os nós 1 e 2 ........................................................... 38

Figura 28 – Variação da corrente entre os nós 1 e 2, com o respectivo espectro da corrente

............................................................................................................................................ 39

Figura 29 - Circuito para validação do modelo do transformador ....................................... 40

Figura 30 – Tensão calculada no terminal secundário do transformador pelo modelo SFA. 40

Figura 31 – Tensão no secundário do transformador .......................................................... 41

Figura 32 – Circuito teste com chaveamento, para um sistema representando linhas de

transmissão e transformador ............................................................................................... 42

Figura 33 – Espectro da tensão sobre a carga no secundário do transformador ................. 42

Figura 34 – Sinal de tensão sobre a carga, com o respectivo espectro do sinal calculado

pelo modelo do deslocamento em frequência ...................................................................... 43

x

Lista de Tabelas

Tabela 1 – Atributos e métodos definidos para a classe elementos_passivos ..................... 22

Tabela 2 – Atributos e métodos definidos para a classe transformadores ........................... 23

Tabela 3 – Atributos e métodos definidos para a classe elementos_passivos ..................... 24

Tabela 4 – Atributos e métodos definidos para a classe switch ........................................... 24

Tabela 5 - Atributos e métodos definidos para a classe eventos ........................................ 25

Tabela 6 – Atributos e métodos definidos para a classe power_sys .................................... 26

1

1. Introdução

1.1. Contextualização do problema No estudo de sistemas elétricos são comumente utilizadas ferramentas computacionais para

simulação da operação e planejamento da expansão da rede elétrica. Há basicamente três

tipos de estudos principais para o sistema elétrico, dentre eles está simulações em regime

permanente, frente a transitórios eletromecânicos e transitórios eletromagnéticos.

Com a sucessiva expansão do sistema elétrico, tais ferramentas de simulação se tornam

cada vez mais necessárias, tendo sua importância aumentada em decorrer da crescente

complexidade das redes elétricas. Ferramentas computacionais são desenvolvidas em

diferentes linguagens de programação, porém a utilização de ferramentas de simulação de

código fechado apresentam limitações quanto à manutenção dos códigos e comunicação

com programas diferentes.

Diante de tais limitações, torna-se cada vez mais importante o desenvolvimento próprio de

ferramentas computacionais para análise de redes elétricas, em projetos de maior

complexidade ou de característica mais específica.

1.2. Motivação Diferentes programas se propõem a realizar a simulação de transitórios eletromagnéticos. A

sigla EMTP (Electro-Magnetic Transients Program – Programa de Transitórios

Eletromagnéticos) identifica um tipo de modelagem de programa amplamente utilizada na

simulação de transitórios em redes elétricas. Os programas do tipo EMTP são

amplamente utilizados, sendo as principais fontes de simulação para transitórios

eletromagnéticos.

A modelagem EMTP consegue representar a evolução do comportamento do sistema

elétrico de maneira eficiente, porém está limitada ao fato da necessidade de calcular os

valores instantâneos de todas as formas de ondas em pequenos passos discretos de

simulação. Tal fato faz com que os programas EMTP se tornem desnecessariamente lentos

para eventos próximos da frequência fundamental (DEMIRAY, ANDERSON e

BUSARELLO).

Para uma maior eficiência dos modelos EMTP no que se refere a passos de simulação, foi

idealizado um modelo sistemático que combina o modelo EMTP com os conceitos de fasor

girante, que apresenta a vantagem de conseguir representar resultados precisos com

passos de simulação maiores, permitindo simulações mais eficientes. O modelo também

chamado de SFA (Shifted Frequency Analysis – Análise de deslocamento em frequência)

permite a simulação deslocando a frequência de sua fundamental para um valor próximo a

origem, de onde vem o nome deslocamento em frequência. O modelo desenvolvido também

consegue englobar em uma ferramenta única os campos de transitórios eletromagnéticos e

eletromecânicos (DEMIRAY, ANDERSON e BUSARELLO).

2

1.1. Objetivos O principal objetivo deste trabalho é o desenvolvimento de um programa para análise de

transitórios eletromagnéticos utilizando o modelo deslocado em frequência, SFA. O modelo

permite utilizar passos de simulação maiores que os comumente utilizados em programas

padrão de simulações de transitórias, modelo EMTP, aumentando a eficiência da simulação.

Este trabalho objetiva também demonstrar as vantagens do desenvolvimento de um

programa próprio para análise de transitórios eletromagnéticos, permitindo uma possível

comunicação com outros programas, havendo possibilidade de implementação futura de

novos modelos e funcionalidades.

Será observada também a vantagem do desenvolvimento do programa em uma linguagem

de programação de código aberto que é a linguagem C++, empregando a programação

orientada a objetos.

1.2. Estrutura do Trabalho Este trabalho está estruturado da seguinte maneira:

O Capítulo 2 apresenta a formulação matemática para a modelagem dos elementos

em simulações transitórias, usando sinais reais e sinais analíticos, e para solução da

rede elétrica.

O capítulo 3 trata do desenvolvimento do programa na linguagem C++, programação

orientada a objetos, e estrutura de funcionamento do programa.

O Capítulo 4 apresenta os resultados obtidos nas simulações, com validação dos

modelos e simulação dos casos teste.

O Capítulo 5 traz as conclusões deste trabalho assim como sugestões para trabalhos

futuros.

3

2. Modelagem Matemática

Neste capítulo será apresentada a modelagem matemática necessária para a representação

de elementos elétricos em um programa de análise de transitórios. Será inicialmente

mostrada na Seção 2.1 a formulação do modelo EMTP, utilizada em programas padrão de

simulação de transitórios eletromagnéticos que trabalha com sinais reais. Na Seção 2.2 será

mostrada a modelagem no deslocamento em frequência utilizando sinais analíticos ao invés

de sinais reais, sendo apresentada a revisão matemática dos conceitos envolvidos na

formulação, entre eles fasores girantes, transformada de Hilbert e sinal analítico. Na Seção

2.3 será mostrada a formulação matemática para a solução do sistema elétrico, através da

matriz de admitância nodal modificada.

2.1. Solução de transitórios utilizando o modelo

EMTP

O método EMTP foi desenvolvido especificamente para sistemas elétricos de potência, com

o objetivo de simular digitalmente fenômenos eletromagnéticos transitórios. Este método

pode resolver sistemas compostos por resistências, indutâncias, capacitâncias,

transformadores, sistemas com modelo , linhas com parâmetros distribuídos, entre outros

(DOMMEL, 1986).

O modelo considera as tensões nos nós como variáveis de estado, representando as

correntes em função das tensões nos nós. A solução é calculada para um instante de tempo

t, em função dos valores de tensão e corrente de um instante anterior .

Como exemplo, pode-se considerar um trecho de um sistema ao redor no nó 1, como

mostrado na Figura 1.

12 3

4

R

C

L

Figura 1 – Representação reduzida de um sistema

4

Em qualquer instante de tempo a injeção de corrente no nó 1 será igual à soma das

correntes saindo do nó, sendo:

(2.1)

A corrente para o ramo da resistência será igual a:

(2.2)

Para a indutância, a relação entre tensão e corrente conhecida é de:

(2.3)

Através de integração trapezoidal (DOMMEL, 1969), obtém-se:

(2.4)

( ) (2.5)

O termo será obtido pelos valores conhecidos dos instantes de tempo anteriores,

e dado por:

( ) (2.6)

Para o ramo do capacitor, a solução é análoga e leva a:

( ) (2.7)

( ) (2.8)

A equação do nó 1 portanto, se torna:

(

)

(2.9)

A equação (2.9) é uma equação algébrica cujas incógnitas são as tensões nodais e cujos

termos do lado direito são conhecidos. Para um circuito de n nós haverá, portanto, um

sistema de n equações do tipo:

[ ][ ] [ ] [ ] (2.10)

Sendo:

[ ] = Matriz de admitância nodal

[ ] = Vetor de tensões nodais

[ ]= Vetor de injeções de corrente nodais

[ ] = Vetor de termos históricos

5

O processo para a solução do sistema linear consiste na determinação das matrizes de

admitância nodal do vetor de injeções de corrente nodal, a cada passo de iteração. Os

termos históricos de corrente são determinados também a cada passo com base nos

instantes de tempos anteriores. A solução do sistema linear é o vetor de tensões nodais.

Ao final de cada iteração é feita a atualização dos termos históricos de maneira a serem

utilizados nos passos de simulação seguintes. As condições iniciais dos termos históricos

devem ser determinadas no passo inicial.

2.2. Modelagem dos elementos no modelo do

deslocamento em frequência

A modelagem EMTP possui a desvantagem de utilizar passos de simulação excessivamente

pequenos para simulações próximos a frequência fundamental, 60Hz. Nesta seção será

mostrado o desenvolvimento da modelagem deslocada em frequência, SFA, que permite

passos de simulação menores.

Na Seção 2.2.1 será mostrada a formulação matemática a ser considerada no

desenvolvimento do modelo e nas Seções 2.2.2, 2.2.3, 2.2.4 e 2.2.5 será mostrada a

modelagem dos elementos elétricos no modelo SFA, sendo eles respectivamente:

resistência acoplada a uma indutância, capacitância, transformador de dois enrolamentos e

fonte de tensão e corrente.

2.2.1. Formulação Matemática

Nesta Seção serão tratadas de forma resumida as ferramentas matemáticas utilizadas para

análise de sinais transitórios aplicando os conceitos de deslocamento em frequência. Para

os modelos adotados neste trabalho são envolvidos conceitos de Transformada de Fourier,

Transformada de Hilbert e Fasores girantes, tratados ao longo desta seção. Uma descrição

mais detalhada sobre tais assuntos pode ser consultada junto às referências deste trabalho

(DEMIRAY, ANDERSON e BUSARELLO) (HENSCHEL, 1999) (ZHANG, 2009).

2.2.1.1. Sinais Analíticos e transformada de Hilbert

Para que se entenda o conceito de deslocamento em frequência, é necessário voltar aos

conceitos de transformada de Fourier, sinais analíticos e transformada de Hilbert.

Para uma função de sinal real, a transformada de Fourier é definida como

(ZHANG, 2009):

[ ] ∫

(2.11)

A transformada de Fourier possui no domínio da frequência relação entre as frequências

positivas e negativas dadas por:

6

(2.12)

Sendo o complexo conjugado de . Portanto, a transformada de frequências

negativas pode ser descartada sem perda de informação, sendo o espectro positivo

adequado à representação de um sinal real.

Uma função pode ser construída de maneira a se obter somente as componentes de

frequência não negativa, sendo definida:

(2.13)

em que

{

} (2.14)

O sinal analítico é definido como a transformada inversa de

(2.15)

(2.16)

O sinal é, portanto, uma função complexa. Definindo a transformada de Hilbert de

como a parte imaginária de e denotada pela expressão:

[ ] (2.17) Então pode ser expressa como sendo:

(2.18)

Das equações (2.11) e (2.13), pode-se obter o par da transformação de Fourier, igual a:

[ ] (2.19)

Por definição [ ] e portanto:

[ ] (2.20)

Usando a relação conhecida [ ]

e aplicando a transformada inversa de

, obtem-se:

[ ]

(2.21)

A transformada de Hilbert é uma integral imprópria, sendo calculada usando um valor

principal presente na equação acima. A transformada apresenta como resultado um

valor real, como esperado por sua definição.

O sinal analítico não apresenta componentes de frequência negativa, podendo o sinal real

ser obtido desconsiderando sua parte imaginária. O sinal analítico calculado é uma

generalização do conceito de fasor girante e sua aplicação no conceito de deslocamento de

frequência será tratada na próxima seção.

7

2.2.1.2. Fasores Girantes e Deslocamento em Frequência O conceito de deslocamento em frequência pode ser entendido considerando um sinal ,

representado por:

(2.22)

sendo o componente em fase do sinal e o componente em quadratura.

O fasor girante do sinal é definido como sendo

(2.23)

Correspondendo à envoltória complexa do sinal .

Assumindo que é o sinal analítico de , então:

[ ] (2.24)

Resolvendo a equação (2.24), pode-se chegar às relações:

[ ] (2.25)

{ [ ]}

(2.26)

(2.27)

Portanto, o fasor girante é igual a:

(2.28)

A Equação (2.28) mostra que o espectro do fasor corresponde ao espectro do sinal

analítico de deslocado da frequência angular , o que origina o nome deslocamento

em frequência.

O deslocamento em frequência permite a simulação de sinais cuja frequência está centrada

em sua fundamental (usualmente em torno 60 Hz em sistemas de potência), tornando o

sinal com frequência centrado na origem (0Hz). Tal modelagem permite a simulação exata

de regimes transitórios com passos de simulação maiores, o que torna a simulação mais

eficiente computacionalmente.

Com base na formulação matemática apresentada pode-se obter a modelagem matemática

dos elementos passivos utilizando sinais analíticos. A seguir será apresentada a modelagem

matemática dos principais elementos passivos considerados no desenvolvimento do

programa.

8

2.2.2. Modelagem de uma indutância acoplada a uma

resistência

A equação que rege o comportamento da tensão em um circuito RL série no domínio do

tempo é dada por

(2.29)

Sejam R a resistência e L a indutância do ramo e v(t) e i(t) os sinais de tensão e corrente no

ramo, respectivamente. Resolvendo a equação (2.29), utilizando a regra de integração

trapezoidal (DOMMEL, 1969), chega-se a equação das diferenças finitas igual a:

(2.30)

Sendo a matriz de admitância nodal e o vetor de termos históricos, dados por:

(

)

(2.31)

*(

) + (

) (2.32)

hRL(t)

rRL=R+(2/Δt)L

Figura 2 – Modelo EMTP de um circuito RL série

Conhecida a modelagem a partir de sinais reais, do modelo EMTP, pode-se fazer a

transformação para o modelo do deslocamento na frequência. A partir da equação (2.29),

realizando a transformação a fasores girantes, pode-se chegar a:

(2.33)

sendo e os fasores girantes correspondentes às variáveis v(t) e i(t):

, (2.34)

Utilizando a integração trapezoidal, chega-se na equação das diferenças, igual a:

9

(2.35)

Em que os termos da admitância equivalente e termos históricos são definidos como

nas equações

(

)

(2.36)

*(

) + (

)

(2.37)

Pode-se observar que o modelo para o deslocamento da frequência se assemelha ao

modelo no domínio do tempo, acrescido da parcela imaginária.

Uma solução alternativa é se obter diretamente os sinais analíticos de tensão e corrente,

e , através da relação presente na Equação (2.38).

(2.38)

Em que os termos da admitância equivalente e o termo histórico são definidos

como sendo:

(

)

(2.39)

( *(

) + (

) )

(2.40)

rRL=R+[(2/Δt)L+jωsL]

HRL(t)

Figura 3 – Modelo do circuito RL série no modelo deslocado em frequência (SFA)

2.2.3. Modelagem da capacitância Como tratado na Seção 2.1 A equação que rege o comportamento da corrente em um

circuito puramente capacitivo no modelo EMTP, é dada por:

10

(2.41)

Sendo a equação das diferenças finitas para este circuito igual a

(2.42)

Onde o termo relativo à admitância equivalente do ramo é igual a

(

)

(2.43)

E o termo vetor histórico da corrente é dado por

(2.44)

rC =(2C/Δt)

hC (t)

Figura 4 - Modelo EMTP de um elemento capacitivo

Para se obter a modelagem através de fasores girantes, deve-se considerar, analogamente:

(2.45)

Em que os termos e correspondem aos fasores girantes da corrente e tensão

respectivamente. Utilizando a regra do trapézio para encontrar a equação das diferenças,

obtém-se a equação:

(2.46)

A admitância equivalente é definida sendo

(

)

(2.47)

E o vetor de termos históricos ,igual a:

(2.48)

O termo histórico para o modelo no domínio da frequência, portanto, é equivalente ao termo

usado no modelo EMTP no domínio do tempo.

11

Para se trabalhar com o sinal analítico de tensão e corrente diretamente, pode-se seguir a

relação:

(2.49)

Sendo:

(

)

(2.50)

E o vetor de termos históricos , igual a:

(

) (2.51)

Os termos e , portanto, correspondem ao sinal analítico de tensão e corrente

respectivamente.

rC =(2/Δt+jωs)C

HC (t)

Figura 5 – Modelo do capacitor no modelo deslocado em frequência (SFA)

2.2.4. Modelagem do transformador

Para a modelagem do transformador, será utilizado o modelo [ ] , da matriz de indutâncias

(ZHANG, 2009). O modelo [ ] pra um transformador de dois enrolamentos é obtido da

seguinte matriz:

[ ] [

(

)

] (2.52)

Em que:

(

)

(2.53)

Sendo a indutância do lado primário do transformador, a indutância no lado secundário

e

a relação de espiras do transformador.

12

Neste modelo não são representadas as impedâncias de magnetização, que podem ser

incluídas nos terminais caso se deseje-se representar os efeitos de saturação. O modelo a

ser representado está representado na Figura 6.

Z1 Z2N1 : N2I2I1

V1 V2

Figura 6 – Modelo do transformador de dois enrolamentos

O termo de admitância e histórico equivalente podem ser calculados de maneira análoga ao

realizado para o modelo da indutância acoplada à resistência, sendo feitas algumas

modificações para a utilização da matriz [ ] .

A relação entre as correntes e as tensões nos terminais do transformador será dada por:

(2.54)

O termo de admitância equivalente para o transformador, , está presente na equação

(2.55) e o termo histórico equivalente para o transformador, , está mostrado na

equação (2.56).

(

)

* (

) +

(2.55)

{* (

) +

* (

) + } *

(

) +

* (

) + (2.56)

2.2.5. Modelagem das fontes

Serão modeladas neste trabalho fontes de tensão e corrente de característica cossenoidal,

representadas por um modelo único. Para uma fonte de tensão cossenoidal, o sinal de

tensão no tempo é dado por:

13

(2.57)

Em que é a amplitude do sinal de tensão. Através da Equação (2.18), pode se obter o

respectivo sinal analítico de tensão, que terá valor complexo e será dado por:

(2.58)

Neste trabalho não serão modelados componentes harmônicos nas fontes de tensão e

corrente. Caso seja necessário representá-los, deve ser feita a modelagem dos harmônicos

de maneira individual.

2.3. Estrutura da Solução da rede elétrica – Método

de Solução Nodal

O método de solução nodal consiste na determinação das matrizes que representam a rede

elétrica de corrente alternada para uso computacional. O método de solução nodal, busca

estabelecer uma relação linear do tipo , cuja solução pode ser resolvida através de

cálculos computacionais com grande eficiência. A representação do modelo da rede para o

método de solução nodal pode ser feita de duas maneiras: modelo com parâmetros de

admitância ou modelo com parâmetros de impedância.

A representação pelo modelo com parâmetros de impedância consiste na solução de um

sistema do tipo onde é o vetor de injeção de correntes na rede por fontes

independentes, é o vetor de tensão nodal nos barramentos e a matriz de

impedância nodal. Para o modelo com parâmetros de admitância, a equação para solução

do sistema é de formato , onde é a matriz de admitância nodal. O

método de solução nodal por modelos de admitância é mais eficiente computacionalmente,

pois a matriz apresenta característica esparsa de representação mais simples que a

matriz de impedância (BORGES, 2005) .

A Seção 2.3.1 mostra o desenvolvimento da atriz de admitância nodal padrão. Na Seção

2.3.2 será mostrado o desenvolvimento da Matriz de Admitância Nodal Modificada, que será

a utilizada no programa desenvolvido neste trabalho. Na Seção 2.3.3 será mostrado o

procedimento de montagem da Matriz de Admitância Nodal Modificada.

2.3.1. Montagem da Matriz de Admitância Nodal

Em simulações computacionais, a representação por modelagem das matrizes de

admitância é a mais eficiente e a mais utilizada, sendo sua montagem feita de maneira

simples. Como exemplo, será considerado o sistema mostrado na Figura 7. (BORGES,

2005)

14

V1

V2

V3

Z1

Z12 Z23

Z3

Z2

1

2

3

Figura 7 – Circuito exemplo para montagem da matriz de admitância nodal

O sistema pode ser representado por um modelo equivalente, transformando as fontes de

tensão em fontes de corrente e as impedâncias em admitâncias, como mostrado na Figura

8.

İ1 İ2 İ3 Y1 Y2 Y3

Y5 Y4

Y6

1 2 3

Figura 8 – Circuito simplificado para montagem da matriz de admitância nodal

As admitâncias equivalentes são calculadas a partir das equações:

15

,

,

,

,

,

(2.59)

As fontes de corrente podem ser determinadas utilizando a relação:

,

,

(2.60)

As equações nodais do circuito podem ser obtidas da seguinte maneira:

(2.61)

(2.62)

(2.63)

A equação para a matriz de admitância nodal para este circuito será do tipo:

[

] [

] [

] (2.64)

Sendo a matriz de admitância nodal, igual a:

[

] (2.65)

A matriz pode ser facilmente obtida, sendo seus elementos obtidos como se segue.

Seja o elemento da matriz cujo índice representa a linha e o índice a coluna do

elemento:

Os elementos da diagonal principal serão positivos e de valor igual ao somatório

das admitâncias diretamente ligadas à barra .

Os elementos serão negativos e seu valor igual ao somatório das admitâncias

que ligam a barra e . A matriz será simétrica, portanto

A característica de construção de montagem da matriz permite que a mesma seja

feita de maneira direta a partir de inspeção da rede.

2.3.2. Matriz de Admitância Nodal Modificada

A Matriz de Admitância Nodal Modificada, utilizada neste trabalho, terá como objetivo

considerar junto à matriz de admitância nodal a presença de fontes de tensão e chaves

seccionadoras. (MAHSEREDJIAN e ALVARADO, 1997)

Para a utilização da Matriz Nodal Modificada, será montado um novo sistema linear de

característica . Considerando um sistema, em que: seja o número de nós, o

número de chaves e o número de fontes de tensão, a equação de diferenças será dada

por:

16

[

] [

] [

]

Sendo:

[

] , [

] e [

]

Onde a matriz , matriz de admitância nodal modificada, é composta por:

, Matriz de admitância nodal padrão, de dimensão .

, Matriz de incidência nodal das fontes de tensão, de dimensão .

, Matriz de incidência nodal de chaves fechadas, de dimensão .

, Matriz nula de dimensão

, Matriz nula de dimensão

, Matriz binária e esparsa de dimensão ·, usada para anular os termos de

corrente nas chaves abertas.

Com exceção do elemento , a matriz de admitância nodal modificada será composta

somente de elementos de valores 0 e 1.

O Vetor , solução do sistema linear é composto pelos elementos:

, Vetor de tensões nodais, de dimensão .

, Vetor de corrente nas fontes de tensão, de dimensão .

, Vetor de corrente nas chaves de dimensão

E o vetor , composto por:

, Vetor de correntes nodais, dimensão

, Vetor das fontes de tensão conhecidas, dimensão .

Esta solução é menos restritiva que a solução nodal clássica, por incluir explicitamente

chaves e fontes de tensão no equacionamento. Pode-se observar que, independentemente

de eventos durante a simulação, as dimensões das matrizes manter-se-ão inalteradas.

2.3.3. Montagem da Matriz de Admitância Nodal Modificada Para exemplificar a montagem da matriz de admitância nodal será considerado um circuito

exemplo mostrado na Figura 9.

17

6 1 2

4

5 3

S1

S2

Figura 9 – Circuito para montagem da Matriz de admitância nodal modificada

Por se tratar de um sistema de 6 nós ( a matriz terá dimensão 6x6 e será montada

a partir das admitâncias equivalentes conectadas aos nós, como tratado anteriormente. A

matriz será da forma:

[

]

(2.66)

O sistema possui também uma fonte de tensão ( , duas fontes de corrente e 2

chaves ( . A Matriz de Admitância Nodal Modificada será de ordem 9 (

.

Os demais elementos da matriz serão preenchidos da seguinte forma:

A matriz que tem dimensão ( ) receberá valor 1 somente na coluna 6, relativa

ao nó onde está conectada a fonte de tensão. Os demais elementos terão valor 0.

[ ] (2.67)

Caso houvesse outra fonte de tensão, conectada a um nó k, seria acrescida uma linha na

dimensão da matriz , que receberia valor 1 somente na coluna k.

A matriz de incidência nodal de chaves fechadas tem dimensão ( ). As colunas

respectivas aos nós às quais uma chave fechada está conectadas recebem valor 1 para o

nó primário e -1 para o nó secundário da chave. Caso a mesma esteja aberta, todos os

elementos recebem valor 0.

A chave S1 está conectada aos nós 3 e 4. Caso a chave esteja fechada, a primeira linha

receberá valor 1 na coluna 3 e valor -1 na coluna 4, sendo atribuído valor 0 às demais

colunas. Caso a chaves esteja aberta, a respectiva linha receberá valor 0 em todas as

colunas.

18

A chave S2 está conectada aos nós 3 e 5. Caso a mesma esteja fechada, a segunda coluna

receberá valor 1 na coluna 3 e valor -1 na coluna 5. Novamente, caso esta chave esteja

aberta, a linha receberá valor zero em todos os elementos.

Com as chaves fechadas, a matriz será da forma:

*

+ (2.68)

Com as chaves abertas, a matriz será:

*

+ (2.69)

A matriz será usada para anular os termos de correntes para as chaves abertas. Caso as

chaves S1 e S2 estejam fechadas a matriz será do tipo:

*

+ (2.70)

Com as chaves S1 e S2 abertas, a matriz será:

*

+ (2.71)

A Matriz de Admitância Nodal modificada, , para o instante de tempo em que as chaves S1

e S2 estão fechadas, será:

[

]

(2.72)

Não sistema linear , a matriz B terá seus elementos compostos das injeções de

correntes nos nós e das tensões das fontes de tensões nos nós, todos valores conhecidos.

A matriz x será composta da tensão nos nós, corrente nas fontes de tensão e correntes nas

chaves, incógnitas do sistema. As matrizes serão dadas respectivamente por:

19

[

]

[

]

[

]

[

]

(2.73)

O sistema obtido é trivialmente solucionado por métodos de fatoração matricial, ou

invertendo-se a matriz de admitância nodal e a multiplicando pelo vetor de variáveis

conhecidas, de maneira a se achar o vetor solução.

20

3. Desenvolvimento do programa

Será tratada nesta seção a estruturação e os passos necessários para o desenvolvimento

do programa para a análise de transitórios eletromagnéticos utilizando o deslocamento em

frequência. O programa para análise de transitórias será desenvolvido na linguagem de

programação C++, que permite programação orientada a objetos com alto rendimento,

possibilitando obter resultados de simulação precisos com eficiência.

A seção 3.1 tratará da estruturação do programa e das ferramentas computacionais

utilizadas. Na seção 3.2 será tratado o conceito de programação orientada a objeto utilizada

neste trabalho, assim como suas principais características e vantagens. Na Seção 3.3 será

mostrada a divisão do circuito em classes com suas respectivas características e

funcionalidades. Na Seção 3.4 será apresentado, de maneira resumida, o algoritmo de

funcionamento do programa.

3.1. Estrutura do programa

O programa foi desenvolvido na linguagem de programação C++. Esta linguagem é

amplamente utilizada para aplicações em computação científica. A grande vantagem da

programação em C++, em relação a outras linguagens de programação, é a possibilidade da

programação orientada a objetos, tratada na próxima seção.

Outra grande vantagem do uso de C++ é a possibilidade do uso de bibliotecas. As

bibliotecas possibilitam a importação de arquivos externos, pré-definidos, como por

exemplo, bibliotecas de operações matemáticas, desde operações mais simples, presentes

nas bibliotecas padrão de C++, até a possibilidade da importação de bibliotecas mais

completas, para modelos matemáticos mais complexos.

A modelagem matemática desenvolvida neste trabalho, na Seção 2, cria a necessidade de

se trabalhar com operação matemática de vetores e matrizes complexas. A biblioteca de

operações matemáticas padrão para C++ não permite tal operação, portanto, pra tal

finalidade, foi importada uma biblioteca própria para esta aplicação. A biblioteca Eigen

(Eigen Library for C++) foi utilizada para a criação de matrizes e vetores e para a solução

dos sistemas lineares. A biblioteca permite a criação de vetores e matrizes com elementos

complexos, assim como as operações matemáticas entre os vetores e matrizes criados.

A solução do sistema linear, do tipo Ax=B, foi feita através de fatoração LU com

pivoteamento completo visto que a matriz A é de característica predominantemente esparsa,

sendo o método computacional que respondeu de maneira mais eficiente. A vantagem da

fatoração LU para solução deste tipo de problema é que a matriz A se mantém inalterada na

maior parte do tempo, o que permite que se reduza o número de cálculos na solução, só

sendo necessário que a fatoração seja recalculada caso haja uma alteração na matriz A.

21

3.2. Programação orientada a objetos

O enfoque da estrutura da programação foi a modelagem orientada a objetos. No modelo

orientado a objetos o enfoque principal da programação são os objetos, elementos centrais

do programa. Um objeto pode ser definido como um elemento de uma classe criada na

estrutura do programa, que possui um conjunto de atributos e semelhanças entre si.

Cada classe possui estrutura própria, através de um conjunto de atributos e métodos que

executam ações pertinentes à função que representam. As classes, portanto, agrupam

elementos que possuem a mesma característica e estrutura dentro do código de

programação.

A grande vantagem da utilização de classes e programação orientada a objetos pode ser

entendida por suas características principais, sendo elas: herança polimorfismo e

encapsulamento. (MANZONI, 2005)

Tais características são explicadas a seguir.

Herança é uma característica que permite a uma classe adquirir propriedades de

outra classe, herdando funções e atributos. A herança permite que duas classes

possam se comunicar, criando também uma hierarquia entre objetos, possibilitando

que as classes descendentes herdem as características de uma classe antecessora.

Polimorfismo consiste na possibilidade de diferentes classes possuírem métodos

com o mesmo nome associados a uma tarefa semelhante, que, porém possuem uma

implementação diferente para cada classe. Além da facilidade da legibilidade do

código, esta característica permite uma padronização na execução dos métodos

entre as classes.

Encapsulamento é a característica de uma classe permitir ou não que seus atributos

e métodos possam sofrer interferência externa, por exemplo, pela chamada de

outras classes. Há três formas de encapsular um objeto, são elas, tornando um

atributo ou método:

o Público: em que qualquer parte do código poderá alterá-lo.

o Protegido: que poderá ser alterado somente pela própria classe e por classes

herdeiras.

o Privado: que permite que somente a própria classe realize alterações.

Neste trabalho cada tipo de elemento que compõe o sistema elétrico será agrupado em uma

mesma classe. Como exemplo, elementos resistivos de valores diferentes possuem uma

mesma estrutura e o mesmo tipo de dados de entrada e métodos de solução, podendo ser

agrupados em uma mesma classe de programação como objetos diferentes. Cada objeto

possui atributos próprios, porém, uma estrutura idêntica. As fontes podem ser definidas

como outra classe de programação, possuindo características semelhantes entre si, porém

diferenciando-se, por exemplo, dos elementos resistivos.

22

3.3. Classes de elementos do circuito

A subdivisão dos elementos em classes permite criar métodos de soluções próprios para

cada tipo de elemento. Elementos que possuem a mesma estrutura serão objetos de uma

mesma classe de programação. A subdivisão das classes na estrutura do programa foi feita

de maneira a agrupar os tipos de elementos modelados com método de solução

semelhantes. A divisão em classes de elemento será feita da seguinte maneira:

Classe elementos_passivos: A classe elementos_passivos tratará da representação

dos elementos resistivos, indutivos e capacitivos.

Classe transformadores: A classe transformadores tratará da representação de

transformadores de dois enrolamentos.

Classe fontes: A classe fontes será responsável pela representação de fontes de

tensão e corrente.

Classe switch: A classe switch será responsável pela representação das chaves

seccionadoras.

Classe eventos: a Classe eventos será responsável pela representação de eventos,

como por exemplo, atuação temporizada das chaves.

Classe power_sys: A classe power_sys será responsável pela solução do sistema

linear, montando a matriz de admitância nodal, matriz de correntes nodais e tensões

nodais, resolvendo o sistema linear.

A seguir serão detalhadas a estrutura das classes e seus principais atributos e métodos. O

código de programação das classes em C++ está presente no Apêndice A.

3.3.1. Classe elementos_passivos

A classe elementos_passivos tratará da representação de resistores, indutores e

capacitores, que serão reunidos em uma única classe. Cada elemento passivo individual

será tratado como um diferente objeto da classe. A

Tabela 1 mostra os principais atributos e métodos definidos para a classe

elementos_passivos.

Tabela 1 – Atributos e métodos definidos para a classe elementos_passivos

Classe elementos_passivos

<<Atributos>> busk busm

r l c

gc grl

23

hc hl

<<Métodos>> ler_entradas() atualizar_hc() atualizar_hl() calcular_g()

Os parâmetros de entrada que devem ser definidos para cada elemento da classe

elementos_passivos, no começo da execução do programa, serão:

Numero das barras as quais o elemento esta conectado: (busk, busm)

Parâmetro de resistência, indutância e capacitância do elemento (r , l , c)

A leitura dos dados de entrada é feita através do método ler_entradas() .A classe calcula a

admitância equivalente (gc e grl) para cada objeto através do método calcular_g() e atualiza

os termos históricos dos elementos passivos, hc e hl, através da função atualizar_hc() e

atualizar_hl()

3.3.2. Classe transformadores

A classe transformadores foi modelada de maneira a representar transformadores de dois

enrolamentos. A Tabela 2 mostra os principais atributos e métodos para a classe

transformadores.

Tabela 2 – Atributos e métodos definidos para a classe transformadores

Classe transformadores

<<Atributos>> busk busm

R Ls N

g_trafo h_trafo

L1

<<Métodos>> ler_entradas()

matriz_L1() atualizar_ht() calcular_g()

Os dados de entrada para a criação de um objeto da classe transformadores, são lidos pelo

programa pelo método ler_entradas() e são:

Barras às quais está conectado o equipamento (busk , busm)

24

Parâmetros do transformador: resistência do lado do primário, resistência do lado do

secundário, indutância do lado do primário, indutância do lado do secundário e

relação de transformação ( r1, r2, l1, l2. N)

Os métodos matriz_L1(), calcular_g() e atualizar_ht() calculam respectivamente a matriz

inversa de indutâncias , a sub-matriz de admitância do transformador e os termos históricos

de corrente no transformador.

3.3.3. Classe fontes

A classe fontes é responsável pela representação de fontes de tensão e corrente. A Tabela

3 mostra os principais atributos e métodos para a classe fontes.

Tabela 3 – Atributos e métodos definidos para a classe elementos_passivos

Classe fontes

<<Atributos>> bus amp freq

phase tipo_fonte

<<Métodos>> ler_entradas()

fonte_inst()

Os dados de entrada para a classe fontes são:

Barra ao qual a fonte está conectada (bus)

Parâmetros da fonte: amplitude, frequência, ângulo de fase e tipo de fonte (bus, amp,

freq, phase, tipo_fonte)

Os dados da entrada são lidos através do método ler_entradas(). O método fonte_inst()

calcula e retorna o valor instantâneo do sinal de tensão ou corrente da fonte.

3.3.4. Classe switch

A classe switch representa a presença de chaves e seus estados na simulação.

Tabela 4 – Atributos e métodos definidos para a classe switch

Classe switch

<<Atributos>> busk busm status

25

<<Métodos>> ler_entradas() chaveamento()

Os dados de entrada para a criação de um objeto da classe chaves são:

Barras as quais a chaves estão conectadas (busk, busm)

Estado da chave, de valor booleano, aberto ou fechado. (status).

O método ler_entradas() lê os dados de entrada para um novo objeto da classe switch.e o

método chaveamento() é responsável pelo chaveamento da mesma, alterando seu status.

3.3.5. Classe eventos

A classe eventos é uma classe herdeira das classes switch, fontes e transformadores e

determina a ocorrência de um evento durante a simulação. A Tabela 5 apresenta os

principais atributos e métodos definidos para a classe eventos.

Tabela 5 - Atributos e métodos definidos para a classe eventos

Classe eventos

<<Atributos>> elemento

busk busm

valor_posevento inst_evento

<<Métodos>> ler_entradas()

evento_chave() evento_fonte() evento_trafo()

Os dados de entrada dos eventos são:

Elemento a ser atuado pelo evento. Entre os tipos de elementos definidos estão:

fontes, transformador ou chave seccionadora

Barramentos ou barramento onde está conectado o equipamento (busk, busm)

Instante de tempo no qual ocorre o evento (inst_evento)

Valor a ser aplicado ao parâmetro do respectivo elemento, pós-evento

(valor_posevento). No caso de fontes o valor corresponde a nova amplitude e no

caso de transformadores ao novo valor de tap.

26

3.3.6. Classe power_sys

A classe power_sys é responsável pela montagem e solução das equações de solução do

sistema elétrico. A Tabela 6 apresenta os atributos e métodos definidos para a classe

power_sys.

Tabela 6 – Atributos e métodos definidos para a classe power_sys

Classe power_sys

<<Atributos>> n_elementos n_eventos n_chaves

n_transformadores n_nos

n_fontes_V n_fontes_I

vetor_V vetor_I

matriz_A vetor_B vetor_x

<<Métodos>> ler_elementos_sistema()

checar_eventos() montar_A() montar_B()

atualizar_h() montar_V() montar_I()

Solve()

Os principais métodos presentes nesta classe são:

montar_A(): O método montar_A() monta a matriz de admitância nodal modificada,

obtendo os valores de admitância calculados pelas classes elementos_passivos e

transformadores. O método leva em conta também a incidência nodal de fontes de

tensão e chaves

montar_B(): monta a matriz B para a solução do sistema linear, obtendo os vetores

de corrente e tensão, calculados na classe fontes e os vetores de termos históricos,

das classes elementos_passivos e transformadores.

atualizar_h(): atualiza as correntes históricas dos elementos passivos e

transformadores.

Solve(): Resolve o sistema linear Ax=B, obtendo o vetor solução x

27

O método de solução do sistema linear, assim como a montagem das matrizes se dá

através da biblioteca Eigen para C++, que permite trabalhar com matrizes de números

complexos de ordem elevada e com bom desemprenho.

A solução do sistema linear se dá através do método de solução LU com pivoteamento

completo, presente na biblioteca através da chamada da função fullPivLu(). A solução

completa do sistema linear, após a definição das matrizes A e B se dá pelo comando x =

A.fullPivLu().solve(B), que retorna o vetor solução x.

3.4. Algoritmo para solução do sistema

O algoritmo para solução do sistema linear segue os passos tratados a seguir:

Inicialmente, definem-se os parâmetros de simulação do programa. Tais parâmetros levam

em conta, por exemplo, o passo de simulação a ser adotado e o tempo de simulação total.

O passo seguinte consiste na leitura dos elementos e topologia do sistema. Entre os dados

a serem lidos pelo programa está a presença de elementos passivos (indutores, resistores e

capacitores), transformadores, fontes, chaves, além da presença ou não de eventos atuando

durante a simulação. Na leitura dos dados de entrada de cada elemento são obtidos os

respectivos parâmetros correspondentes, tratados na Seção 3.3.

De posse da configuração do sistema elétrico e dos parâmetros de simulação, é feita a

inicialização das matrizes e termos históricos e inicializa-se a contagem de tempo da

simulação. As dimensões das matrizes se manterão inalteradas durante toda a simulação. A

matriz de admitância nodal modificada será inicializada no começo da simulação e se

alterará somente caso ocorra algum evento.

A cada passo de simulação, o programa fará a verificação da presença de algum evento no

instante de tempo respectivo. Na presença de eventos, a matriz de admitância nodal será

modificada e precedida pela montagem da matriz B de correntes nodais e fontes ativas.

Caso não haja nenhum evento atuando, a matriz B será montada diretamente.

O passo seguinte consiste da solução do sistema linear. Os termos históricos serão

recalculados em cada passo de simulação e serão salvos os dados de saída (tensão e

corrente nodais). A simulação segue até que o tempo total de simulação seja alcançado.

A Figura 10 mostra o fluxograma simplificado de solução do programa de análise de

transitórios.

28

Definição dos parâmetros de simulação

Início

Leitura dos elementos de

circuito

Montagem da matriz de

admitância nodal

Montagem do vetor de correntes nodais e fontes

ativas

Solução do sistema linear

Atualização dos termos históricos

Armazenamento dos dados de saída

t<t_final?

t=t+ΔtEvento

atuando?

Fim da simulação

t=0

Sim

Não

Sim

Não

Inicialização das matrizes e termos históricos

Figura 10 – Fluxograma de atuação do programa

29

4. Resultados da Simulação

Nesta seção serão apresentados os resultados das simulações para diferentes tipos de

circuitos, utilizando o programa desenvolvido ao longo deste trabalho. Serão inicialmente

montados casos testes de menor complexidade, partindo para sistemas mais complexos,

validando os modelos dos elementos elétricos considerados.

O sinal analítico deslocado, calculado pelo programa, tem característica complexa. A

componente real representa a forma de onda da tensão, ou corrente, no tempo, equivalente

ao sinal real calculada pelo modelo de análise de transitórios padrão, EMTP. O módulo do

sinal analítico representa a envoltória da forma de onda e é dado pelo sinal SFA, que pode

ser obtido utilizando passos de simulação maiores.

Tanto a envoltória quanto a forma de onda real das grandezas apresentadas foram obtidas

como saída do programa desenvolvido.

Os casos simulados foram validados junto ao programa de análise de transitórios, ATP. Em

alguns dos casos foram comparados o sinal real de saída do programa com o sinal obtido

através das simulações no ATP, solução EMTP. Foram tomadas como referências para as

simulações alguns dos casos presentes nas referências (STRUNZ, SHINTAKU e GAO,

2006) (ZHANG, 2009).

4.1. Circuito RL série

Para validar o modelo da resistência acoplada a uma impedância, assim como o modelo da

fonte de tensão, foi simulado um circuito RL série de resistência R= 300 Ω e indutância

L=300mH. Os componentes estão conectados em série com a fonte de tensão de valor

=150V. A fonte é conectada ao circuito no instante de tempo . A Figura 11 mostra

o esquema do circuito simulado.

A Figura 12 mostra o envelope da tensão no indutor, obtido com o modelo de deslocamento

em frequência, SFA, com um passo de simulação de 1ms.

Na Figura 13 estão presentes a forma de onda da tensão sobre o indutor ao longo tempo,

dado pela parcela real do sinal analítico, junto com o envelope de tensão, módulo do sinal

complexo. Para esta simulação foi utilizado um passo de simulação menor, de 50µs.

Na Figura 14 está a validação entre o sinal real obtido no programa e o valor de tensão

calculado pelo ATP, relativo à tensão no indutor. O passo de simulação em ambos os casos

é de 50µs.

30

1 2R L

Figura 11 – Circuito de teste para a simulação - RL série

Figura 12 – Envelope de tensão sobre o indutor

Figura 13 Tensão sobre a indutância

0

10

20

30

40

50

60

0.00 0.03 0.05 0.08 0.10 0.13 0.15 0.18

Ten

são

(V

)

tempo (s)

Sinal SFA

-60

-40

-20

0

20

40

60

0.00 0.03 0.05 0.08 0.10 0.13 0.15 0.18

Ten

são

(V

)

tempo (s)

Sinal real

Sinal SFA

31

Figura 14 – Comparação da tensão sobre o indutor, entre programa criado e o programa ATP

4.2. Circuito RC série

Para a validação do elemento capacitivo, foi simulado um circuito RC série, de resistência

e capacitância . Uma fonte de tensão é conectada ao circuito no instante

inicial . A fonte de tensão tem amplitude . A Figura 15 mostra o esquema

do circuito considerado nesta simulação.

A Figura 16 mostra envelope da tensão sobre o elemento capacitivo, numa simulação com

passo de 1m .

Na Figura 17 está presente a tensão sobre o capacitor ao longo do tempo assim como a

envoltória da tensão, obtido através de um passo de simulação maior de 50 .

Na Figura 18 foi feita a comparação entre o sinal real da tensão e a tensão obtida através da

simulação no ATP. Foi utilizado um passo de simulação de 50 .

1 2

C

Figura 15 - Circuito de teste para a simulação - RC série

-60

-40

-20

0

20

40

60

0.00 0.03 0.05 0.08 0.10 0.13 0.15 0.18 0.20

Ten

são

(V

)

tempo (s)

Sinal Real

Solução EMTP

32

Figura 16 – Envelope de tensão no elemento capacitivo

Figura 17 – Tensão sobre o capacitor

0

10

20

30

40

50

60

0.003 0.053 0.103 0.153

Ten

são

(V

)

tempo (s)

Sinal SFA

-40

-30

-20

-10

0

10

20

30

40

50

60

0.003 0.053 0.103 0.153

Ten

são

(V

)

tempo (s)

Sinal Real

Sinal SFA

33

Figura 18 – Comparação da tensão no capacitor, entre o programa criado e o programa ATP.

4.3. Circuito RLC série

O circuito RLC série, presente na Figura 19, foi simulado após a validação dos modelos

individuais para o modelo da resistência, indutância e capacitância. O valor da resistência é

de , o da indutância de e o da capacitância de . A fonte de

tensão senoidal tem amplitude de . A fonte é chaveada junto ao circuito no

instante de tempo .

A Figura 20 mostra a tensão sobre o nó 2 no modelo de deslocamento em frequência,

calculado com um passo de simulação de . Na Figura 21 está presente a variação do

sinal de tensão no nó ao longo do tempo, com um passo de simulação menor, igual a 50 .

A Figura 23 mostra a envoltória da corrente no circuito e a Figura 24 o sinal de corrente no

tempo, junto com a envoltória calculada pelo modelo do deslocamento em frequência. Foi

utilizado um passo de simulação de 50 .

Nas Figura 22 e Figura 25 foi feita a comparação entre os sinais reais de corrente e tensão

entre o programa criado e o programa ATP, utilizando um passo de simulação de 50

-40

-30

-20

-10

0

10

20

30

40

50

60

0 0.05 0.1 0.15 0.2

Ten

são

(V

)

tempo (s)

Sinal Real

Solução EMTP

34

1 2R L

3

C

Figura 19 - Circuito de teste para a simulação - RLC série

Figura 20 – Envelope de tensão no nó 2

0

50

100

150

200

250

0.00 0.05 0.10 0.15

Ten

são

(V

)

tempo (s)

Sinal SFA

35

Figura 21 – Tensão sobre o nó 2

Figura 22 – Comparação da tensão no terminal 2, entre o programa criado e o programa ATP.

-250

-200

-150

-100

-50

0

50

100

150

200

250

0.00 0.05 0.10 0.15

Ten

são

(V

)

tempo (s)

Sinal real

Sinal SFA

-250

-200

-150

-100

-50

0

50

100

150

200

250

0.00 0.05 0.10 0.15 0.20

Ten

são

(V

)

tempo (s)

Sinal Real

Solução EMTP

36

Figura 23 – Espectro da corrente no circuito RLC série

Figura 24 – Corrente no circuito RLC série

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

0.00 0.05 0.10 0.15 0.20

Co

rre

nte

(A

)

tempo (s)

Sinal SFA

-5

-4

-3

-2

-1

0

1

2

3

4

5

0.00 0.05 0.10 0.15 0.20

Co

rre

nte

(A

)

tempo (s)

Sinal SFA

Sinal Real

37

Figura 25 - Comparação da corrente no circuito, entre o programa criado e o programa ATP.

4.4. Circuito RLC chaveado

O circuito da Figura 26, mostra uma simulação com a presença de diferentes elementos

passivos e mostra a validação de aplicação de eventos durante a simulação. O valor da

amplitude da fonte de tensão alternada é de . Os elementos passivos têm os

seguintes valores: , , , , e .

A fonte de tensão é conectada ao circuito em . A chave inicialmente encontra-se

fechada e após do início da simulação a chave é aberta.

A Figura 27 mostra o comportamento da corrente entre os ramos 1 e 2, calculado pelo

modelo do deslocamento em frequência.

Figura 28 está presente o comportamento do sinal no tempo, calculado com um passo de

simulação de 50 e a comparação com a respectiva envoltória.

-5

-4

-3

-2

-1

0

1

2

3

4

5

0.00 0.05 0.10 0.15 0.20

Co

rre

nte

(A

)

tempo (s)

Sinal real

Solução EMTP

38

1

R1 L1

2

C1 C2

3S1

R2 L2

Figura 26 - Circuito de teste para a simulação – Circuito Linear com chaveamento

Figura 27 – Espectro da corrente entre os nós 1 e 2

0

5

10

15

20

25

0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00

Co

rre

nte

(A

)

tempo (s)

Sinal SFA

39

Figura 28 – Variação da corrente entre os nós 1 e 2, com o respectivo espectro da corrente

4.5. Fonte de tensão acoplada a um transformador

Para a simulação do circuito de teste para o transformador, foi criado um circuito composto

de uma fonte de tensão acoplada ao primário de um transformador de dois enrolamentos,

com o secundário em aberto. O transformador foi modelado de maneira a representar um

transformador de tap variável. A fonte de tensão possui amplitude de 110V. A relação de

espiras do transformador, é dada por . A resistência total do transformador vista

do lado primário é de e a reatância de valor

Inicialmente a fonte de tensão está com seu valor nominal igual a 1 p.u. e o transformador

com tap no valor nominal igual a 1. Após 5 segundos de simulação, a amplitude da fonte de

tensão foi mudada para 0,95 p.u. Aos 7 segundos de simulação, o tap do transformador é

alterado para 1,05 de maneira a trazer o nível de tensão do secundário ao valor anterior ao

evento.

A Figura 30 mostra a tensão no secundário do transformador, calculada pelo modelo SFA

com um passo de simulação de 1ms. A Figura 31, mostra o resultado da simulação para os

valores de tensão no secundário do transformador, utilizando o mesmo passo de simulação.

-25

-20

-15

-10

-5

0

5

10

15

20

25

0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00

Co

rre

nte

(A

)

tempo (s)

Sinal real

Sinal SFA

40

1 2

v2(t)

Figura 29 - Circuito para validação do modelo do transformador

Figura 30 – Tensão calculada no terminal secundário do transformador pelo modelo SFA

0.00

5.00

10.00

15.00

20.00

25.00

30.00

0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0

Ten

são

(V

)

tempo (s)

Sinal SFA

41

Figura 31 – Tensão no secundário do transformador

4.6. Energização e Desenergização de um Sistema

Simplificado

O circuito da Figura 32 representa um sistema teste para validação completa dos

componentes cadastrados no programa, estando presentes além da fonte de tensão, os

elementos passivos e o transformador. O circuito conta com duas chaves, sendo aplicados

também eventos de chaveamento durante a simulação.

A fonte de tensão presente no circuito tem característica senoidal, de frequência e

amplitude nominal . A fonte é conectada ao sistema no instante inicial, ,

com seu valor nominal de tensão. Aos 0.2 segundos de simulação é simulada uma queda no

valor de amplitude da fonte, reduzindo a amplitude da tensão a 0,58 vezes seu valor inicial.

A amplitude é elevada a seu valor original aos 0,5 segundos de simulação.

A linha de transmissão é representada por dois circuitos , usados para modelagem de

linhas médias, em série. Os parâmetros considerados para este modelo são: ,

e Para os componentes conectados ao fim da linha de transmissão

foram considerados os valores de e .

O transformador tem relação de espiras de 6:1 e uma indutância série de valor .

No secundário do transformador, a carga acoplada tem componentes de valor e

Devido à queda de tensão da fonte, a chave é aberta no instante , de maneira a

isolar a carga da fonte de alimentação do circuito. Após a tensão da fonte retornar a seu

-40.00

-30.00

-20.00

-10.00

0.00

10.00

20.00

30.00

40.00

0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0

Ten

são

(V

)

tempo (s)

Sinal SFA

Sinal real

42

valor original em , a chave é agora fechada no instante , alimentando

novamente a carga.

1 3S1

2S2

R1 C1 R2 C2 vl (t)

Lt1

4 5 6 7

Figura 32 – Circuito teste com chaveamento, para um sistema representando linhas de transmissão e transformador

A Figura 33 mostra a envoltória da tensão sobre a carga durante o período de simulação de

1 segundo. Na Figura 34 está presente o resultado da tensão medida no secundário do

transformador, para o modelo EMTP e a envoltória calculada pelo modelo do deslocamento

em frequência.

Na resposta com o sinal de tensão real representado, Figura 34, foi utilizado um passo de

simulação de 50 s, enquanto a resposta para o sinal deslocado em frequência SFA, Figura

33, pode ser obtido com um passo de simulação de 2ms.

Figura 33 – Espectro da tensão sobre a carga no secundário do transformador

0

5

10

15

20

25

30

35

40

45

0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

Ten

são

(K

V)

tempo (s)

Sinal SFA

43

Figura 34 – Sinal de tensão sobre a carga, com o respectivo espectro do sinal calculado pelo modelo do deslocamento em frequência

-50

-40

-30

-20

-10

0

10

20

30

40

50

0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

Ten

são

(K

V)

tempo (s)

Sinal real

Sinal SFA

44

5. Conclusão

O principal objetivo do desenvolvimento do modelo do deslocamento em frequência é

permitir a simulações de transitórios eletromagnéticos utilizando um passo de simulação

maior, o que permite uma simulação mais rápida sem perda da precisão ou qualidade na

forma de onda da saída. A programação em C++ foi desenvolvida por se tratar de um código

aberto, podendo o desenvolvimento obtido neste trabalho ser facilmente reproduzido.

Os resultados obtidos neste trabalho atenderam todas as expectativas, reproduzindo de

maneira precisa, o comportamento dos sinais simulados. O programa desenvolvido neste

trabalho permite a análise do envelope de um sinal transitório, calculado pelo modelo do

deslocamento em frequência, SFA, permitindo também o cálculo do comportamento efetivo

do sinal no tempo, como calculados por programas de simulação padrão, EMTP, que exige

passos menores de simulação. A vantagem da utilização da simulação SFA é a

possibilidade da utilização de um passo de simulação maior, apresentando grande

vantagem quando a amplitude instantânea do sinal é suficiente para representar o

comportamento que se deseja analisar.

O aumento do passo de simulação possibilitado pelo modelo SFA em relação ao modelo

EMTP foi significativo. Nos casos mais complexos utilizados foi possível a utilização de

passos de simulação da ordem de 2 s em relação ao passo de simulação de 50 s

necessário para o modelo EMTP padrão.

A análise do deslocamento em frequência, portanto, se torna extremamente válida e efetiva

em uma grande variedade de aplicações. A desvantagem de se trabalhar com sinais

imaginários ao invés de sinais reais, presentes em simulações padrões EMTP, é

compensada pela redução significativa do tempo de simulação alcançada, com a utilização

de passos de simulação maiores.

Possíveis aprimoramentos podem ser desenvolvidos, incluindo a modelagem de máquinas

síncronas, máquinas de indução, modelagem completa de linhas de transmissão, entre

outros.

45

6. Referências Bibliográficas

BORGES, C. L. T. Análise de Sistemas de Potência. Rio de Janeiro: Universidade Federal

do Rio de Janeiro, 2005.

CASEIRA, F. D. A. F. Análise de Transitórios Envolvendo Deslocamento da

Frequência. Universidade federal do Rio de Janeiro. Rio de Janeiro. 2012.

DEMIRAY, T.; ANDERSON, G.; BUSARELLO, L. Evaluation study for the Simulation of

Power System Transients using Dynamic Phasor Model. [S.l.].

DOMMEL, H. W. "Digital computer solution of electromagnetic transients". IEEE Trans.

Power App.Syst., vol. PAS-88, no. 4, Abril 1969. pp. 388-399.

DOMMEL, H. W. Electo-Magnetic Transients Program (EMTP) Theory Book. [S.l.]:

Boneville Power Administration, 1986.

EIGEN Library for C++. Eigen-unsupported - Tuxfamily.org. Disponivel em:

<http://www.eigen.tuxfamily.org>. Acesso em: 15 Outubro 2014.

HENSCHEL, S. Analysis of Eletromagnetic and Eletromechanical Power System

Transients with Dynamic Phasors. D. Sc. Dissertation, The University of British Columbia.

Vancouver. 1999.

HOLLMAN, J. A. Step by Step Eigenvalue Analysis with EMTP Discrete Time Solution.

D. Sc. Dissertation, The University of British Columbia. Vancouver. 2006.

HOLLMAN, J. A.; MARTÍN, J. R. "Step by Step Eigenvalue Analysis with EMTP Discrete

Time Solution". IEEE TRANSACTIONS ON POWER SYSTEMS, VOL. 25, Nº. 3, Agosto

2010. pp. 1220-1231.

MAHSEREDJIAN, J.; ALVARADO, F. "Creating an Electromagnetic Transients Program in

MATLAB: MatEMTP". IEEE Transaction on Power Delivery, Vol 12, Janeiro 1997. pp. 380-

388.

MANZONI, A. Desenvolvimento de um Sistema Computacional Orientado a Objetos

para Sistema Elétricos de Potência: Aplicação a Simulação Rápida e Análise da

Estabilidade de Tensão. Tese de D.Sc., COPPE/ UFRJ. Rio de Janeiro. 2005.

SERNA, J. A. D. L. O. "Dynamic Phasor Estimates for Power System Oscilations". IEEE

TRANSACTIONS ON INSTRUMENTATION AND MEASUREMENT, VOL. 56, Nº. 5, 2007.

pp. 1648-1657.

SOUZA, D. D. M. Simulador de Circuitos Elétricos de Pequeno Porte Utilizando

Modelagem Orientada a Objetos. Universidade Federal do Rio de Janeiro. Rio de Janeiro.

2011.

STRUNZ, K.; SHINTAKU, R.; GAO, F. "Frequency-Adaptative Network Modeling for

Integrative Simulation of Natural and Envelope Waveforms in Power System and Circuits".

46

IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS—I: REGULAR PAPERS, VOL. 53,

Nº. 12, Dezembro 2006. pp. 2788-2803.

ZHANG, P. Shifted Frequency Analysis for EMTP Simulation of Power System

Dynamics. D. Sc. Thesis, University of British Columbia. Vancouver. 2009.

47

Apêndice A – Classes de programação

I. Classe elementos_passivos #include <Eigen/Dense> class passive_element { private: void calc_grl(void); void calc_gc(void); public: int busk, busm; void ler_entradas(int, int, double, double, double); double r, l, c; dcomplex gc, grl; dcomplex hc, hl; dcomplex ic_old; // void atualizar_hc(dcomplex,dcomplex); void atualizar_hl(dcomplex, dcomplex); dcomplex calcular_g(void); ///}; void passive_element::ler_entradas(int a, int b, double res, double ind, double cap){ busk = a; busm = b; r = res; l = ind; c = cap; calc_gc(); calc_grl(); hc = 0.; ic_old = 0; hl = 0.; }; void passive_element::calc_gc(void){ gc = c*(2. / step + J*Ws); if (c == 0){ gc = 0; }}; void passive_element::calc_grl(void){ dcomplex w; if ((r == 0) && (l == 0)) { grl = 0.; } else if (l == 0){ grl = 1 / r; } else { w = (r + 2.*l/step + J*Ws*l); grl = 1. / w; };}; void passive_element::atualizar_hc(dcomplex vco,dcomplex ico){ dcomplex hco; hco = hc; ic_old = -ico; hc = 4.*c*vco / step - hco;//original hc = hc*exp(J*Ws*step); if (c == 0) hc = 0; }; void passive_element::atualizar_hl(dcomplex vto, dcomplex ilo){ dcomplex hlo;

48

hlo = hl; hl = grl*((r - 2.*l / step + J*Ws*l)*grl - 1.)*vto - grl*(r - 2.*l / step + J*Ws*l)*hlo; hl = hl*exp(J*Ws*step); if (l == 0) { hl = 0.; };}; dcomplex passive_element::calcular_g(){ dcomplex g; g = grl + gc; return g; };

II. Classe transformadores #include <Eigen/Dense> using namespace Eigen; class transformador{ public: int busk, busm; void ler_entradas(int, int, double,double, double, double,double); double Rs,Ls,N; MatrixXcd g_trafo; void update_ht(dcomplex, dcomplex); VectorXcd h_trafo; void matriz_L1(void); void calcular_g(void); MatrixXcd L1; MatrixXcd I; };

void transformador::ler_entradas(int a, int b, double r1,double r2, double L1,double

L2, double n){

busk = a; busm = b; N = n; Rs = r1+pow(N,2)*r2; Ls = L1 + pow(N, 2)*L2; I.resize(2, 2); I.fill(0); I(0,0) = 1; I(1, 1) = 1; matriz_L1(); calcular_g(); }; void transformador::matriz_L1(void){ L1.resize(2,2); L1.fill(0); L1(0,0) = 1 / Ls; L1(0,1) = -N*(1 / Ls); L1(1,0) = L1(0,1); L1(1,1) = (N)*(N)*(1 / Ls); cout << endl << L1<<endl; cout << endl << L1.inverse() << endl; }; void transformador::calcular_g(void){ g_trafo = ((L1*Rs+(2/step+J*Ws)*I).inverse())*L1; }; void transformador::update_ht(dcomplex v1,dcomplex v2){ VectorXcd h_trafo_old; VectorXcd v_trafo;

49

v_trafo.resize(2); v_trafo(0) = v1; v_trafo(1) = v2; h_trafo_old = h_trafo; h_trafo = (((L1*Rs + (2. / step + J*Ws)*I).inverse()*(L1*Rs+(-2./step+J*Ws)*I)*g_trafo)-g_trafo)*v_trafo -(L1*Rs+(2./step+J*Ws)*I).inverse()*(L1*Rs+(-2./step+J*Ws)*I)*h_trafo_old; h_trafo = h_trafo*exp(J*Ws*step); if (Ls == 0) { h_trafo.fill(0); }; };

III. Classe fontes #include <Eigen/Dense> class source { private: double phase, freq; public: int bus; double amp; bool tipo_fonte; dcomplex fonte_inst(double); void ler_entradas(int, bool, double, double, double); };

#include "fontes.h" dcomplex source::fonte_inst(double t){ dcomplex x; x = amp*exp(J*Ws*t-phase);//fonte cossenoidal return x; }; void source::ler_entradas(int bu, bool t, double a, double f, double fr){ amp = a; phase = f; tipo_fonte = t; freq = fr; bus = bu; };

IV. Classe switch #include <Eigen/Dense> class sys_sw{ public: int busk, busm; bool status; void chaveamento(void); void set_values(int, int, bool); };

void sys_sw::set_values(int a, int b, bool c){ busk = a; busm = b; status = c; }; void sys_sw::chaveamento(void){ status = !status;

50

};

V. Classe eventos class events { private: public: int inst_evento; int busk, busm; int elemento; double valor_posevento; void ler_entradas(int,int, int, double,double); bool evento_chave(sys_sw, int); bool evento_trafo(transformador, int); bool evento_fonte(source, int); };

#include "events.h" void events::ler_entradas(int e, int a, int b, double c, double d){ inst_evento = (c / step); busk = a; busm = b; valor_posevento = d; elemento = e; }; bool events::evento_chave(sys_sw x, int ti){ bool a = 0; if (ti == inst_evento) { if (((x.busk == busk) && (x.busm == busm))){ x.chaveamento(); a = 1; }; }; return a; }; bool events::evento_fonte(source y, int ti){ bool a = 0; if (ti == inst_evento) { if ((y.bus == busk)){ a = 1; }; }; return a; }; bool events::evento_trafo(transformador z, int ti){ bool a = 0; if (ti == inst_evento) { if ((z.busk == busk) && (z.busm == busm)){ a = 1; }; }; return a; };

51

VI. Classe power_sys #include <Eigen/Dense> using namespace Eigen; using namespace std; class power_sys{ public: void ler_elementos_sistema(void); void checar_eventos(void); void mount_A(void); void mount_B(double); void atualizar_h(double); void mount_i(double); void mount_v(double); void ver_eventos(void); void solve(void); int n_elementos, n_eventos, n_chaves, n_transformadores, n_nos, n_fontes_v, n_fontes_i; VectorXcd vetor_V; VectorXcd vetor_Is; MatrixXcd A; VectorXcd B; //sub-rotinas void read_elements(void); void read_sources(void); void read_fontescontroladas(void); void read_transformer(void); void read_switches(void); void read_events(void); //definicoes internas passive_element elementos[20]; source fontes[5]; events eventos[5]; sys_sw chaves[5]; transformador trafo[5]; int m; int taman_vsource, taman_data_source, taman_A, n, taman_isource, taman_data_sw, taman_gaa; int taman_data_ele, taman_data_eve, nn; int n_transformador; int transformer; int taman_vcontrol, taman_icontrol; vector<dcomplex> matriz_A, matriz_b; VectorXcd x; VectorXcd vetor_Ivs; VectorXcd vetor_In; }; #include <iostream> #include <fstream> void power_sys::ler_elementos_sistema(void){ read_elements(); read_sources(); read_fontescontroladas(); read_transformer(); read_switches(); read_events();

52

} void power_sys::read_elements(void){ ifstream ele ("elementos.txt"); if (!ele) cout << "Falha ao abir elementos.txt\n"; int a, b; double resis, induc, capac; taman_gaa = 0; n = 0; taman_data_ele = 0; for (int ii = 0; ele.good() && !ele.eof(); ii++){ ele >> a >> b >> resis >> induc >> capac; elementos[ii].ler_entradas(a, b, resis, induc, capac); cout << "Linha"<< ii+1<< " - barra "<< a << " barra "<< b << " R=" << resis <<" I="<< induc << " C="<< capac << "\n"; taman_data_ele++; if (a>taman_gaa) { taman_gaa = a; }; if (b>taman_gaa){ taman_gaa = b; }; }; cout << "taman_gaa: " << taman_gaa << endl; //cout <<":"<< taman_gaa << "\n"; n = taman_gaa; ele.close(); }; void power_sys::read_sources(void){ ifstream sou("fontes.txt"); if (!sou) cout << "Falha ao abir fontes.txt\n"; int a; double ampli, phase, fr; char ti[8]; bool tipe_source; taman_vsource = 0; taman_isource = 0; taman_data_source = 0; for (int ii = 0; sou.good() && !sou.eof(); ii++){ sou >> a >> ti >> ampli >> phase >> fr; tipe_source = strcmp(ti, "VOLTAGE"); if (!tipe_source) taman_vsource++; else taman_isource++; fontes[ii].ler_entradas(a, tipe_source, ampli, phase, fr); taman_data_source++; cout << "Linha" << ii+1 << " - barra " << a << " tipo " << ti << " amplitude =" << ampli << " fase =" << phase << " frequencia=" << fr << "\n"; if (a > n)n = a; }; cout << "taman_data_source: " << taman_data_source << endl; sou.close(); }; //TRANSFORMADOR void power_sys::read_transformer(void){ ifstream transf("transformer.txt"); if (!transf) cout << "Cannot open file transformer.txt\n"; n_transformador = 0; int busa, busb; double R1,R2,L1,L2,N; for (int ii = 0; transf.good() && !transf.eof(); ii++){ transf >> busa >> busb >> R1 >> R2 >> L1>>L2>>N; trafo[ii].ler_entradas(busa,busb,R1,R2,L1,L2,N);

53

if (busa > n)n = busa; if (busb > n)n = busb; n_transformador++; trafo[ii].h_trafo.resize(2); trafo[ii].h_trafo.fill(0); }; cout << "n_transformador: " << n_transformador << endl; transf.close(); }; void power_sys::read_switches(void){ ifstream ch("chaves.txt"); taman_data_sw = 0; if (!ch) cout << "Cannot open file chaves.txt\n"; for (int ii = 0; ch.good() && !ch.eof(); ii++){ int a, b; char ti[8]; bool status; ch >> a >> b >> ti; status = strcmp(ti, "ABERTO"); chaves[ii].set_values(a, b, status); taman_data_sw++; if (a>n) n=a; if (b>n) n = b; }; cout << "taman_data_sw: " << taman_data_sw << endl; ch.close(); vetor_V.resize(n); vetor_V.fill(0); vetor_In.resize(n); vetor_In.fill(0); }; void power_sys::read_events(void){ ifstream eve("eventos.txt"); taman_data_eve = 0; for (int ii = 0; eve.good() && !eve.eof(); ii++){ int a, b,elemento; double inst, valor; eve >> elemento >> a >> b >> inst >> valor; eventos[ii].ler_entradas(elemento,a, b, inst, valor); taman_data_eve++; }; eve.close(); nn = 0; }; void power_sys::mount_A(void) { m = n +taman_vsource +taman_data_sw ;//pega dimensao da matriz A.resize(m,m);//Grow Lines by m//and columns A.fill(0); for (int ii = 0; ii < taman_data_ele; ii++) { int bk, bm; elementos[ii]; bk = elementos[ii].busk-1; bm= elementos[ii].busm-1; if (elementos[ii].busm == 0){ A(bk, bk) = A(bk, bk) + elementos[ii].calcular_g(); } else{ A(bk, bm) = A(bk, bm) - elementos[ii].calcular_g(); A(bm, bk) = A(bm, bk) - elementos[ii].calcular_g(); A(bk, bk) = A(bk, bk) + elementos[ii].calcular_g();

54

A(bm, bm) = A(bm, bm) + elementos[ii].calcular_g(); } } int kk = 0; for (int ii = 0; ii < taman_data_source; ii++) { fontes[ii]; if (!fontes[ii].tipo_fonte)//não é fonte de corrente { int bus = fontes[ii].bus - 1; A(n + kk,bus) = 1; A(bus, n + kk) = 1; kk++; } } //Transformadores--------------------------///// for (int ii = 0; ii < n_transformador; ii++) { int bk, bm; trafo[ii]; bk = trafo[ii].busk - 1; bm = trafo[ii].busm - 1; A(bk, bm) = A(bk, bm) + trafo[ii].g_trafo(0,1); A(bm, bk) = A(bm, bk) + trafo[ii].g_trafo(1,0); A(bk, bk) = A(bk, bk) + trafo[ii].g_trafo(0,0); A(bm, bm) = A(bm, bm) + trafo[ii].g_trafo(1,1); } //fim transformador kk = 0; for (int ii = 0; ii < taman_data_sw; ii++) { chaves[ii]; int bk, bm; bk = chaves[ii].busk-1; bm = chaves[ii].busm-1; if (chaves[ii].status){//chave fechada A(n + taman_vsource + kk, bk) = 1; A(n + taman_vsource + kk, bm) = -1; A(bk, n + taman_vsource + kk) = 1; A(bm,n + taman_vsource + kk) = -1; } if (!chaves[ii].status)//chave aberta { A(n + taman_vsource + kk,n + taman_vsource + kk) = 1; } kk++; }} void power_sys::mount_B(double ti){/// B.resize(m);//Grow Lines by m B.fill(0); int jj = 0; for (int ii = 0; ii < taman_data_source; ii++){ int bus; fontes[ii]; if (fontes[ii].tipo_fonte){//fonte de corrente bus = fontes[ii].bus - 1; B(bus) = fontes[ii].fonte_inst(ti); } if (!fontes[ii].tipo_fonte)//não é fonte de corrente { B(n + jj) = fontes[ii].fonte_inst(ti); jj++; }}

55

for (int ii = 0; ii < taman_data_ele; ii++){ int bk, bm; dcomplex v=0; bk = elementos[ii].busk - 1; bm = elementos[ii].busm - 1; B(bk) = B(bk) + elementos[ii].hc + elementos[ii].hl;// if (elementos[ii].busm!=0){ B(bm) = B(bm) - elementos[ii].hc - elementos[ii].hl;// }} for (int ii = 0; ii < n_transformador; ii++){ int bk, bm; dcomplex v = 0; bk = trafo[ii].busk - 1; bm = trafo[ii].busm - 1; B(bk) = B(bk) + trafo[ii].h_trafo(0); B(bm) = B(bm) + trafo[ii].h_trafo(1); } for (int uu = 0; uu < n; uu++){ vetor_In(uu) = B(uu); }} void power_sys::atualizar_h(double ti){ for (int ii = 0; ii < taman_data_ele; ii++){ dcomplex v, ia, g; v = 0.; ia = 0; int bk, bm; bk = elementos[ii].busk - 1; bm = elementos[ii].busm - 1; if (elementos[ii].busm <=n){ if (elementos[ii].busm == 0){ v = vetor_V(bk); } else { v = vetor_V(bk) - vetor_V(bm); }}; g = elementos[ii].calcular_g(); ia = v*(g); elementos[ii].atualizar_hc(v,ia); elementos[ii].atualizar_hl(v, ia); }; //historico dos transformadores for (int ii = 0; ii < n_transformador; ii++){ dcomplex v1, v2; v1 = 0.; v2 = 0.; int bk, bm; bk = trafo[ii].busk - 1; bm = trafo[ii].busm - 1; v1 = vetor_V(bk); v2 = vetor_V(bm); trafo[ii].update_ht(v1, v2); }; }; void power_sys::solve(){ x = A.fullPivLu().solve(B); int kk = 0; vetor_Ivs.resize(taman_isource); if (taman_data_sw != 0) { vetor_Is.resize(taman_data_sw);

56

} for (int i = 0; i < n; i++){ vetor_V(i) = x(i); } kk = 0; if (taman_data_sw != 0){ for (int i = n + taman_vsource; i < n + taman_vsource + taman_isource; i++){ vetor_Is(kk) = x(i); kk++; } } }; void power_sys::checar_eventos(void) { // eventos for (int kk = 0; kk < taman_data_eve; kk++){//checa eventos if (eventos[kk].elemento == 1){ for (int ii = 0; ii < taman_data_sw; ii++)//verifica chaves { if (eventos[kk].evento_chave(chaves[ii], nn)) { chaves[ii].chaveamento(); mount_A(); }}} else if (eventos[kk].elemento == 2){ for (int ii = 0; ii < taman_data_source; ii++){ if (eventos[kk].evento_fonte(fontes[ii], nn)) { cout << endl << "atuação do evento na fonte" << endl; fontes[ii].amp = eventos[kk].valor_posevento; mount_A(); }}} else if (eventos[kk].elemento == 3){ for (int ii = 0; ii < n_transformador; ii++)//verifica trafos { if (eventos[kk].evento_trafo(trafo[ii], nn)) { trafo[ii].N = eventos[kk].valor_posevento; cout<< endl << "atuação do evento no trafo" << endl; trafo[ii].matriz_L1(); trafo[ii].calcular_g(); vetor_V.fill(0); B.fill(0); mount_A(); }}} else{ cout << endl << "evento fora da gama de eventos disponíveis" << endl; } } nn++; };