<< Clique para Mostrar o Sumário >> Configuração de Gateway |
Para aplicações de gateway, onde é necessário o envio dos dados deste Driver para outros protocolos, tais como DNP 3.0 ou IEC 104, é possível ocorrer situações onde, em caso de reinício da aplicação ou chaveamento para uma aplicação redundante, ou Hot-Standby, há uma perda ou duplicação de eventos.
Isto pode ocorrer quando um evento foi recebido por este Driver e repassado adiante, mas ainda não foi recebido pelo mestre remoto do outro protocolo, conforme o exemplo da figura a seguir.
Aba Reports
A imagem anterior mostra que é possível termos eventos sendo transferidos e pendentes de transmissão nos diversos componentes (61850 Server, 61850 Client, DNP Slave e DNP Master). Esta fila de eventos pendentes pode ser maior ou menor dependendo das configurações destes componentes e da arquitetura de rede, dentre outros fatores.
Quando ocorre um chaveamento do Gateway A para o Gateway B, por exemplo, os eventos que estavam pendentes de transmissão podem tanto serem perdidos ou serem duplicados, dependendo da configuração da aplicação. Isto porque o protocolo 61850 permite que sejam recebidas novamente as mensagens de Buffered Reports, a partir da programação do campo EntryID de cada Report, que é um identificador único de cada mensagem enviada.
Este Driver já possui um recurso de geração de arquivos com o último EntryID de cada Report, que é utilizado para habilitação dos Reports quando este Driver inicia novamente. Entretanto, estes EntryIDs são atualizados com base no instante de recepção das mensagens por este Driver, e não pela recepção de fato do dado em um elemento externo, no caso do exemplo anterior, no centro de controle.
Desta forma, ao habilitar o recurso de Gateway pela opção Wait for Gtw Ref on Startup, este Driver espera que a aplicação Elipse Power informe uma String que representa o endereço de um Tag 61850 dentro de um outro Driver, como por exemplo DNP ou IEC 104. Quando este outro Driver recebe a confirmação que um evento foi entregue ao centro de controle, DNP ou IEC 104 Mestre, aquele pode informar este Driver sobre este evento, e desta forma este Driver pode posicionar os controles de EntryID à frente para que, caso haja um novo chaveamento, o fluxo de eventos continue a partir deste último ponto, evitando assim ao máximo a perda ou repetição de eventos.
Gerenciamento de EntryIDs
Os passos para a configuração deste recurso são os seguintes:
Habilitar as opções Check BRCB Entry ID, R/W Entry ID File (.EID) e Wait for Gtw Ref on Startup. Além disto, caso o IED utilize os mesmos Reports para os dois gateways, deve-se avaliar o uso de uma lista fixa de Reports na opção User Defined Report List, evitando assim que uma aplicação redundante tente habilitar outros Reports que não são os esperados.
Neste Driver, crie o Tag FinishedGtwRef e os Tags Bloco GatewayRef e GatewayEventOK, conforme a imagem a seguir. Estes Tags estão descritos no tópico Referência de Tags - Tags Internos.
Tomando o Driver DNP Slave como exemplo, crie um Tag Bloco com o parâmetro N2 igual a -22, que recebe no evento OnRead uma lista com todos os eventos confirmados pelo mestre. Consulte a documentação do Driver DNP para mais informações.
Os Tags no Driver DNP Slave devem receber Associações dos Tags 61850. A imagem a seguir mostra um exemplo em que o Tag AI_0, um objeto DNP 3205 com índice 0 (zero), é alimentado por uma corrente da fase A vinda deste Driver.
A aplicação ao iniciar, deve fazer uma inicialização das referências, passando um texto que representa o endereço DNP para cada Tag 61850 que for necessário realizar o controle de EntryID. Porém esta escrita só pode ser realizada no momento que este Driver estiver com os Logical Devices criados, caso contrário a escrita falha. Para solucionar este problema, o exemplo a seguir mostra um Tag Interno que tenta enviar a configuração a cada 5 (cinco) segundos. A partir do momento que obteve sucesso, não tenta mais. Ao final do processo é escrito o Tag FinishedGtwRef.
Também neste exemplo, a String de referência foi obtida através da união do objeto e variação do Tag DNP, mais o índice. No Driver DNP Slave, estes valores são obtidos nos parâmetros N3 e N4, respectivamente.
Valor inicial do Tag InitGateway: True (Boolean)
Evento WhileNotOK: Expressão: Value Repetir o Evento a cada 5000 ms
Sub InitGateway_WhileNotOK()
Set DNPSlave = Application.GetObject("DNPSlave")
Set Ref = Application.GetObject("IEC61850").Item("GatewayRef")
bFirst = FALSE
For Each tag in DNPSlave
If TypeName(tag) = "IOTag" Then
If tag.N2 = 1 Then
Source = tag.Links.Item("Value").Source
Set s = Application.GetObject(Source)
arr = Split(s.ParamDevice,":")
Ref.Item("IEDName").Value = arr(0)
Ref.Item("LDName").Value = arr(1)
Ref.Item("Object").Value = s.ParamItem
Ref.Item("Ref").Value = CStr(tag.N3) + ";" + CStr(tag.N4)
If NOT bFirst Then
bFirst = Ref.Write(1) 'sync
If NOT bFirst Then Exit Sub
Else
Ref.Write 2 'async unconfirmed
End If
End If
End If
Next
res = Application.GetObject("IEC61850").Item("FinishedGtwRef").WriteEx(2) 'async unconfirmed
If res Then Value = FALSE
End Sub
Quando o Bloco "EventOK" for lido no driver DNP Slave, significa que um novo evento foi recebido pelo DNP Master. O script a seguir obtém as informações deste evento e repassa ao driver 61850. No caso específico do DNP Slave, este bloco retorna algumas informações sobre o evento, como objeto e variação, índice, classe DNP, valor, timestamp válido e timestamp. Enviamos todos esses parâmetros para o 61850 via escrita no bloco GatewayEventOK, exceto a classe DNP, que não é relevante.
Sub EventOK_OnRead()
Set IECBlock = Application.GetObject("IEC61850.GatewayEventOK")
IECBlock.Item("Ref").Value = CStr(Item("ObjVar").Value) + ";" + CStr(Item("Index").Value)
IECBlock.Item("Value").Value = Item("Value").Value
IECBlock.Item("TSValid").Value = Item("TSValid").Value
IECBlock.Item("Time").Value = Item("Time").Value
IECBlock.Write 2 'async
End Sub
Neste momento o driver irá posicionar os EntryIDs para o próximo evento pendente. Para sincronizar os EntryIDs com o computador redundante, é necessário seguir os passos indicados no tópico Redundância - Utilizando Arquivos EID.
Para posicionar os EntryIDs, este Driver utiliza a seguinte metodologia:
•Quando um novo Report 61850 é recebido, verificamos se algum objeto teve uma variação de valor ou qualidade. Se houver, um novo evento é adicionado à uma lista interna individual por objeto 61850.
•Quando um evento é quitado pelo Driver externo e recebido pelo bloco "GatewayEventOK", a lista interna é comparada com o evento removido da seguinte forma:
•Se o timestamp não é válido (o Tag no DNP/IEC104 não está usando timestamp), todos os eventos são removidos da lista.
•Se o timestamp é válido, os eventos são removidos se forem iguais ou mais antigos que o evento recebido.
Para evitar processamento desnecessário, recomenda-se que apenas sejam adicionadas referências de Tags que não podem ter mudanças perdidas ou duplicadas, tipicamente Tags digitais ou de estados simples ou duplos com timestamp. Também recomendamos que, neste caso, os Datasets associados aos Reports sejam separados por tipo de Tag, como por exemplo não colocar no mesmo Dataset Tags Digitais e Analógicos, de forma a evitar a recepção de valores analógicos antigos sem necessidade.