Area de dados de modbus

Oi boa noite:

Como eu sou um pouco nova no uso de modbus, queria pedir o favor se vcs poderiam me dar uma explicação sobre a área de dados de MODBUS, como: coil, input, holding register e input register. Estou usando coil para accesar dados de um clp altus, e na configuração dele como modbus escravo eu posso definir relações MODBUS.

Eu fiz uma primeira relação com coil e consegui accesar dados de bits, só q tem uma faixa de operandos de memória %M0700.1 até %M0700.9 que não cai dentro dessa primeira relação e nem fazendo o máximo que são 65000 operandos consigo chegar nesses operandos.

Então decidi fazer uma relação com holding register (havendo lido antes de q pode se usar para leitura, mas que é de 16 bits) com essa faixa, só que quando eu vou accesar essa faixa no scada br, sai erro com qualquer opção de "tipo de dados MODBUS " e "Register Range = Holding Register ". Então não sei como é que eu tenho q configurar no data source, e nessas opções acima colocadas?? ou será que meu conceito é errado, por isso que queria saber qual a diferença entre eles e como teria que configurar seja no scadabr ou seja no clp??

Desde já fico muito agradecida pela orientação que puderem me dar!
Nicole

Olá Nicole!

Para comunicar bits, utiliza-se a área de Coils, que começa no registrador de comunicação 1 e vai até o 4999. No caso de valores no formato inteiro deve-se utilizar os Holding Registers, que estão na faixa 40.001 até 49.999.

No padrão “de fato” Modbus usa-se a seguinte convenção:
–>00001 a 09999* Coils (saidas digitais)
–>10001 a 20000* Inputs (entradas digitais)
–>40001 a 50000* Holding registers (Inteiros 16bits)

*O valor máximo depende da arquitetura do equipamento, sendo estes valores usados como referencia apenas.

Muitos erros de configuração ocorrem porque em algumas interfaces (ScadaBR) não é necessario colocar o prefixo 40001 para ler o endereço 1 do modubs, basta colocar o endereço 1 em registers (range= 40000) e o sistema busca por 40001 (40000+1).

Para manter a máxima compatilibilidade alguns integradores utilizam apenas registers, exportando os coils bit a bit. Logo, em um register você pode ter até 16 bits.
Para um register bit a bit no mango é preciso declarar o mesmo endereço varias vezes, usando a opção binary como “data type” e variando apenas o bit de leitura. Essa configuração gera uma variavel booleana no sistema. Assim 1 register pode conter a informação de 16 coils ou inputs.

Você pode verificar a comunicação usando um software de varredura, como o Mtester. (http://www.modbus.pl/Modbus_Tester.html)

Quanto ao auxílio para configurar o seu equipamento, se possível, envie uma msg com a tabela modbus do seu CLP (o range %M0700.1 até %M0700.9 não parece ser de endereços modbus).

Vale lembrar que o scadaBR trabalha com Modbus base 0.

Att.
Fernando

Olá Fernando, muito obrigada pela respota, ainda q fiquei com algumas dúvidas:

Quando vc fala de faixa “40001 a 50000* Holding registers (Inteiros 16bits)”, por exemplo, está se referindo a operandos modbus? ou seja 10000 operandos começando em 40001? e como se relacionaria com operandos do CP do CLP, por exemplo de memória %M?

Quando vc fala de registers, a q se refere: a coil, input ou holding register? Assim no manual do clp, ele diz q pode relacionar, por exemplo, com coil, operandos de memoria %M, relés de entrada %E, relés de saida %S e auxiliares %A, mas os de entrada e saida eles ocupam um byte.

Então, quando vc diz: “Logo, em um register você pode ter até 16 bits.0”, não entendi.

Agora olhando no scadabr, tentei achar: “basta colocar o endereço 1 em registers (range= 40000) e o sistema busca por 40001 (40000+1)” e ali tem esses parâmetros:
Slave id
Register range
Modbus data type
Offset (0-based)
Bit

Em qual desses parâmetros, eu coloco: endereço 1 e range 4000?

E por último o q significa que o scadaBR trabalhe com Modbus base 0?

Desde já agradeço pela resposta,

Atenciosamente,
Nicole

Pelo que eu me lembro, no CP você precisa definir a relação entre os operandos do CP e os operandos Modbus.
%E= Inputs
%S= Coils
%M=Holding Register

O register significa “Holding Register”.

O que eu quis dizer com os 16bits do holding register é que alguns integradores não usam coils nem inputs, fazem tudo com registers e depois fazem a leitura bit a bit. Porem isso depende do equipamento e da IDE que esta usando.

A configuração para ler o register 1 do slave 1 no ScadaBR ficaria assim:
Slave id= 1
Register range= HOLDING REGISTER (lê o range 4xxxx)
Modbus data type= 2 BYTE SIGNED INTEGER
Offset (0-based) = 1
Bit= –

A base do modbus define se o primeiro endereço é 0 ou 1.
Exemplo:
Para ler o endereço 10 do modbus Base 0 você deve ler o endereço 9.

Att.
Fernando

Olá a todos, recebi um CLP da Infinium Automação, uma empresa brasileira, nos temos em nosso sitemas o Elipse E3, e trabalhavamos com o CLP Atos da série MCP, começamos a 2 meses atrás tentar desenvolver dentro de nossa prórpia empresa um sistema superviório de teste, para teste de nossa capacidade e do CLP Infinium que é consderavelmente mais barato que os Atos, porém devido a minha pouca experiência em desenvolvimento de sistemas e de  trabalho com protocolo ModBus RTU estou tendo a seguinte dificuldade de compreensão, quero escrever em um registro de memória de 16 bits que no manual do CLP é o endereço %MW6 4006, como pode ser ver ele aponta endereços com 4 digitos e não cinco, deveria apontar para esse registro como "Faixa de Registro = Registrador de entrada, Tipo de dados modbus = inteiro de 2 Bytes com sinal, offset = 60 (40000+60, 40060), Bit = 0? E só como exemplo fosse um registro %T302 com endereço modbus 9302, apontaria , como apontaria para ele?

Desde já agradeço muito se puderem me ajudar.

Joe Hamilton.