Fórum Marrari
Mapa de Memória - Versão de Impressão

+- Fórum Marrari (https://forum.marrari.com.br)
+-- Fórum: PSi 4 (https://forum.marrari.com.br/forumdisplay.php?fid=1)
+--- Fórum: Conceitos Básicos (https://forum.marrari.com.br/forumdisplay.php?fid=9)
+---- Fórum: Mapa de memória (https://forum.marrari.com.br/forumdisplay.php?fid=15)
+---- Tópico: Mapa de Memória (/showthread.php?tid=10)



Mapa de Memória - PSi4 - 10-06-2022

As informações são armazenadas no dispositivo Slave em quatro tabelas diferentes onde duas tabelas armazenam valores discretos on/off (bobinas) e outras duas tabelas armazenam valores numéricos (registros).
Entenda duas tabelas para cada tipo devido ao fato de que uma tabela é apenas leitura (read-only) e a outra tabela é leitura-escrita (read-write) e indepedente da tabela, elas possuem as mesmas caracteristicas, sendo que:
  • Cada tabela pode ter até 9999 valores;
  • Cada bobina ou contato é 1 bit atribuido a um endereço entre 0000 e 270E;
  • Cada registro é 1 palavra (word) = 16 bits = 2 bytes e também podem ter endereço de dados entre 0000 e 270E.
O números de bobina e registros podem ser pensados como nomes de locais, visto que eles não aparecem nas mensagens reais e sim os endereços de dados. Por exemplo, o primeiro registro de saida analogica, numero 40001 tem o endereço de dados 0000, sendo que a diferença entre estes dois valores se chama offse. 

Slave ID
Para cada Slave na rede é atribuido um unico endereço de 1 a 247 e quando o Master requisita dados, o primeiro byte da mesagem contem o endereço do Slave. Dessa forma, cada Slave sabe deve ou não ignorar a mensagem. Em outras palabras ele sabe se a mensagem é para ele ou não

Código de Função
O segundo byte da mensagem enviada pelo Master é o código de função e este numero diz ao escravo qual tabela deve acessar e se deve somente ler ou ler e escrever.

CRC
O CRC é uma checagem de redundancia ciclica e trata-se de dois bytes adicionais ao final de cada mensagem Modbus para detecção de erro. Cada byte na mensagem é utilizada para calcular o CRC e o dispositivo receptor também calcula o CRC e compara com o recebido pelo Master. Se qualquer bit enviado na mensagem estiver incorreto, o CRC calculado diferira do recebido e um erro será gerado.

Exemplo de Comando e Requisição Modbus
Imagine dois dispositivos interligados por uma rede serial que se comunica em Modbus. Em determinado momento, o Master precisa acessar os dispositivos Slave com endereço 17 e ler os valores de registro de saída analógica armazenada entre os endereços 40108 a 40110.

A requisição do Master para o exemplo acima ficara da seguinte forma:
11 03 006B 00003 7687, onde:
  • 11: É o endereço do Slave (11hex = 17);
  • 03: Código de Função 03 = ler registro de saída analogica;
  • 006B: o endereço de dados do primeiro registro requisitado (006B hex =17, +40001 de offset = 40108);
  • 0003: o número total de registros requisitados (ler 3 registros de 40108 a 40110);
  • 7687: o CRC (cyclic redundancy check) para checagem de erro.

Assim que o dispositivo com o endereço 17 receber a mesagem do Master, ele responderá com a seguinte mensagem:

11 03 06 AE41 5642 4340 49AD, onde:
  • 11: É o endereço do Slave (11hex = 17);
  • 03: Códigode função 03 = ler registro de saida analogica;
  • 06: O nhumero de bytes de dados contidos na mensagem (3 registros x 2 bytes cada = 6 bytes);
  • AE41: O dado armazenado no registro 40108;
  • 5642: O dado armazenado no registro 40109;
  • 4340: O dado armazenado no registro 40110;
  • 49AD: O CRC (cyclic redundancy check) para checagem de erro.