Modbus RTU, ASCII e TCP com SerialTool

Última atualização em por Oliver Reed

O que é Modbus

O protocolo Modbus é um protocolo de comunicação serial criado em 1979 pela Modicon® (empresa hoje pertencente ao grupo Schneider Electric) para permitir a comunicação entre seus controladores lógicos programáveis (PLCs). Tornou-se um padrão de facto nas comunicações industriais e atualmente é um dos protocolos de conexão mais utilizados no mundo entre dispositivos eletrônicos industriais. Modbus é um protocolo livre de royalties cujas especificações são publicadas no site da The Modbus Organization.

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


Originalmente destinado ao uso industrial, com o tempo este protocolo também foi adotado em outros setores e se tornou um dos mais difundidos. Ainda hoje, apesar de ter mais de 40 anos, ele continua presente em muitos dispositivos, como painéis de operação, PLCs, automação residencial e até dispositivos simples como Arduino.

Transmissão Modbus RTU e ASCII via serial

Quando o protocolo foi criado, a comunicação foi projetada para funcionar por porta serial, e por esse motivo ela foi implementada no SerialTool. O Modbus é frequentemente usado para conectar um computador de supervisão a uma unidade terminal remota (RTU) em sistemas SCADA (Supervisory Control and Data Acquisition). Dependendo do formato usado para transmitir os dados, o protocolo se divide em:

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

A verificação de erros difere nos dois casos: em MODBUS RTU é usado um CRC (Cyclic Redundancy Check) anexado aos comandos, enquanto em MODBUS ASCII é usado um LRC (Longitudinal Redundancy Check), também 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: na prática, trata-se de uma versão serial RTU do Modbus baseada em TCP/IP, o que permite comunicações em redes Internet/intranet. Nos últimos anos a versão TCP/IP vem sendo cada vez mais utilizada porque é Open Source, simples de implementar, de baixo custo de desenvolvimento e exige suporte mínimo de hardware.

A verificação de erros difere nos dois casos: em MODBUS RTU é usado um CRC (Cyclic Redundancy Check) anexado aos comandos, enquanto em MODBUS ASCII é usado um LRC (Longitudinal Redundancy Check), também enviado após os comandos.

O protocolo Modbus TCP/IP utiliza codificação binária de dados e o mecanismo de detecção de erros do TCP/IP. Ao contrário do Modbus serial, a versão TCP/IP é orientada à conexão e permite conexões simultâneas com o mesmo slave ou com múltiplos dispositivos. O Modbus TCP/IP também utiliza o paradigma mestre-escravo; essa comunicação utiliza ainda quatro tipos de mensagem.

O Modbus posiciona-se no nível 7 da pilha ISO/OSI (Camada de Aplicação), definindo a formatação das mensagens, chamada framing, e o modo de transmissão dos dados e das funções de controle. A comunicação ocorre por meio do paradigma cliente-servidor. O protocolo define uma Protocol Data Unit (PDU) que não depende da camada de comunicação subjacente. A Application Data Unit (ADU) introduz campos adicionais para endereçamento e controle de erros.

Cliente Modbus do SerialTool (Master / Polling)

O SerialTool é um cliente Modbus RTU, ASCII e TCP com polling, varredura de registradores, monitoramento de tráfego e gráficos em tempo real para testar e depurar dispositivos industriais.

O Cliente Modbus permite conectar-se a um dispositivo Modbus Slave/server por Serial (RTU ou ASCII) ou Rede (TCP sobre IPv4 ou IPv6), ler e gravar dados usando as funções padrão do Modbus e criar um dispositivo Modbus com seu próprio mapeamento no qual o polling programado pode ser executado.
No dispositivo protótipo é possível adicionar estruturas Modbus (Discrete Output Coils, Discrete Input Contacts, Analog Input Register, Analog Output Holding Register) e salvar o dispositivo para recarregá-lo sempre que necessário. O dispositivo protótipo Modbus também pode ser exportado em formato Texto, CSV ou PDF para ser compartilhado de forma simples e intuitiva.
Depois de criado um dispositivo com o mapeamento correto, é possível exibir gráficos em tempo real com os valores lidos diretamente do dispositivo Slave por meio de polling programado.
O SerialTool também oferece a possibilidade de visualizar o tráfego Modbus (Serial e TCP) em um terminal dedicado ao tráfego gerado e recebido. O terminal avançado suporta exportação de dados e filtragem em tempo real dos dados de entrada e saída.
O SerialTool também oferece a possibilidade de varrer o dispositivo Slave remoto por meio da função Modbus Scanner. Configurando os filtros corretos, é possível tentar mapear o dispositivo remoto (Modbus Slave) mesmo sem conhecer os registradores atualmente suportados. A função Modbus Scanner é especialmente útil quando se deseja explorar um dispositivo cujas características são desconhecidas ou apenas parcialmente conhecidas.

