Modbus RTU, ASCII e TCP com o SerialTool

O que é o Modbus

Modbus é um protocolo de comunicação serial criado em 1979 pela Modicon® (agora parte da Schneider Electric) para conectar seus controladores lógicos programáveis (CLPs). Tornou-se um padrão de fato na comunicação industrial e é um dos protocolos de conexão mais amplamente utilizados globalmente entre dispositivos eletrônicos industriais. O Modbus é um protocolo livre de royalties declarado como especificações no site da The Modbus Organization.

Em termos simples, é um método usado para transmitir informações por meio de linhas seriais entre dispositivos eletrônicos. O dispositivo que solicita informações é chamado de Cliente Modbus, e os dispositivos que fornecem informações são Servidores Modbus. Em uma rede Modbus padrão, há um cliente e até 247 servidores, cada um com um endereço de servidor exclusivo de 1 a 247. O cliente também pode escrever informações nos servidores.


Originalmente projetado para uso industrial, ao longo do tempo, este protocolo foi adotado em vários setores, tornando-se um dos protocolos mais difundidos. Mesmo hoje, após mais de 40 anos, ele está disponível em muitos dispositivos, como painéis de operadores, CLPs, automação residencial e até mesmo integrado a dispositivos simples como o Arduino.

Transmissão Modbus RTU e ASCII via Serial

A comunicação, quando o protocolo foi criado, foi destinada a ser feita por meio de uma porta serial, razão pela qual foi implementada no SerialTool. O Modbus é frequentemente usado para conectar um computador supervisor a uma unidade terminal remota (UTR) em sistemas de supervisão, controle e aquisição de dados (SCADA). Dependendo do formato em que os dados são transmitidos, o protocolo é dividido em:

  • MODBUS RTU - dados são transmitidos em formato hexadecimal.
  • MODBUS ASCII - dados são transmitidos em formato ASCII.

O controle de erro difere nos dois casos; no MODBUS RTU, é usado um Checksum de Redundância Cíclica (CRC) e é enviado após os comandos, enquanto no MODBUS ASCII, um Checksum de Redundância Longitudinal (LRC) é enviado após os comandos.

Transmissão Modbus TCP

Em 1999, foi desenvolvido o "Modbus TCP", um padrão dedicado a redes que utilizam a suíte de protocolos TCP/IP. Essencialmente, é uma versão do Modbus série RTU baseada em TCP/IP, possibilitando a comunicação pela Internet/redes internas. Nos últimos anos, a versão TCP/IP é cada vez mais usada porque é de código aberto, fácil de implementar, tem baixos custos de desenvolvimento e requer suporte de hardware mínimo.

O controle de erro difere nos dois casos; no MODBUS RTU, é usado um Checksum de Redundância Cíclica (CRC) e é enviado após os comandos, enquanto no MODBUS ASCII, um Checksum de Redundância Longitudinal (LRC) é enviado após os comandos.

O protocolo Modbus TCP/IP utiliza a codificação binária de dados e o mecanismo de detecção de erro TCP/IP. Ao contrário do Modbus série, a versão TCP/IP é orientada para conexão e permite execuções concorrentes no mesmo escravo ou em vários dispositivos. O Modbus TCP/IP também utiliza o paradigma mestre-escravo, e essa comunicação utiliza quatro tipos de mensagens.

O Modbus está posicionado na camada 7 no modelo OSI (Camada de Aplicação), definindo a formatação de mensagem chamada framing e o modo de transmissão de dados e funções de controle. A comunicação ocorre por meio do paradigma cliente-servidor. O protocolo define uma Unidade de Dados de Protocolo (PDU) que não depende da camada de comunicação subjacente. A Unidade de Dados de Aplicação (ADU) introduz campos adicionais para endereçamento e controle de erro.

Cliente Modbus SerialTool

O SerialTool suporta os modos de transmissão RTU, ASCII e Modbus TCP para oferecer a máxima flexibilidade profissional de um Cliente Modbus.
O SerialTool também oferece a opção de enviar comandos Raw para atender às necessidades de cada desenvolvedor.

Tela com o registro de comandos enviados

Tela com comandos de baixo nível enviados


Funções Modbus

Aqui estão as funções que o SerialTool implementa para o protocolo Modbus.

Código de Função Ação Nome da Tabela
0x01 Ler Bobinas de Saída Discretas
0x02 Ler Contatos de Entrada Discretos
0x03 Ler Registro de Retenção de Saída Analógica
0x04 Ler Registros de Entrada Analógicos
0x05 Escrever Único Bobina de Saída Discreta
0x06 Escrever Único Registro de Retenção de Saída Analógica
0x0F (dec 15) Escrever Múltiplo Bobinas de Saída Discretas
0x10 (dec 16) Escrever Múltiplo Registros de Retenção de Saída Analógicos

Estruturas de Dados Modbus

As informações são armazenadas no dispositivo do servidor em quatro tabelas diferentes. Duas tabelas armazenam valores discretos ligados/desligados (bobinas) e duas armazenam valores numéricos (registros). Tanto as bobinas quanto os registros têm uma tabela somente leitura e uma tabela leitura/escrita. Cada tabela possui 9999 valores. Cada bobina ou contato é de 1 bit e tem um endereço de dados entre 0000 e 270E. Cada registro é de 1 palavra = 16 bits = 2 bytes e também possui um endereço de dados entre 0000 e 270E.

Números de Bobinas/Registros Endereços de Dados Tipo Nome da Tabela
1-9999 0x0000 a 0x270E Ler/Escrever Bobinas de Saída Discretas
10001-19999 0x0000 a 0x270E Somente Leitura Contatos de Entrada Discretos
30001-39999 0x0000 a 0x270E Somente Leitura Registro de Entrada Analógico
40001-49999 0x0000 a 0x270E Ler/Escrever Registro de Retenção de Saída Analógica