Cómo integrar sistemas legados de fábrica con MQTT y Node-RED
Aprenda a conectar máquinas antiguas de planta a paneles web modernos usando MQTT y Node-RED sin reemplazar el hardware existente.
Resumen
- Los protocolos industriales antiguos aíslan los datos en silos locales que dificultan la lectura remota en tiempo real
- El protocolo MQTT funciona como un centro de mensajes ligero que consume mínimo ancho de banda en redes fabriles inestables
- Node-RED traduce señales binarias y registros complejos de PLC en JSON legible por navegadores web
- El uso correcto de flujos desacoplados evita que fallos en la red de TI derriben el control crítico de la planta
- Los paneles web modernos pueden mostrar el estado de las máquinas al instante tras la conversión adecuada del protocolo
El desafío de conectar maquinaria antigua a la internet industrial
Quien visita la planta de una industria tradicional nota rápidamente que muchas máquinas funcionan a la perfección desde hace décadas, pero operan en completo aislamiento digital. Estos equipos suelen utilizar protocolos propietarios o estándares antiguos, como Modbus RTU sobre cables seriales RS-485, que se crearon en una época en la que conectar un taladro a internet era ciencia ficción. En la práctica, esto significa que ingenieros y gerentes deben caminar hasta el panel físico de la máquina para anotar contadores de producción o verificar códigos de error, perdiendo un tiempo valioso.
Modernizar este parque industrial reemplazando toda la maquinaria por modelos nuevos de última generación es una alternativa financieramente inviable para la mayoría de las empresas. La buena noticia es que la ingeniería de automatización permite crear una capa intermedia de software y hardware ligero para extraer datos de estos sistemas legados. Al igual que abordamos los cuellos de botella en sistemas legados lentos, debemos planificar la extracción de datos industriales calculando el retorno de inversión sin interrumpir la producción diaria.
Entendiendo el papel de MQTT en la comunicación de planta
Para enviar datos de una máquina aislada a un servidor web en la nube o en la red local, necesitamos un protocolo de comunicación adecuado para entornos industriales ruidosos y conexiones inestables. MQTT, cuyas siglas significan Message Queuing Telemetry Transport, funciona como un cartero extremadamente eficiente que entrega mensajes utilizando muy poco ancho de banda. Opera bajo el modelo de publicación y suscripción, donde la máquina publica información en un canal específico y cualquier sistema interesado simplemente escucha ese canal sin sobrecargar el dispositivo de origen.
A diferencia de las solicitudes HTTP tradicionales que abren y cierran conexiones constantemente generando lentitud, MQTT mantiene un canal ligero y persistente abierto con un intermediario central llamado broker. En la práctica, esto significa que si el Wi-Fi de la fábrica parpadea durante unos segundos, el protocolo gestiona la reconexión automática y garantiza que los paquetes esenciales de telemetría no se pierdan en el camino. Esta resiliencia recuerda la lógica de sistemas distribuidos tolerantes a particiones, donde la aplicación debe seguir funcionando incluso cuando el enlace principal sufre inestabilidades físicas.
Cómo estructurar la lectura de PLC usando Node-RED
Node-RED es una herramienta de programación visual basada en bloques conectados por líneas que facilita enormemente la integración de sistemas sin requerir miles de líneas de código complejo. Desarrollado originalmente por IBM, se ejecuta perfectamente en pequeños ordenadores de bajo costo instalados directamente en el piso de la fábrica, como una Raspberry Pi o un mini PC industrial. Dentro de Node-RED, podemos instalar paquetes específicos para comunicarse directamente con controladores lógicos programables, conocidos como PLC, que son los cerebros electrónicos que controlan los motores y sensores de las cintas transportadoras.
El flujo de trabajo comienza con un bloque de lectura periódica que solicita los registros de memoria del PLC utilizando puertos serie o redes Ethernet industriales. A continuación, transformamos estos números sin procesar en mensajes estructurados en formato JSON, que es el estándar universal comprendido por cualquier lenguaje de programación web moderno. Para garantizar que este puente de software no sufra bloqueos de memoria o picos de procesamiento, muchos arquitectos aplican buenas prácticas similares a las utilizadas en la optimización de conexiones de bases de datos concurrentes, limitando el volumen de solicitudes simultáneas realizadas al hardware antiguo.
Implementando el flujo de datos desde el PLC hasta el panel web
Para ponernos manos a la obra y estructurar la recolección de datos de una línea de ensamblaje, podemos seguir una secuencia lógica de configuración directamente dentro del entorno Node-RED. Este enfoque garantiza que la conversión del protocolo industrial ocurra de manera ordenada y segura antes de exponer la información en paneles visuales para los operadores.
- Instale Node-RED en el servidor local de la fábrica y agregue los nodos de comunicación industrial compatibles con su PLC, como el nodo Modbus TCP.
- Configure la dirección IP de la máquina legada y defina las direcciones de los registros de memoria que contienen la temperatura actual y el número de piezas producidas.
- Agregue un bloque de función en JavaScript para convertir los datos binarios en bruto en un objeto JSON limpio y legible.
- Conecte este objeto a un nodo de salida MQTT configurado para enviar el mensaje periódicamente al broker local de la red.
- Cree una interfaz visual utilizando nodos de panel o conecte una aplicación web externa para escuchar el tema MQTT en tiempo real.
El fragmento de código a continuación ilustra cómo una función simple dentro de Node-RED procesa los datos sin procesar recibidos de un registro industrial y los prepara para su publicación:
// Ejemplo de script ejecutado dentro de un nodo de función en Node-RED
let rawValue = msg.payload;
// El PLC envía la temperatura multiplicada por 10 para evitar decimales
let actualTemperature = rawValue[0] / 10.0;
msg.payload = {
machineId: