Estrutura de códigos utilizada no driver Modicon Modbus Master (ASC/RTU/TCP).

O objetivo deste artigo é detalhar os bytes que fazem parte da estrutura da Função “03” do protocolo Modbus. Esses bytes podem ser visualizados através do arquivo de log.

1) Estrutura

Todos os bytes do protocolo Modbus RTU/TCP estão no formato hexadecimal, exceto se o driver tiver sido configurado para comunicar com o protocolo Modbus ASCII.

No caso dos comandos (TX) para leitura via Função “03” do protocolo Modbus, a estrutura dos bytes segue esta sequência:

Comando Modbus RTU (com CRC):

Comando Modbus TCP (sem CRC):

Abaixo, temos a descrição dos bytes que devem ser interpretados:

No caso das respostas (RX) para a Função “03” do protocolo Modbus, a estrutura dos bytes segue esta sequência:

Resposta Modbus RTU (com CRC):

Resposta Modbus TCP (sem CRC):

Abaixo, temos a descrição dos bytes que devem ser interpretados

Para identificar corretamente o valor recebido através dos bytes, é necessário ter conhecimento da quantidade de registros solicitados pelo comando TX. Exemplo:

1. Um único registro: o valor estará contido nos últimos 2 bytes do RX (DD DD) antes do CRC, se houver.
2. Dois registros: os valores estarão contidos nos últimos 4 bytes do RX (DD1 DD1 DD2 DD2) antes do CRC, se houver.
3. Três registros: os valores estarão contidos nos últimos 6 bytes do RX (DD1 DD1 DD2 DD2 DD3 DD3) antes do CRC, se houver.
4. E assim por diante, onde cada registro de memória do equipamento retornará um valor de 16 bits (2 bytes).

2) Exemplo de leitura para um Tag PLC

Modbus RTU (com CRC):

Modbus TCP (sem CRC):

Levando-se em consideração o exemplo acima, podemos analisar os bytes e verificar tanto os parâmetros inseridos na configuração de cada tag como também o valor retornado pelo driver.

A partir do “TX”, verificamos que:

1. O ID (endereço) do equipamento na rede é 1.
2. Está utilizando a “Função 03” de leitura Modbus.
3. Os 2 bytes do endereço inicial da memória correspondem aos valores “00 66”. Como esses valores estão em hexadecimal, basta convertê-los para obter o endereço da memória Modbus, que nesse caso é 102 (igual a 0066h).
4. A quantidade de registros solicitados é igual a 1.

Modbus RTU (com CRC):

Modbus TCP (sem CRC):

Com base nas informações obtidas no TX, podemos identificar o valor recebido pelo driver através da resposta RX:

Modbus RTU (com CRC):

Modbus TCP (sem CRC):

Os últimos 2 bytes (devido à quantidade de registros solicitada) correspondem aos valores “1BD0” (memória 0066h).

Na conversão de hexadecimal para decimal, obtemos o valor 7120 para a Tag PLC.

3) Exemplo de leitura para um Tag BLOCO com 2 elementos:

Modbus RTU (com CRC):

Modbus TCP (sem CRC):

A partir do “TX”, verificamos que:

1. O ID (endereço) do equipamento na rede é 1.
2. Está utilizando a “Função 03” de leitura Modbus.
3.
Os 2 bytes do endereço inicial da memória correspondem aos valores “00
66”. Como esses valores estão em hexadecimal, basta convertê-los para
obter o endereço da memória modbus, que nesse caso é 102 (igual a
0066h).
4. A quantidade de registros solicitados é igual a 2 (um para cada elemento do Tag BLOCO).

Modbus RTU (com CRC):

Modbus TCP (sem CRC):

Com base nas informações obtidas no TX, podemos identificar o valor recebido pelo driver através da resposta RX:

Modbus RTU (com CRC):

Modbus TCP (sem CRC):

Os últimos 4 bytes (devido a quantidade de registros solicitada) correspondem aos valores “1BD0” (memória 0066h) e a “1AC6” (memória 0067h).

Na conversão de hexadecimal para decimal, obtemos o valor 7120 (tagBloco.Elemento1) e 6854 (tagBloco.Elemento2).

Print Friendly, PDF & Email

Este artigo foi útil? Was this helpful?

Classificação média - Average rating 0 / 5. Count: 0

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *