Lección 5. Modbus TCP: leer y escribir un esclavo
#5 Comunicaciones: cómo leer y escribir variables de un dispositivo esclavo por Modbus TCP/IP
Introducción
El contenido del capítulo 5 se centra en el control de un dispositivo esclavo a través de Modbus TCP/IP. Este dispositivo está conectado a la misma red a través de Ethernet. En este caso, el dispositivo es un M-Duino 21+ utilizando el código esclavo que está publicado en nuestro blog.
Este es el primer requisito para completar y probar la nueva lección, además de tener instalado el Node-RED.
Modbus es un estándar muy útil que nos permite comunicar varios dispositivos de distintos fabricantes en la misma red. Además, Modbus TCP/IP se transmite por Ethernet, uno de los protocolos más fiables del mercado.
En este caso, mostraremos cómo configurar Node-RED para controlar uno de los esclavos de nuestro sistema.
Los maestros Modbus tienen normalmente 8 funciones principales:
readCoils()
readDiscreteInputs();
readHoldingRegisters();
readInputRegisters();
writeSingleCoil();
writeSingleRegister();
writeMultipleCoils();
writeMultipleRegisters();
Instalación
Escribe en tu terminal o símbolo del sistema después de colocar tu terminal en el directorio raíz de tu NodeRED, utiliza el .node-red/:
cd .node-red/
npm install node-red-contrib-modbustcp
Ahora verás en tu aplicación Node-RED dos nodos Modbus nuevos. Nota (2026): node-red-contrib-modbustcp ya no se mantiene. Todavía se instala y sirve para seguir este capítulo, pero para proyectos nuevos recomendamos node-red-contrib-modbus, con nodos Modbus Read y Modbus Write equivalentes.
Desarrollo de la aplicación
A menudo, en nuestras instalaciones, tenemos las mismas dos funcionalidades principales que controlar. Las entradas y las salidas. Como hemos hecho en los capítulos anteriores, hemos dividido el contenido.
Entradas
Para leer las entradas del esclavo, usa el nodo modbustcp in (lectura Modbus TCP). Selecciona el mismo servidor (10.10.10.4), el código de función (FC 1 Read Coils, FC 2 Read Discrete Inputs, FC 3 Read Holding Registers o FC 4 Read Input Registers), la dirección inicial, la cantidad de valores y el intervalo de lectura. El nodo devuelve un array con los valores leídos: sepáralos con un nodo function y muéstralos en el dashboard con nodos gauge o text, como en el capítulo #2.
Salidas
Nodo cliente Modbus TCP. Se conecta a un servidor Modbus TCP para escribir msg.payload en un coil o en un registro.
Los códigos de función que se admiten actualmente son:
- FC 5: escribir un coil
- FC 6: escribir un holding register
- FC 15: escribir varios coils
- FC 16: escribir varios holding registers
Eligiendo el dataType y la Address podremos acceder a las salidas del esclavo y controlarlas.
Después de instalar la Librería Node-RED para utilizar el protocolo de comunicación Modbus TCP/IP, ya podemos utilizar sus nodos. Pero antes de utilizar el bloque principal que organizará la comunicación tendremos que configurar algunos parámetros. Tendremos que especificar el Type (Tipo) y la Address (Dirección). El Tipo será la función Modbus y la Dirección será la posición de la matriz roja del nodo donde se encuentran nuestras E/S deseadas.
Selecciona un switch y ponle el nombre que quieras. Este nodo no necesita ninguna configuración adicional.
Después, selecciona el bloque change que está en los bloques de función. Escribe "address" en la función para dar una dirección al objeto JavaScript.

Después, nuestro switch enviará un mensaje (1/0) y, además, tendrá una dirección que apunta a la salida correcta.
Haz lo mismo con el dataType: añade una función change de tipo dataType y asigna el mismo valor, FC5, a todos los switches.

Por último, selecciona el bloque modbus tcp en los nodos de salida y ponle un nombre. En la configuración, el nodo toma Type y Address si no los has definido antes en otros nodos. En nuestro caso los definimos antes para tener una sola conexión abierta con nuestro PLC.
Así que selecciona cualquier Type y Address. Después configura en el nodo la IP de tu servidor Modbus; en nuestro ejemplo hemos usado la IP 10.10.10.4.

Si repetimos el proceso para las salidas analógicas con sliders en lugar de switches, tendremos el control completo de las salidas. En el segundo nodo change debemos seleccionar dataType como FC6.
A continuación se muestra todo el flujo de salida y la interfaz de usuario.


No se permite comentar en este curso.