Protocolos / DNP3 — Unsolicited Response

DNP3 Unsolicited do zero: habilitação, classes, confirmações, retries e recuperação

Implemente Unsolicited Response em DNP3 entendendo enable/disable, classes 1/2/3, confirmação, retries, event buffers, deadband, reconexão e como provar tudo em captura.

6 min de leitura Publicado em 25/08/2026
Ilustração técnica autoral para DNP3 Unsolicited do zero: habilitação, classes, confirmações, retries e recuperação, destacando o fluxo e os elementos centrais do assunto.
Ilustração técnica autoral do Portal da Automação, criada para o foco específico deste artigo.

Classes DNP3: bytes do pedido e bits da resposta

Diagrama específico da leitura de classes DNP3 com Function Code READ, Group 60, Variations 1 a 4, Qualifier 0x06 e bits de eventos no primeiro octeto IIN.
Recorte da camada de aplicação. Group 60 seleciona uma classe; a resposta devolve os objetos de dados/eventos correspondentes e usa IIN para sinalizar pendências.

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.

DNP3 Function Codes úteis em comissionamento

CódigoFunçãoEvidência que fecha o teste
0x01READObjeto solicitado, resposta, flags/qualidade e índice corretos.
0x03 → 0x04SELECT → OPERATEMesmo alvo, janela válida, status positivo e retorno do processo.
0x05DIRECT_OPERATEResposta da outstation e efeito/retorno físico ou simulado.
0x06DIRECT_OPERATE_NREfeito no processo/log, pois não há resposta de aplicação esperada.
0x0D / 0x0ECOLD / WARM RESTARTReinício observado, IIN Device Restart e recuperação de estado/tempo.
0x14 / 0x15ENABLE / DISABLE UNSOLICITEDEstado da função, eventos espontâneos e confirmações correspondentes.

O que unsolicited muda no modelo de comunicação

Sem unsolicited, o master descobre eventos principalmente perguntando por eles. Com Unsolicited Response habilitado, a outstation pode iniciar o envio de eventos das classes configuradas. Isso reduz a latência de notificação, mas cria responsabilidades: a outstation precisa decidir quando agrupar e transmitir, o master precisa aceitar e confirmar quando requerido, e ambos precisam recuperar corretamente após perda de comunicação.

Unsolicited não elimina Class 0 ou a necessidade de política de integridade. O objetivo não é substituir todo polling, mas permitir entrega orientada a evento. Uma engenharia madura define quais classes podem gerar unsolicited, quais pontos pertencem a cada classe e o que ocorre quando o canal fica indisponível.

Enable/Disable, classes, confirmação e retry

O master pode usar ENABLE_UNSOLICITED e DISABLE_UNSOLICITED para controlar o comportamento da outstation conforme sua capacidade. A configuração precisa casar com as classes 1, 2 e 3 usadas pelos pontos. Depois do enable, gere um único evento conhecido e verifique a Unsolicited Response, sua sequência e a confirmação correspondente.

Timeout de confirmação e número de retries devem ser dimensionados com a latência do enlace. Em rádio, satélite ou rede congestionada, valores agressivos geram retransmissões desnecessárias; valores excessivos retardam recuperação. Meça RTT e comportamento real antes de ajustar. Se há dois masters, documente qual deles habilita, confirma e assume unsolicited durante failover.

Fluxo DNP3 entre estação mestre e outstations com polling, eventos e comandos.
Arquitetura de comunicação DNP3 entre sistema mestre e equipamentos remotos. Fonte: Portal da Automação · Conteúdo autoral do portal.

Event buffer, deadband e agrupamento

O buffer precisa suportar a taxa de eventos durante a maior indisponibilidade plausível, não apenas o tráfego médio. Analógicos com deadband pequena podem gerar churn e consumir fila rapidamente. Pontos digitais oscilantes também podem produzir tempestades. Ajustar deadband é parte de engenharia de processo: grande demais esconde mudança útil; pequena demais cria ruído operacional e carga.

