Leitura de Grandezas no multimedidor da Landys+Gry E34A no protocolo abnt nbr 14522

Boa tarde, amigos. Estou tendo muitas dificuldades em efetuar a leitura desse medidor da Landys via porta serial rs485. Gostaria de saber se alguém consegue me dar uma luz sobre o que estou fazendo de errado em relação à mensagem enviada, pois não estou tendo retorno algum do medidor.

serial number do medidor : 0000886619

mensagem que estou enviando : 

99 00 88 66 19 21 12 34 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 AA
exemplo do manual

Exibições: 330

Anexos

Responder esta

Respostas a este tópico

Muito legal, tenho aprendido muito com suas postagens! Obrigado.

Entendo que no momento vc é a pessoa aqui que detém o maior conhecimento desse protocolo, basta implementar.

Para implementar esse protocolo é similar a qualquer outro que use a serial, ou seja: 

Basicamente vc vai recebendo os bytes e acumulando em um buffer (um array) e a cada byte recebido verifica se aquilo que recebeu é um bloco reconhecível.

Eu sempre faço isso (primeiro recebe o bloco todo e depois analisa).

Tem quem a cada byte recebido já fique disparando If()s, mas não recomendo. Acaba sendo mais complicaco.

Exemplo de implementação:

https://mundoprojetado.com.br/implementando-modbus-rtu-no-arduino/

Nesse exemplo ele usa uma String para armazenar, eu não usaria. A questão é que Strings são para caracteres alfanuméricos, podem dar erro com caracteres vindos da serial, especialmente contendo #00.

Especificamente para esse protocolo não encontrei, senão seria mto fácil...

Enfim, vc separando um bloco de dados para receber pouco mais que o maior bloco que precisa;

salva nele cada byte recebido e depois procurando lá dentro os byte chave como por ex: indicador de um comando e afastado dele x bytes um checksum valido;

Confirmou bloco válido de tipo x vc busca dentro dele as informações com os deslocamentos correspondentes e tal (como no exemplo que mandei, os buf[posicao].

E assim vai.

A resposta era bem simples até, haha. Eu estava fazendo o cálculo do CRC16 do comando todo, porém era para fazer apenas de uma parte do comando... É cada coisa, hein? Agora estou lendo corretamente, tanto por porta óptica quanto por RS485.

Legal que conseguiu.

Para constar aqui, vc poderia detalhar melhor como fez ?

No exemplo o CRC16 está onde ?

Somou de onde até onde ?

Não e´ obrigatório, mas pode ajudar alguém no futuro.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço