Você está na página 1de 15

Interface Solution Provider

Nota de Aplicação

Rede Modbus – Topologia e Protocolo

Introdução

O Protocolo Modbus
Estrutura de mensagem aberta desenvolvida pela Modicon na década de 70, utilizada para
comunicação entre dispositivos mestre-escravo / cliente-servidor. A Modicon foi posteriormente
adquirida pela Schneider e os direitos sobre o protocolo foram liberados pela Organização
Modbus. Muitos equipamentos industriais utilizam o Modbus como protocolo de comunicação, e
graças às suas características, este protocolo também tem sido utilizado em uma vasta gama de
aplicações como:

 Instrumentos e equipamentos de laboratório;


 Automação residencial;
 Automação de navios.

Sobre o Protocolo Modbus


O Modbus é um dos protocolos mais utilizados em automação industrial, graças à sua
simplicidade e facilidade de implementação, podendo ser utilizado em diversos padrões de meio
físico, como:

 RS-232;
 RS-485;
 Ethernet TCP/IP (MODBUS TCP).

A velocidade de comunicação varia em cada um desses padrões, bem como o comprimento


máximo da rede e o número máximo de dispositivos conectados.

O padrão RS-232 (Recommendad Standart-232) ou EIA-232 (Electronic Industries Alliance-232)


é utilizado apenas em comunicações do tipo ponto a ponto, ou seja, só admite dois dispositivos
na rede, que no caso do protocolo Modbus representa o mestre e 1 escravo. A velocidade
máxima desse padrão está em torno de 115Kbps, mas em alguns casos podem ser encontradas
taxas um pouco maiores, a distância máxima entre os dispositivos da rede está em torno de
30m.
Interface Solution Provider
Nota de Aplicação

O padrão RS-485 (Recommendad Standart-485) ou EIA-485 (Electronic Industries Alliance-485)


é muito utilizado na indústria e sem dúvida é um dos padrões mais utilizados pelo protocolo
Modbus. Esse padrão permite trabalhar com taxas de comunicação que podem chegar a
12Mbps e em alguns casos até 50Mbps, vale lembrar que quanto maior o comprimento da rede
menor será a velocidade de comunicação, a distância máxima da rede está em torno de 1200m,
e o número máximo de dispositivos no barramento da rede é de 32.

Figura 1 - RS485 para protocolo Modbus

O padrão Ethernet no protocolo Modbus possui algumas variações, podendo chegar a 100Mbps
ou até 10Gbps. A distância máxima pode variar de 100m até próximo de 200m dependendo do
tipo de cabo utilizado e das condições de instalação do mesmo.

Figura 2 - Uso do padrão Ethernet no Protocolo Modbus


Interface Solution Provider
Nota de Aplicação

Em alguns casos é possível utilizar redes em fibra ótica, fato que permite alcançar distâncias
maiores e melhores taxas de comunicação, bem como utilizar comunicação wireless.

É importante não confundir protocolo de comunicação com padrões físicos. Alguns protocolos
possuem seu padrão físico definido como é o caso da rede ASI e da rede CAN, sendo que
nesses casos o padrão físico é definido junto ao protocolo e não é possível alterá-lo.

Na figura abaixo vemos um exemplo de rede utilizando 0 protocolo Modbus, com um gateway
fazendo a conexão entre os dois tipos de Modbus, o serial em RS-485 e o TCP/IP em ethernet.
No mercado ainda existe a opção do gateway Modbus wireless. O mestre da rede, que nesse
caso é um CLP (Controlador Lógico Programável) envia e recebe dados dos escravos, que são
posteriormente um inversor de frequência, uma IHM (Interface Homem Máquina), um controlador
de temperatura e uma interface de I/O remota Modbus.

Figura 3 - Exemplo de rede com o protocolo Modbus

A estação mestre inicia a comunicação solicitando que os escravos enviem seus dados. Os
escravos, por sua vez, recebem a requisição do mestre e retornam os dados solicitados. Os
dados transmitidos podem ser discretos ou numéricos, ou seja, é possível enviar valores
numéricos como temperatura e pressão ou enviar um bit para ligar e desligar um motor. Na
figura a seguir podemos observar como é constituído o quadro de mensagens no protocolo
Modbus.
Interface Solution Provider
Nota de Aplicação

Figura 4 - Quadro de mensagens para Protocolo Modbus

Ao utilizar o meio físico Ethernet o protocolo MODBUS opera com o mecanismo de controle de
acesso CSMA-CD, que é próprio da rede Ethernet, com mensagens no modelo cliente-servidor.

