Problemas Comuns no Driver Modbus: Múltiplos Escravos com Conversor RS485.

Descrição:

Como posso resolver um problema de comunicação do driver Modbus com múltiplos escravos e um conversor RS-485? Tenho um driver Modbus Mestre (protocolo Modbus-TCP) conectado a um conversor Ethernet/RS485; dentro desta rede RS-485, há dois dispositivos escravos (protocolo Modbus-RTU).

comunicação do Modbus com múltiplos escravos via conversor RS-485

Eventualmente, alguns tags apresentam falha ou TIMEOUT, e o problema só acontece quando tento comunicar com os dois escravos simultaneamente. Como posso resolver esta situação?

 

Solução:

Em muitos casos, o conversor Ethernet/RS485 ou Serial/RS485 necessita de um delay entre as transações TX/RX para que ele consiga comunicar com múltiplos escravos da rede RS-485; por padrão, isso não é feito.

A opção Inter-frame delay da aba Serial, que define uma espera entre pacotes enviados ou recebidos pelo IOKit em milésimos de segundo (1000 = 1 segundo) poderia introduzir um delay entre cada transação TX/RX; no entanto, essa opção ainda não é suportada pela camada Ethernet do IOKit, somente via camada Serial. Portanto, esta solução seria válida apenas para uso de um conversor RS485 para Serial.

Nos casos de conversor RS485 para Serial ou conversor RS485 para Ethernet, pode-se utilizar um parâmetro do driver Modbus (que está oculto no diálogo de propriedades) para adicionar um delay entre as transações TX/RX durante a troca de ID dos escravos.

Para configurar esta opção, uma possibilidade é iniciar o driver em modo Offline (selecionar a opção Start driver OFFLINE na aba Setup), e inserir o seguinte script no evento AfterStart do driver:

Sub Modbus1_AfterStart()

' Habilita a funcao Swap Address Delay
Write -1, 0, 0, 3, Array("ModiconModbus.UseSwapAddressDelay", 1)

' Configura o atraso (por exemplo, 300 milisegundos)
Write -1, 0, 0, 3, Array("ModiconModbus.SwapAddressDelay", 300)

'Online
Write -1,0,0,4,1 

End Sub
Em ambas as maneiras, o atraso necessário pode variar de acordo com o conversor utilizado. Em geral, sugere-se valores na faixa de 100 a 400 milissegundos.

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *