Classes DNP3: Class 0, 1, 2 e 3 sem confusão
Entenda a diferença entre Class 0 e Classes 1/2/3, como eventos são associados às classes, polling, unsolicited, prioridade de engenharia e como testar a estratégia de coleta.
Classes DNP3: bytes do pedido e bits da resposta
Como ler esta figura
Group 60 = 0x3C
É o grupo usado pelo master para solicitar dados por classe.
Na implementação: No pedido READ, localize 0x3C no primeiro octeto do object header; não procure Group 60 como se fosse o tipo real de cada evento devolvido.
Variations 1, 2, 3 e 4
V1 seleciona Class 0; V2, Class 1; V3, Class 2; V4, Class 3.
Na implementação: Leia Group e Variation juntos: 3C 02 pede Class 1; 3C 03 pede Class 2.
Qualifier 0x06
No header de classe, indica a seleção sem faixa ou contagem explícita de pontos.
Na implementação: Confirme os três octetos consecutivos do object header e confronte o comportamento com o Device Profile.
IIN1 bits 1, 2 e 3
Sinalizam que existem eventos pendentes nas Classes 1, 2 e 3, respectivamente.
Na implementação: IIN informa pendência; os eventos estão nos object headers e objetos que seguem na resposta.
Class 0 versus Classes 1, 2 e 3
| Classe | Natureza | Pergunta respondida | Uso de engenharia |
|---|---|---|---|
| Class 0 | dados estáticos configurados | qual é o estado atual? | integridade, inicialização, reconciliação |
| Class 1 | eventos | quais mudanças dessa classe estão pendentes? | prioridade definida pelo projeto |
| Class 2 | eventos | quais mudanças dessa classe estão pendentes? | prioridade definida pelo projeto |
| Class 3 | eventos | quais mudanças dessa classe estão pendentes? | prioridade definida pelo projeto |
Os números 1/2/3 não substituem uma política de prioridade documentada. A engenharia decide o significado operacional de cada classe.
Sintomas comuns de estratégia de classes mal configurada
| Sintoma | Hipótese provável | Evidência |
|---|---|---|
| Ponto atualiza só na integridade | evento não associado à classe coletada | comparar cadastro da outstation e requests do master |
| Eventos chegam com grande atraso | poll da classe muito espaçado ou canal saturado | timestamps de requests/responses e fila |
| Overflow após falha de comunicação | buffer insuficiente ou taxa de evento excessiva | IIN/log, quantidade de eventos e tempo offline |
| Uma classe nunca retorna eventos | nenhum ponto associado ou master não a coleta | Device Profile, configuração e PCAP |
| Tráfego excessivo | integridade/polls frequentes demais | baseline de bytes, periodicidade e requisito real |
A primeira correção conceitual: Class 0 não é “a classe mais importante”
No DNP3, Class 0 e Classes 1, 2 e 3 têm papéis diferentes. Class 0 é usada para obter a visão estática configurada da outstation, normalmente em uma leitura de integridade. Classes 1, 2 e 3 são classes de eventos. Isso significa que comparar “prioridade da Class 0” com “prioridade da Class 1” como se fossem quatro filas equivalentes leva a uma configuração errada.
A leitura de Class 0 responde à pergunta “qual é o estado atual?”. A coleta de Classes 1/2/3 responde à pergunta “quais mudanças registradas ainda precisam ser entregues?”. Em uma ocorrência, essas duas respostas podem ser diferentes. Se uma entrada abriu e fechou durante uma interrupção, o estado atual pode ser fechado, enquanto os eventos preservam as duas transições.
Classes 1, 2 e 3: prioridade é uma decisão de engenharia
A norma permite organizar eventos em três classes. O significado operacional de cada classe deve ser definido pelo projeto. Uma prática comum é colocar eventos mais críticos ou que exigem menor latência em uma classe consultada com maior frequência, mas não existe uma regra universal que obrigue todo sistema a usar Class 1 para um mesmo tipo de ponto. O master e a outstation precisam concordar com a estratégia.
O critério deve considerar criticidade do processo, taxa de geração de eventos, capacidade de buffer, largura de banda, latência do canal e frequência de polling. Em um enlace satelital, por exemplo, uma estratégia agressiva de polling pode aumentar custo e carga sem melhorar o que realmente importa. Em um enlace de baixa latência, uma coleta frequente pode ser viável. O desenho precisa ser medido, não copiado.
Group 60 e a seleção de classes
DNP3 usa Class Data para solicitar classes. O Group 60 é a família associada a Class 0 e às Classes 1, 2 e 3. A requisição de uma classe não significa que todos os pontos da outstation pertencem automaticamente a ela. A outstation mantém associações configuradas entre pontos/eventos e classes, e o master pede os dados de acordo com sua política.
No comissionamento, não valide apenas se “Class 1 responde”. Gere um evento em um ponto que a engenharia declara como Class 1, confirme que ele aparece na coleta correta e depois repita com pontos de Class 2 e Class 3. Isso prova tanto o mapeamento quanto a estratégia do master.
Polling por classe e integridade: por que ambos existem
Um master pode fazer integrity polls em intervalos definidos e, entre eles, coletar eventos por classe. A integridade reconstrói a imagem estática e é importante após inicialização, restart, perda prolongada ou condições em que a base precisa ser reconciliada. As classes de evento preservam mudanças sem obrigar a transmitir todo o banco a cada ciclo.
Se o projeto usa apenas integridade frequente, pode consumir banda desnecessariamente e perder a riqueza temporal de eventos. Se usa apenas eventos e nunca reconcilia estado, uma perda de buffer ou reinicialização pode deixar a imagem do master incoerente. A política correta combina mecanismos conforme o risco operacional.
Classes e unsolicited: a mesma organização, outro modo de entrega
Quando Unsolicited Response é habilitado, a outstation pode enviar eventos das classes configuradas sem esperar pelo poll correspondente. As classes continuam importantes: elas ajudam a selecionar quais eventos podem ser enviados e a organizar a política de entrega. O master precisa confirmar quando exigido e tratar reconexão, retries e eventos acumulados.
Unsolicited não deve ser tratado como “polling automático”. Ele muda quem inicia a entrega e exige mais atenção à recuperação. Se a sessão cai enquanto eventos são gerados, o buffer da outstation e a política pós-reconexão determinam se o histórico será preservado.
Parâmetros que precisam ser documentados para cada classe
A tabela de engenharia deve tornar explícita a estratégia de classes. Sem isso, o master pode estar corretamente configurado para coletar Class 1 enquanto pontos críticos foram cadastrados como Class 2 na outstation. O resultado parece uma falha intermitente, mas é apenas uma inconsistência de engenharia.
- Associação ponto→classe — O que é: define em qual classe o evento daquele ponto entra. Efeito: determina por qual consulta/unsolicited ele será entregue. Validar: gerar evento conhecido e observar a classe retornada.
- Intervalo de poll — O que é: periodicidade de coleta de cada classe. Efeito: afeta latência, banda e crescimento do buffer. Validar: timestamps das requisições, resposta e ocupação do buffer.
- Integrity interval — O que é: periodicidade ou condição para Class 0. Efeito: reconcilia estado estático. Validar: captura, logs e comparação da base antes/depois.
- Unsolicited por classe — O que é: autorização para envio espontâneo de eventos de determinadas classes. Efeito: reduz latência, mas exige confirmação/retry. Validar: enable, evento de teste, resposta e confirm.
- Buffer por classe/tipo — O que é: capacidade de retenção de eventos. Efeito: limita quanto histórico sobrevive à indisponibilidade. Validar: Device Profile, teste controlado e alarmes/IIN de overflow.
Teste de campo: prove a classificação e a recuperação
Monte um caso de teste com pelo menos um ponto de cada classe usada. Registre estado inicial, provoque mudanças em horários conhecidos e acompanhe a captura. Confirme que cada evento chega pela classe prevista, com índice, valor, qualidade e timestamp coerentes. Depois interrompa a comunicação por um intervalo controlado e produza alguns eventos adicionais.
No retorno, observe se o master coleta os eventos acumulados antes ou depois da integridade, se há overflow e se a sequência do processo pode ser reconstruída. O resultado esperado precisa estar escrito antes do teste. Essa disciplina transforma “parece que recuperou” em evidência de interoperabilidade.
Referências técnicas e normas
As explicações do Portal são autorais. Normas e fontes oficiais são priorizadas; materiais acadêmicos e documentação pública de fabricantes complementam a implementação e não substituem a edição normativa aplicável ao projeto.
- IEEE 1815-2012 — IEEE Standard for Electric Power Systems Communications—Distributed Network Protocol (DNP3) — IEEE Standards Association. Edição publicada de referência para estrutura, funções, opções interoperáveis e requisitos de conformidade do DNP3.
- IEEE P1815 — Draft Standard for Electric Power Systems Communications—Distributed Network Protocol (DNP3) — IEEE Standards Association. Página oficial do projeto de revisão da norma; útil para acompanhar a evolução do padrão sem substituir a edição publicada aplicável ao equipamento.
- Overview of DNP3 Protocol — DNP Users Group. Visão geral oficial do protocolo e do papel do DNP Users Group como mantenedor do DNP3/IEEE 1815.
- DNP Users Group — Public Documents — DNP Users Group. Documentos públicos, guias, boletins e materiais de implementação e interoperabilidade.
- Understanding DNP3 — Inductive Automation. Material didático complementar sobre conceitos e comportamento de DNP3; não substitui a norma.
- DNP3 — trabalho didático de Redes de Computadores — GTA/UFRJ. Material acadêmico introdutório útil para leitura guiada da arquitetura; deve ser confrontado com IEEE 1815 e documentação atual do fabricante.
- opendnp3 User Guide — Automatak / opendnp3. Guia público de uma implementação amplamente usada, útil para relacionar a norma a parâmetros reais de master e outstation.
- DNP3 Communication Protocol Solutions — Triangle MicroWorks. Referência de implementador para recursos como events, deadbands, unsolicited, time sync, file transfer e ferramentas de teste.
- DNP3 Application Layer Function Codes — Rockwell Automation. Exemplo público de fabricante para Function Codes, incluindo COLD_RESTART, WARM_RESTART e ENABLE/DISABLE_UNSOLICITED.
Continue estudando
Os próximos conteúdos foram escolhidos para formar uma sequência técnica, relacionando fundamento, configuração, diagnóstico e aplicação.