Modos de transmissão
Na especificação do protocolo Modbus estão definidos dois modos de transmissão:

 ASCII;
 RTU.

Os modos definem a forma como são transmitidos os bytes da mensagem, e como a informação
da mensagem será empacotada na mensagem e descompactada. Não é possível utilizar os dois
modos de transmissão na mesma rede. O modo de transmissão pode ser selecionado com
outros parâmetros da porta de comunicação serial, mas existem equipamentos que não
permitem essa seleção, pois possuem modo de transmissão fixo, como por exemplo alguns
CLPs e inversores de frequência que utilizam o modo RTU por padrão.
Interface Solution Provider
Nota de Aplicação

Endereços no Protocolo Modbus


Ao todo o protocolo Modbus possui 256 endereços onde:

 0 - (Zero) é o endereço de Broadcast, quando o mestre envia uma mensagem para o


endereço zero, todos os escravos recebem a mensagem;
 1 até 247 -Endereços disponíveis para os escravos;
 248 até 255 Endereços reservados.

O mestre não possui endereço, somente os escravos devem possuir endereço definido.

Código da Função
É onde o mestre especifica o tipo de serviço ou função solicitada ao escravo (leitura, escrita,
etc). No protocolo Modbus, cada função é utilizada para acessar um tipo específico de dado.

Tabela1: funções no Protocolo Modbus

Código da Descrição
função
1 Leitura de bloco de bits do tipo coil(saída discreta).
2 Leitura de bloco de bits do tipo entradas discretas.
3 Leitura de bloco de registradores do tipo holding.
4 Leitura de bloco de registradores do tipo input.
5 Escrita em um único bit do tipo coil(saída discreta).
6 Escrita em um único registrador do tipo holding.
7 Ler o conteúdo de 8 estados de exceção.
8 Prover uma série de testes para verificação da comunicação e erro internos.
11 Modbus: Obter o contador de eventos.
12 Modbus: Obter um relatório de eventos.
15 Escrita em bloco de bits do tipo coil(saída discreta).
16 Escrita em bloco de registradores do tipo holding.
17 Ler algumas informações do dispositivo.
20 Ler informações de um arquivo.
21 Escrever informações em um arquivo.
22 Modificar o conteúdo de registradores de espera através de operações
lógicas.
23 Combina ler e escrever em registradores numa única transação.
24 Ler o conteúdo da fila FIFO de registradores.
43 Identificação do modelo do dispositivo.
Interface Solution Provider
Nota de Aplicação

Modo de transmissão ASCII


Quando os equipamentos são configurados para se comunicarem em uma rede Modbus usando
ASCII (American Standard Code for Information Interchange), cada byte em uma mensagem é
enviado como dois caracteres ASCII. Apesar de gerar mensagens legíveis pela tabela ASCII
esse modo consome mais recursos da rede. A principal vantagem dessa modalidade é que
permite que os intervalos de tempo sejam cerca de um segundo para correr entre os caracteres
sem causar erro.

Os dispositivos monitoram constantemente a rede para o início de uma mensagem. Quando uma
mensagem é iniciada pelo mestre, todos os dispositivos da rede decodificam o campo de
endereço para determinar qual escravo deve receber a mensagem. O inicio de uma mensagem
é reconhecido pelo caractere (:) dois pontos.

O formato para cada byte em modo ASCII é:

 Codificação do sistema: Hexadecimal, caracteres ASCII 0-9, A-F, um caractere


hexadecimal contido em cada caractere ASCII da mensagem;
 Bits por Byte:

1 bit de início

7 bits de dados, bit menos significativo primeiro


1 bit para paridade par / ímpar, ou sem bit de paridade
1 bit de parada, se a paridade é usado; 2 bits se sem paridade

 16 bits Campo Erro check : Longitudinal Redundancy Check (LRC)

Intervalos de até um segundo podem decorrer entre caracteres dentro da mensagem. Se


ocorrer um intervalo maior, o dispositivo receptor assume que ocorreu um erro. O campo de
checagem de erros é baseado no método LRC (Longitudinal Redundancy Check).
Interface Solution Provider
Nota de Aplicação

Modbus – Modo de transmissão RTU (Remote Terminal


Unit)
No modo RTU (Remote Terminal Unit), cada mensagem de 8 bits contém dois caracteres
hexadecimais de 4 bits. A principal vantagem desse modo é que sua maior densidade de
caracteres permite um melhor processamento de dados do que o modo ASCII para o mesmo
baudrate (velocidade de comunicação). Cada mensagem deve ser transmitida em um fluxo
contínuo de caracteres.

Figura 5: RTU Modbus

