Modbus y su historia
Desde los rincones ruidosos de una planta industrial, hasta lo silencioso y minimalista de un laboratorio, hay un lenguaje que no se escucha, pero que todo lo dice: Modbus, es la lengua de autómatas, sensores, PLCs y controladores, que se comunican entre si para seguir generar productos, materias primas, medicinas etc.
Modbus es un protocolo de comunicación industrial (abierto) desarrollado en 1979 por Modicon (hoy Schneider Electric), diseñado para permitir la transmisión de información entre dispositivos electrónicos. Su principal propósito es facilitar la comunicación entre controladores lógicos programables (PLCs), sensores, actuadores, sistemas SCADA y otros equipos industriales. Su principio de funcionamiento es, uno pregunta otro responde (Maestro-Esclavo).
Características clave:
-
Protocolos disponibles:
-
Modbus RTU (sobre RS-485): eficiente y ampliamente usado en campo.
-
Modbus ASCII: menos común, más legible, pero más lento.
-
Modbus TCP/IP: versión moderna para redes Ethernet.
-
-
Tipos de datos comunes:
-
Bobinas (coils): salidas digitales.
-
Entradas discretas: entradas digitales.
-
Registros de entrada: valores analógicos de solo lectura.
-
Registros de retención: variables que pueden leerse o escribirse.
-
-
Funciones estándar:
-
Lectura y escritura de bits y palabras (registros de 16 bits).
-
Diagnósticos y control remoto básico.
-
Pero empecemos desde el comienzo y no hay nada mas básico que conocer como funciona y como se clasifica:
Modbus y la pirámide OSI
La pirámide OSI (Open Systems Interconnection) es un modelo de referencia que divide la comunicación en redes en siete capas, desde la física hasta la aplicación:
-
Capa física
-
Capa de enlace de datos
-
Capa de red
-
Capa de transporte
-
Capa de sesión
-
Capa de presentación
-
Capa de aplicación
¿Dónde está Modbus en la pirámide de OSI?
Modbus es un protocolo de capa 7, la capa de aplicación. Esto significa que Modbus define el formato y significado de los mensajes que se mandan y reciben para controlar y leer dispositivos industriales. Sin embargo, Modbus no define ni la capa física ni la capa de enlace, que son las que se encargan de la transmisión real de bits y la gestión de la comunicación en el medio físico.
¿Qué significa que Modbus no es la capa física?
-
La capa física se refiere al medio físico de transmisión, por ejemplo: cables RS-232, RS-485, Ethernet, fibra óptica, etc.
-
Modbus puede funcionar sobre diferentes medios físicos. Por ejemplo:
-
Modbus RTU usa RS-485 o RS-232 como capa física y define cómo estructurar los mensajes en serie.
-
Modbus TCP usa Ethernet (capa física y de enlace) y TCP/IP (capas de red y transporte) para transmitir sus mensajes.
-
Por lo tanto, Modbus no es un estándar para cables o señales eléctricas, sino un protocolo que se asienta sobre otras capas para que los dispositivos puedan entenderse.
Esto significa que lo que realmente define al protocolo es como interpreta los bits que lee de las diferentes capas fisicas, los cuales en su estructura básica son de la siguiente manera:

En Modbus, los tipos de datos se pueden dividir principalmente en dos tipos: Coils y Registros.
Las Coils pueden entenderse como digitales ya que sólo pueden estar en ON (1) o en OFF (0). Algunas coils pueden representar entradas y otras salidas.
Los registros son de 16 bits ( 2 bytes) sin signo y por lo tanto pueden tener valores de 0 a 65535 (0 a FFFF). Aunque tiene sus limitaciones como que no puede representar números negativos , números en coma flotante o valores con representación mayor a 65535. Sin embargo alguno fabricantes utilizan dos o mas registros para crear numero flotantes o negativos.
Sabiendo que es un protocolo basado en Maestro-Esclavo, ¿Cuantos equipos se pueden conectar en red?.
La respuesta es.... depende.
El limite estándar es de hasta 32 dispositivos en total (1 maestro + 31 esclavos), sin repetidores, pero analicemos cada escenario posible:
Modbus ASCII (RS-232 o RS-485)
Con RS-232 (punto a punto):
-
Solo 2 dispositivos (1 maestro y 1 esclavo).
-
RS-232 no es multipunto, así que no permite más de dos dispositivos.
Con RS-485 (como RTU):
-
Misma lógica que RTU: hasta 32 sin repetidores, hasta 247 con ellos.
Modbus RTU (RS-485)
-
Hasta 32 dispositivos en total (1 maestro + 31 esclavos), sin repetidores.
Con repetidores RS-485:
-
Puedes llegar hasta 247 esclavos, que es el límite lógico del protocolo Modbus (direcciones 1 a 247), si usas repetidores para regenerar la señal y aumentar el fan-out eléctrico.
Modbus TCP/IP (Ethernet)
Teóricamente:
-
El protocolo usa direcciones IP, por lo que el límite práctico es enorme.
-
Direcciones de unidad (Unit ID): normalmente de 1 a 247 (para compatibilidad con esclavos seriales a través de gateways).
-
Número de nodos en red Ethernet: depende del direccionamiento IP, switches, routers, y tráfico.
En la práctica:
-
Puedes tener cientos o miles de dispositivos, siempre que la red Ethernet lo soporte.
-
Lo que sí es importante: solo hay un maestro por conexión Modbus TCP, pero puede haber muchos clientes simultáneos si el servidor/esclavo lo soporta.
Modbus es un protocolo de comunicación, no una topología de red en sí, sin embargo, la forma en que se conecta físicamente una red Modbus, especialmente Modbus RTU sobre RS-485, suele adoptar una topología tipo daisy chain. Una red daisy chain es una forma de conexión en la que cada dispositivo está conectado en serie al siguiente, formando una sola línea de comunicación:

