0% acharam este documento útil (0 voto)
10 visualizações17 páginas

Modcalculos Rede

O documento descreve um módulo de cálculos para um sistema elétrico, incluindo funções para calcular corrente e impedância de base a partir de dados de potência e tensão. Ele também inclui macros para calcular correntes de curto-circuito e impedâncias a partir dessas correntes, com validações e tratamento de erros. As fórmulas utilizadas e a estrutura do código são detalhadas, visando a precisão nos cálculos e a inserção dos resultados em uma planilha.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
10 visualizações17 páginas

Modcalculos Rede

O documento descreve um módulo de cálculos para um sistema elétrico, incluindo funções para calcular corrente e impedância de base a partir de dados de potência e tensão. Ele também inclui macros para calcular correntes de curto-circuito e impedâncias a partir dessas correntes, com validações e tratamento de erros. As fórmulas utilizadas e a estrutura do código são detalhadas, visando a precisão nos cálculos e a inserção dos resultados em uma planilha.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd

'=============================================

=======================
' Módulo: modCalculosRede
' Finalidade:
' - Controlar ativação global dos cálculos
' - Variável pública usada por todas as macros de cálculo
'=============================================
=======================
Public calculoAtivo As Boolean

'=============================================
=======================
' Função: CalcularBaseSistema
' Módulo: Planilha "DadosConcessionária"
'
' Finalidade:
' - Calcular a Corrente de Base (i_base) em amperes
' - Calcular a Impedância de Base (z_base) em ohms
' - Inserir os resultados nas células G13 (i_base) e G15 (z_base)
'
' Fórmulas utilizadas:
' - i_base = (S_base × 1000) / (v3 × V_base)
' - z_base = V_base² / S_base
'
' Requisitos:
' - X9: Potência de base (S_base) em MVA
' - AH9: Tensão de base (V_base) em kV
'
' Observações:
' - A função valida se os valores são positivos antes de calcular
' - Em caso de erro, exibe mensagem e registra diagnóstico no console
'
' Autor: Luiz + Copilot
' Última revisão: 26/09/2025
'=============================================
=======================

Public Sub CalcularBaseSistema()

On Error GoTo DadosInvalidos

'------------------------------------------------------------
' 0. Referência à planilha de origem
'------------------------------------------------------------
Dim ws As Worksheet
Set ws = Worksheets("DadosConcessionária")

'------------------------------------------------------------
' 1. Declaração e aquisição dos dados de entrada
'------------------------------------------------------------
Dim s_base As Double ' Potência de base (MVA)
Dim v_base As Double ' Tensão de base (kV)
Dim i_base As Double ' Corrente de base (A)
Dim z_base As Double ' Impedância de base (ohm)

s_base = [Link]("X9").Value
v_base = [Link]("AH9").Value

'------------------------------------------------------------
' 2. Validação dos dados de entrada
'------------------------------------------------------------
If s_base <= 0 Or v_base <= 0 Then
MsgBox "Valores inválidos para potência ou tensão base. Verifique X9 e
AH9.", vbExclamation
[Link] "?? Dados inválidos: s_base = " & s_base & ", v_base = " &
v_base
Exit Sub
End If

'------------------------------------------------------------
' 3. Cálculo da Corrente de Base
' Fórmula: i_base = (S_base × 1000) / (v3 × V_base)
'------------------------------------------------------------
i_base = (s_base * 1000) / (Sqr(3) * v_base)

'------------------------------------------------------------
' 4. Cálculo da Impedância de Base
' Fórmula: z_base = V_base² / S_base
'------------------------------------------------------------
z_base = (v_base ^ 2) / s_base

'------------------------------------------------------------
' 5. Inserção dos resultados na planilha
'------------------------------------------------------------
[Link]("G13").Value = Round(i_base, 3) ' Corrente de base (A)
[Link]("G15").Value = Round(z_base, 4) ' Impedância de base (ohm)

'------------------------------------------------------------
' 6. Diagnóstico no console
'------------------------------------------------------------
[Link] "? Base recalculada: i_base = " & i_base & " A, z_base = " &
z_base & " ohm"
Exit Sub

'------------------------------------------------------------
' 7. Tratamento de erro
'------------------------------------------------------------
DadosInvalidos:
MsgBox "Erro ao calcular base do sistema. Verifique os valores em X9 e
AH9.", vbExclamation
[Link] "? Erro em CalcularBaseSistema: " & [Link]

End Sub

'=============================================
=======================
' Módulo: modCalculosRede
' Sub: CalcularCorrentesCurtoPolar
'
' Finalidade:
' - Calcular ICC3F e ICCF-T máximo na forma polar
' - Interpretar impedâncias conforme forma e unidade selecionadas
' - Tratar grandezas de base: s_base, v_base, i_base, z_base
' - Inserir resultados nas células da planilha
'
' Autor: Luiz
' Última revisão: 26/09/2025
'=============================================
=======================

Public Sub CalcularCorrentesCurtoPolar()

[Link] "?? Macro CalcularCorrentesCurtoPolar iniciada"

Dim ws As Worksheet
Set ws = Worksheets("DadosConcessionária")

'----------------------------------------------------
' 0. Verifica se CheckBox3 está DESmarcada (modo corrente)
'----------------------------------------------------
[Link] "?? Verificando CheckBox3..."
If [Link]("CheckBox3").[Link] = True Then
[Link] "? Modo impedância ativo — cálculo de corrente
bloqueado"
Exit Sub
Else
[Link] "? Modo corrente ativo — prosseguindo"
End If

'----------------------------------------------------
' 1. Captura das seleções e dados de base
'----------------------------------------------------
Dim formaImp As String, unidadeImp As String
Dim s_base As Double, v_base As Double
Dim i_base As Double, z_base As Double

formaImp = Trim([Link]("ComboBox1").[Link])
unidadeImp = Trim([Link]("ComboBox2").[Link])
s_base = CDbl([Link]("X9").Value)
v_base = CDbl([Link]("AH9").Value)

If s_base = 0 Or v_base = 0 Then


MsgBox "Potência ou tensão base não definida.", vbExclamation
[Link] "? s_base ou v_base igual a zero. Macro encerrada."
Exit Sub
End If

z_base = (v_base ^ 2) / s_base


i_base = (s_base * 10 ^ 6) / (Sqr(3) * v_base * 10 ^ 3)
'----------------------------------------------------
' 2. Leitura das impedâncias conforme forma selecionada
'----------------------------------------------------
Dim z1r As Double, z1x As Double
Dim z2r As Double, z2x As Double
Dim z0r As Double, z0x As Double

If LCase(formaImp) = "retangular" Then


z1r = CDbl([Link]("AM13").Value): z1x =
CDbl([Link]("AM15").Value)
z2r = CDbl([Link]("AW13").Value): z2x =
CDbl([Link]("AW15").Value)
z0r = CDbl([Link]("BG13").Value): z0x =
CDbl([Link]("BG15").Value)
ElseIf LCase(formaImp) = "polar" Then
Dim z1polar As Variant, z2polar As Variant, z0polar As Variant
z1polar = PolarParaRetangular(CDbl([Link]("AM13").Value),
CDbl([Link]("AM15").Value))
z2polar = PolarParaRetangular(CDbl([Link]("AW13").Value),
CDbl([Link]("AW15").Value))
z0polar = PolarParaRetangular(CDbl([Link]("BG13").Value),
CDbl([Link]("BG15").Value))
z1r = z1polar(0): z1x = z1polar(1)
z2r = z2polar(0): z2x = z2polar(1)
z0r = z0polar(0): z0x = z0polar(1)
End If

'----------------------------------------------------
' 3. Conversão de unidade se necessário
'----------------------------------------------------
If LCase(unidadeImp) = "pu" Then
z1r = PUParaOhm(z1r, z_base)
z1x = PUParaOhm(z1x, z_base)
z2r = PUParaOhm(z2r, z_base)
z2x = PUParaOhm(z2x, z_base)
z0r = PUParaOhm(z0r, z_base)
z0x = PUParaOhm(z0x, z_base)
End If

'----------------------------------------------------
' 4. Cálculo da ICCF-T máximo (fase-terra)
'----------------------------------------------------
Dim Rtotal As Double, Xtotal As Double, ZtotalMag As Double
Dim ICCFTmag As Double, ICCFTang As Double

Rtotal = z1r + z2r + z0r


Xtotal = z1x + z2x + z0x
ZtotalMag = Sqr(Rtotal ^ 2 + Xtotal ^ 2)

If ZtotalMag > 0 Then