Abaixo está a tela principal do módulo Modbus do SerialTool:

Modbus Client (Master/Polling) Main page

Tela principal do Cliente Modbus do SerialTool

A tela principal destaca os principais recursos do SerialTool e do Cliente Modbus (Master).

Cliente Modbus do SerialTool (Master / Polling)

No lado esquerdo da tela é possível escolher o modo de conexão Serial ou TCP:

Modbus Client Connection

Tela de conexão do Cliente Modbus

Como indicado acima, o protocolo Modbus serial se divide em dois tipos: RTU e ASCII. Para comunicar-se corretamente com o dispositivo remoto, no caso de uma conexão serial é essencial saber qual tipo de protocolo Modbus é suportado pelo dispositivo Slave.

A conexão ModBus TCP, por sua vez, suporta IPv4 e IPv6. Para configurar a conexão Modbus via TCP é necessário definir o IP do slave e a porta remota à qual se conectar.

Na tela de conexão existem dois parâmetros para o tempo de resposta que o dispositivo Modbus Slave deve fornecer.
Um tempo limite genérico de resposta (Response Timeout), após o qual o Cliente (Master) deixa de aguardar a resposta do slave, e um tempo limite a partir do último byte recebido do Slave.

Emulação Modbus ENRON/Daniel

Entre os parâmetros de conexão está a emulação ENRON/Daniel (muitas vezes chamada simplesmente de Enron Modbus ou Daniels Modbus), que se refere a uma variante específica do protocolo padrão de comunicação Modbus.
Ela foi originalmente desenvolvida pela Enron Corporation e amplamente implementada nos flow computers da Daniel Measurement and Control. Com o tempo, tornou-se um padrão de facto para medição eletrônica de fluidos (EFM), especialmente no setor de Oil & Gas.

Habilitar a emulação ENRON/Daniel em um dispositivo altera o comportamento do Modbus para suportar os seguintes recursos principais:

  • 1. Tratamento de dados de 32 bits em um único registrador: Esta é a diferença técnica mais importante. No Standard Modbus, os registradores são de 16 bits (2 bytes) e exigem a leitura de dois registradores para um valor de 32 bits. No Enron Modbus, os valores de 32 bits são mapeados em um único registrador (4 bytes por registrador).
  • 2. Mapeamento específico de endereços: Utiliza faixas predefinidas para dados de 32 bits. A série 5000 (por exemplo 45001 - 45999) é para Long Integers, enquanto a série 7000 (por exemplo 47001 - 47999) é para Floating Points.
  • 3. Dados históricos e eventos: Suporta comandos especiais para extrair logs históricos e arquivos de alarmes, ao contrário do Modbus padrão, projetado quase exclusivamente para leitura em tempo real.
  • 4. Sem offset: O endereço solicitado corresponde exatamente ao número do registrador, eliminando o clássico “offset +1” típico do Modbus padrão.

Em resumo: Essa emulação é essencial para evitar erros de comunicação (desalinhamento de bytes) ao interagir com dispositivos que transmitem dados nativos de 32 bits no setor de Oil & Gas.


Funções do Cliente Modbus

Na parte central da tela encontram-se as funções Modbus suportadas pelo SerialTool.

Funções do Cliente Modbus

Funções suportadas para o modo Cliente Modbus

As funções do cliente ModBus podem ser resumidas na tabela a seguir.

Código de função Ação Nome da tabela / Descrição
0x01 Ler Discrete Output Coils
0x02 Ler Discrete Input Contacts
0x03 Ler Analog Output Holding Register
0x04 Ler Analog Input Registers
0x05 Escrita simples Discrete Output Coil
0x06 Escrita simples Analog Output Holding Register
0x07 Ler Exception Status
0x08 Diagnóstico Diagnóstico (Serial Line only)
0x0B (dec 11) Ler Comm Event Counter (Serial Line only)
0x0F (dec 15) Escrita múltipla Discrete Output Coils
0x10 (dec 16) Escrita múltipla Analog Output Holding Registers
0x11 (dec 17) Relatório Server ID (Serial Line only)
0x16 (dec 22) Escrita com máscara Holding Register
0x17 (dec 23) Leitura/Escrita múltipla Holding Registers
0x2B / 0x0E (dec 43 / 14) Ler Device Identification

Estruturas de dados Modbus

