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

Descrição:

Possuo um driver Modbus Mestre (protocolo Modbus-TCP) conectado em um conversor Ethernet/RS485, e dentro desta rede RS-485 há dois dispositivos escravos (protocolo Modbus-RTU).

Eventualmente determinados tags apresentam falha ou TIMEOUT, e o problema só acontece quando tentamos comunicar com os dois escravos simultaneamente.

Solução:

Em muitos casos, o conversor Ethernet/RS485 ou Serial/RS485, necessita de um “delay” entre as transações TX/RX para conseguir comunicar com múltiplos escravos da rede RS-485, e isso por padrão 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 (oculto no dialog 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 sugestão seria 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.
Este artigo foi útil? Was this post helpful?
Yes2
No0

Leave a Reply

Your email address will not be published.Required fields are marked *