Modbus en Raspberry PLC con Node-RED
Implementación para PLCs basados en Raspberry (Node-RED)
Instalación
1. librpiplc implementa funciones útiles para usar los PLCs de Industrial Shields basados en Raspberry en entornos industriales. Esta librería es necesaria para usar node-red-contrib-rpiplc-node. Sigue los pasos de instalación desde aquí.
2. Colecciones de Node-RED: Descarga las siguientes colecciones con el comando npm install [collection] o desde la interfaz de Node-RED en botón Menu (tres barras horizontales) > Manage Palette > pestaña Install > busca la colección que quieres instalar.
- node-red-contrib-rpiplc-node es una colección de nodos de Node-RED para usar las entradas analógicas, salidas analógicas,
entradas digitales y salidas digitales de los Raspberry PLC de Industrial
Shields. Encontrarás más información aquí.
- node-red-contrib-modbus es una colección de nodos de Node-RED para implementar esclavo y maestro Modbus. Encontrarás más información aquí.
Esclavo
El siguiente archivo JSON contiene un ejemplo de Modbus TCP en Node-RED:
Esclavo Modbus TCP
Para importar el ejemplo desde Node-RED, ve a botón Menu (tres barras horizontales) > Import > selecciona el archivo.
La librería Modbus que se usa desde Node-RED (node-red-contrib-modbus) no admite una implementación de esclavo Modbus RTU. Consulta @krakul/node-red-modbus-rtu-slave para implementar un esclavo Modbus RTU con Node-RED.
Guía de implementación
El flujo se divide en tres grupos:
El ejemplo está implementado para un Raspberry PLC 21+. Para usar este código con otros modelos, puede que tengas que modificar los nodos rpiplc config, read y write.
1. Inputs (entradas): El grupo Inputs es esencial para leer los valores digitales y analógicos del PLC. Recoge los valores de las entradas digitales, que representan estados binarios como encendido/apagado, y los pasa como Discrete Inputs (entradas discretas). También recoge los valores de las entradas analógicas, que representan datos continuos como la temperatura o la presión, y los envía como Input Registers (registros de entrada). Después, estos valores se envían al grupo Control para su procesamiento y para las acciones de control.

2. Control: El grupo Control coordina las operaciones del PLC y actúa como núcleo del procesamiento de datos y del control. Inicializa el nodo Modbus Server y se comunica con el grupo Inputs para recibir las Discrete Inputs y los Input Registers. Después envía la información procesada como Coils y Holding Registers al bloque Outputs para que actúe en consecuencia.
Para configurar el flujo:
- Haz clic en el nodo Modbus Server para configurar el Hostname, el Port y el número de objetos de cada tipo.
- Haz clic en el nodo rpiplc set config para configurar tu PLC con la Version y el Model.

3. Outputs (salidas): El grupo Outputs recibe del grupo Control los Coils y los Holding Registers, que representan las señales de salida binarias y continuas, respectivamente. Después se actualizan las salidas digitales y analógicas del PLC.

En esta configuración, los nodos encargados
de escribir en las salidas digitales Q0.5, Q0.6 y Q0.7 están desactivados,
porque estas salidas se comparten con las salidas
analógicas. En este ejemplo, el interruptor del PLC está configurado para usar las salidas
analógicas.
Maestro
Los siguientes archivos JSON contienen ejemplos de Modbus en Node-RED, tanto para RTU como para TCP:
Para importar el ejemplo desde Node-RED, ve a botón Menu (tres barras horizontales) > Import > selecciona el archivo.
Guía de implementación
El ejemplo está estructurado en grupos según los distintos códigos de función Modbus (FC). Cada grupo de código de función contiene los nodos relacionados con operaciones Modbus como leer coils, escribir registros, etc.
La única diferencia entre la implementación RTU y la TCP es la configuración del esclavo Modbus. Para configurarlo, haz clic en un nodo Modbus y después en el lápiz de la opción Server.
- Para Modbus RTU:
- Selecciona la opción Serial Expert en Type.
- Introduce el puerto serie utilizado en el campo Serial port.
- Selecciona la opción RTU-BUFFERD en Serial type.
- Introduce la configuración de la comunicación: Baud rate, Data bits, Stop bits y Parity.
- Introduce el ID del esclavo en el campo Unit-ID.
- Para Modbus TCP:
- Selecciona la opción TCP en Type.
- Introduce la dirección IP del dispositivo esclavo en el campo Host.
- Indica el número de puerto del dispositivo esclavo en el campo Port.
- Introduce el ID del esclavo en el campo Unit-ID.
Hay un grupo para cada código de función disponible:
1. FC1: Read Coil Status (Digital OUT)
- Este grupo contiene nodos para leer el estado de las coils (salidas digitales) del servidor Modbus.
- Incluye nodos inject para lanzar las peticiones de lectura, nodos Modbus read para leer el estado de las coils y nodos debug para mostrar los resultados.
2. FC2: Read Input Status (Digital IN)
- Este grupo es similar al anterior, pero se centra en leer el estado de las entradas (entradas digitales) del servidor Modbus.
- Incluye nodos inject, nodos Modbus read y nodos debug para mostrar los resultados.
3. FC3: Read Holding Registers (Analog OUT)
- Este grupo se encarga de leer los holding registers (salidas analógicas) del servidor Modbus.
- Incluye nodos inject, nodos Modbus read y nodos debug.
4. FC4: Read Input Registers (Analog IN)
- Como el grupo anterior, este se centra en leer los input registers (entradas analógicas) del servidor Modbus.
- Incluye nodos inject, nodos Modbus read y nodos debug.
5. FC5: Write Single Coil & FC15: Write Multiple (Digital OUT)
- Este grupo combina nodos para escribir una o varias coils (salidas digitales) en el servidor Modbus.
- Incluye nodos inject para lanzar las peticiones de escritura, nodos Modbus write para escribir las coils y nodos debug para mostrar los resultados.
6. FC6: Write Single Register & FC16: Write Multiple Registers (Analog OUT)
- Como el grupo anterior, este se centra en escribir uno o varios registros (salidas analógicas) en el servidor Modbus.
- Incluye nodos inject, nodos Modbus write y nodos debug.

No hay comentarios por ahora.