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 |