Mezclado industrial (HMI táctil)TouchBerry PiGPIOControl
Conmutar la salida Q0 desde el dashboard, con enclavamientos
El camino más corto entre un botón de pantalla táctil y un contactor es el nodo rpiplc-digital-write: gobierna la salida digital Q0 del PLC directamente desde Node-RED, sin controlador externo de por medio. Pero un botón en crudo cableado a un relé es una temeridad, así que este ejemplo intercala una función de enclavamiento — materiales listos, sesión de administrador activa, apagado automático de seguridad. Reproduce un despliegue real en una línea de mezclado industrial, donde Q0 comanda el contactor de la máquina.
Nodos de E/S nativos en lugar de apaños con GPIO
Industrial Shields distribuye una colección de nodos para Node-RED (rpiplc) que expone las E/S industriales reales del PLC — salidas de relé y de transistor, entradas optoaisladas, canales analógicos — por su nombre de panel, como Q0.0. El botón del dashboard solo tiene que entregar msg.payload como 1 o 0 y el nodo se encarga de la capa de hardware. Sin rutas sysfs, sin scripts auxiliares en Python, sin adivinar números de pin: el flujo se lee como el esquema eléctrico.
La función de enclavamiento delante del relé
El paro se obedece siempre, de forma incondicional y sin comprobaciones. La marcha, en cambio, tiene que superar dos: el último valor de "materiales listos" memorizado desde MQTT debe ser verdadero, y la sesión de administrador (contexto global compartido con el flujo de login) debe seguir activa. Una orden rechazada se enruta a una notificación en pantalla que explica exactamente qué condición la bloqueó, para que el operario nunca se quede con la duda.
El apagado automático como última defensa por software
Cuando Q0 se activa, la función arma un temporizador de 30 minutos con setTimeout y lo cancela en cada paro. Si nunca llega una orden de paro — un mensaje perdido, una pestaña del navegador cerrada — el temporizador baja la salida y registra un aviso. Las protecciones de hardware (relé térmico, paro de emergencia) siguen estando aguas abajo; este temporizador solo evita que un fallo de software las sobreviva.
Un fragmento de la implementación
Tal cual del ejemplo desplegado en el TouchBerry Pi — cópialo libremente:
global.set("materialsOk", msg.payload == "1");
return msg; // continues to the dashboard LED
// ============================================================
// function 2: interlockQ0
// ------------------------------------------------------------
// Input: msg.payload = "ON" | "OFF" (dashboard buttons)
// Output 1 -> rpiplc-digital-write (msg.payload = 1 | 0)
// Output 2 -> ui-notification (command rejected)
//
// Interlock rules to switch on:
// 1. Materials OK (MQTT ready topic == "1")
// 2. Active administrator session for the manual override
// Stop (OFF) is ALWAYS accepted, unconditionally.
// ============================================================
const MAX_RUN_TIME_MS = 30 * 60 * 1000; // safety shutdown: 30 min
if (msg.payload === "OFF") {
// Stop is never blocked
const t = context.get("shutdownTimer");
if (t) { clearTimeout(t); context.set("shutdownTimer", null); }
global.set("q0State", false);
msg.payload = 0; // rpiplc-digital-write: Q0.0 = 0
return [msg, null];
}
if (msg.payload === "ON") {
// Interlock 1: materials ready
if (!global.get("materialsOk")) {El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.
Preguntas frecuentes
¿Cómo controlo las salidas de un PLC de Industrial Shields desde Node-RED?
Instala la colección de nodos rpiplc, coloca un nodo rpiplc-digital-write, selecciona la salida (por ejemplo Q0.0) y envíale msg.payload 1 o 0.
¿Es seguro accionar el contactor de una máquina desde un dashboard?
Solo con protección en capas. Mantén las seguridades de hardware (paro de emergencia, relé térmico) en el circuito y añade enclavamientos por software y un temporizador de apagado automático como en este ejemplo.
¿Por qué el paro se salta todos los enclavamientos?
Parar no debe depender nunca de sesiones ni de condiciones de proceso. Cualquier enclavamiento que pueda bloquear una orden de paro es un fallo de diseño.