Solucionando problemas em uma comunicação RS-485

1

Eu tenho um Módulo de entrada analógica do ND-6021 . É um dispositivo RS-485 que pode definir uma tensão de saída variável com base no comando que recebe. Eu estou tentando fazer isso funcionar em um Linux Debian Stretch. Eu tenho usado o minicom para ver se funciona corretamente, então eu emiti um comando de configuração de leitura: $012<CR> . O dispositivo responde com a mensagem !01320600 : ! significa que recebeu corretamente o comando e o restante da mensagem explica como ele está configurado. Tanto quanto eu entendo, isso significa que a conexão está configurada corretamente e não há problemas de hardware que dificultam a comunicação.

O próximo passo é definir o nível desejado de tensão de saída. Eu conectei ao dispositivo um voltímetro digital, para que eu possa ver a tensão de saída. Eu emito o comando: #0108.467<CR> e devo ler no voltímetro um valor de 8.467 volts e o dispositivo deve responder com > , mas a tensão fica em 0 e não há resposta do dispositivo.

Passei horas checando a sintaxe do comando e está certo, então fiz outro teste. Eu conectei o dispositivo a um laptop Windows e usando termite eu emiti os mesmos comandos. O comando de configuração de leitura ( $012<CR> ) funciona e recebi a mesma resposta que no Linux, e agora também o comando de configuração de tensão funciona: recebi a resposta > do dispositivo e a tensão de saída está configurada corretamente.

Estou confuso porque meu teste mostra que a comunicação e as configurações de hardware estão ok, mas claramente, há algo que não está funcionando, mas o que?

    
por Giorgio R 12.09.2018 / 16:55

1 resposta

1
Usualmente é um problema de taxa de transmissão ou interpretação de nova linha. (mesmo que os comandos funcionem parcialmente)

socat é a excelente ferramenta para criar e solucionar problemas de rede e conexões seriais.

socat - /dev/ttySX[,params]

se os parâmetros vazios não funcionarem, você pode tentar adicionar taxa de transmissão explícita com param: b9600 / b19200 / b57600 / b115200 ... toda a lista recuperada com socat -?? | grep 'b[1-9]'

em seguida, focar no problema de interpretação de nova linha, tentando combinações de parâmetros: cr , crnl , echo=0 e raw

... porque alguns módulos insistem em terminar a linha cr + lf (\ r \ n), alguns querem apenas '\ n', por vezes o eco cria confusão ... e no seu caso o módulo precisa de retorno de carro (\ r) apenas, então echo '#0108.467' | socat - /dev/ttySX,cr deve funcionar bem.

    
por 12.09.2018 / 18:44