Ir ao conteúdo
  • Cadastre-se

Arduino Erro biblioteca ModbusMaster e Arduino UNO


Posts recomendados

Estou tentando fazer a comunicação entre um datalogger e o Arduino UNO(mestre) através de um conversor max3232(rs232/TTL). O Hardware é o seguinte:

 

datalogger(RS232)----DB9(FEMEA)----DB9(FEMEA)—MAX3232----ARDUINO(TX/RX)

 

O protocolo é o Modbus RTU. Realizei alguns testes com as bibliotecas ModbusMaster que achei mas sem sucesso pois na serial sempre retornava um erro de código 226 e alguns caracteres estranhos. Já adianto que todos os dispositivos estão configurados com baudrate 9600…o problema é que mesmo que eu não conecte no datalogger, ou seja, carregando só no Arduino conectado ao computador pela USB, as mensagens estranhas ainda aparecem e além disso os caracteres tem um certo padrão…enfim, não sei o que significa mas me parece ser algo entre o Arduino e a biblioteca. Se alguém puder me ajudar, agradeço muito!

 

Obs.: já troquei o cabo USB, já reinstalei a IDE e também tentei outras versões...mas nada adiantou.

problema.png

Link para o comentário
Compartilhar em outros sites

Esse terminal virtual do Arduino é em ascii.

Me parece estar funcionando, sugiro que você utilize outro terminal serial (REALTERM) que enxergar os valores númericos dos caracteres.

 

Da uma olhada nesse vídeo pra entender como ele funciona (aqui fiz comunicação serial virtual, basta você fazer de modo físico).

 

E atribua valores às variáveis do seu protocolo e veja se os números alteram

 

 

Link para o comentário
Compartilhar em outros sites

Olhei o tutorial e agradeço por compartilhar. Vou conseguir um conversor UBB/RS232 para testar algo parecido.

Porém o problema acho está relacionado com biblioteca protocolo ou meu computador pois testei o mesmo código com um esp8266 ( tx---D8 e rx----D7) e o mesmo erro aparece (226) como resultado no node.readHoldingRegister..o mesmo que ocorre no Arduino. Já tentei de tudo..

Link para o comentário
Compartilhar em outros sites

@Wyara Souza ele lê isso porque seu clp tem que adicionar um valor no holding register dentro dele, que será lido posteriormente no Arduino.

Tente exibir o valor atribuído a esse holding register no clp (ihm, IO,etc).

 

Você tem que isolar se esse valor está sendo escrito corretamente e enviar pro Arduino.

Link para o comentário
Compartilhar em outros sites

É um datalogger, que já está configurado para 9600 e 8N1 e também tenho o endereço dos registradores...deveria estar funcionando :(. Como pensei que o problema fosse o arduino testei com esp8266...mas independente de estar conectado ao datalogger ou não (só o arduino ou esp ligado pela USB ao PC) o erro ainda permanece, esse 226..já troquei cabo rs232, já troquei o USB...

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Não sei se entendi... Xute serve?

Focando na figura do terminal,

problema.png

parece que ele quer receber caracter em asc-ii (o [0] aparece direitinho) e o sistema está a enviar em outra formatação (caracteres malucos). Talvez o mesmo ocorra no pc. Converta pra asc antes de enviar ou no pc, antes de imprimir na tela. E não vi o tal 226 na figura. Onde está, quando ocorre e o que significa? Pra refletir...

 

Link para o comentário
Compartilhar em outros sites

Consegui conectar com o logger! Aparentemente era o cabo rs232 que eu estava usando..

Agora o problema é outro (rs) acho que ele tá mandando float trocado (4 bytes) pois os valores que recebo destoam muito do esperado. Como eu poderia fazer a inversão dos bytes lidos no arduino?

 

Desde já, agradeço!

 

(Obs.: No problema anterior o 226 estava aparecendo quando eu colocava o próprio read.HoldingRegister como uma variável. )

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
18 horas atrás, Wyara Souza disse:

acho que ele tá mandando float trocado (4 bytes)

"acho" não serve. Primeiro tenha certeza. Há a opção...

Em 11/03/2020 às 15:22, DELPITEC disse:

outro terminal serial (REALTERM) que enxergar os valores númericos dos caracteres

Após localizar os bytes (e/ou bits), você pode colocar num buffer e manipulá-los a revelia. Uma provável alternativa muito lôca é você usar uma das mais lôcas entidades do C que são struct e union...

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!