Você está na página 1de 20

Implementando Bibliotecas para o SCDE - CCEE

Implementando Bibliotecas para o SCDE - CCEE


1. Objetivo
O Objetivo deste documento mostrar detalhadamente, como construir uma biblioteca, dentro do
software Elipse E, para reali!ar a coleta de dados de medidores de ener"ia para o SCDE #Sistema de
Coleta de Dados de Ener"ia$ da CCEE #C%mara de Comerciali!a&'o de Ener"ia Eltrica$(
2.Pr-reqisitos
Deve ser usada a vers'o )(* do E, atualmente em uso na CCEE( + refer,ncia deste documento de
+"osto de )--.( Devem-se ter dispon/veis os se"uintes ar0uivos para a elabora&'o de uma nova biblioteca1
2ib+cesso(2IB
2ib2o"(2IB
2ib3istorico(2IB
O driver de comunica&'o utili!ado deve ser baseado no IO4I5 da Elipse, vers'o 6(6, 0ue instalado
juntamente com a vers'o )(* do E Build 67-( O Sistema Operacional utili!ado no ambiente da CCEE
8indows )-- Server, S96(
!.Cria"#o do Objeto
Deve ser criado um ar0uivo 2IB independente a partir do E Studio, e nele inserido um :object
#Objeto de Dados$ 0ue ser; respons;vel por fa!er a coleta(
Devem ser declaradas 0uatro propriedades para o objeto, conforme e<posto abai<o1
$i%ra 1 & Propriedades obri%at'rias do (Object
=o :Object necess;ria a e<ist,ncia de 0uatro objetos descritos abai<o1
$i%ra 2 & Estrtra do (Object
> obri"at?rio 0ue todos os objetos acima sejam inseridos no pr?prio :Object e n'o em subdiret?rio(
Driver de Comnica"#o
O Driver de comunica&'o o m?dulo do E 0ue possibilita a comunica&'o com um determinado
e0uipamento usando os drivers com e<tens'o (dll, normalmente fornecidos pela Elipse Software(
)edidorCon*i%
O objeto @edidorConfi" respons;vel por tratar as informa&Aes de cone<'o com medidor e de status
da coleta(
Com os dados da propriedade Comm9arams, o driver confi"urado e ativado( +s informa&Aes da
propriedade Data9arams s'o separadas uma a uma nas propriedades do pr?prio objeto @edidorConfi"(
+o receber a informa&'o 0ue o medidor foi conectado a propriedade 9odeIniciar recebe o valor B5rueC
indicando 0ue a rotina de coleta por ser iniciada(
6
Implementando Bibliotecas para o SCDE - CCEE
O status da coleta pode ser verificado atravs da propriedade StatusColeta( +o iniciar o processo de
coleta essa propriedade recebe o valor -- e assim 0ue a comunica&'o com o medidor for estabelecida, ela
recebe o valor -*( Caso ocorra erro de comunica&'o com o medidor ou o tempo de coleta ultrapasse o
limite estabelecido StatusColeta recebe o valor -)( Duando a coleta for finali!ada com sucesso, a
propriedade recebe o valor 6)( Se for recebido um pedido de status da coleta de um medidor 0ue n'o est;
sendo coletado no momento ser; retornado o status -7(
+s propriedades do objeto s'o1
+ome ,ipo Descri"#o
+cesso@eio
Inte"er
Indica o retorno de acesso ao meio de comunica&'o
Codi"oErro
Inte"er
C?di"o do Erro
Comm9arams
Eariant
+rraF de par%metros de comunica&'o
Conectado
Inte"er
Indica o status de acesso ao meio de comunica&'o
Data3oraGinal
Date
Data e hora final dos dados a serem coletados
Data3oraInicial
Date
Data e hora inicial dos dados a serem coletados
Data9arams
Eariant
+rraF de par%metros de dados
DoisDuadrantes
Boolean
5rue1 @edidor )D( Galse1 @edidor HD
Envia-*
Boolean
Envia o Status de Coletando
EnviaDadosColeta
Boolean
Gim de Coleta( Envia os dados da coleta
GimColeta
Boolean
Indica o fim de coleta
Ginali!ouComErro
Boolean
Indica se a coleta terminou com erro ou n'o
3oraInicioColeta
Date
3ora 0ue iniciou a coleta
I9
Strin"
I9 do medidor
@eioGisico
Strin"
@eio f/sico de comunica&'o #Ethernet, @odem, I+S, Serial$
=umero@+E
Strin"
C?di"o @+E do medidor
=umeroSerie
Strin"
=umero de serie do medidor
9odeIniciar
Boolean
Indica se pode iniciar a coleta
9orta
8ord
9orta de cone<'o do medidor
IesCol
2on"
=Jmero da re0uisi&'o da coleta
StatusColeta
Inte"er
-- #iniciou$, -) #finali!ou com erro$, -* #coletando$, -7
#sem coleta$ ou 6) #finali!ou O4$
Status9arams
Eariant
Ietorno da tentativa de estabelecimento de comunica&'o
Status:@2
Eariant
+r0uivo :@2 com os c?di"os de erro da comunica&'o
5elefone
Strin"
5elefone do medidor
5ipoColeta
Strin"
Descri&'o do 5ipo de Coleta
5pComp9erdas
Inte"er
5ipo de compensa&'o de perdas habilitado para o medidor
,abela 1 & Propriedades do )edidorCon*i%
-o%
O objeto 2o" respons;vel por padroni!ar os lo"s da coleta( 9ossui passos pr-definidos sendo
al"uns obri"at?rios em todas as bibliotecas e outros opcionais( 5ambm poss/vel inserir te<tos n'o
definidos na biblioteca(
+s propriedades do objeto s'o1
+ome ,ipo Descri"#o
+r0uivo
Eariant
Objeto +r0uivo #uso interno$
ComErro
Boolean
Informa se a coleta finali!ou com erro
DataGinal
Date
Data e hora final da coleta
DataInicial
Date
Data e hora inicial da coleta
Diretorio
Strin"
Diretorio onde o lo" ser; criado
Krava
Boolean
Escreve uma linha no lo"
)
Implementando Bibliotecas para o SCDE - CCEE
+ome ,ipo Descri"#o
=ome2o"
Strin"
=ome do ar0uivo 5:5
9asso
Inte"er
9asso da coleta
5e<to
Strin"
5e<to a ser escrito
,abela 2 & Propriedades do objeto -o%
obj.istorico
O objeto obj3istorico utili!ado para criar o ar0uivo <ml( 5odos os dados coletados devem ser
passados a este objeto(
+s propriedades do objeto s'o detalhadas no item H(*(
/.Con*i%ra"#o
4.1. Driver de Comunicao
+ome
O nome desse objeto obri"atoriamente BDriver6C(
Protocolo
9ara determinar o protocolo de comunica&'o a ser usado, basta clicar na propriedade
DriverLocation e locali!ar o ar0uivo dll(
)eio $0sico
+s confi"ura&Aes do driver s'o feitas em e<ecu&'o atravs do objeto @edidorConfi" da biblioteca
2ib+cesso(
+o ser criado, o objeto medidor recebe as informa&Aes referentes L coleta e o meio f/sico nas
propriedades Comm9arams e Data9arams( Essas informa&Aes devem ser passadas ao objeto
@edidorConfi"( =o evento +fterStart#$ do driver, insira o se"uinte script1
Parent.Item("MedidorConfig1").CommParams = Parent.CommParams
Parent.Item("MedidorConfig1").DataParams = Parent.DataParams
1rqivo de -o% do driver
=a janela de confi"ura&Aes do driver , acesse a aba Setup e desabilite a cria&'o do ar0uivo de lo"(
O ar0uivo de lo" ser; criado em uma pasta espec/fica para esse protocolo e o nome do lo" ter; a data do
dia da coleta( =o evento +fterStart#$, insira o se"uinte script1
'NomeLog
Dim Comm_arr(2)
MyDate=Now
NomeData=ig!t("""#Day(MyDate)$2)#ig!t(""" # Mont!(MyDate)$2) # C%tr(&ear(MyDate))
Comm_arr(1)='rray("I(.Log.)i*eName"$"+,-+.Logs-NomeProto/o*o-Dri0er"#Parent.Name#"_
"#NomeData#".*og")
Comm_arr(2) = 'rray("I(.Log.+na1*e"$tr2e)
3rite 41$ "$ "$ .$ Comm_arr
4.2. Tags de Comunicao
Os ta"s de comunica&'o s'o criados conforme a necessidade do protocolo, sendo obri"at?rios dois
ta"s1
StatsComnicacao
StatusComunicacao um bloco de comunica&'o de H elementos com a confi"ura&'o1 #-6,-,-,6$ (
Este bloco retorna eventos do driver "erados por v;rias fontes do IO4it #veja +p,ndice I M Eventos do
IO4it para a lista de todos os eventos "erados pelo IO4it$ e apenas leitura( + propriedade timestamp do
bloco informa o instante 0ue o evento ocorreu(

Implementando Bibliotecas para o SCDE - CCEE


+s informa&Aes obtidas por esse bloco, devem ser passadas para a propriedade Status9aram do
objetos @edidorConfi"( =o evento OnIead do bloco, crie o se"uinte script1
dim %tat2s_Comm(5)
%tat2s_Comm(1) = Item("6y7e").8a*2e
%tat2s_Comm(2) = Item("%o2r/e").8a*2e
%tat2s_Comm(.) = Item("Code").8a*2e
%tat2s_Comm(5) = Item("Message").8a*2e
(9:.Item("MedidorConfig1").%tat2sParam = %tat2s_Comm
Onde OBN o nome do :Object criado(
1cesso)eio
+cesso@eio um ta" de comunica&'o com a confi"ura&'o #-6,-,-,H$ 0ue informa o status atual do
driver1 OGG2I=E ou O=2I=E(
4.3. MedidorConfig
Crie uma associa&'o na propriedade +cesso@eio com a propriedade Ealue do ta" +cesso@eio para
informar para o objeto @edidorConfi" o status do n/vel f/sico da comunica&'o1
$i%ra ! & -in2 com a propriedade 1cesso)eio
9ara sinali!ar o fim da coleta, crie uma associa&'o na propriedade GimColeta do @edidorConfi" com
a propriedade GimColeta do :Object(
$i%ra / - -in2 com a propriedade $imColeta
+ associa&'o com a propriedade GimColeta obri"atoriamente bidirecional pois o objeto
@edidorConfi" pode for&ar o fim da coleta por e<cesso de tempo ou 0ueda na comunica&'o(
Informe na propriedade =umeroSerie o ta" de comunica&'o 0ue retorna o numero serial do medidor(
Essa informa&'o ser; e<ibida na interface "r;fica(
$i%ra 3 & -in2 com a propriedade +meroSerie
+s demais informa&Aes s'o recebidas atravs dos scripts feitos no objeto driver(
4.4. Log
O objeto 2o" precisa das informa&Aes do objeto @edidorConfi"1 Ginali!ouComErro, Data3oraInicial e
Data3oraGinal( Crie as associa&Aes necess;rias como mostra a fi"ura abai<o1
$i%ra 4 & -in2s obri%at'rios do obj-o%
Confi"ure a propriedade Diret?rio com o nome do diret?rio criado na pasta E1OE2o"s para arma!enar
os lo"s referentes L coleta desse objeto(
Durante a l?"ica da coleta, devem ser acrescentadas linhas de scripts informando o passo da coleta
conforme a 5abela (
Passo )ensa%em
Obri"at?rios
6 Iecebe par%metros de confi"ura&'o
)
Gim da coleta O4
Gim da coleta com Erro
Erro de comunica&'o
H Intervalo de Coleta1 P DataInicial P a P DataGinal
H
Implementando Bibliotecas para o SCDE - CCEE
Passo )ensa%em
9ar%metros
6- Iniciou Coleta de 9ar%metros
66 5erminou Coleta de 9ar%metros
6) Kravou 9ar%metros
6 =Jmero @+E
6H =Jmero Serial
6* Iela&'o do 5ransformador
67 9er/odo de inte"ra&'o
6. +certo de rel?"io
6Q Iela&'o 59
6R Iela&'o 5C
Ener"ia
)- Iniciou Coleta de Ener"ia
)6 5erminou Coleta de Ener"ia
Eventos
- Iniciou Coleta de Eventos
6 5erminou Coleta de Eventos
Dualidade H- Iniciou Coleta de Dualidade
H6 5erminou Coleta de Dualidade
En"enharia
*- Iniciou Coleta de En"enharia
*6 5erminou Coleta de En"enharia
Interrup&'o
7- Iniciou Coleta de Interrup&Aes
76 5erminou Coleta de Interrup&Aes
,abela ! & Passos de coleta
Passos obri%at'rios
Passo 15 Evento +fterStart#$ do Driver6
'L(;, e/e1e 7ar<metros de /onfig2ra=>o
Parent.Item("Log1").Passo = 1
Passo 25 =o evento OnGimColetaChan"ed#$ da propriedade GimColeta do :Object
if )imCo*eta t!en
'Log, )im da Co*eta
Item("Log1").Passo = 2
end if
Passo !5 Evento OnCommError do Driver
'Log, +rro de /om2ni/a=>o
Parent.Item("Log1").Passo = .
Passo /5 Dual0uer evento ap?s a propriedade 9odeIniciar do @edidorConfi" estiver em 5rue
'Log, Inter0a*o de /o*eta
Parent.Parent.Item("Log1").Passo=5
9ara escrever um te<to 0ue n'o est; definido em um passo, basta inserir na propriedade 5e<to e em
se"uida for&ar a propriedade Krava para 5rue( E<emplo1
Log.6e?to = @(L'A
Log.;ra0a = 6r2e
4.5. Objis!"rico
O objeto obj3istorico deve receber os valores 0ue ser'o inseridos no ar0uivo <ml( Os valores podem
ser passados atravs de scripts ou associa&Aes(
+s bibliotecas desenvolvidas para medidores de dois 0uadrantes devem dei<ar a propriedade
DoisDuadrantes em 5rue(
*
Implementando Bibliotecas para o SCDE - CCEE
9ara "ravar um re"istro, deve-se for&ar para 5rue a propriedade Krava correspondente1
Krava+larmes
KravaEner"ia
KravaEner"iaComp
KravaEn"enharia
Krava9arametros
KravaDualidade
Cada propriedade Krava, insere um re"istro numa se&'o espec/fica do <ml, sendo 0ue os valores
"ravados s'o a0ueles 0ue est'o nas propriedades do obj3istorico(
1larmes
Propriedade ,ipo Descri"#o
@=SInte"racaoS+larmes Date5ime 5imeStamp #obri"at?rio$
=umeroS9rioridade Double 9rioridade do alarme
CDSCausa 5e<to C?di"o numrico do alarme
DSSCausa 5e<to Descri&'o do alarme
CDSEfeito 5e<to C?di"o numrico do detalhamento do alarme
DSSEfeito 5e<to Descri&'o do detalhamento do alarme
,abela / & Dados de Eventos
+ propriedade =umeroS9rioridade s? ser; "ravada se for diferente de -( +s demais propriedades
ser'o inseridas no :@2 se forem diferentes de va!io(
Ener%ia
Propriedade ,ipo Descri"#o
@=SInte"racaoSEner"ia Date5ime 5imeStamp #obri"at?rio$
+tivaIn Double Ener"ia +tiva recebida #T8h$
+tivaOut Double Ener"ia +tiva fornecida #T8h$
IeativaIn Double Ener"ia reativa recebida #TE+rh$
IeativaOut Double Ener"ia reativa fornecida #TE+rh$
,abela 3 & Dados de Ener%ia
9ara os medidores de dois 0uadrantes, ser'o "ravados apenas os campos +tivaIn e IeativaIn( 9ara
os medidores de 0uatro 0uadrantes ser'o inseridos todos os campos(
Ener%ia Compensada
Propriedade ,ipo Descri"#o
@=SInte"racaoSEner"iaComp Date5ime 5imeStamp #obri"at?rio$
+tivaInComp Double Ener"ia +tiva recebida com compensa&'o de perdas #T8h$
+tivaOutComp Double Ener"ia +tiva fornecida com compensa&'o de perdas #T8h$
IeativaInComp Double Ener"ia reativa recebida com compensa&'o de perdas #TE+rh$
IeativaOutComp Double Ener"ia reativa fornecida com compensa&'o de perdas #TE+rh$
,abela 4 - Dados de Ener%ia Compensada
9ara os medidores de dois 0uadrantes, ser'o "ravados apenas os campos +tivaInComp e
IeativaInComp( 9ara os medidores de 0uatro 0uadrantes ser'o inseridos todos os campos(
En%en6aria
Propriedade ,ipo Descri"#o
@=SInte"racaoSEn"enharia Date5ime 5imeStamp #obri"at?rio$
7
Implementando Bibliotecas para o SCDE - CCEE
Propriedade ,ipo Descri"#o
5ensaoGase+ Double
5ens'o prim;ria fase + #Eolts$
5ensaoGaseB Double 5ens'o prim;ria fase B #Eolts$
5ensaoGaseC Double 5ens'o prim;ria fase C #Eolts$
CorrenteGase+ Double Corrente prim;ria fase + #+mpere$
CorrenteGaseB Double Corrente prim;ria fase B #+mpere$
CorrenteGaseC Double Corrente prim;ria fase C #+mpere$
,abela 7 & Dados de En%en6aria
5odos os campos s'o inseridos no ar0uivo :@2 de coleta(
Par8metros
Propriedade ,ipo Descri"#o
=umeroSerie 5e<to =Jmero de srie do medidor
ID@+E 5e<to C?di"o do medidor no SCDE #6H d/"itos$
ID@+ES9edidoColeta 5e<to C?di"o do medidor no SCDE recebido no pedido de coleta
Ielacao599ri Double 5ens'o 9rim;ria do 59 parametri!ada no medidor #Eolts$
Ielacao59Sec Double 5ens'o Secund;ria do 59 parametri!ada no medidor #Eolts$
Ielacao5C9ri Double Corrente 9rim;ria do 5C parametri!ada no medidor #+mpere$
Ielacao5CSec Double Corrente Secund;ria do 5C parametri!ada no medidor #+mpere$
CteInte"racaoEner"ia Double Intervalo de re"istro da ener"ia #se"undos$
CteInte"racaoEner"iaComp Double Intervalo de re"istro da ener"ia compensada #se"undos$
CteInte"racaoEn"enharia Double Intervalo de re"istro da 5ens'o e Corrente #se"undos$
Ielacao59 Double Iela&'o do 59 parametri!ada no medidor
Ielacao5C Double Iela&'o do 5C parametri!ada no medidor
,abela 9 & Dados de Par8metros
Os campos =umeroSerie, ID@+E, ID@+ES9edidoColeta e as CteInte"racao #Ener"ia, Ener"iaComp
e En"enharia$ sempre ser'o "ravados( Os demais campos ser'o inseridos apenas se forem diferentes de -(
:alidade
Propriedade ,ipo Descri"#o
@=SInte"racaoSDualidade Date5ime 5imeStamp #obri"at?rio$
DuracaoDisturbio Double Durao em milisegundos (ms) do evento
Swell6 Double
Tenso mxima ocorrida na fase A (fase-neutro) em valores
primrios (volts com 2 casas decimais), no caso de um
S!""
Sa"6 Double
Tenso m#nima ocorrida na fase A (fase-neutro) em valores
primrios (volts com 2 casas decimais), no caso de um SA$
Swell) Double
Tenso mxima ocorrida na fase % (fase-neutro) em valores
primrios (volts com 2 casas decimais), no caso de um
S!""
Sa") Double
Tenso m#nima ocorrida na fase % (fase-neutro) em valores
primrios (volts com 2 casas decimais), no caso de um SA$
Swell Double
Tenso mxima ocorrida na fase & (fase-neutro) em valores
primrios (volts com 2 casas decimais), no caso de um
S!""
Sa" Double
Tenso m#nima ocorrida na fase & (fase-neutro) em valores
primrios (volts com 2 casas decimais), no caso de um SA$
Disturbio=ominal Double
'alor da tenso de refer(ncia (fase-neutro) em valores
primrios (volts com 2 casas decimais) parametri)ada no
medidor
.
Implementando Bibliotecas para o SCDE - CCEE
Propriedade ,ipo Descri"#o
2imiteSa" Double
'alor da tenso m#nima (fase-neutro) em valores primrios
(volts com 2 casas decimais) parametri)ada no medidor
2imiteSwell Double
'alor da tenso mxima (fase-neutro) em valores primrios
(volts com 2 casas decimais) parametri)ada no medidor
,abela ; & Dados de :alidade
5odos os campos s'o inseridos no ar0uivo :@2 de coleta(
3.Coleta dos Dados
O E a"uarda um pedido de coleta atravs do m?dulo Driver:@2( +o receber um pedido criado em
e<ecu&'o o objeto do tipo do protocolo pedido e passado a ele todas as informa&Aes necess;rias para
conectar ao medidor e e<ecutar a coleta(
+ cria&'o do objeto ocorre dentro do m?dulo Driver:@2 e para cada novo objeto inserido no sistema,
o m?dulo dever; ter o script modificado para receber o novo medidor(
+s informa&Aes referentes ao meio f/sico, s'o passadas atravs do vetor CommSarr1
Dim Comm_arr(B)
Comm_arr(1) = 'rray("I(.6y7e"$iMeio)isi/o)
Comm_arr(2) = 'rray("I(.+t!ernet.MainIP"$IPMdr)
Comm_arr(.) = 'rray("I(.+t!ernet.MainPort"$PortMdr)
Comm_arr(C) = 'rray(Medidor'ddress%tring$address)
Comm_arr(5) = 'rray("I(.%eria*.9a2date"$DE"")
Comm_arr(E) = 'rray("I(.'%.Fs2arioPPP"$Fs2arioPPP)
Comm_arr(G) = 'rray("I(.'%.%en!aPPP"$%en!aPPP)
Comm_arr(B) = 'rray("I(.'%.PortaC(M"$PortaC(M)
E as informa&Aes referentes L coleta s'o passados atravs do vetor dataSarr1
Dim data_arr(B)
data_arr(1) = esCo*
data_arr(2) = N2meroMae
data_arr(.) = 6i7oCo*eta
data_arr(5) = 'ddress
data_arr(C) = DoisH2adrantes
data_arr(E) = Com7Perdas
data_arr(G) = DataIni
data_arr(B) = Data)im
Depois de criado, o objeto medidor recebe nas propriedades Comm9arams e Data9arams os vetores
CommSarr e dataSarr, respectivamente(
o1IMedidor.CommParams = Comm_arr
o1IMedidor.DataParams = data_arr
Esses dados ser'o passados ao driver de comunica&'o atravs do script mencionado no item H(6( Os
status da cone<'o ser'o capturados pelo objeto @edidorConfi"(
+ coleta dos dados s? pode ser iniciada depois 0ue a propriedade 9odeIniciar do objeto
@edidorConfi" estiver em 5rue(
O primeiro passo coletar os dados de par%metros( +p?s a coleta dos par%metros, coletam-se os
eventos e em se"uida deve-se verificar o tipo da coleta informado na propriedade 5ipoColeta do
@edidorConfi"1
,ipoColeta Si%ni*icado Ener%ia En%en6aria :alidade
)E @edi&'o : : --
)E<:EE
@edi&'o e
Dualidade
: : :
:EE Dualidade -- -- :
1=D +uditoria : -- --
,abela 1> & ,ipo de Coleta
+ Jltima etapa verificar o hor;rio do medidor e "ravar a informa&'o no lo" da coleta(
Q
Implementando Bibliotecas para o SCDE - CCEE
5.1. #ar$me!ros
Coletar, se poss/vel1
6( =umero @+E #ID@+E$
)( =Jmero Serial #=umeroSerie$
( 5ens'o prim;ria do 59 #Ielacao599ri$
H( 5ens'o secund;ria do 59 #Ielacao59Sec$
*( Corrente prim;ria do 5C #Ielacao5C9ri$
7( Corrente secund;ria do 5C #Ielacao5CSec$
.( Iela&'o do 59 #Ielacao59$
Q( Iela&'o do 5C #Ielacao5C$
R( Ealor da constante de inte"ra&'o de Ener"ia #CteInte"racaoEner"ia$
6-( Ealor da constante de inte"ra&'o de Ener"ia Compensada#CteInte"racaoEner"iaComp$
66( Ealor da constante de inte"ra&'o de En"enharia #CteInte"racaoEn"enharia$
Os campos 6 e ) s'o obri"at?rios( +p?s verificar 0ue possui todos os dados de par%metros poss/veis,
e<ecutar o script1
o1IJist.;ra0aParametros = tr2e
onde obj3ist o objeto obj3istorico inserido na biblioteca(
5.2. %nergia
+o "ravar os dados de ener"ia, deve-se verificar a propriedade 5pComp9erdas do objeto
@edidorConfi"( Essa propriedade informa os tipos de ener"ia 0ue devem ser "ravadas1
,pCompPerdas Descri"#o Ener%ia Compensada
2>>1 Ener"ia n'o compensada : --
2>>2 Ener"ia compensada -- :
2>>! Ener"ia Bruta U Ener"ia 2/0uida : :
,abela 11 & Compensa"#o de Perdas
E<emplo1
'Jistori/o +nergia
if 67Com7Perdas=2""1 ( 67Com7Perdas=2"". t!en
o1IJist.;ra0a+nergia = 6r2e
end if
'Jistori/o +nergia Com7ensada
if 67Com7Perdas=2""2 ( 67Com7Perdas=2"". t!en
o1IJist.;ra0a+nergiaCom7 = 6r2e
end if
onde obj3ist o objeto obj3istorico inserido na biblioteca(
5.3. %ngen&aria
Karantir 0ue os dados de tens'o e corrente sejam "ravados na unidade certa( 9ode-se, por e<emplo,
criar e<pressAes nos campos de associa&'o(
$i%ra 7 & -in2 com as propriedades de tens#o de *ase
E<emplo1
'Dados de +ngen!aria
o1IJist.;ra0a+ngen!aria = 6r2e
onde obj3ist o objeto obj3istorico inserido na biblioteca(
R
Implementando Bibliotecas para o SCDE - CCEE
5.4. %ven!os
Coletar todos os eventos e<istentes na mem?ria de massa( Os dados de alarmes n'o s'o
obri"at?rios(
E<emplo1
'Dados de a*armes
o1IJist.;ra0a'*armes = 6r2e
onde obj3ist o objeto obj3istorico inserido na biblioteca
5.5. 'ua(idade
Coletar os dados de 0ualidade referentes ao intervalo pedido( Os campos de Dualidade n'o s'o
obri"at?rios(
E<emplo1
'Dados de K2a*idade
o1IJist.;ra0aH2a*idade = 6r2e
onde obj3ist o objeto obj3istorico inserido na biblioteca
5.). or*rio do Medidor
Se"uir os se"uintes passos1
2er o hor;rio no medidorV
Eerificar se est; defasado em mais de 7- se"undos em rela&'o ao servidor e inserir no
lo" a informa&'o da hora e se est; ou n'o defasadoV
Ginali!ar coleta(
4.E?emplo
).1. Configurao do +Objec!
=a pasta C1OE@+E criar uma nova aplica&'o do tipo Bibliotecas de componentes do E chamada
2ibE<emplo e inserir um :Object chamado OBN(
=o OBN, criar 0uatro propriedades conforme mostrado na Gi"ura Q(
$i%ra 9 & Propriedades do OB@
=o Studio, abrir os projetos 2ib+cesso(lib, 2ib3istorico(lib e 2ib2o"(lib(
Inserir 0uatro objetos no :Object1 Driver de comunica&'o, 2o", @edidorConfi" e obj3istorico(
$i%ra ; & Estrtra do OB@
6-
Implementando Bibliotecas para o SCDE - CCEE
).2. Driver de Comunicao
9ara determinar o protocolo de comunica&'o a ser usado, deve ser selecionada na propriedade
DriverLocation o ar0uivo dll( Se a propriedade DriverName for preenchida automaticamente, o driver foi
carre"ado com sucesso(
=a janela de confi"ura&Aes do driver , acessar a aba Setup e confi"urar o nJmero de retentativas
de cone<'o e habilitar a op&'o BStart driver OGG2I=EC( Essa ultima op&'o necess;ria para poder alterar os
par%metros de cone<'o em e<ecu&'o(
$i%ra 1> & 1ba Setp das con*i%ra"Aes do driver
9ara 0ue as confi"ura&Aes do driver sejam feitas em e<ecu&'o atravs do objeto @edidorConfi",
deve ser passado as informa&Aes recebidas nas propriedades Comm9arams e Data9arams para este
objetos atravs de script( =o evento +fterStart#$, inserir o se"uinte script1
'NomeLog
Dim Comm_arr(2)
MyDate=Now
NomeData=ig!t("""#Day(MyDate)$2)#ig!t(""" # Mont!(MyDate)$2) # C%tr(&ear(MyDate))
Comm_arr(1)='rray("I(.Log.)i*eName"$"+,-+.Logs-NomeProto/o*o-Dri0er"#Parent.Name#"_
"#NomeData#".*og")
Comm_arr(2) = 'rray("I(.Log.+na1*e"$tr2e)
3rite 41$ "$ "$ .$ Comm_arr
Parent.Item("MedidorConfig1").CommParams = Parent.CommParams
Parent.Item("MedidorConfig1").DataParams = Parent.DataParams
'L(;, e/e1e 7ar<metros de /onfig2ra=>o
Parent.Item("Log1").Passo = 1
).3. Tags de Comunicao
E<istem dois ta"s 0ue s'o obri"at?rios1 o StatusComunicacao, 0ue um bloco de comunica&'o de H
elementos com a confi"ura&'o1 #-6,-,-,6$ e o +cesso@eio, 0ue um ta" de comunica&'o com a
confi"ura&'o #-6,-,-,H$( +s leituras dos ta"s ficam habilitadas e as escritas desabilitadas( Ienomear os
elementos do bloco StatusComunicacao para facilitar os scripts(
66
Implementando Bibliotecas para o SCDE - CCEE
$i%ra 11 & ,a%s de comnica"#o obri%at'rios
9ara passar as informa&Aes obtidas pelo bloco StatusComunicacao para a propriedade Status9aram
do @edidorConfi", criar no evento OnIead do pr?prio bloco o script abai<o1
dim %tat2s_Comm(5)
%tat2s_Comm(1) = Item("6y7e").8a*2e
%tat2s_Comm(2) = Item("%o2r/e").8a*2e
%tat2s_Comm(.) = Item("Code").8a*2e
%tat2s_Comm(5) = Item("Message").8a*2e
Parent.Parent.Item("MedidorConfig1").%tat2sParam = %tat2s_Comm
Os ta"s de comunica&'o s'o criados conforme a necessidade do protocolo( +s confi"ura&Aes de cada
ta" s'o e<plicadas no manual do driver(
Supondo 0ue o driver tenha a se"uinte estrutura1
$i%ra 12 - Estrtra do driver de comnica"#o
Cada pasta contm al"uns ta"s espec/ficos1
$i%ra 1! - ,a%s da pasta Par8metros
$i%ra 1/ - ,a%s da pasta Ener%ia
6)
Implementando Bibliotecas para o SCDE - CCEE
$i%ra 13 - ,a%s da Pasta En%en6aria
$i%ra 14 - ,a%s da pasta Eventos
$i%ra 17 - ,a%s da pasta :alidade
$i%ra 19 & ,a%s da pasta Bel'%io
).4. MedidorConfig
O objeto @edidorConfi" precisa de duas informa&Aes1 o status do n/vel f/sico da comunica&'o e se a
coleta finali!ou( Como esses dados est'o no ta" +cesso@eio e na propriedade GimColeta do OBN, criar
associa&Aes para passar estas informa&Aes(
9ara 0ue a interface "r;fica e<iba o nJmero de srie coletado do medidor, necess;rio passar essa
informa&'o para o @edidorConfi"(
6
Implementando Bibliotecas para o SCDE - CCEE
$i%ra 1; - 1ssocia"Aes do objeto )edidorCon*i%
).5. Log
Crie um diret?rio na pasta E1OE2o"s com o nome do protocolo para arma!enar os lo"s referentes L
coleta desse objeto( O obj2o" necessita das associa&Aes mostradas na Gi"ura )- e 0ue seja confi"urada a
propriedade Diret?rio com o nome da pasta criada(
$i%ra 2> & 1ssocia"Aes do obj-o%
+p?s confi"urar o obj2o", adicionar os scripts para re"istrar no ar0uivo de lo" os passos obri"at?rios1
Passo 15 =o evento +fterStart#$ do Driver6, adicionar mais duas linhas
'L(;, e/e1e 7ar<metros de /onfig2ra=>o
Parent.Item("Log1").Passo = 1
Passo 25 =o evento OnGimColetaChan"ed#$ da propriedade GimColeta do OBN, criar o script1
if )imCo*eta t!en
'Log, )im da Co*eta
Item("Log1").Passo = 2
end if
Passo !5 =o evento OnCommError do Driver1
'Log, +rro de /om2ni/a=>o
Parent.Item("Log1").Passo = .
Passo /5 Dual0uer evento ap?s a propriedade 9odeIniciar do @edidorConfi" estiver em 5rue
#e<emplo na se&'o 7(. $
'Log, Inter0a*o de /o*eta
Parent.Parent.Item("Log1").Passo=5
).). Objis!"rico
=o objeto obj3istorico associar os ta"s 0ue passar'o os valores 0ue ser'o inseridos no ar0uivo <ml
com as suas respectivas propriedades( E<emplo1
$i%ra 21 & E?emplo de associa"Aes do obj.istorico
='o se es0uecer de confi"urar corretamente os campos ID@+E( + propriedade ID@+ES9edidoColeta
deve receber a informa&'o do c?di"o do medidor informado no pedido da coleta e a propriedade ID@+E
deve informar o c?di"o lido do medidor(
$i%ra 22 & E?emplo de associa"Aes
6H
Implementando Bibliotecas para o SCDE - CCEE
).,. Co(e!a dos dados
9ara facilitar a l?"ica, criar no OBN um Servidor de Dados chamado IotinasColeta e dentro dele um
ta" interno chamado @ascaraColeta 0ue possui valor inicial i"ual a -( 5oda a l?"ica de coleta ser; escrita
neste ta" e as informa&Aes de cada passo ser'o inseridas no ar0uivo de lo" atravs do objeto 2o"6(
$i%ra 2! - Estrtra do OB@
+ coleta s? pode ser iniciada depois 0ue a propriedade 9odeIniciar do objeto @edidorConfi" estiver
em 5rue( Crie um ta" Interno na pasta IotinasColeta chamado IniciaColeta #valor inicial i"ual a Galse$ e no
objeto @edidorConfi", crie uma associa&'o reversa na propriedade 9odeIniciar com o ta" IniciaColeta(
$i%ra 2/
=o ta" IniciaColeta, crie um evento de usu;rio 0ue ocorre 0uando o valor do ta" for 5rue(
neste evento, force o valor do ta" @ascaraColeta para 61
%21 Ini/iaCo*eta_PodeIni/iar()
'Log, Inter0a*o Co*eta
Parent.Parent.Item("Log1").Passo = 5
'Mas/ara Co*eta
Parent.Item("Mas/araCo*eta").8a*2e = 1
+nd %21
+ coleta dos dados come&a com a leitura dos par%metros( Duando o ta" @ascaraColeta for i"ual a 6,
habilitar a leitura dos ta"s de par%metros( Crie no ta" um novo evento chamado OnChan"e 0ue ocorre toda
ve! 0ue o seu valor for alterado1
6*
Implementando Bibliotecas para o SCDE - CCEE
$i%ra 23 - Evento OnC6an%e do ta% )ascaraColeta
=o evento OnChan"e, inserir1
set Dri0er = Parent.Parent.Item("Dri0er1")
set MedidorConfig = Parent.Parent.Item("MedidorConfig1")
set o1ILog = Parent.Parent.Item("Log1")
se*e/t /ase 8a*2e
Case 1
'Leit2ra de 7ar<metros
for ea/! 6ag in Dri0er.Item("Parametros")
6ag.'**owead = 6r2e
Ne?t
'Log, Ini/io /o*eta de 7ar<metros
o1ILog.Passo = 1"
Crie um se"undo ta" interno chamado 2eu9arametros para verificar se todos os ta"s da pasta
par%metros j; foram lidos( =o evento OnIead de cada ta" da pasta 9ar%metros, for&ar um bit do ta"
2eu9arametros(
=umero@+ESOnIead#$
set Le2Parametros= Parent.Parent.Parent.Item("otinasCo*eta").Item("Le2Parametros")
Le2Parametros.8a*2e = Le2Parametros.8a*2e ( 1
'Log, NLmero M'+
Parent.Parent.Parent.Item("Log1").Passo = 1.
=umeroSerialSOnIead#$
set Le2Parametros= Parent.Parent.Parent.Item("otinasCo*eta").Item("Le2Parametros")
Le2Parametros.8a*2e = Le2Parametros.8a*2e ( 2
'Log, NLmero %eria*
Parent.Parent.Parent.Item("Log1").Passo = 15
Ielacao59SOnIead#$
set Le2Parametros= Parent.Parent.Parent.Item("otinasCo*eta").Item("Le2Parametros")
Le2Parametros.8a*2e = Le2Parametros.8a*2e ( 5
'Log, e*a=>o 6P
Parent.Parent.Parent.Item("Log1").Passo = 1B
Ielacao5CSOnIead#$
set Le2Parametros= Parent.Parent.Parent.Item("otinasCo*eta").Item("Le2Parametros")
Le2Parametros.8a*2e = Le2Parametros.8a*2e ( B
'Log, e*a=>o 6C
Parent.Parent.Parent.Item("Log1").Passo = 1D
CteEner"iaSOnIead#$
set Le2Parametros= Parent.Parent.Parent.Item("otinasCo*eta").Item("Le2Parametros")
Le2Parametros.8a*2e = Le2Parametros.8a*2e ( 1E
67
Implementando Bibliotecas para o SCDE - CCEE
CteEner"iaCompSOnIead#$
set Le2Parametros= Parent.Parent.Parent.Item("otinasCo*eta").Item("Le2Parametros")
Le2Parametros.8a*2e = Le2Parametros.8a*2e ( .2
CteEn"enhariaSOnIead#$
set Le2Parametros= Parent.Parent.Parent.Item("otinasCo*eta").Item("Le2Parametros")
Le2Parametros.8a*2e = Le2Parametros.8a*2e ( E5
Duando o ta" 2eu9arametros for i"ual a 6)., si"nifica 0ue todos os par%metros foram lidos e podem
ser inseridos no <ml( =o ta" 2eu9arametros, criar um evento de usu;rio chamado 5erminou9arametros 0ue
ocorre 0uando o Ealue do ta" i"ual a 6).(
$i%ra 24 - Evento ,erminoParametros criado pelo sCrio
=o evento 5erminou9arametros "ravar os par%metros e for&ar o ta" @ascaraColeta para )1
';ra0a Par<metros
Parent.Parent.Item("o1IJistori/o1").;ra0aParametros = 6r2e
'Log, ;ra0o2 7ar<metros
Parent.Parent.Item("Log1").Passo = 12
'PrM?ima /o*eta
Parent.Item("Mas/araCo*eta").8a*2e = 2
+p?s a coleta dos par%metros, coleta-se os eventos( Inserir al"umas linhas no evento OnChan"e do
ta" @ascaraColeta para habilitar a leitura dos dados de eventos
Case 2
'Log, 6ermino2 /o*eta de 7ar<metros
o1ILog.Passo = 11
'Leit2ra de e0entos
Dri0er.Item("+0entos").Item("Dados+0entos").'**owead = 6r2e
'Log, Ini/io2 /o*eta de +0entos
o1ILog.Passo = ."
+ cada leitura de valores, deve-se "ravar os dados coletados no banco de dados( =o evento OnIead
do bloco DadosEventos, criamos o script1
';ra0a '*armes
Parent.Parent.Parent.Item("o1IJistori/o1").;ra0a'*armes = 6r2e
Duando o ta" StatusEventos for i"ual a 6, si"nifica 0ue terminou a coleta de Eventos( =o evento
OnIead deste ta" for&ar o ta" @ascaraColeta para 1
Parent.Parent.Parent.Item("otinasCo*eta").Item("Mas/araCo*eta").8a*2e = .
Depois da coleta de eventos, deve-se verificar o tipo da coleta informado na propriedade 5ipoColeta
do @edidorConfi" para saber as informa&Aes 0ue precisam ser coletadas1
6.
Implementando Bibliotecas para o SCDE - CCEE
Se o tipo da coleta for DEE, inicia a coleta pelos dados de 0ualidade, se n'o, coleta ener"ia conforme
5abela 6-( =o evento OnChan"e do ta" @ascaraColeta, inserir novas linhas de script1
Case .
'Log, 6ermino2 /o*eta de +0entos
o1ILog.Passo = .1
'+s/o*!e a 7rM?ima /o*eta
if MedidorConfig.6i7oCo*eta = "H++" t!en
'Leit2ra H2a*idade
8a*2e = B
e*se
'Leit2ra de +nergia
8a*2e = 5
end if
9ara coletar os dados de ener"ia, necess;rio informar o intervalo de coleta1
Case 5
'Leit2ra de +nergia
'Passa o inter0a*o de /o*eta
set 'ti0a+nergia = Dri0er.Item("+nergia").Item("'ti0a+nergia")
'ti0a+nergia.Item("DataIni/ia*").8a*2e = MedidorConfig.DataJoraIni/ia*
'ti0a+nergia.Item("Data)ina*").8a*2e = MedidorConfig.DataJora)ina*
'ti0a+nergia.3rite()
'Ja1i*ita a *eit2ra dos dados
Dri0er.Item("+nergia").Item("Dados+nergia").'**owead = 6r2e
'Log, Ini/io2 /o*eta de +nergia
o1ILog.Passo = 2"
+ cada leitura do bloco DadosEner"ia, deve ser verificado atravs da propriedade 5pComp9erdas
0uais os tipos de ener"ia 0ue devem ser "ravadas( =o evento OnIead do bloco, inserir as se"uintes linhas1
set MedidorConfig = Parent.Parent.Parent.Item("MedidorConfig1")
set o1IJist = Parent.Parent.Parent.Item("o1IJistori/o1")
Com7Perdas = MedidorConfig.67Com7Perdas
'2""1 4 +nergia n>o /om7ensada
'2""2 4 +nergia /om7ensada
'2"". 4 +nergia 9r2ta N +nergia LiK2ida
'+nergia
if Com7Perdas=2""1 ( Com7Perdas=2"". t!en
o1IJist.;ra0a+nergia = 6r2e
end if
'+nergia Com7ensada
if Com7Perdas=2""2 ( Com7Perdas=2"". t!en
o1IJist.;ra0a+nergiaCom7 = 6r2e
end if
Duando o ta" StatusEner"ia for i"ual a 6, si"nifica 0ue terminou a coleta de ener"ia( =o evento
OnIead deste ta" for&ar o ta" @ascaraColeta para *1
Parent.Parent.Parent.Item("otinasCo*eta").Item("Mas/araCo*eta").8a*2e = C
Eerificar a pr?<ima coleta1
Case C
'Log, 6ermino2 /o*eta de +nergia
o1ILog.Passo = 21
'+s/o*!e a 7rM?ima /o*eta
if MedidorConfig.6i7oCo*eta = "'FD" t!en
')im Co*eta
8a*2e = 1"
e*se
'Leit2ra de +ngen!aria
8a*2e = E
6Q
Implementando Bibliotecas para o SCDE - CCEE
end if
9ara coletar os dados de en"enharia, tambm necess;rio informar o intervalo de coleta1
Case E
'Leit2ra de +ngen!aria
'Passa o inter0a*o de /o*eta
set 'ti0a+ngen!aria = Dri0er.Item("+ngen!aria").Item("'ti0a+ngen!aria")
'ti0a+ngen!aria.Item("DataIni/ia*").8a*2e = MedidorConfig.DataJoraIni/ia*
'ti0a+ngen!aria.Item("Data)ina*").8a*2e = MedidorConfig.DataJora)ina*
'ti0a+ngen!aria.3rite()
'Ja1i*ita a *eit2ra dos dados
Dri0er.Item("+ngen!aria").Item("Dados+ngen!aria").'**owead = 6r2e
'Log, Ini/io2 /o*eta de +ngen!aria
o1ILog.Passo = C"
+ cada leitura do bloco DadosEn"enharia, salvar as informa&Aes coletadas( =o evento OnIead do
bloco inserir1
';ra0a +ngen!aria
Parent.Parent.Parent.Item("o1IJistori/o1").;ra0a+ngen!aria = 6r2e
Duando o ta" StatusEn"enharia for i"ual a 6, si"nifica 0ue terminou a coleta de en"enharia( =o
evento OnIead deste ta" for&ar o ta" @ascaraColeta para .1
Parent.Parent.Parent.Item("otinasCo*eta").Item("Mas/araCo*eta").8a*2e = G
Eerificar a pr?<ima coleta1
Case G
'Log, 6ermino2 /o*eta de +ngen!aria
o1ILog.Passo = C1
'+s/o*!e a 7rM?ima /o*eta
if MedidorConfig.6i7oCo*eta = "M+" t!en
')im Co*eta
8a*2e = 1"
e*se
'Leit2ra de H2a*idade
8a*2e = B
end if
+lm dos dados, devem ser coletados al"uns par%metros de 0ualidade1
Case B
'Leit2ra de H2a*idade
set H2a*idade = Parent.Parent.Item("Dri0er1").Item("H2a*idade")
'Paramentros de H2a*idade
H2a*idade.Item("ParametrosH2a*idade").'**owead = 6r2e
'Dados de H2a*idade
H2a*idade.Item("DadosH2a*idade").'**owead = 6r2e
'Log, Ini/io2 /o*eta de H2a*idade
o1ILog.Passo = 51
+ cada leitura do bloco de 0ualidade, os dados coletados s'o inseridos no banco de dados( =o evento
OnIead do bloco criar o script1
Parent.Parent.Parent.Item("o1IJistori/o1").;ra0aH2a*idade = 6r2e
Duando o ta" StatusDualidade for i"ual a 6, si"nifica 0ue terminou a coleta de 0ualidade( =o evento
OnIead deste ta" for&ar o ta" @ascaraColeta para R1
Parent.Parent.Parent.Item("otinasCo*eta").Item("Mas/araCo*eta").8a*2e = D
+o terminar a coleta de 0ualidade, todos os dados necess;rios j; ter'o sidos coletados( + pr?<ima
etapa verificar se necess;rio ajustar o hor;rio do medidor(
Case D
'Leit2ra do !orOrio no medidor
Dri0er.Item("e*ogio").Item("JorarioMedidor").'**owead = 6r2e
6R
Implementando Bibliotecas para o SCDE - CCEE
).-. or*rio do Medidor
+o ler o hor;rio do medidor, verificamos se est; defasado em mais de 7- se"undos em rela&'o ao
servido, inserimos a informa&'o do rel?"io e se est; defasado ou n'o no lo" e finali!amos coleta( =o evento
OnIead do ta" 3orario@edidor, adicionar as se"uintes linhas1
set o1ILog = Parent.Parent.Item("Log1")
dif%egDataJora = DateDiff("%"$ CDate(8a*2e)$ CDate(now))
if '1s(dif%egDataJora) P E" t!en
o1ILog.6e?to = "e*ogio do medidor 7re/isa ser aI2stado"
o1ILog.;ra0a = 6r2e
e*se
o1ILog.6e?to = "e*ogio do medidor /orreto"
o1ILog.;ra0a = 6r2e
end if
')im Co*eta
Parent.Parent.Parent.Item("otinasCo*eta").Item("Mas/araCo*eta").8a*2e = 1"
)... /im da co(e!a
Duando o ta" @ascaraColeta receber o valor 6-, si"nifica 0ue todos os passos da coleta foram
cumpridos e pode ser finali!ada( Deve-se autori!ar o objeto hist?rico a "ravar o ar0uivo <ml com os dados
de coleta( Duando o <ml estiver pronto, ser; enviado para o servidor e a propriedade GimColeta receber; o
valor 5rue(
Case 1"
')im Co*eta
';era QLM de /o*eta
Parent.Parent.Item("o1IJistori/o1").;ra0a'rKQML = 6r2e
)-