Es decir:
Maestro ─── >Esclavo 1 ─── >Esclavo 2 ─── >Esclavo 3 ───> Terminador
¿Por qué Modbus RTU usa daisy chain?
-
RS-485 es un bus multipunto half-duplex, que permite conectar hasta 32 dispositivos en una línea compartida (con repetidores, hasta 256 o más).
-
RS-485 tiene una única línea diferencial (A/B), y todos los dispositivos deben conectarse en paralelo, respetando la impedancia del bus.
-
Para evitar reflexiones, se colocan resistencias de terminación en los extremos de la cadena.
Aunque la conexión física parece una línea directa, en términos prácticos se implementa como una cadena —por eso se llama daisy chain—, donde el cable va "saltando" de esclavo en esclavo.
¿Y en Modbus TCP?
Modbus TCP/IP no usa daisy chain, porque se basa en Ethernet, que generalmente usa topologías en estrella (con switches) o malla (en redes industriales redundantes).
En resumen, Modbus es un estándar abierto y confiable, cuya longevidad demuestra su eficacia. Es la elección adecuada cuando se necesita una solución simple, interoperable y bien documentada para comunicaciones industriales, ademas de ser de respuesta mas rápida que por ejemplo HART que es otro protocolo de comunicación digital industrial, lo que lo hace elegible para sistemas de control sencillos que su respuesta no sea tan rápida como en el caso de temperatura.
Ejemplo:
en ocasiones es muy complejo leer un articulo y aprender simplemente con la teoría por eso en Axotek preparamos un ejemplo que puede ser muy útil en ciertos casos, como el siguiente:
Imagina llegas a planta y te encuentras con un medidor de flujo másico coriolis, el cual requieres saber cuanto a totalizado, pero oh sorpresa, es equipo es ciego, es decir no tiene diplay pero tiene un puerto comunicación modbus RTU 485. Existen distintas maneras de solucionar el problema:
1.- Adquirir el software del fabricante; lo cual puede ser costoso en ciertas ocasiones
2.- Buscar en Internet un software para leer modbus como Modbus Slave o Modbus Poll, pero suelen ser muy complejos si eres principiante.
3.- Bajar el Excel que tenemos en Axotek y modificarlo a tus necesidades.
Para este ultimo caso, que es donde nos vamos a centrar, necesitaremos de dos archivos, un Excel y una libreria ActiveX (OCX). normalmente las librerías ActiveX son de paga y tienen licencia pero nosotros nos basaremos en la que fue desarrollada por la empresa Modbus Tools, la cual en su versión gratuita te permite funcionar por 60 minutos y posterior solo ocupas volver a iniciar la conexión para tener otros 60 minutos. También puedes adquirir la versión de pago para que sea ilimitada.
Paso 1: Descarga los dos archivos:
Tambien puedes descargar Mbaxp desde la paguina oficial de Modbus Tool: https://www.modbustools.com/download.html
Existen varias consideraciones sobre los archivos:
- Esto solo funciona con sistema operativo Windows.
- Al descargar deberás descomprimir el archivo *.zip.
- En el caso del Excel es un archivo *.xlsm, por lo que es una archivo de Excel con macros, deberás tenerlas activas, también al descargar el archivo deberás descomprimir y dar click derecho y en la pestaña General, hasta la parte de abajo se deberá seleccionar desbloquear. *No te preocupes, puedes analizarlo con tu antivirus antes o después de descomprimir.*

2: Ya que tengas los dos archivos (Excel y Mbaxp) lo primero que se requiere es instalar la librería ActiveX, entonces solo debes dar doble click al archivo MBAXPSetup.exe (escoger 32 Bit o 64 Bit) y seguir las instrucciones, terminando se cerrara la ventana y quedara listo para abrir el Excel.

3: Una ves instalado, procedemos a abrir el Excel, asegurémonos de tener activa la pestaña de programador, si no esta activa en Opciones de Excel> Personalizar cinta de Opciones > y seleccionar Programador:

