Descrição:
Em certas operações com o driver Modbus (especialmente na leitura de variáveis de tipo FLOAT), a leitura ocorre, mas os valores lidos estão em uma ordem diferente da esperada; isto é, bytes e words aparecem fora de ordem. Como posso resolver este problema?
Solução:
Na leitura de valores que ocupam mais de um registrador, o equipamento pode enviar os bytes e words fora de ordem, ou seja, em ordem diferente da esperada. O driver permite então ajustar a ordem de interpretação dos bytes. Essa configuração é aplicada de maneiras distintas, dependendo de como os tags estão configurados: ou por parâmetros numéricos (N/B), ou por parâmetros sintáticos (Dispositivo e Item). A fim de descobrir a ordem em que os bytes são enviados, deve-se consultar a documentação fornecida pelo fabricante do equipamento.
Parâmetros numéricos:
Primeiramente, apresentamos uma solução que é aplicável somente na utilização de tags com parâmetros numéricos (N/B). Para isso, utilize a janela de configurações do driver e então, na aba Operations, selecione a operação a ser editada. Logo após, clique no botão Edit e marque ou desmarque as opções Swap Bytes e Swap Words de acordo com o padrão do equipamento. Posteriormente, clique OK para confirmar a edição. A fim de obter maiores informações sobre essa configuração, consulte o item Byte Order no tópico Aba Operations na documentação deste driver.
Parâmetros sintáticos:
Por outro lado, caso esteja utilizando parâmetros sintáticos (Dispositivo e Item), a configuração deve realizada através do parâmetro Item. Neste parâmetro, logo depois do identificador do tipo de dado, informe o padrão de ordem dos bytes, segundo a tabela abaixo. A fim de obter maiores informações sobre configuração, consulte o item Byte Order no tópico Configuração por Strings na documentação deste driver.
Padrão |
Swap Bytes | Swap Words | Swap DWords | Ordem 64 bits, onde by0 é lsb e b7 é msb |
|
b0 | msb | by7 by6 by5 by4 by3 by2 by1 by0 | |||
b1 | sb | X | by6 by7 by4 by5 by2 by3 by0 by1 | ||
b2 | sw | X | by5 by4 by7 by6 by1 by0 by3 by2 | ||
b3 | sb.sw | X | X | by4 by5 by6 by7 by0 by1 by2 by3 | |
b4 | sdw | X | by3 by2 by1 by0 by7 by6 by5 by4 | ||
b5 | sb.sdw | X | X | by2 by3 by0 by1 by6 by7 by4 by5 | |
b6 | sw.sdw | X | X | by1 by0 by3 by2 by5 by4 by7 by6 | |
b7 | lsb / sb.sw.sdw | X | X | X | by0 by1 by2 by3 by4 by5 by6 by7 |
Logo após, são mostrados alguns exemplos de como utilizar esses valores para alterar a ordem dos bytes em uma operação de leitura ou escrita de Holding Registers (funções 03 e 16) de endereço 1500 de um equipamento com ID 5, interpretado esse valor como DOUBLE.
Parâmetro Item | Ordem |
5:hr1500.d 5:hr1500.double 5:hr1500.d.b0 5:hr1500.d.msb |
Sem inversão de bytes |
5:hr1500.d.b1 5:hr1500.double.b1 5:hr1500.double.sb |
Byte menos significativo de cada Word vindo antes |
5:hr1500.d.b7 5:hr1500.d.lsb 5:hr1500.d.sb.sw.sdw |
Bytes menos significativos vindo antes |
Artigos Relacionados:
- Problemas Comuns no Driver Modbus: Múltiplos Escravos com Conversor RS485
- Problemas Comuns no Driver Modbus: Endereçamentos Iniciam em Índices Diferentes
- Problemas Comuns no Driver Modbus: Bytes e Words Fora de Ordem
- Problemas Comuns no Driver Modbus: Descontinuidade no Endereçamento do Equipamento
- Problemas Comuns no Driver Modbus: Equipamento Incrementa Endereços Fora do Padrão
- Problemas Comuns no Driver Modbus: Interpretando Prefixos de Endereços
- Problemas Comuns no Driver Modbus: Códigos de Exceção do Protocolo
- Problemas Comuns no Driver Modbus: Indexação de Endereços de Registradores.