As informações são armazenadas no dispositivo Server em quatro tabelas diferentes. Duas tabelas armazenam valores discretos on/off (coils) e duas armazenam valores numéricos (registers). Coils e registers têm, cada um, uma tabela somente leitura e uma tabela de leitura/escrita. Cada tabela possui 9999 valores. Cada coil ou contact possui 1 bit e um endereço de dados entre 0000 e 270E. Cada register equivale a 1 palavra = 16 bits = 2 bytes e também possui um endereço de dados entre 0000 e 270E.

Números dos coils/registers Endereços de dados Tipo Nome da tabela
1-9999 0x0000 to 0x270E Leitura/Escrita Discrete Output Coils
10001-19999 0x0000 to 0x270E Somente leitura Discrete Input Contacts
30001-39999 0x0000 to 0x270E Somente leitura Analog Input Register
40001-49999 0x0000 to 0x270E Leitura/Escrita Analog Output Holding Register

Dispositivo Modbus

O SerialTool permite criar um dispositivo Modbus Slave que representa o mapeamento de registradores do dispositivo Slave ao qual você deseja se conectar. Esse mapeamento é muito importante porque permite visualizar, em uma tabela local, os valores presentes no dispositivo slave remoto.

Funções do Cliente Modbus

Modbus Slave functions map

Funções disponíveis para o Cliente Modbus

Na barra de funções é possível carregar um dispositivo previamente criado com a função "Load Device", salvar o dispositivo atual com "Save Device" e adicionar registradores individuais com "Add Item" ou múltiplos registradores com "Add Items" ao mapeamento do dispositivo.

Add Multiple Modbus Registers

Adicionando registradores Modbus ao mapeamento do dispositivo Modbus


Dispositivo Modbus Slave Memory Mapping

Área de memória do dispositivo Modbus Slave (dispositivo Modbus)

Depois que o mapeamento do dispositivo Modbus Slave é criado, o SerialTool permite salvá-lo para uso posterior ou exportar seu conteúdo em formato CSV, Texto ou PDF para compartilhamento e processamento com terceiros. A imagem a seguir mostra um exemplo de exportação do mapeamento de um dispositivo Modbus Slave:

Modbus Slave Mapping

Exemplo de exportação em PDF do mapeamento de um dispositivo Modbus Slave

Você pode baixar o PDF por meio deste link.

Polling Modbus

Criar um dispositivo Modbus Slave permite realizar polling, ou seja, a leitura programada de alguns registradores do dispositivo slave ao qual você está conectado.
Para isso, primeiro é necessário criar e mapear o Slave e adicionar o registrador ou os registradores para os quais se deseja executar o polling, como mostrado na figura a seguir:

Modbus Master to Slave Polling

A imagem mostra a adição de um item ao polling em direção ao slave

Depois que um ou mais itens forem adicionados ao polling, é possível iniciar o polling dos itens vinculados à lista de polling.

Modbus Master to Slave Polling Mask

A imagem mostra os itens selecionados para o polling

Acesso às funções Modbus

O cliente Modbus do SerialTool (Master/Polling) foi projetado para executar funções em três modos:

Modbus execute function

Execução de funções Modbus

  • "Execute from Device Table" - Executa a função Modbus com referência ao mapeamento do dispositivo.
  • "Execute Function" - Executa a função Modbus direta e mostra o resultado na janela de log.
  • "Send Raw Data" - Envia uma requisição direta formada por bytes hexadecimais e aguarda a resposta.

Execute from Device Table

Esse modo executa a função Modbus selecionada usando diretamente a tabela do dispositivo carregada ou criada localmente. O usuário pode selecionar o tipo de referência Modbus, como Coils, Discrete Inputs, Holding Registers ou Input Registers, escolher o endereço inicial e o número de elementos a serem lidos ou escritos e então enviar o comando ao slave com um único clique.
A principal vantagem desse modo é que o resultado é imediatamente refletido no mapa do dispositivo, atualizando os valores exibidos na tabela local. Dessa forma, é possível ter uma representação ordenada e persistente do estado do dispositivo remoto, útil tanto durante testes quanto em atividades de monitoramento e manutenção.
Quando o comando se refere a uma função de escrita, o SerialTool permite preparar facilmente os dados a serem transmitidos escolhendo o tipo de dado, o formato de exibição e o conteúdo a ser escrito nos registradores selecionados. Por isso, esse modo é especialmente adequado quando se deseja trabalhar diretamente na estrutura lógica do dispositivo Modbus.

Execute Function