Vamos a basar este ejemplo practico en como visualizar un equipo Flujometro coriolis de la marca MicroMotion de la serie CMF el cual cuenta con un puerto de salida Modbus, para este proyecto se requiere visualizar las siguientes variables:
-Flujo instantáneo
-Densidad
-Temperatura
-Totalizado en masa
y como adicional, poder reiniciar el totalizado para hacer lotes.
4: Bajaremos de la página del fabricante el manual de mapeo Modbus e identificaremos las variables que deseamos leer y las que deseamos escribir, así como el tipo de mensaje que se mandará, recordando que al instalar Mbaxp, Excel se convierte en Maestro y el equipo en esclavo.


Para el caso de leer las variables, el manual dice que son Floating-point register pairs por lo cual tendremos dos registros los cuales son RO = Read-only:
-Flujo: 247/248 RO
-Densidad: 249/250 RO
-Temperatura: 251/252 RO
-Masa Total: 259/260 RO
Por lo que debemos de meter esa informacion en esta parte del Excel en el libro "Inicio":

Quizá se puedan preguntar, por que si las direcciones de Flujo son, según el manual 247/248, en el Excel se ingresan las direcciones 246 con un largo de 2 (segunda columna verde), bueno, esto se debe a que existen dos maneras de documentar los registros Modbus, la dirección lógica y la dirección Modbus, pero que es cada una:
La dirección lógica es una dirección con base 1, y es muy utilizada en los manuales ya que es mas entendible que el inicio sea en la dirección 1.
La dirección Modbus es la que tiene una base 0, los registros están indexados desde cero.
Es decir:
Holding Register 1 → dirección 0 (en el protocolo).
También en mucha documentación los Holding Register se pueden presentar como 40001, 40002, 40247, etc. Sin embargo en la transmisión real Modbus, se omite el 4 inicial (que indica "holding register") y se empieza desde 0.
En el caso de ingresar el 2 en la segunda columna (verde) significa que va a leer dos registros consecutivos 246/247

En el manual menciona que para el reinicio del totalizado se debe activar una Coil, por lo que debemos escribir una Coil, la cual el manual marca que es la numero 3, por lo que siguiendo el razonamiento anterior pondremos el numero dos en la sección de "Escribir Coil".
5: Ya que tengamos investigados e ingresados los datos que vamos a leer y vamos a escribir, es importante realizar la conexión física del equipo a la computadora, normalmente se requiere el uso de un convertidor de USB a RS485:

Puede ser de cualquier marca y existen algunos bastante económicos, solo se deberán instalar correctamente los controladores del fabricante en la PC y conocer cual es el puerto COM al que esta asociado. Así mismo deberán hacer la conexión fisica al equipo de acuerdo con su manual de usuario:

Recordar que los adaptadores RS485 pueden ser de 2 o 3 cables (A, B y tierra), en este caso usaremos solo uno de 2 cables A y B, el A del adaptador RS485 debe ir con el A del equipo de medición, y el B con el B.
También se debe configurar lo siguiente:
Baude Rate:
Stop Bit:
Parity:
Data Bit:
Slave ID:
Estos datos normalmente vienen en el manual de usuario, a menos que se hayan modificado, en ese caso se deberan pedir estos valores a la persona encargada del equipo.
Para el puerto COM lo puedes visualizar en el administrador de dispositivos del PC:

Para la prueba que haremos con un flujometro Micro Motion queda configurado en el Excel de la siguiente manera:

Ya teniendo todo configurado, no queda mas que darle al boton de "Start Comm" y listo, se abrirá una ventana donde avisara que te quedan 60 minutos para el uso de Modbus, al dar en "Aceptar" se abrira una ventana donde veras la comunicación.

Si no aparece el mensaje, significa que tienes bloqueada la configuración del ActiveX, solo debes habilitarlas en el centro de confianza de excel:

Si todo se realizó correctamente se abrirá una ventana en las que podrás ver las variables que manda el equipo esclavo y que metiste a través de los registros Modbus, tambien podrás hacerle un reinicio al total al presionar el boton "Reset Total"

y con esto podrás visualizar en tiempo real las variables que necesites.
Si deseas modificar el Excel para hacerlo a medida para tu proyecto tambien es muy sencillo. solo tendrás que ir a la pestaña de "Programador" y posteriormente en "Ver código".

Abriendo la sección de Formularios y luego en UserForm1, podrás modificar a tu gusto la interface para hacerla ajustar con tu proyecto:

Recuerda que esto lo puedes adaptar para cualquier sensor, medidor o dispositivo que se comunique por Modbus y que no reemplaza el software del fabricante, esto es para aplicaciones que necesites adaptar a tus necesidades. Si requieres leer o escribir otro tipo de registros Modbus en la carpeta de instalación de Mbaxp tendras la guía de codigo para realizarlo.
