IIoT

Cómo conectar un S7-1200 a Node-RED usando Modbus TCP

Cómo conectar un S7-1200 a Node-RED usando Modbus TCP

Introducción

El S7-1200 es uno de los PLCs más instalados en la industria del NOA. Sin embargo, en muchas plantas el PLC controla el proceso pero los datos quedan atrapados adentro: no hay forma de verlos en tiempo real, generar reportes ni conectarlos a sistemas superiores. Node-RED resuelve exactamente ese problema.

Node-RED es una plataforma de integración visual de código abierto que corre sobre Node.js. Con unos pocos nodos podés leer variables del PLC, procesarlas y enviarlas a un dashboard, una base de datos o la nube, sin necesidad de software SCADA costoso ni licencias adicionales.

En este artículo te mostramos cómo establecer la comunicación usando Modbus TCP, el protocolo industrial más universal. No necesitás módulos de comunicación extra ni configuraciones avanzadas: el S7-1200 tiene soporte nativo para Modbus TCP desde el firmware V4.0.

Requisitos previos

Antes de empezar, necesitás tener:

  • PLC Siemens S7-1200 (cualquier CPU de la serie, firmware V4.0 o superior)
  • TIA Portal V16 o superior
  • Node-RED instalado en una PC o servidor Linux
  • Paquete node-red-contrib-modbus instalado en Node-RED
  • Ambos dispositivos en la misma red Ethernet

Paso 1: Configurar Modbus TCP en el S7-1200

En TIA Portal, abrí el proyecto del S7-1200 y seguí estos pasos:

1.1 Agregar el bloque MB_SERVER al OB1

En el árbol de instrucciones, buscá Communication > Others > MODBUS TCP > MB_SERVER. Arrastrá el bloque al OB1. Este bloque convierte al PLC en un servidor Modbus TCP que acepta conexiones entrantes.

1.2 Crear el bloque de datos de instancia

Al insertar el MB_SERVER, TIA Portal te va a pedir crear un DB de instancia. Nombralo MB_SERVER_DB y aceptá.

1.3 Configurar los parámetros del bloque

Los parámetros más importantes son:

  • DISCONNECT: Poné una variable bool en false para mantener la conexión activa
  • MB_HOLD_REG: Definí el área de memoria que vas a exponer. Podés usar un Data Block o el área de marcas. Ejemplo: P#DB10.DBX0.0 WORD 100 expone 100 palabras del DB10
  • CONNECT: Configurá la estructura de conexión con puerto 502 (el estándar Modbus TCP)

1.4 Compilar y descargar

Compilá el proyecto y descargalo al PLC. Verificá que el bloque MB_SERVER no tenga errores en el estado de diagnóstico.

Paso 2: Instalar node-red-contrib-modbus

# Desde la terminal de Node-RED o npm
npm install node-red-contrib-modbus

Después de instalar, reiniciá Node-RED:

node-red-stop
node-red-start

Abrí la interfaz web de Node-RED (por defecto en http://localhost:1880) y verificá que en la paleta izquierda aparezcan los nodos del grupo Modbus: Modbus Read, Modbus Write, Modbus Server, entre otros.

Paso 3: Configurar el nodo Modbus Read en Node-RED

Arrastrá un nodo Modbus Read al canvas. Hacé doble clic para configurarlo:

  • Server: Creá un nuevo servidor con la IP del S7-1200 (ej: 192.168.1.10) y puerto 502
  • FC (Function Code): Seleccioná FC 3: Read Holding Registers para leer los registros del área MB_HOLD_REG
  • Address: Dirección de inicio (0 para el primer registro)
  • Quantity: Cantidad de registros a leer (ej: 10)
  • Poll Rate: Intervalo de polling en milisegundos (ej: 1000 para leer cada segundo)

Paso 4: Leer los datos del PLC

Conectá el nodo Modbus Read a un nodo Debug para verificar que llegan datos. El flow básico es:

[Modbus Read] → [Debug]

El msg.payload que devuelve el nodo es un array de números enteros, uno por cada registro leído. Por ejemplo, si leíste 3 registros con valores 1500, 2300 y 750, el payload será:

[1500, 2300, 750]

Si tus variables en el PLC son enteros con escala (por ejemplo, temperatura × 10), podés usar un nodo Function para convertirlos:

msg.payload = msg.payload.map(v => v / 10);
return msg;

Paso 5: Enviar datos a un dashboard

Con los datos llegando, podés conectarlos a un dashboard usando node-red-dashboard. Instalalo desde el menú Manage Palette y arrastrá un nodo gauge o chart:

[Modbus Read] → [Function] → [gauge]

También podés publicar los datos en un tópico MQTT para integrarlos con otros sistemas:

[Modbus Read] → [mqtt out]

Configurá el nodo mqtt out con el broker de tu red, el tópico (ej: planta/linea1/temperatura) y el QoS deseado. Desde ahí podés consumir los datos en Python, InfluxDB, Grafana o cualquier sistema que soporte MQTT.

Consideraciones de seguridad

Modbus TCP no tiene autenticación ni cifrado nativo — es un protocolo diseñado para redes industriales aisladas, no para internet. Antes de implementarlo tené en cuenta:

  • Mantené el PLC en una red segregada (VLAN industrial separada de la red de oficina)
  • No expongas el puerto 502 a internet bajo ninguna circunstancia
  • Si necesitás acceso remoto, usá una VPN industrial o un túnel seguro
  • Limitá las IPs que pueden conectarse al PLC usando el firewall del router o switch industrial

Conclusión

Con esta configuración tenés una conexión funcional entre el S7-1200 y Node-RED que te permite leer variables del PLC en tiempo real sin software adicional ni licencias. Es el primer paso para construir un sistema IIoT completo: podés agregar más variables, conectar a InfluxDB para histórico, armar un dashboard con Grafana o integrarlo con sistemas de gestión de producción.

Si querés ir más lejos — calcular OEE automáticamente, enviar alertas por WhatsApp cuando una variable se sale de rango, o armar un sistema completo de monitoreo — en TEKJUY lo implementamos para fábricas del NOA.


¿Necesitás implementar esto en tu planta? Contactanos y te ayudamos.