O modo Execute Function permite executar uma função Modbus selecionando-a diretamente da lista de códigos de função disponíveis, como leitura de coils, leitura de discrete inputs, leitura de holding registers, leitura de input registers, escrita simples ou múltipla e outras funções suportadas pelo protocolo.
Nesse caso, a operação não fica limitada apenas à visualização no mapa do dispositivo, pois o resultado é exibido na área de log da aplicação. Essa abordagem é particularmente útil quando se deseja verificar rapidamente o conteúdo da resposta recebida, testar uma função Modbus específica ou realizar testes direcionados em endereços e quantidades variáveis sem necessariamente modificar o mapeamento do dispositivo.
O modo Execute Function também é muito conveniente para depuração, pois permite ver imediatamente o resultado do comando executado, os possíveis erros retornados pelo slave e as informações associadas à requisição e à resposta.

Send Raw Data

Esta função envia e recebe comandos arbitrários enviados ao slave em formato hexadecimal. Ela permite que o usuário digite manualmente a sequência de bytes a ser transmitida pela conexão ativa, como serial ou TCP/IP, sem construção automática do frame pelo software.
Esta função é muito útil para testes avançados, engenharia reversa, diagnóstico ou validação de dispositivos Modbus e protocolos compatíveis. Na prática, o cliente transmite exatamente os bytes inseridos pelo usuário, deixando controle total sobre o conteúdo do pacote. Isso torna possível simular requisições personalizadas, testar respostas anômalas ou enviar frames completos preparados manualmente.
Ao habilitar a opção de esperar pela resposta, o SerialTool também pode adquirir o frame de retorno recebido do slave e exibi-lo no log de tráfego, permitindo uma comparação imediata entre os dados transmitidos e os recebidos.

Modbus Raw Data

Envio de dados Raw

Função Modbus Scanner

O SerialTool inclui uma função de varredura dos endereços Modbus do dispositivo Slave conectado. Essa função permite explorar rapidamente um intervalo de endereços a partir de um endereço inicial até um endereço final, especificando também o código de função a ser usado durante a varredura.
O scanner é particularmente útil quando o mapeamento completo do dispositivo remoto não é conhecido com precisão ou quando se deseja verificar quais endereços são válidos e quais contêm dados significativos. Para cada endereço consultado, o SerialTool mostra na tabela o tipo de função usada, o endereço, o valor lido e o resultado da operação.
Esse modo acelera significativamente as atividades de diagnóstico e integração com dispositivos de terceiros, pois permite identificar rapidamente áreas da memória Modbus efetivamente usadas pelo slave e exportar os resultados da varredura para análises posteriores ou compartilhamento.

Modbus Slave Scanner

Tabela de endereços

Gráfico dos registradores Modbus do Slave

Os valores dos registradores Modbus podem ser exibidos em um gráfico. Essa função permite vincular um ou mais elementos do mapeamento do dispositivo a uma janela de gráfico dedicada, na qual os valores são plotados ao longo do tempo durante o polling ou as operações de atualização.
Cada registrador conectado ao gráfico pode ser exibido com sua própria curva, identificada por uma cor específica e por informações como referência Modbus, endereço, valor atual e o nome atribuído ao elemento. Dessa forma, é possível observar facilmente a tendência temporal de variáveis analógicas, setpoints, medições ou registradores numéricos que mudam durante a operação do dispositivo.
A função de gráfico é particularmente útil para monitoramento, testes e análise dinâmica, pois permite ver imediatamente como os dados evoluem ao longo do tempo sem se limitar apenas à leitura tabular.

Modbus Client/Slave Chart

Gráfico dos registradores Modbus

Log de tráfego Modbus

Todos os comandos enviados e recebidos são mostrados na janela de log de tráfego Modbus em bytes. O log de tráfego é uma ferramenta fundamental de depuração da comunicação porque permite uma visualização detalhada dos dados transmitidos pelo cliente e dos dados recebidos do dispositivo slave, mostrando as sequências de bytes em formato legível.
Graças a essa janela, é possível verificar o conteúdo real dos frames, confirmar que os comandos gerados estão corretos e diagnosticar eventuais problemas de timeout, respostas anômalas, exceções Modbus ou dados inesperados. O tráfego pode ser consultado durante o uso normal do cliente, durante o polling automático ou durante o envio de dados raw.
A janela de tráfego também oferece funções avançadas, como cópia de dados em formato ASCII ou hexadecimal, salvamento em arquivo, pesquisa no conteúdo, seleção de linhas e opções de personalização gráfica, como cores, fontes, espaçamento e configurações de exibição. Isso faz do log de tráfego não apenas um simples visualizador, mas também uma ferramenta operacional muito útil para desenvolvedores, técnicos e integradores.

Modbus Client/Slave Traffic

Tráfego Modbus