ICCFTmag = (3 * ((v_base * 1000) / Sqr(3))) / ZtotalMag
ICCFTang = -CopilotAtn2(Xtotal, Rtotal) * 180 / [Link]()
Else
ICCFTmag = 0
ICCFTang = 0
End If

'----------------------------------------------------
' 5. Cálculo da ICC3F (trifásica)
'----------------------------------------------------
Dim Z1mag As Double
Dim ICC3Fmag As Double, ICC3Fang As Double

Z1mag = Sqr(z1r ^ 2 + z1x ^ 2)

If Z1mag > 0 Then


ICC3Fmag = (v_base * 1000) / (Sqr(3) * Z1mag)
ICC3Fang = -CopilotAtn2(z1x, z1r) * 180 / [Link]()
Else
ICC3Fmag = 0
ICC3Fang = 0
End If

'----------------------------------------------------
' 6. Diagnóstico via Debug
'----------------------------------------------------
[Link] "Z1 = "; z1r & " + j" & z1x
[Link] "Z2 = "; z2r & " + j" & z2x
[Link] "Z0 = "; z0r & " + j" & z0x
[Link] "Zft = "; Rtotal & " + j" & Xtotal
[Link] "ZftMag = "; ZtotalMag
[Link] "ICC3F = "; ICC3Fmag & " ? " & ICC3Fang
[Link] "ICCF-T = "; ICCFTmag & " ? " & ICCFTang

'----------------------------------------------------
' 7. Inserção dos resultados na planilha
'----------------------------------------------------
[Link]("S13").Value = Round(ICCFTmag, 2)
[Link]("Q15").Value = Round(ICCFTang, 2)
[Link]("AC13").Value = Round(ICC3Fmag, 2)
[Link]("AA15").Value = Round(ICC3Fang, 2)

End Sub

'=============================================
=======================
' Macro: CalcularImpedanciasAPartirDasCorrentes
' Finalidade:
' - Calcular Z1, Z2, Z0 e seus componentes R/X
' a partir das correntes de curto-circuito trifásica (ICC3F)
' e fase-terra (ICCF-Tmáx)
'
' Autor: Luiz
' Última revisão: 26/09/2025
'
' Entradas:
' - S13:U13 ? módulo ICCF-Tmáx
' - Q15:S15 ? ângulo ICCF-Tmáx
' - AC13:AE13 ? módulo ICC3F
' - AA15:AC15 ? ângulo ICC3F
' - X9 ? potência base (MVA)
' - AH9 ? tensão base (kV)
'
' Saídas:
' - AM13:AO13 ? R1
' - AM15:AO15 ? X1
' - AW13:AY13 ? R2
' - AW15:AY15 ? X2
' - BG13:BI13 ? R0
' - BG15:BI15 ? X0
'=============================================
=======================

Public Sub CalcularImpedanciasAPartirDasCorrentes()

[Link] "?? Macro CalcularImpedanciasAPartirDasCorrentes iniciada"

Dim ws As Worksheet
Set ws = Worksheets("DadosConcessionária")
'----------------------------------------------------
' 0. Verifica se CheckBox3 está marcada
'----------------------------------------------------
[Link] "?? Verificando CheckBox3..."
If [Link]("CheckBox3").[Link] = False Then
[Link] "? Modo corrente ativo — cálculo de impedância
bloqueado"
Exit Sub
Else
[Link] "? Modo impedância ativo — prosseguindo"
End If

'----------------------------------------------------
' 1. Leitura das grandezas de base
'----------------------------------------------------
Dim s_base As Double, v_base As Double
s_base = [Link]("X9").Value
v_base = [Link]("AH9").Value

[Link] "?? s_base = " & s_base & ", v_base = " & v_base

If s_base = 0 Or v_base = 0 Then


MsgBox "Potência ou tensão base não definida.", vbExclamation
[Link] "? s_base ou v_base igual a zero. Macro encerrada."
Exit Sub
End If

'----------------------------------------------------
' 2. Leitura das correntes e ângulos
'----------------------------------------------------
Dim ICC3Fmag As Double, ICC3Fang As Double
Dim ICCFTmag As Double, ICCFTang As Double
ICC3Fmag = [Link]("AC13").Value
ICC3Fang = [Link]("AA15").Value
ICCFTmag = [Link]("S13").Value
ICCFTang = [Link]("Q15").Value

[Link] "?? ICC3Fmag = " & ICC3Fmag & ", ICC3Fang = " & ICC3Fang
[Link] "?? ICCFTmag = " & ICCFTmag & ", ICCFTang = " & ICCFTang

If ICC3Fmag = 0 Or ICCFTmag = 0 Then


MsgBox "Correntes de curto não definidas.", vbExclamation
[Link] "? Correntes de curto igual a zero. Macro encerrada."
Exit Sub
End If

'----------------------------------------------------
' 3. Cálculo de Z1 e Z2 (trifásico)
'----------------------------------------------------
Dim Z1mag As Double, Z1ang As Double
Dim R1 As Double, X1 As Double
Dim R2 As Double, X2 As Double

Z1mag = (v_base * 1000) / (Sqr(3) * ICC3Fmag)


Z1ang = -ICC3Fang * [Link]() / 180

R1 = Z1mag * Cos(Z1ang)
X1 = Z1mag * Sin(Z1ang)

R2 = R1
X2 = X1

[Link] "?? Z1mag = " & Z1mag & ", Z1ang = " & Z1ang
[Link] "?? R1 = " & R1 & ", X1 = " & X1
[Link] "?? R2 = " & R2 & ", X2 = " & X2

'----------------------------------------------------
' 4. Cálculo vetorial de Z0 (fase-terra)
'----------------------------------------------------
Dim ZftMag As Double, ZftAngRad As Double
Dim ZftReal As Double, ZftImag As Double
Dim R0 As Double, X0 As Double

ZftMag = (3 * v_base * 1000) / (Sqr(3) * ICCFTmag)


ZftAngRad = -ICCFTang * [Link]() / 180

ZftReal = ZftMag * Cos(ZftAngRad)


ZftImag = ZftMag * Sin(ZftAngRad)

R0 = ZftReal - 2 * R1
X0 = ZftImag - 2 * X1

[Link] "?? ZftMag = " & ZftMag & ", ZftAngRad = " & ZftAngRad
[Link] "?? ZftReal = " & ZftReal & ", ZftImag = " & ZftImag
[Link] "?? R0 = " & R0 & ", X0 = " & X0

'----------------------------------------------------
' 5. Escrita dos resultados nas células mescladas
'----------------------------------------------------
[Link]("AM13").Value = Round(R1, 4)
[Link]("AM15").Value = Round(X1, 4)

[Link]("AW13").Value = Round(R2, 4)
[Link]("AW15").Value = Round(X2, 4)
[Link]("BG13").Value = Round(R0, 4)
[Link]("BG15").Value = Round(X0, 4)

[Link] "? Resultados escritos nas células."

End Sub

Public Sub CalcularCorrentesCurtoConcessionaria()

' 0. Verifica se o cálculo está ativo


If calculoAtivo = False Then
[Link] "? cálculoAtivo está False — macro não será executada"
Exit Sub
End If

[Link] "?? Macro CalcularCorrentesCurtoConcessionaria iniciada"

Dim ws As Worksheet, wsBD As Worksheet


Set ws = Worksheets("DadosConcessionária")
Set wsBD = Worksheets("BD-1")

' 1. Leitura das impedâncias em ohm ou pu


Dim z1r As Double, z1x As Double
Dim z2r As Double, z2x As Double
Dim z0r As Double, z0x As Double

z1r = [Link]("AM13").Value
z1x = [Link]("AM15").Value
z2r = [Link]("AW13").Value
z2x = [Link]("AW15").Value
z0r = [Link]("BG13").Value
z0x = [Link]("BG15").Value

' 2. Leitura de base e parâmetros


Dim i_base As Double, z_base As Double
i_base = [Link]("G13").Value
z_base = [Link]("G15").Value

Dim f As Double, ciclo As Double, t As Double


f = [Link]("X55").Value
ciclo = [Link]("ComboBox3").[Link]
t = (ciclo / f) * 1000

Dim z_contato As Double


z_contato = [Link]("AR9").Value

' 3. Verificação da unidade e conversão para pu


Dim unidadeImpedancia As String
unidadeImpedancia = Trim([Link]("ComboBox2").[Link])
If unidadeImpedancia = "" Then unidadeImpedancia =
Trim([Link]("AP13").Value)

Dim r1pu As Double, x1pu As Double


Dim r2pu As Double, x2pu As Double
Dim r0pu As Double, x0pu As Double
Dim z_contato_pu As Double

