Dnp3

Caros,

Antes de tudo, parabens pelo desenvolvimento desta solução. Como desenvolvedor de plataformas de hardware e software, é sempre bom ver produtos “in BR” sendo desenvolvidos e utilizados. Uma solução SCADA Open Source é realmente um desafio, e espero colaborar com voces (se assim permitirem) nos futuros desenvolvimentos e testes. Minha especialidade é desenvolvimento de soluções com protocolo DNP3 e MODBUS, e gostaria de ajuda-los a testar a soluçao com estes protocolos.

Estou montando uma aplicação para monitoramento e comando de um concentrador DNP3, e verifiquei aqui alguns problemas:

a) Quando se configura um DATA_POINT como BINARY OUTPUT e comando de controle CLOSE/TRIP, os seguintes comandos sao enviados a partir do SCADABR, na escrita de comando do DATA_POINT:

Para comando = true (CLOSE): Codigo de comando DNP3 = 0x80
Para comando = false (TRIP), Codigo de comando DNP3 = 0x40

Segundo a norma DNP3, o comando de close e trip deve ser acompanhado de um comando PULSE_ON (0x01), logo, o SCADABR deveria mandar:

Para comando = true (CLOSE): Codigo de comando DNP3 = 0x81
Para comando = false (TRIP), Codigo de comando DNP3 = 0x41

Vi que o codigo de comando é passado na funcao
“public Buffer buildBinaryControlCommand(byte operateMode, int index, byte controlCode, int timeOn, int timeOff)”
contida no arquivo User.java, no byte controlCode. Nao achei aonde esta funcao é chamada para modificar e testar.

b) Para qualquer comando binario que se envia para um DATA_POINT como BINARY OUTPUT, o parametro de COUNT do controle DNP3 é setado para zero. A maioria das implementaçoes DNP3 nao aceita COUNT=0, ou se aceita, é somente para testes.
Identifiquei o problema na funçao:
“public Buffer buildBinaryControlCommand(byte operateMode, int index, byte controlCode, int timeOn, int timeOff)”

"…
int previous_marker = commandFrame.length();

commandFrame.setMarker(7);
commandFrame.writeByte(controlCode);

commandFrame.setMarker(previous_marker);

// insira as duas linhas abaixo para corrigir o problema (coloca COUNT=1).
commandFrame.setMarker(8);
commandFrame.writeByte(1);

byte[] timeOnBytes = toBytes(timeOn, 4);
commandFrame.setMarker(9);
…"

Ainda estou testando as outras funcoes do DNP3, e reporto quaisquer problemas que possam aparecer.

[]s,

Douglas

Olá Douglas,

que ótimo, toda ajuda em protocolos é sempre bem-vinda!

realmente o DNP3 pode ter alguns detalhes de implementação um pouco diferentes, você deve imaginar a epopéia que foi implementar esse complexo protocolo :slight_smile: mesmo já existindo algumas bibliotecas disponíveis!

estou encaminhando teu post para alguns colegas que participaram do DNP3, vamos ver as possíveis correções para próxima versão. se você mesmo tiver identificado algumas correções, pode me mandar o arquivo para o email do contato (@) scadabr.org.br, aí te passo também um email pessoal para trocarmos essas informações em detalhes.

obrigado, um abraço
Victor

Boa noite, pessoal!
Meu nome é Ricardo e estou querendo realizar alguns testes com o protocolo DNP3, porém não sei por onde começar. Eu gostaria de fazer uma conexão entre pelo menos 2 máquinas Linux/Windows gerando tráfego com DNP3. Consegui instalar uma aplicação chamada Axon Test no Windows, mas no Linux não consigo instalar nada para responder os pacotes enviados pelo Windows, apenas vejo com Wireshark os pacotes sendo enviados e retransmitidos.
Você sabe de algum pacote que posso instalar para simular um escravo/mestre em Linux? Alguma forma de gerar fluxo DNP3 na rede?
Estou fazendo doutorado e se tiver interesse podemos ir trocando ideias sobre DNP3.
Desde já agradeço!
Att,
Ricardo Ferrari

Olá pessoal tudo bem? Lendo este post verifiquei algumas dúvidas de alguns usuários sobre como utilizar e estudar este protocolo.

Passei por isso durante projeto do meu mestrado, posso listar alguns softwares que utilizei para estudar este protocolo que implementa 4 camadas da modelo OSI (Open Systems Interconnection).

As ferramentas mais utilizadas são:

  • ASE2000 

http://www.ase-systems.com/

  • Suite Triangle Microworks

https://www.trianglemicroworks.com/products/downloads

  • Axon Test

http://www.axongroup.com.co/axongroupen/axon_productos_int.php?i=36

<p>Lembro que é importante entender as Classes e o Objetos que este protocolo utiliza e os tipos de mensagens, pois ele trabalha nos modos request-response assim como também pode enviar uma mensagem sem request para avisar sobre algum evento,alarme ou alguma condição anormal de operação.

o ASE pode ser usado nos 2 modos MASTER station e SLAVE station, podendo ser instalado em 2 máquinas para trocar informações.

Espero que possa clarear a idéia de voces.

 

Um abraço

.

 

 

Renne Takao