No modo RTU não existe um caractere específico que indique o início ou o fim de um telegrama.
A indicação de quando uma nova mensagem começa ou quando ela termina é feita pela
ausência de transmissão de dados na rede, por um tempo mínimo de 3,5 vezes o tempo de
transmissão de um byte de dados. Sendo assim, caso um telegrama tenha iniciado após a
decorrência desse tempo mínimo, os elementos da rede irão assumir que o primeiro caractere
recebido representa o início de um novo telegrama. E da mesma forma, os elementos da rede
irão assumir que o telegrama chegou ao fim quando, recebidos os bytes do telegrama, este
tempo decorra novamente.

Se durante a transmissão de um telegrama o tempo entre os bytes for maior que este tempo
mínimo, o telegrama será considerado inválido, pois o controlador irá descartar os bytes já
recebidos e montará um novo telegrama com os bytes que estiverem sendo transmitidos. O
tempo para transmitir uma palavra do quadro varia de 573us para taxas de comunicação acima
de 19200bits/s e 9 ms para a taxa de 1200bits/s.

O campo de checagem de erros é baseado no método CRC (Cyclical Redundancy Checking) .


Modbus TCP
Modbus TCP é uma implementação do protocolo Modbus baseado em TCP/IP. Utiliza a pilha
TCP/IP para comunicação e adiciona ao quadro Modbus um cabeçalho específico chamado
MBAP (MODBUS Application Protocol). O modelo de mensagem Modbus TCP/IP fica da
seguinte forma:
Interface Solution Provider
Nota de Aplicação

O cabeçalho MBAP tem tamanho de 7 bytes, e é composto pelos seguintes campos:

 Transaction identifier: usado para identificação da resposta para a transação (2 bytes);


 Protocol identifier: 0 (zero) indica Modbus (2 bytes);
 Length: contagem de todos os próximos bytes (2 bytes);
 Unit identifier: utilizado para identificar o escravo remoto em uma rede Modbus RTU (1
byte).

Modbus TCP não acrescenta ao quadro um campo de checagem de erros, entretanto o frame
ethernet já utiliza CRC-32 tornando desnecessário outro campo de checagem. O cliente Modbus
TCP deve iniciar uma conexão TCP com o servidor a fim de enviar as requisições. A porta TCP
502 é a porta padrão para conexão com servidores Modbus TCP.

Em uma rede padrão Modbus, podemos ter um Master e até 247 Slaves, sendo que cada um
recebe um endereço de 1 a 247. Por este endereçamento, o Master pode escrever as
informações nos escravos.

Funcionamento do Protocolo Modbus


O Modbus é transmitido sobre redes seriais que conectam dispositivos e sua configuração mais
simples seria um cabo serial conectando portas seriais de dois dispositivos (Master e Slave).

Os dados são enviados em uma série de uns e zeros (1’s e 0’s) chamado bits, onde cada bit é
enviado como um voltagem onde os 0’s são voltagens positivas e os 1’s voltagens negativas. Os
bits são enviados muito rapidamente e uma transmissão típica pode atingir a velocidade de 9600
baud (bits por segundo).
Interface Solution Provider
Nota de Aplicação

Leitura de dados Hexadecimal


Quando você se deparar com problemas, pode ser útil ver os dados reais que estão sendo
transmitidos. Neste sentido, strings longas compostas por 0’s e 1’s podem ser difíceis de se ler
sendo mais fácil sua interpretação quando combinados em hexadecimal, onde cada bloco de 4
bits são representados por 16 caracteres (0 a F). Veja a tabela abaixo:

0000 = 0 0100 = 4 1000 = 8 1100 = C


0001 = 1 0101 = 5 1001 = 9 1101 = D
0010 = 2 0110 = 6 1010 = A 1110 = E
0011 = 3 0111 = 7 1011 = B 1111 = F

Baseando-se na tabela, podemo dizer que cada bloco de 8 bits (chamado byte) pode ser
representado por 256 caracteres que variam de 00 a FF.

Endereço em ASCII
O padrão ASCII (American Standard Code for Information Interchange) é uma combinação de 8
Bits formando 1 Byte que juntos representam cada caractere em uma combinação de 256 ASCII
caracteres, incluindo letras e números de um teclado. Veja na tabela abaixo alguns dos
caracteres ASCII e a correlação com as representações binárias, decimal e hexadecimal:

ASC(base10) binary(base2) Hex(base16) ASCII(base256)


0 0000 0000 00 null

1 0000 0001 01 “

34 0010 0010 22 #

35 0010 0011 23 $

36 0010 0100 24 %

47 0010 1111 2F /

48 0011 0000 30 0

49 0011 0001 31 1
Interface Solution Provider
Nota de Aplicação

56 0011 1000 38 8

57 0011 1001 39 9

58 0011 1010 3A :

64 0100 0000 40 @

65 0100 0001 41 A

66 0100 0010 42 B

89 0101 1001 59 Y

90 0101 1010 5A Z

91 0101 1011 5B [

95 0101 1111 5F _

96 0110 0000 60 `

97 0110 0001 61 a

122 0111 1010 7A z

123 0111 1011 7B {

174 1010 1110 AE ®

255 1111 1111 FF

Armazenamento de Dados no Modbus


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 outra tabela é leitura-escrita (read-write) e independente do tipo de tabela, elas possuem
as mesmas características, sendo que:
Interface Solution Provider
Nota de Aplicação

 Cada tabela pode ter até 9999 valores;


 Cada bobina ou contato é 1 bit atribuído a um endereço entre 0000 e 270E;
 Cada registro é 1 palavra (word) = 16 bits = 2 bytes e também pode ter endereço de dados entre
0000 e 270E.

Números Endereço do Nome da


Tipo
Bobinas/Registros Dado Tabela
Read- Saídas Discretas
1-9999 0000 to 270E
Write (Bobinas)

Read- Entradas Discretas


10001-19999 0000 to 270E
Only (Contatos)

Registros de
Read-
30001-39999 0000 to 270E Entradas
Only
Analógicas

Read- Registros de
40001-49999 0000 to 270E
Write Saídas Analógicas

Os números de bobinas e registros podem ser pensados como nomes de locais, uma vez que
eles não aparecem nas mensagens reais e sim os endereços de dados. Por exemplo, o primeiro
registro de saída analógica, número 40001 tem o endereço de dados 0000, sendo que a
diferença entre estes dois valores se chama offset. Veja que cada tabela possui um offset
diferente (1, 10001, 30001 e 40001).

Slave ID no Protocolo Modbus


Para cada Slave na rede é atribuído um único endereço de 1 a 247 e quando o Master requisita
dados, o primeiro byte da mensagem contem o endereço do Slave. Dessa forma, cada Slave
sabe se deve ou não ignorar a mensagem. Em outras palavras ele sabe se a mensagem é pra
ele ou não.
Código de Função no Protocolo Modbus
O segundo byte da mensagem envida pelo Master é o código de função e este número diz ao
escravo qual tabela deve acessar e se deve somente ler ou ler e escrever. Veja abaixo uma
tabela com os códigos de função:
Interface Solution Provider
Nota de Aplicação

Código de Função Ação Nome da Tabela


01 (01 hex) Read Saídas Discretas (Bobinas)

05 (05 hex) Write single Saídas Discretas (Bobinas)

15 (0F hex) Write multiple Saídas Discretas (Bobinas)

02 (02 hex) Read Entradas Discretas (Contatos)

04 (04 hex) Read Registro de Entrada Analógica

03 (03 hex) Read Registro de Saída Analógica

06 (06 hex) Write single Registro de Saída Analógica

16 (10 hex) Write multiple Registro de Saída Analógica

CRC no Endereço Modbus


O CRC é uma checagem de redundância cíclica e trata-se de dois bytes adicionados ao final de
cada mensagem Modbus para detecção de erro. Cada byte na mensagem é utilizado para
calcular o CRC e o dispositivo receptor também calcula o CRC c compara com o recebido pelo
master. Se qualquer bit enviado na mensagem estiver incorreto, o CRC calculado será diferente
do recebido e um erro será gerado.

Comando e Requisição no Endereço Modbus


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

A requisição do Master para o exemplo acima ficará da seguinte forma:

11 03 006B 0003 7687, onde:

 11: É o endereço do Slave (11hex = 17)


 03: Código de Função 03 = ler registo de saída analógica
 006B: O endereço de dados do primeiro registro requisitado (006B hex = 107, + 40001 de offset
= 40108)
 0003: O número total de registros requisitados (ler 3 registos de 40108 a 40110);
 7687: o CRC (cyclic redundancy check) para checagem de erro.
Interface Solution Provider
Nota de Aplicação

Assim que o dispositivo com o endereço 17 receber a mensagem 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ódigo de Função 03 = ler registo de saída analógica
 06: O número 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.

Tipos de Dados os Registros no Endereço Modbus


O exemplo acima mostra que o registro contem o dado AE41 que convertido em bits, temos
1010 1110 0100 0001. Correto, mas o que isto significa? Significa que o registro 40108 pode ser
definido como um dos 16-bit tipos de dados abaixo:
 16-bit unsigned integer (número entre 0 e 65535): AE41 = 44609 (conversão hex para
decimal)
 16-bit integer (número entre -32768 e 32768): AE41 = 44609 – 65536 = -20.927
 Uma string de 2 caracteres ASCII: AE41 = ® A

O registro 40108 pode ainda ser combinado com o 40109 para formar um dos 32-bit tipos de
dados abaixo:

 32-bit unsigned integer (número entre 0 e 4,294,967,295): AE41 5652 = 2,923,517,522


 32-bit integer (número entre -2,147,483,648 e 2,147,483,648): AE41 5652 = -1,371,449,774
 32-bit ponto flutuante: AE41 5652 = -4.395978 E-11
 Um caractere ASCII string (4 tipos de letras): AE41 5652 = ®AVR

Comparando Endereços Modbus ASCII x RTU


Como pudemos ver, cada byte de dado pode ser representado por diferentes maneiras:

 Binario (base2): 10101110 – 2 caracteres (0 e 1)


 Decimal (base10): 174 – 10 caracteres (0 até 9)
 Hexadecimal (base16): AE – 16 caracteres (0 até F)
 ASCII (base 256): ® – 256 caracteres diferentes

Delimitador de Mensagem no Modbus


No Modbus RTU, bytes são enviados consecutivamente sem espaço entre eles com um
caractere 3-1/2 de espaço delimitador entre as mensagens. Isto permite que o software saiba
quando uma nova mensagem está começando.Qualquer atraso entre bytes vai fazer com que o
Modbus RTU interprete isso como o início de uma nova mensagem e isto faz com que o RTU
não funcione bem em modens.
Interface Solution Provider
Nota de Aplicação

Já o Modbus ASCII demarca o início de cada mensagem com o caractere “:” (hex 3A) e o final
de cada mensagem é terminado com os caracteres de retorno e alimentação de linha (hex 0D e
0A) permitindo o espaço entre bytes seja variável tornando adequado para transmissões em
alguns modens.

Tamanho do Byte no Endereço Modbus


Em Modbus RTU cada byte é enviado como uma string de 8 caracteres binários enquadrado
com um bit de início e um bit de parada, demarcando cada byte em 10 bits.Em Modbus ASCII, o
número de bits de dado é reduzido de 8 para 7 pois o bit de paridade é adicionado antes do bit
de parada mantendo o tamanho atual do byte em 10 bits.

Divisão de Bytes de Dados no Endereço ASCII


Em Modbus ASCII, cada byte de dado é dividido em 2 bytes representando 2 caracteres ASCII
em valor hexadecimal. Veja exemplo na tabela abaixo:

Modbus Mode data (ASCII) data (hex) data (binary)


Modbus RTU ® AE 1010 1110

Modbus ASCII A,E 41 , 45 100 0001 , 100 0101

A variação dos bytes de dados em Modbus RTU pode ser qualquer caractere de 00 a FF. Por
outro lado a variação de bytes de dados em ASCII representa apenas os 16 caracteres
hexadecimais.

Erro Checksum – Cálculo LRC


Como mencionado anteriormente, cada mensagem Modbus RTU é terminada com 2 bytes de
checagem de erro chamado de CRC. Similarmente, Modbus ASCII é terminado com checagem
de erro chamada LRC ou Longitudinal Redudancy Check e o cálculo LRC é muito mais fácil do
que o CRC.

Exemplo de ASCII x RTU


Vamos utilizar o exemplo de requisição do registros 40108 a 40110 do Slave com endereço 17:

11 03 00 6B 00 03
Interface Solution Provider
Nota de Aplicação

A requisição ASCII é feita primeiramente adicionando na mensagem os delimitadores de


caracteres e os dois pontos é adicionado no início da mensagem e o LRC antes do CR (retorno
de linha) e LF (alimentação de linha). Veja abaixo como fica:

: 11 03 00 6B 00 03 7E CR LF

Cada caractere é então tratado como um caractere ASCII e substituído com suas respectivas
representações hexadecimais, ficando da seguinte forma:

3A 3131 3033 3030 3642 3030 3033 3745 0D 0A

Esta requisição Modbus ASCII possui 17 bytes ou 170 bits

Na mensagem equivalente RTU, temos o seguinte:


: 11 03 00 6B 00 03 76 87

Neste caso, veja que o tamanho da requisição em RTU possui o tamanho de 8 bytes (80 bits).

Rua Visconde de Inhaúma, 83 – 17º andar.


Centro – Rio de Janeiro/RJ – CEP – 20090-003
Tel. : (21) 98169-0800
E-Mail: interface.solution@outlook.com

Você também pode gostar