Descrição:
O padrão do protocolo Modbus estabelece que a cada endereço corresponda um espaço de 16 bits. No entanto, alguns equipamentos endereçam a memória em grupos de 8 bits. Neste caso, como é possível realizar o acesso aos registradores? Como se dá o incremento de endereço fora de padrão?
Solução:
Devido à diferença na forma como o endereço é incrementado, o driver Modbus não permite a realização de operações em blocos. Dessa forma, ao acessar as propriedades do objeto IODriver, altere a propriedade EnableReadGrouping para False. Assim também, utilize apenas tags de comunicação no driver, e não blocos de comunicação.
Primeiramente, considere a tabela abaixo. Nela, os endereços são indexados a partir do valor 40000. Nesse exemplo, o endereço Modbus 40001 corresponde a um grupo de 16 bits. Para o equipamento, este mesmo espaço de memória está dividido em dois grupos de 8 bits, com os endereços 40002 e 40003; dessa forma, não é possível acessar cada um desses endereços individualmente.
Tamanho | Endereço no Equipamento | Endereço Modbus | |
16 bits | 8 bits | 40000 | 40000 |
8 bits | 40001 | ||
16 bits | 8 bits | 40002 | 40001 |
8 bits | 40003 | ||
16 bits | 8 bits | 40004 | 40002 |
8 bits | 40005 |
Assim sendo, para o driver, todos os acessos são feitos em grupos de 16 bits. Para ler os valores nos endereços do equipamento 40002 e 40003, o driver deve acessar o endereço 40001, obtendo um valor de 16 bits, que pode ser posteriormente separado em partes de 8 bits. Do mesmo modo, quando o driver escrever no endereço 40001, serão sobrescritos os valores correspondentes no equipamento aos endereços 40002 e 40003. Assim, caso deseje alterar apenas um desses endereços, o valor a ser escrito deve ser combinado com o valor do outro endereço antes da escrita através de operações binárias.
Uma outra maneira mais simples, porém mais limitada, de contornar a situação é acessar os endereços Modbus como se fossem valores de apenas 8 bits. Nessa situação, só são acessíveis os endereços do equipamento 40000, 40002, 40004, etc., que correspondem no driver aos endereços 40000, 40001, 40002, etc.
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.