Fundamentos do Protocolo Modbus
1.1 O que é Modbus?
Modbus é um protocolo de comunicação serial mestre-escravo, criado em 1979 pela Modicon (agora Schneider Electric). É um dos protocolos mais amplamente utilizados na automação industrial para troca de dados entre CLPs, sensores, medidores, inversores de frequência e outros dispositivos.
Características Principais:
- Arquitetura Mestre-Escravo: Um mestre inicia requisições ativamente, enquanto múltiplos escravos respondem passivamente.
- Simples e Eficiente: Estrutura de trama concisa, fácil de implementar.
- Aberto e Gratuito: Especificações do protocolo são públicas, sem custos de licenciamento.
- Multiplataforma: Suporta comunicação serial (RS485/RS232) e Ethernet (TCP/IP).
1.2 Modos de Transmissão Modbus
| Modo | Camada Física | Codificação | Verificação | Características |
|---|---|---|---|---|
| Modbus RTU | RS485 / RS232 | Binária | CRC-16 | Mais comum, compacto e eficiente. |
| Modbus ASCII | RS485 / RS232 | Texto (caracteres hexadecimais) | LRC | Alta legibilidade, baixa eficiência, raramente usado. |
| Modbus TCP | Ethernet (TCP/IP) | Binária | Nenhuma (TCP possui verificação própria) | Alta velocidade, pode atravessar redes. |
1.3 Principais Diferenças entre Modbus TCP e RTU
| Dimensão | Modbus RTU | Modbus TCP |
|---|---|---|
| Camada Física | Serial RS485/RS232 | Ethernet TCP/IP |
| Início da Trama | Intervalo de silêncio de 3.5 caracteres | Cabeçalho MBAP (7 bytes) |
| Verificação | CRC-16 (2 bytes) | Nenhuma (depende da verificação TCP e retransmissões) |
| Conexão | Sem conexão, half-duplex | Com conexão, full-duplex, conexão persistente |
| Endereço | Endereço do Escravo (1 byte) | Unit ID (1 byte no MBAP) |
| Tamanho Máximo da Trama | ≤ 256 bytes | ≤ 1492 bytes (limitado por MTU) |
| Taxa Típica | 9600 ~ 115200 bps | 10/100/1000 Mbps |
| Nós Máximos | 32 (expansível para 247) | Teoricamente ilimitado |
| Distância de Transmissão | ≤ 1200 metros (sem repetidor) | Atravessa redes e campi. |
1.4 Quatro Tipos de Registradores Modbus
Modbus mapeia os dados do dispositivo em 4 tipos de registradores:
| Tipo de Registrador | Faixa de Endereço do CLP | Permissões Leitura/Escrita | Largura de Dados | Uso Típico |
|---|---|---|---|---|
| Coils (Bobinas) | 00001 ~ 09999 | Leitura/Escrita | 1 bit | Válvulas solenoides, LEDs, saídas de relé. |
| Discrete Inputs (Entradas Discretas) | 10001 ~ 19999 | Somente Leitura | 1 bit | Entradas digitais, status de fim de curso. |
| Input Registers (Registradores de Entrada) | 30001 ~ 39999 | Somente Leitura | 16 bits | Entradas analógicas (temperatura, pressão). |
| Holding Registers (Registradores de Retenção) | 40001 ~ 49999 | Leitura/Escrita | 16 bits | Configuração de parâmetros, saídas analógicas (AO), valores de configuração. |
Entendimento Chave: Endereços do CLP (ex: 40001) são "endereços lógicos" para humanos. Na comunicação real, endereços de offset baseados em zero são usados. Ex: 40001 → offset 0, 40010 → offset 9.
1.5 Tabela de Códigos de Função Modbus
O código de função é um byte central na trama de requisição Modbus, determinando "o que ler/escrever".
| Código de Função (Hex) | Código de Função (Dec) | Nome | Objeto da Operação | Tipo de Operação |
|---|---|---|---|---|
| 0x01 | 01 | Read Coils | Bobinas (0xxxx) | Leitura (bit) |
| 0x02 | 02 | Read Discrete Inputs | Entradas Discretas (1xxxx) | Leitura (bit) |
| 0x03 | 03 | Read Holding Registers | Registradores de Retenção (4xxxx) | Leitura (palavra) |
| 0x04 | 04 | Read Input Registers | Registradores de Entrada (3xxxx) | Leitura (palavra) |
| 0x05 | 05 | Write Single Coil | Bobinas (0xxxx) | Escrita (bit único) |
| 0x06 | 06 | Write Single Register | Registradores de Retenção (4xxxx) | Escrita (palavra única) |
| 0x0F | 15 | Write Multiple Coils | Bobinas (0xxxx) | Escrita (múltiplos bits) |
| 0x10 | 16 | Write Multiple Registers | Registradores de Retenção (4xxxx) | Escrita (múltiplas palavras) |
Regra de Resposta de Exceção: O escravo retorna código de função + 0x80, com um código de exceção nos dados. Ex: requisição com código de função 0x03, resposta 0x83 indica exceção.
1.6 Estrutura da Trama Modbus
Trama Modbus RTU
┌────────┬──────────┬──────────┬──────────┬──────────┐
│ Endereço │ Código de Função │ Campo de Dados │ CRC Baixo │ CRC Alto │
│ 1 Byte │ 1 Byte │ N Bytes │ 1 Byte │ 1 Byte │
└────────┴──────────┴──────────┴──────────┴──────────┘
↑ Pelo menos 3.5 caracteres de silêncio antes da trama
Trama Modbus TCP (MBAP + PDU)
┌────────────┬────────────┬──────────┬──────────┬──────────────┐
│ Identif. Transação │ Identif. Protocolo │ Campo de Comprimento │ Identif. Unidade │ PDU (Código de Função + Dados) │
│ 2 Bytes │ 2 Bytes (=0) │ 2 Bytes │ 1 Byte │ N Bytes │
└────────────┴────────────┴──────────┴──────────┴──────────────┘
1.7 Tabela de Códigos de Exceção Modbus
| Código de Exceção (Hex) | Nome | Significado |
|---|---|---|
| 0x01 | Illegal Function | Código de função não suportado. |
| 0x02 | Illegal Data Address | Endereço de dados inválido (endereço inexistente). |
| 0x03 | Illegal Data Value | Valor de dados inválido (fora da faixa permitida). |
| 0x04 | Slave Device Failure | Falha no dispositivo escravo. |
| 0x05 | Acknowledge | Confirmado, mas o processamento não foi concluído. |
| 0x06 | Slave Busy | Escravo ocupado, incapaz de responder. |
Operação Inicial com Modbus Poll
2.1 Introdução ao Software
Modbus Poll, desenvolvido pela Witte Software, é um simulador de mestre Modbus essencial para engenheiros de automação industrial na depuração de dispositivos escravos Modbus.
- Suporta Modbus RTU / ASCII / TCP / UDP.
- Permite múltiplas janelas para monitorar diferentes escravos ou áreas de registro simultaneamente.
- Oferece captura de pacotes, registro de dados e gráficos em tempo real.
- Versão mais recente: v13.2.0 (suporta comunicação segura Modbus TLS).
Download oficial: www.modbustools.com
Restrições de avaliação: desconexão automática após 10 minutos, impossibilidade de estabelecer conexões após 30 dias.
2.2 Instalação e Primeira Execução
- Baixe a versão correspondente do site oficial (32 bits / 64 bits / ARM64).
- Execute o instalador e siga as instruções.
- Na primeira execução, uma janela de registro aparecerá. Clique em "Register Later" para usar a versão de avaliação.
- Recomenda-se instalar Modbus Poll e Modbus Slave em diretórios diferentes para evitar a sobreposição de arquivos de configuração.
2.3 Passo 1: Estabelecer Conexão
Conexão Serial (RTU/ASCII)
Caminho: Connection → Connect... (F3)
| Parâmetro | Valor Típico | Descrição |
|---|---|---|
| Connection Type | Serial | Seleciona conexão serial. |
| Serial Port | COM3 (exemplo) | Selecione a porta serial correta. |
| Baud Rate | 9600 | Valores comuns: 9600 / 19200 / 115200. |
| Parity | None | None / Even / Odd. |
| Data Bits | 8 | Geralmente 8. |
| Stop Bits | 1 | Geralmente 1. |
| Mode | RTU | 99% dos dispositivos usam RTU; dispositivos mais antigos podem usar ASCII. |
| Timeout | 1000 ms | Tempo limite de resposta; pode ser estendido para 2000ms em redes complexas. |
| Scan Rate | 1000 ms | Intervalo de polling. |
Conexão TCP
Caminho: Connection → Connect... → Selecione TCP/IP
| Parâmetro | Valor Típico | Descrição |
|---|---|---|
| IP Address | 192.168.1.100 | Endereço IP do dispositivo escravo. |
| Port | 502 | Porta padrão do Modbus TCP. |
| Timeout | 1000 ms | Tempo limite de conexão. |
| IPv4 / IPv6 | IPv4 | Geralmente IPv4. |
Quick Connect
Connection → Quick Connect (F5): Útil para configurações usadas com frequência, permitindo conexão rápida com um clique.
2.4 Passo 2: Configurar Janela de Leitura/Escrita
Após conectar com sucesso, configure "o que ler e de onde ler":
Caminho: Setup → Read/Write Definition... (F8)
| Parâmetro | Descrição | Exemplo |
|---|---|---|
| Slave ID | Endereço do escravo (1-247). | 1 |
| Function | Código de função. | 03 (Ler Registradores de Retenção). |
| Address | Endereço inicial (endereço de offset, começando em 0!). | 0 (corresponde ao endereço CLP 40001). |
| Quantity | Número de registradores a ler. | 10 |
| Scan Rate | Período de polling (milissegundos). | 1000 |
| Alias | Nome para o registrador, para facilitar a memorização. | "Sensor de Temperatura" |
Fórmula de Conversão de Endereço: Endereço CLP 40001 → Preencher 0, Endereço CLP 40010 → Preencher 9. Ou seja, Endereço CLP - 40001 = Endereço de Offset.
2.5 Operações Básicas
Leitura de Dados
Após a conexão e configuração da janela de leitura/escrita, o Modbus Poll começa a consultar automaticamente. A janela principal exibe os dados retornados pelo escravo em tempo real.
Escrita de Dados
- Dê um duplo clique em um valor na área de dados → uma caixa de edição aparecerá → digite o novo valor → clique OK.
- Esta funcionalidade é extremamente útil para ajustar parâmetros do dispositivo, como modificar um valor de setpoint de temperatura diretamente.
Visualização de Mensagens de Comunicação
Display → Communication...: Abre uma janela que exibe os dados brutos hexadecimais enviados e recebidos em tempo real, juntamente com informações decodificadas. É a principal ferramenta para solucionar problemas.
Gráfico em Tempo Real
Display → Real Time Charting: Plota os dados dos registradores como curvas em tempo real. Ideal para observar tendências de variação de dados. Clique com o botão direito em um dado → Link To Chart para associá-lo.
Funcionalidades Avançadas do Modbus Poll
3.1 Monitoramento Paralelo com Múltiplas Janelas
O Modbus Poll suporta a interface MDI (Multiple Document Interface), permitindo:
- Abrir múltiplas abas de conexão simultaneamente.
- Cada janela pode ter configurações independentes de Slave ID, código de função e faixa de endereço.
- Monitorar múltiplos dispositivos ou diferentes blocos de registradores do mesmo dispositivo ao mesmo tempo.
Cenário Prático: Um CLP pode ter centenas de registradores distribuídos em diferentes áreas (temperatura, pressão, fluxo, status). Usar várias janelas para monitorar essas áreas separadamente torna a visualização clara.
3.2 Formatos de Dados e Exibição
Clique com o botão direito na área de dados → Format para alterar o formato de exibição:
| Formato | Descrição | Cenário de Uso |
|---|---|---|
| Signed | Inteiro de 16 bits com sinal. | Temperaturas (podem ser negativas). |
| Unsigned | Inteiro de 16 bits sem sinal. | Contadores, códigos de status. |
| Float | Ponto flutuante de precisão simples (ocupa 2 registradores). | Valores analógicos precisos. |
| Hex | Hexadecimal. | Visualizar dados brutos, comparar com a documentação do protocolo. |
| ASCII | Caractere ASCII. | Identificadores de dispositivo, números de versão. |
| Binary | Binário. | Verificar status de bits. |
Tratamento de Endianness: Se dados de 32 bits (Float/Long) forem exibidos incorretamente, tente:
Swap Bytes: Troca a ordem dos bytes.Swap Words: Troca a ordem das palavras (pares de bytes).
Ordem de Bytes Comum:
| Nome | Descrição | Cenário Típico |
|---|---|---|
| ABCD (Big-endian) | Byte mais significativo primeiro. | Modbus padrão. |
| DCBA (Little-endian) | Byte menos significativo primeiro. | Comum em sistemas x86. |
| BADC | Ordem de bytes trocada. | Alguns sistemas DCS. |
3.3 Registro e Exportação de Dados
Registro em Excel
Setup → Excel Log...: Configura o registro automático de dados em um arquivo Excel, ideal para análise de tendências de longo prazo.
| Configuração | Recomendação |
|---|---|
| Intervalo de Amostragem | ≥ 1 segundo. |
| Formato de Registro | CSV (para facilitar análise posterior). |
| Condição de Ativação | Registrar apenas quando os dados mudam para reduzir o tamanho do arquivo. |
Registro em Texto (Log)
Setup → Log...: Configura o log de comunicação, registrando todas as mensagens enviadas e recebidas.
3.4 Scan de Escravos e Endereços
Scan de Escravos (Slave Scan)
Functions → Slave Scan...: Escaneia automaticamente dispositivos escravos em uma faixa de endereço especificada para descobrir rapidamente quais dispositivos estão online no barramento.
Scan de Endereços (Address Scan)
Functions → Address Scan...: Para um escravo especificado, escaneia quais registradores têm dados válidos, ajudando a mapear rapidamente os dados do dispositivo.
Essas funções são muito úteis quando o mapeamento de dados do dispositivo é desconhecido, agindo como um "detector automático".
3.5 Test Center (Centro de Teste)
Functions → Test Center...: Permite editar manualmente comandos hexadecimais e enviá-los, útil para:
- Enviar códigos de função incomuns.
- Construir casos de teste de exceção.
- Controlar precisamente o conteúdo de cada byte.
3.6 Regras de Cores (Colors)
Setup → Colors...: Define regras de cor condicionais para os dados, por exemplo:
- Temperatura > 80°C → Fundo vermelho (Alarme).
- Tempreatura < 20°C → Fundo azul (Indicação de baixa temperatura).
- Erro de comunicação → Fundo amarelo.
Resumo de Pontos de Conhecimento e Armadilhas
4.1 A Armadilha do Offset de Endereço ⚠️
Este é o ponto mais propenso a erros, sem dúvida!
| Cenário | Manual do Dispositivo Indica | Preencher no Modbus Poll | Explicação |
|---|---|---|---|
| Endereço CLP 40001 | 40001 | 0 | 40001 - 40001 = 0 |
| Endereço CLP 40010 | 40010 | 9 | 40010 - 40001 = 9 |
| Endereço CLP 40100 | 40100 | 99 | 40100 - 40001 = 99 |
| Endereço CLP 30001 | 30001 | 0 | 30001 - 30001 = 0 |
| Endereço do Protocolo 0x0063 | 0x0063 | 99 | Converter hexadecimal diretamente para decimal. |
Lembre-se: Modbus Poll usa endereços de offset baseados em zero, enquanto os manuais de dispositivos frequentemente usam endereços CLP baseados em um.
4.2 Código de Função Incompatível com Tipo de Registrador
| Exemplo de Erro | Procedimento Correto |
|---|---|
| Ler 30001 (Registrador de Entrada) com código de função 03. | Use código de função 04. |
| Ler 40001 (Registrador de Retenção) com código de função 04. | Use código de função 03. |
| Ler 00001 (Bobina) com código de função 03. | Use código de função 01. |
| Tentar escrever em um Registrador de Entrada (3xxxx). | Impossível - Registradores de Entrada são somente leitura. |
Retorno de Erro: Illegal Function (0x01) ou Illegal Data Address (0x02).
4.3 Problemas de Endianness (Ordem de Bytes)
Sintoma: Dados de ponto flutuante ou inteiros longos de 32 bits parecem "números aleatórios".
Causa: Diferentes dispositivos usam ordens de bytes distintas para dados multi-byte.
Método de Diagnóstico:
- Mude o formato para Hex e observe os bytes brutos.
- Tente marcar/desmarcar
Swap Bytes/Swap Words. - Consulte a documentação do dispositivo sobre a ordem de bytes.
Caso Clássico:
Valor real de temperatura do dispositivo: 25.5°C
Hexadecimal do ponto flutuante de precisão simples IEEE 754: 0x41CC0000
Se a ordem de bytes estiver incorreta, pode ser exibido como:
- Swap Bytes: 0xCC410000 → Valor completamente diferente.
- Swap Words: 0x000041CC → Valor muito pequeno.
4.4 Armadilhas Comuns de Comunicação Serial
| Armadilha | Manifestação | Solução |
|---|---|---|
| Fiação A/B invertida | Comunicação completamente falha. | Inverta os fios A/B do RS485. |
| Taxa de Baud incompatível | Timeout contínuo ou caracteres ilegíveis. | Verifique cada parâmetro da taxa de baud do dispositivo. |
| Porta COM ocupada | Impossibilidade de abrir a porta. | Feche outros programas de porta serial (ex: software de programação CLP). |
| Número da porta COM flutuante | O número da porta muda após reconectar o dispositivo. | No Gerenciador de Dispositivos do Windows, fixe o número da porta COM manualmente. |
| Falta de resistor de terminação | Comunicação instável em longas distâncias, erros intermitentes. | Adicione um resistor de terminação de 120Ω nas extremidades do barramento RS485. |
| Conversor não isolado | Erros contínuos como "Insufficient bytes" perto de inversores de frequência. | Use um conversor USB-RS485 com isolamento. |
| Paridade inconsistente | Erro de verificação CRC. | Certifique-se de que as configurações de Paridade no Poll e no dispositivo sejam idênticas. |
4.5 Armadilhas Comuns de Comunicação TCP
| Armadilha | Manifestação | Solução |
|---|---|---|
| Firewall bloqueando | Tempo limite de conexão. | Permita a porta 502 ou desabilite temporariamente o firewall para testes. |
| IP fora da mesma sub-rede | Ping falha. | Verifique os endereços IP e máscaras de sub-rede. |
| Porta diferente de 502 | Conexão recusada. | Alguns dispositivos usam portas não padrão (ex: 5020, 1502); consulte o manual. |
| Escravo não iniciado | Conexão recusada. | Verifique se o dispositivo escravo está ligado e o serviço Modbus está habilitado. |
| Confusão IPv4/IPv6 | Falha na conexão. | Confirme se a versão do protocolo correto está selecionada. |
4.6 Configuração Inadequada da Frequência de Polling
| Problema | Causa | Recomendação |
|---|---|---|
| Scan Rate muito rápido (ex: 10ms) | Escravo não consegue processar, retorna Slave Busy. |
Ajuste com base no tempo de resposta do dispositivo; geralmente 100~1000ms. |
| Scan Rate muito lento (ex: 10s) | Dados não atualizados em tempo hábil, perdas de variações instantâneas. | Dados críticos ≤ 500ms, outros dados 1-2 segundos. |
| Quantidade excessiva de registradores lidos de uma vez | Tempo limite de resposta, dados truncados. | Ler no máximo 100 registradores por vez (recomendado 10-50). |
4.7 Considerações sobre Operações de Escrita
- Escrever um único registrador (código de função 06): Dê um duplo clique no valor para modificar.
- Escrever múltiplos registradores (código de função 16): Preste atenção ao formato e ordem de bytes dos dados.
- Escrever bobinas (código de função 05): ON =
FF00, OFF =0000; outros valores são inválidos. - Endereço de Broadcast (Slave ID = 0): Suporta apenas operações de escrita (códigos de função 06/16), não leitura.
4.8 Dica de Depuração com Porta Serial Virtual
Use o VSPD (Virtual Serial Port Driver) para criar pares de portas seriais virtuais. Combinado com o simulador Modbus Slave, permite a depuração sem hardware:
[Modbus Poll] ←→ COM10 ←→ COM11 ←→ [Modbus Slave]
Vantagens:
- Ambiente de teste sem custo de hardware.
- Detecção antecipada de problemas de compatibilidade de protocolo.
- Simulação de vários cenários de exceção.
Perguntas Frequentes (FAQ)
Q1: Modbus Poll exibe "Timeout" após conectar ao dispositivo. Como depurar?
R: Verifique na seguinte ordem:
- Camada Física: Verifique a fiação (A/B do RS485 invertidos? Cabo de rede conectado?).
- Parâmetros: Verifique se a taxa de baud, bits de dados, bits de parada e paridade correspondem ao dispositivo.
- Endereço: Confirme se o Slave ID está correto (muitos dispositivos usam o padrão 1).
- Camada de Rede (TCP): Ping o IP do dispositivo para confirmar conectividade de rede; verifique se o firewall permite a porta 502.
- Status do Dispositivo: Confirme se o dispositivo está ligado e em estado comunicável.
- Aálise de Pacotes: Abra
Display → Communicationpara verificar se há alguma troca de dados.
Q2: Por que os dados lidos são todos 0 ou parecem aleatórios?
R: Quatro causas comuns:
- Erro de Offset de Endereço: A causa mais provável. O manual indica 40001, mas o campo Address no Poll deve ser 0, não 40001.
- Código de Função Incorreto: Usar 03 para ler a área de 3xxxx (deveria ser 04).
- Ordem de Bytes Incorreta: Para dados de 32 bits, tente
Swap Bytes/Swap Words. - Dispositivo Não Operando: O dispositivo escravo pode não ter dados reais e retorna 0.
Q3: O que significa o erro "Illegal Function"?
R: Este é um código de exceção retornado pelo escravo (0x01), indicando que o escravo não suporta o código de função solicitado.
Possíveis Causas:
- O dispositivo é somente leitura e não suporta códigos de função de escrita (05/06/16).
- Certos blocos de registradores são desabilitados para escrita no nível de hardware.
- Código de função incompatível com o tipo de registrador (ex: usar 03 para ler a área 1xxxx).
Q4: Modbus RTU e Modbus TCP podem se conectar diretamente?
R: Não diretamente, mas podem ser interligados através de um conversor de protocolo (gateway):
[Mestre Modbus TCP] ←→ [Gateway (TCP para RTU)] ←→ [Escravo Modbus RTU]
O gateway é responsável por:
- Lado TCP: Atua como um servidor para receber requisições TCP.
- Lado RTU: Converte para tramas RTU e envia para o dispositivo serial.
- Preste atenção à configuração da ordem de bytes e tempos limite.
Q5: Por que não consigo escrever em um registrador usando o código de função 06 (escrever um único registrador)?
R: Verifique:
- Confirme se o registrador é gravável (registradores de retenção 4xxxx são graváveis, registradores de entrada 3xxxx são somente leitura).
- Confirme se o valor de escrita está dentro da faixa permitida (alguns registradores têm limites máximos).
- Confirme se o Slave ID está correto.
- Verifique a janela de
Communicationpara ver se há códigos de exceção retornados. - Alguns dispositivos podem exigir um comando de "salvar" (como escrever em um registrador específico) após a escrita para persistir a configuração.
Q6: Qual o significado do "endereço de broadcast 0" no Modbus?
R: Slave ID = 0 é o endereço de broadcast, com as seguintes características:
- Todos os escravos recebem e processam a requisição.
- Suporta apenas operações de escrita (códigos de função 06, 16), não leitura.
- Os escravos não retornam resposta; o mestre assume que a operação foi concluída após o envio.
- Uso típico: Escrever o mesmo parâmetro em múltiplos dispositivos simultaneamente, disparar movimento síncrono em múltiplos dispositivos.
Q7: O que significam Tx, Err, ID, F, SR no Modbus Poll?
R:
- Tx (Transmission): Número total de tramas de requisição enviadas.
- Err (Error): Contador de erros de comunicação.
- ID (Slave ID): Endereço do escravo atualmente conectado.
- F (Function Code): Código de função em uso.
- SR (Scan Rate): Taxa de polling atual (em milissegundos).
Q8: Quantos dispositivos Modbus podem ser conectados a um barramento RS485 no máximo?
R:
- Valor Teórico: 32 dispositivos (limitado pela capacidade de acionamento do padrão RS485).
- Solução de Expansão: Use repetidores RS485; cada repetidor pode expandir mais 32 dispositivos.
- Recomendação Prática: Considerando a qualidade do sinal e a manutenção, não mais que 16 dispositivos por barramento é recomendado.
- Faixa total de endereços dos dispositivos: 1 a 247.
Q9: Como determinar se um dispositivo suporta Modbus TCP?
R:
- Verifique a placa de identificação ou manual do dispositivo por "Modbus TCP" ou interface "Ethernet".
- Procure por uma porta de rede RJ45 no dispositivo.
- Acesse o menu de configuração do dispositivo e procure por configurações relacionadas ao servidor TCP.
- Use Ping para testar a alcançabilidade do IP do dispositivo.
Q10: Um número de ponto flutuante de 32 bits ocupa 2 registradores. Qual deve ser o valor de Quantity ao ler?
R: Se você quiser ler 1 número de ponto flutuante (que ocupa 2 registradores de 16 bits), defina Quantity como 2.
De forma geral: N números de ponto flutuante → Quantity = N × 2.
Melhores Práticas de Engenharia
6.1 Gerenciamento Padronizado de Configurações
Arquivo de Configuração do Dispositivo
Crie um arquivo de configuração independente para cada dispositivo:
## Dispositivo: Sensor de Temperatura Marca XX
- Modelo: XXX-1000
- Comunicação: Modbus RTU
- Parâmetros Seriais: 9600 / 8 / N / 1
- Slave ID: 3
- Mapeamento de Registradores:
- 40001 (0x0000): Valor de Temperatura Atual (Float, Somente Leitura)
- 40003 (0x0002): Valor Limite Superior de Alarme de Temperatura (Float, Leitura/Escrita)
- 40005 (0x0004): Palavra de Status do Dispositivo (Unsigned16, Somente Leitura)
- Observações Especiais: Ordem de bytes Little-Endian, marcar Swap Bytes.
Convenção de Nomenclatura de Arquivos
<nomeprojeto>_<tipodispositivo>_<slaveid>_<data>.mbs
Ex: EstacaoTratamentoAgua_Bomba01_Slave3_20250615.mbs
</data></slaveid></tipodispositivo></nomeprojeto>
6.2 Metodologia de Depuração em Fases
Não tente ler todos os dados de uma vez! Siga estas etapas:
- 1ª Etapa: Confirmação da Conexão Física
→ Verificação de fiação, identificação de porta, instalação de driver. - 2ª Etapa: Estabelecimento de Comunicação Básica
→ Use parâmetros mais simples (código de função 03, ler 1 registrador conhecido) para verificar a comunicação. - 3ª Etapa: Exploração do Mapeamento de Endereços
→ Use Address Scan para descobrir quais registradores estão ativos no dispositivo. - 4ª Etapa: Verificação da Interpretação de Dados
→ Confirme o tipo de dados, ordem de bytes e fator de escala de cada registrador individualmente. - 5ª Etapa: Teste de Funcionalidade de Escrita
→ Teste se a escrita de parâmetros é eficaz e se comandos de salvamento são necessários. - 6ª Etapa: Verificação de Estabilidade
→ Execute por um longo período e observe se há erros intermitentes.
6.3 Estratégia de Monitoramento com Múltiplas Janelas
┌─────────────────────────────────────────────────┐
│ Janela 1: Status do Sistema (Slave 1, FC=03, Addr=0, Qty=10) │
├─────────────────────────────────────────────────┤
│ Janela 2: Dados de Temperatura (Slave 1, FC=04, Addr=0, Qty=20) │
├─────────────────────────────────────────────────┤
│ Janela 3: Dados de Pressão (Slave 2, FC=03, Addr=0, Qty=10) │
├─────────────────────────────────────────────────┤
│ Janela 4: Status de Alarme (Slave 1, FC=02, Addr=0, Qty=16) │
└─────────────────────────────────────────────────┘
Princípios:
- Divida por áreas funcionais, não misture tudo.
- Defina
Quantitypara a menor quantidade necessária em cada janela. - Use Alias para registradores críticos para melhorar a legibilidade.
6.4 Melhores Práticas de Registro de Dados
| Recomendação | Descrição |
|---|---|
| Intervalo de Amostragem ≥ 1s | Amostragens muito rápidas raramente trazem benefícios adicionais para análise e geram dados excessivos. |
| Use formato CSV | Facilita o processamento posterior com ferramentas como Excel ou Python. |
| Defina Condições de Gatilho | Registre apenas quando os dados mudam ou apenas eventos de erro, para otimizar o tamanho do arquivo. |
| Arquivamento Periódico | Para operação de longo prazo, divida os arquivos de log periodicamente para evitar que fiquem muito grandes. |
| Capturas de Tela de Parâmetros Críticos | Tire capturas de tela da interface do Poll em momentos de anomalia como evidência. |
6.5 Recomendações de Parâmetros para Otimização de Desempenho
| Parâmetro | Valor Recomendado | Descrição |
|---|---|---|
| Scan Rate | 100~1000ms | Ajuste com base na velocidade de resposta do dispositivo. |
| Timeout | 2 a 3 vezes o tempo de resposta do dispositivo. | Evita falsos tempos limite. |
| Inter-frame Delay | ≥ 20ms | Atraso entre tramas para garantir tempo de processamento suficiente para o escravo. |
| Quantidade de Registradores por Leitura | 10~50 | Mais que isso pode causar tempo limite de resposta. |
| Número de Janelas Concorrentes | ≤ 10 | Mais janelas podem consumir excessivamente memória e CPU. |
6.6 Recomendações de Proteção de Segurança
| Risco | Medida de Proteção |
|---|---|
| Transmissão em Claro | O protocolo Modbus não possui criptografia nativa; em cenários sensíveis, implante em redes isoladas. |
| Exposição de Rede | Dispositivos Modbus TCP não devem ser expostos diretamente à internet; use firewalls/VPNs para isolamento. |
| Acesso Não Autorizado | Utilize VLANs, listas de permissão de portas e outras medidas para restringir o acesso. |
| Modbus TLS | O Modbus Poll v13+ suporta Modbus TCP/Security (TLS); priorize seu uso. |
| Auditoria de Operações | Mantenha logs para operações críticas, registrando quem modificou o quê e quando. |
6.7 Lista de Ferramentas para Depuração em Campo
Essenciais:
- ☑ Modbus Poll (Depuração Mestre)
- ☑ Modbus Slave (Simulação Escravo)
- ☑ VSPD (Driver de Porta Serial Virtual para depuração sem hardware)
- ☑ Conversor USB-RS485 Isolado (Recomendado com chip FTDI)
- ☑ Resistor de Terminação 120Ω × 2
- ☑ Cabo de Rede × 2 (um direto, um cruzado)
- ☑ Laptop (Recomendado: Windows 10/11)
Opcionais:
- ☐ Wireshark (Análise de pacotes Modbus TCP)
- ☐ Python + pymodbus (Scripts de teste automatizados)
- ☐ Multímetro (Medição de tensão diferencial RS485)
- ☐ Osciloscópio (Análise da qualidade do sinal)
6.8 Árvore de Decisão para Solução de Problemas
Problema de Comunicação
│
├─ Sem Resposta (Timeout)
│ ├─ Conexão Física → Verificar fiação, cabos, conversor.
│ ├─ Configuração de Parâmetros → Verificar taxa de baud, endereço, código de função.
│ ├─ Status do Dispositivo → Confirmar alimentação, sem estado de falha.
│ └─ Porta Ocupada → Fechar outros programas seriais, executar como administrador.
│
├─ Erros Intermitentes
│ ├─ Interferência Eletromagnética → Usar cabo blindado, longe de inversores.
│ ├─ Falta de Resistor de Terminação → Adicionar resistor de 120Ω nas extremidades do barramento.
│ ├─ Polling Muito Rápido → Aumentar Scan Rate.
│ └─ Fonte de Alimentação Instável → Verificar qualidade da energia, aterramento.
│
└─ Resposta Presente, mas Dados Incorretos
├─ Erro de Offset de Endereço → Verificar se o campo <strong>Address</strong> está preenchido corretamente (offset).
├─ Ordem de Bytes Incorreta → Tentar `Swap Bytes` / `Swap Words`.
├─ Tipo de Dados Incorreto → Confirmar se é Signed/Unsigned/Float.
└─ Fator de Escala → O valor bruto pode precisar de conversão (ex: ×0.1 ou ÷10).
Apêndice: Tabelas de Referência Rápida
A. Relação Taxa de Baud vs. Distância de Transmissão
| Taxa de Baud | Distância Máxima (RS485, sem repetidor) | Cenário de Uso |
|---|---|---|
| 9600 | ~1200m | Longas distâncias, múltiplos nós. |
| 19200 | ~800m | Distâncias médias. |
| 38400 | ~600m | Distâncias mais curtas. |
| 57600 | ~400m | Distâncias curtas, alta velocidade. |
| 115200 | ~200m | Distâncias curtas, velocidade muito alta. |
B. Parâmetros de Comunicação Padrão de Fabricantes Comuns
| Fabricante/Tipo de Dispositivo | Taxa de Baud Padrão | Slave ID Padrão | Observações |
|---|---|---|---|
| Schneider Electric PLC | 9600 | 1 | Paridade geralmente Even. |
| Siemens Instruments | 9600 | 1 | Verificar configurações de chave DIP. |
| Controladores de Temperatura Chineses | 9600 | 1 | Alguns suportam 19200. |
| Inversores de Frequência | 19200 | 1 | Paridade geralmente None. |
| Medidores de Energia Inteligentes | 2400/9600 | 1-32 | Consultar modelo específico. |
C. Conversão Rápida: Hexadecimal ↔ Decimal ↔ Endereço CLP
| Endereço CLP | Offset (Decimal) | Offset (Hex) |
|---|---|---|
| 40001 | 0 | 0x0000 |
| 40010 | 9 | 0x0009 |
| 40011 | 10 | 0x000A |
| 40051 | 50 | 0x0032 |
| 40100 | 99 | 0x0063 |
| 40101 | 100 | 0x0064 |
| 41001 | 1000 | 0x03E8 |
| 42001 | 2000 | 0x07D0 |
Conclusão em uma frase: Modbus Poll é a "canivete suíço" para depuração de comunicação industrial. Dominando a conversão de offset de endereço, a correspondência de códigos de função e o tratamento de ordem de bytes, você resolverá 90% dos problemas de depuração. Em caso de dificuldades, abra a janela Communication, analise camada por camada, desde a física até o protocolo, e o problema será desvendado.
Este documento foi escrito com base no Modbus Poll v13.x; algumas funcionalidades podem diferir em versões anteriores.