Alguns equipamentos oferecem atraso mínimo/máximo ou agrupamento antes de transmitir unsolicited. O objetivo é equilibrar latência com eficiência. Para proteção ou estado crítico, a tolerância pode ser curta; para variáveis menos urgentes, pequeno agrupamento reduz overhead. Documente a intenção em vez de copiar um default.

Teste de recuperação que realmente prova a implementação

Habilite unsolicited, gere eventos e depois interrompa o canal por um período controlado. Durante a falha, provoque mudanças suficientes para usar a fila sem excedê-la. Ao retornar, confirme ordem, timestamp, duplicatas, confirmações e limpeza da fila. Repita próximo ao limite para conhecer o comportamento de overflow.

Se os eventos só aparecem depois de um poll, verifique se o enable foi aceito, se a classe está correta e se a outstation está configurada para iniciar unsolicited. Se a mesma mensagem repete, procure confirmação ausente. Se o SCADA mostra valor atual correto mas faltam transições, investigue event buffer/overflow antes de culpar qualidade do link.

Reconexão, duplicidade e perda: o cenário que separa configuração boa de configuração frágil

O teste decisivo de unsolicited acontece quando a comunicação deixa de ser perfeita. Gere eventos conhecidos, interrompa o caminho antes da confirmação e observe o que a outstation preserva. Depois restabeleça o enlace e acompanhe se há retransmissão, confirmação, entrega dos eventos pendentes e eventual execução da política de integridade. O objetivo é distinguir duplicidade aceitável e detectável de perda silenciosa. O SCADA precisa ser capaz de reconciliar o estado atual com a sequência de eventos sem transformar uma reconexão em tempestade de alarmes.

Em arquiteturas com master primário e secundário, documente quem habilita unsolicited e como a outstation trata sessões simultâneas ou a troca de controlador. Um failover mal projetado pode deixar unsolicited desabilitado, produzir confirmações pela sessão errada ou manter eventos na fila até o próximo poll. Para dimensionar retries e timeouts, use a latência medida no pior caminho operacional, incluindo rádio, LTE, satélite ou VPN. Para dimensionar buffer, use taxa de eventos de contingência multiplicada pelo maior período plausível de indisponibilidade, acrescentando margem e considerando deadband dos analógicos.

  • Testar perda antes da confirmação e confirmar a política de retry.
  • Testar reconexão com eventos pendentes e comparar SOE com a origem.
  • Testar failover de master sem assumir que enable/confirm será preservado.
  • Verificar overflow e alarmes do buffer durante uma rajada controlada.
  • Comparar tráfego com e sem agrupamento/deadband para justificar os valores.

Agrupamento, confirmação e carga: como ajustar para o enlace real

Unsolicited não significa necessariamente “um pacote para cada mudança”. Implementações podem agrupar eventos por classe, quantidade ou janela temporal para reduzir overhead. Em enlace rápido, uma janela muito longa aumenta desnecessariamente a latência percebida; em rádio ou satélite, enviar cada pequena alteração separadamente pode consumir canal e aumentar colisões, filas ou custo. O ajuste precisa considerar a taxa de eventos durante contingência, não apenas a média de um dia normal. Analógicos sem deadband adequado podem dominar o fluxo e mascarar o benefício do mecanismo.

A confirmação também precisa ser observada como uma sequência, e não como checkbox. Identifique o unsolicited transmitido, seu número de sequência, a confirmação esperada e o comportamento se ela não chega. Meça quantas retransmissões ocorrem e em qual intervalo. Depois repita com o pior RTT operacional. Se o master demora mais que o timeout configurado, a outstation pode retransmitir mensagens válidas e aumentar ainda mais a carga. Esse ciclo explica por que simplesmente “aumentar retries” pode piorar um enlace já congestionado.

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.

  • Overview of DNP3 Protocol — DNP Users Group. Fonte mantenedora do DNP3/IEEE 1815 para arquitetura, interoperabilidade e documentação pública.
  • DNP Users Group — Public Documents — DNP Users Group. Aplicações públicas, boletins e materiais técnicos para validar comportamento de implementações.
  • 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.

Ver todas as trilhas de estudo →