If LCase(unidadeImpedancia) = "ohm" Then


r1pu = z1r / z_base: x1pu = z1x / z_base
r2pu = z2r / z_base: x2pu = z2x / z_base
r0pu = z0r / z_base: x0pu = z0x / z_base
z_contato_pu = z_contato / z_base
Else
r1pu = z1r: x1pu = z1x
r2pu = z2r: x2pu = z2x
r0pu = z0r: x0pu = z0x
z_contato_pu = z_contato
End If

' 3.1 Atualiza impedâncias iniciais em pu na BD-1 (linhas 1 a 6)


With wsBD
.Range("A1").Value = "R1": .Range("B1").Value = Round(r1pu, 6)
.Range("A2").Value = "X1": .Range("B2").Value = Round(x1pu, 6)
.Range("A3").Value = "R2": .Range("B3").Value = Round(r2pu, 6)
.Range("A4").Value = "X2": .Range("B4").Value = Round(x2pu, 6)
.Range("A5").Value = "R0": .Range("B5").Value = Round(r0pu, 6)
.Range("A6").Value = "X0": .Range("B6").Value = Round(x0pu, 6)
End With

' 4. Cálculo das impedâncias totais em pu


Dim z1pu As Double, z2pu As Double, z0pu As Double
z1pu = Sqr(r1pu ^ 2 + x1pu ^ 2)
z2pu = Sqr(r2pu ^ 2 + x2pu ^ 2)
z0pu = Sqr(r0pu ^ 2 + x0pu ^ 2)

' 5. Correntes de curto simétricas


Dim ICC3F As Double, ICC2F As Double
Dim ICCFTmax As Double, ICCFTmin As Double

ICC3F = i_base / z1pu


ICC2F = ICC3F * (Sqr(3) / 2)
ICCFTmax = (3 * i_base) / Sqr((r0pu + r1pu + r2pu) ^ 2 + (x0pu + x1pu
+ x2pu) ^ 2)
ICCFTmin = (3 * i_base) / Sqr((r0pu + r1pu + r2pu + 3 * z_contato_pu) ^
2 + (x0pu + x1pu + x2pu) ^ 2)
' 6. Constantes de tempo e fator de assimetria
Dim Ct1 As Double, Ct2 As Double, Ct3 As Double
Dim Fa1 As Double, Fa2 As Double, Fa3 As Double

If r1pu > 0 Then


Ct1 = (x1pu / (377 * r1pu)) * 1000
Fa1 = Sqr(1 + 2 * Exp(-(2 * t) / Ct1))
Else
Ct1 = 0: Fa1 = 1
End If

If (r0pu + r1pu + r2pu) > 0 Then


Ct2 = ((x0pu + x1pu + x2pu) / (377 * (r0pu + r1pu + r2pu))) * 1000
Fa2 = Sqr(1 + 2 * Exp(-(2 * t) / Ct2))
Else
Ct2 = 0: Fa2 = 1
End If

If (r0pu + r1pu + r2pu + 3 * z_contato_pu) > 0 Then


Ct3 = ((x0pu + x1pu + x2pu) / (377 * (r0pu + r1pu + r2pu + 3 *
z_contato_pu))) * 1000
Fa3 = Sqr(1 + 2 * Exp(-(2 * t) / Ct3))
Else
Ct3 = 0: Fa3 = 1
End If

' 7. Correntes de curto assimétricas


Dim ICCA3F As Double, ICCA2F As Double
Dim ICCAFTmax As Double, ICCAFTmin As Double

ICCA3F = ICC3F * Fa1


ICCA2F = ICC2F * Fa1
ICCAFTmax = ICCFTmax * Fa2
ICCAFTmin = ICCFTmin * Fa3

' 8. Escrita dos resultados nas células mescladas


[Link]("D23:L23").Value = ICC3F
[Link]("P23:X23").Value = ICC2F
[Link]("AB23:AJ23").Value = ICCFTmax
[Link]("AN23:AV23").Value = ICCFTmin

[Link]("D28:L28").Value = ICCA3F
[Link]("P28:X28").Value = ICCA2F
[Link]("AB28:AJ28").Value = ICCAFTmax
[Link]("AN28:AV28").Value = ICCAFTmin

[Link] "? Correntes simétricas e assimétricas calculadas e


inseridas."

End Sub

Você também pode gostar