ESP32 - Modbus

Este tutorial ensina você a usar o ESP32 com o protocolo Modbus

Sobre o Modbus

O Modbus é um protocolo que permite a comunicação de dispositivo para dispositivo, de dispositivo para software/aplicativo e de dispositivos para IHM (HMI). Ele é muito usado em dispositivos industriais.

Podemos imaginar o Modbus como uma linguagem de comunicação entre dispositivos, software/aplicativos e IHM.

Existem três tipos de Modbus muito usados: Modbus RTU, Modbus ASCII e Modbus TCP:

  • Modbus RTU e Modbus ASCII são usados em linha serial (RS-232/RS-422/RS-485)
  • Modbus TCP é usado em Ethernet ou WiFi

Por que usar o Modbus?

Vamos pegar um caso específico como exemplo:

  • Um ESP32 #1 conectado a uma chave
  • Um ESP32 #2 conectado a um LED
  • O ESP32 #1 e o ESP32 #2 ficam longe um do outro
  • Quando a chave é ligada (ON), acenda o LED.
  • Quando a chave é desligada (OFF), apague o LED.
botão controla LED via Modbus

A forma mais fácil de implementar o exemplo acima é definir nós mesmos um protocolo simples:

  • O ESP32 #1 envia um byte de dados para informar o ESP32 #1 sobre a mudança no estado da chave. O valor do byte de dados é:
    • 1: Quando a chave é ligada (ON)
    • 0: Quando a chave é desligada (OFF)
  • Quando o ESP32 #2 recebe um byte de dados do ESP32 #1, se o valor for:
    • 1: Acenda o LED
    • 0: Apague o LED

    A definição acima faz a chave do ESP32 #1 controlar o LED do ESP32 #2. Porém, vamos imaginar alguns casos:

    • O ESP32 #1 quer receber a confirmação se o comando foi recebido e executado com sucesso pelo ESP32 #2 ou não
    • O ESP32 #1 quer controlar vários LEDs no ESP32 #2
    • O ESP32 #2 quer ler ativamente o estado das chaves no ESP32 #1
    • O ESP32 #2 quer usar uma chave para controlar um LED no ESP32 #1
    • E muitos outros casos.

    Não é fácil suportar todos os casos de uso por conta própria.

    Outro problema surge ao usar um protocolo próprio. O ESP32 não consegue se comunicar com outros dispositivos que usam outro protocolo.

    ⇒ Precisamos de um protocolo padrão que resolva todos os problemas acima ⇒ O protocolo Modbus é um protocolo padrão que podemos usar.

    A vantagem do protocolo Modbus sobre um protocolo definido por nós:

    • NÃO precisamos definir os comandos, o Modbus já os definiu para todos os casos de uso.
    • O ESP32 pode trabalhar com qualquer dispositivo/software que use Modbus.

Quando usar e quando NÃO usar o Modbus

Como o protocolo Modbus não é fácil de entender e de implementar, mesmo existindo uma biblioteca Modbus, você pode usar um protocolo simples definido por você, como descrito acima, quando:

  • O sistema é simples, como uma chave no ESP32 #1 controlando um LED no ESP32 #2
  • O ESP32 NÃO precisa trabalhar com outros dispositivos/software

Devemos usar o Modbus quando:

  • O sistema é complicado
  • O sistema exige alta confiabilidade
  • O ESP32 precisa trabalhar com outros dispositivos/software

Como o protocolo Modbus funciona

Conceitos

Existem seis conceitos importantes no Modbus:

  • Master e Slave
  • Requisição e Resposta
  • Código de Função (FC) e Endereço

Quando dois ESP32 se comunicam usando Modbus:

  • Um ESP32 trabalha como Master
  • O outro ESP32 trabalha como Slave.

O Master envia uma requisição ao Slave, e o Slave envia uma resposta ao Master.

Master Slave do modbus

Uma requisição enviada de um Master para um Slave contém as seguintes informações:

  • Código de Função (FC): 1 byte, é o comando que diz ao Slave o que fazer. Por exemplo, ler o estado de um pino de entrada digital, de um pino de saída digital ou de um pino de entrada analógica, ou controlar um pino de saída digital.
  • Endereço: 2 bytes, é o endereço que diz ao Slave onde fazer. Por exemplo, cada pino de entrada/saída digital e de entrada analógica recebe um endereço único.
  • Dados (por exemplo, valor de controle)

Ao receber uma requisição de um Master, o Slave executa a ação correspondente e devolve o resultado em uma resposta

Código de Função

O padrão Modbus define muitos Códigos de Função. Para não sobrecarregar os iniciantes, vamos ver alguns Códigos de Função essenciais:

  • FC 01 (Read Coils): é um comando que lê o estado dos pinos de saída digital
  • FC 02 (Read Discrete Inputs): é um comando que lê o estado dos pinos de entrada digital
  • FC 05 (Write Single Coil): é um comando que controla (escreve) o estado dos pinos de saída digital

FC 01 indica que o valor do Código de Função é 0x01.

Ao usar a biblioteca Modbus do ESP32, você precisa determinar:

  • Qual Código de Função usar
  • Qual endereço usar

Vamos realizar o exemplo que mencionamos no início:

  • O ESP32 Master está ligado ao LED #M e à CHAVE #M
  • O ESP32 Slave está ligado ao LED #S e à CHAVE #S
  • Vamos fazer a CHAVE #M controlar o LED #S, e a CHAVE #S controlar o LED #M
ESP32 modbus LED chave

Como fazer:

  • O ESP32 Master lê o estado da CHAVE #M → envia uma requisição ao Slave para controlar o LED #S ⇒ o Slave controla o LED #S e envia a resposta
  • O ESP32 Master envia uma requisição ao Slave para ler o estado da CHAVE #S ⇒ o Slave responde com o estado da CHAVE #S → o Master controla o LED #M

Modbus RTU/ASCII e Modbus TCP

Como mencionado no início, existem 3 tipos de Modbus muito usados: Modbus RTU, Modbus ASCII e Modbus TCP.

  • Diagrama do sistema
modbus tcp vs modbus rtu/ascii
  • Pilha de protocolos
modbus tcp vs modbus rtu/ascii

A biblioteca Modbus para ESP32 está disponível. As instruções detalhadas de uso da biblioteca Modbus serão apresentadas em outro tutorial. Curta nossa página no Facebook para receber as atualizações.

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!