ESP32 - Modbus

Este tutorial le enseña cómo usar ESP32 con el protocolo Modbus.

Acerca de Modbus

Modbus es un protocolo que permite la comunicación de dispositivo a dispositivo, de dispositivo a software/aplicación y de dispositivos a la HMI. Es ampliamente utilizado en dispositivos industriales.

Podemos imaginar que Modbus es un lenguaje de comunicación entre dispositivos, software/aplicación y HMI.

Existen tres tipos de Modbus de amplio uso: Modbus RTU, Modbus ASCII y Modbus TCP:

  • Modbus RTU y Modbus ASCII se utilizan sobre la línea serie (RS-232/RS-422/RS-485)
  • Modbus TCP se utiliza sobre Ethernet o WiFi

¿Por qué usar Modbus?

Tomemos un caso específico, por ejemplo:

  • Un ESP32 #1 conectado a un interruptor
  • Un ESP32 #2 conectado a un LED
  • ESP32 #1 y ESP32 #2 están lejos entre sí
  • Cuando el interruptor esté en ENCENDIDO, encienda el LED.
  • Cuando el interruptor esté en APAGADO, apague el LED.
LED de control de botón a través de Modbus

La forma más fácil de implementar el ejemplo anterior es definir un protocolo sencillo por nuestra cuenta:

  • ESP32 #1 envía un byte de datos para informar ESP32 #1 sobre el cambio en el estado del interruptor. El valor del byte de datos es:
    • 1: Cuando el interruptor se enciende
    • 0: Cuando el interruptor se apaga
  • Cuando ESP32 #2 recibe un byte de datos de ESP32 #1, si el valor es:
    • 1: Encender LED
    • 0: Apagar LED

    La definición anterior hace que el interruptor en ESP32 #1 controle el LED en ESP32 #2. Sin embargo, imaginemos algunos casos:

    • ESP32 #1 quiere recibir la confirmación de si el comando ha sido recibido y ejecutado con éxito por ESP32 #2 o no
    • ESP32 #1 quiere controlar varios LEDs en ESP32 #2
    • ESP32 #2 quiere leer activamente el estado de los interruptores en ESP32 #1
    • ESP32 #2 quiere usar un interruptor para controlar un LED en ESP32 #1
    • Y cada vez más casos.

    No es fácil cubrir todos los casos de uso por nuestra cuenta.

    Otro problema surge al usar un protocolo por nuestra cuenta. El ESP32 no puede comunicarse con otros dispositivos que utilizan otro protocolo.

    ⇒ Necesitamos un protocolo estándar que solucione todos los problemas anteriores ⇒ El protocolo Modbus es un protocolo estándar que podemos usar.

    La ventaja del protocolo Modbus sobre un protocolo definido por uno mismo:

    • NO necesitamos definir los comandos; Modbus los definió para todos los casos de uso.
    • El ESP32 puede trabajar con cualquier dispositivo o software que use Modbus.

Cuándo se debe usar y cuándo NO se debe usar Modbus

Porque el protocolo Modbus no es fácil de entender e implementar, incluso hay una biblioteca Modbus disponible. Puedes usar un protocolo simple definido por ti mismo, como se describe arriba, cuando:

  • El sistema es simple: un interruptor en ESP32 #1 controla un LED en ESP32 #2
  • ESP32 no necesita trabajar con otros dispositivos/software

Debemos usar Modbus cuando:

  • El sistema es complicado
  • El sistema requiere una alta fiabilidad
  • El ESP32 necesita trabajar con otros dispositivos/software

Cómo funciona el protocolo Modbus

Conceptos

Hay seis conceptos importantes en Modbus:

  • Maestro y Esclavo
  • Solicitud y Respuesta
  • Código de Función (FC) y Dirección

Cuando dos ESP32 se comunican entre sí usando Modbus:

  • Un ESP32 funciona como un Maestro
  • El otro ESP32 funciona como un Esclavo.

El Maestro envía una solicitud al esclavo, y el esclavo envía una respuesta al Maestro.

Modbus maestro-esclavo

Una solicitud enviada desde un maestro a un esclavo contiene la información a continuación:

  • Código de Función (FC): 1 byte, es el comando que indica al Esclavo qué hacer. Por ejemplo, lee el estado de un pin de entrada digital, un pin de salida digital o un pin de entrada analógica, y controla un pin de salida digital.
  • Dirección: 2 bytes, es la dirección que indica al Esclavo dónde actuar. Por ejemplo, a cada pin de entrada/salida digital y de entrada analógica se le asigna una dirección única.
  • Datos (p. ej. valor de control)

Al recibir una solicitud de un Maestro, el Esclavo toma la acción correspondiente y devuelve el resultado en una respuesta

Código de Función

El estándar Modbus define muchos Códigos de Función. Para evitar sobrecargar a los principiantes, vamos a ver algunos Códigos de Función esenciales:

  • FC 01 (Leer bobinas): es un comando que lee el estado de los pines de salida digitales
  • FC 02 (Leer entradas discretas): es un comando que lee el estado de los pines de entrada digitales
  • FC 05 (Escribir una única bobina): es un comando que controla (escribe) el estado de los pines de salida digitales

FC 01 indica que el valor del Código de Función es 0x01.

Al usar la biblioteca Modbus para ESP32, debes determinar:

  • Qué Código de Función usar
  • Qué Dirección usar

Vamos a realizar el ejemplo que mencionamos al principio:

  • ESP32 Maestro está cableado al LED #M, INTERRUPTOR #M
  • ESP32 Esclavo está cableado al LED #S, INTERRUPTOR #S
  • Hagamos que el INTERRUPTOR #M controle el LED #S, y que el INTERRUPTOR #S controle el LED #M
Interruptor LED Modbus para ESP32

Cómo hacerlo:

  • ESP32 Maestro lee el estado del INTERRUPTOR #M → envía una solicitud a Esclavo para controlar LED #S ⇒ Esclavo controla LED #S y envía la respuesta
  • ESP32 Maestro envía una solicitud Esclavo para leer el estado del INTERRUPTOR #S ⇒ Esclavo responde con el estado del INTERRUPTOR #S → Maestro controla LED #M

Modbus RTU/ASCII y Modbus TCP

Como se mencionó al principio, existen tres tipos de Modbus ampliamente utilizados: Modbus RTU, Modbus ASCII y Modbus TCP.

  • Diagrama del sistema
Modbus TCP frente a Modbus RTU/ASCII
  • Pila de protocolos
Modbus TCP frente a Modbus RTU/ASCII

La biblioteca Modbus para ESP32 está disponible. Las instrucciones detalladas para usar la biblioteca Modbus se presentarán en otro tutorial; síguenos en nuestra página de Facebook para obtener la actualización.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!