La monitorización del moldeo por inyección consiste en capturar la huella de proceso de cada disparo, no solo en contar piezas. Este caso de uso muestra cómo publicar por MQTT el tiempo de ciclo, el colchón, la presión y las temperaturas de cada disparo, comparar cada disparo con su propio historial reciente y avisar al equipo cuando el proceso empieza a derivar. El resultado es una detección más temprana de piezas incompletas, rebabas y problemas dimensionales, con un registro claro de cómo era el proceso cuando se fabricó cada pieza.
Por qué importan los datos por disparo en el moldeo
Una inyectora es muy buena repitiéndose, hasta que deja de serlo. Cambia la humedad del material, falla una resistencia de banda, se desgasta el anillo antirretorno o el molde se calienta tras una parada. Cada una de estas situaciones aparece primero como un pequeño desplazamiento en un valor de proceso, a menudo varios disparos antes de un defecto visible. Las plantas que solo revisan las piezas al final de cada hora encuentran el problema cuando ya hay decenas o cientos de piezas en la caja.
La monitorización por disparo cambia los tiempos. Cuando cada ciclo publica sus valores, un suscriptor puede comparar el disparo actual con los últimos 50 y reaccionar en un solo ciclo. También da evidencias a los ingenieros de calidad: cuando llega una reclamación de un cliente, puedes consultar los datos de proceso de ese lote en lugar de hacer suposiciones.
Los valores de proceso que merece la pena capturar
Las máquinas exponen docenas de valores. Estos son los que con más frecuencia explican los defectos:
| Valor | Qué suele significar un desplazamiento |
|---|---|
| Tiempo de ciclo | Intervención del operario, retraso del robot o de la cinta, cambio en el enfriamiento |
| Tiempo de inyección (llenado) | Cambio de viscosidad: humedad del material, temperatura de la masa fundida, proporción de molido |
| Presión de inyección máxima | Lo mismo que el tiempo de llenado, o una entrada o boquilla parcialmente obstruida |
| Colchón | Fuga en el anillo antirretorno o dosificación irregular; un colchón muy bajo arriesga piezas incompletas |
| Tiempo de dosificación (plastificación) | Problemas de alimentación, formación de puentes de material en la tolva, desgaste del husillo |
| Posición o presión de conmutación | Conmutación irregular que afecta a la compactación |
| Temperaturas de las zonas del cilindro | Fallo de resistencia de banda o de termopar |
| Temperaturas del molde (lado fijo y móvil) | Fallo del termorregulador, canal de refrigeración obstruido |
| Presión y tiempo de mantenimiento | Cambios de consigna que afectan a rechupes y dimensiones |
Empieza por el tiempo de ciclo, el tiempo de llenado, la presión máxima, el colchón y el tiempo de dosificación. Provienen del controlador de la máquina en cada disparo y, juntos, detectan la mayor parte de la deriva del proceso.
Sacar los datos de la máquina
Las máquinas modernas suelen ofrecer una de estas interfaces:
- OPC UA según la especificación complementaria Euromap 77. Muchas máquinas recientes ofrecen un modelo de información estandarizado para los parámetros de ciclo. Un cliente OPC UA en el edge se suscribe a los valores del ciclo y los publica en MQTT cuando termina un ciclo nuevo.
- Interfaces Euromap antiguas o protocolos del fabricante. Algunas máquinas heredadas exponen los datos de disparo mediante interfaces basadas en archivos o propietarias. Un gateway los lee y normaliza los datos.
- Sensores de retrofit. Si el controlador no ofrece nada, añade una señal de ciclo desde la salida de molde abierto, además de termopares o una lectura de temperatura del molde, mediante un pequeño PLC o un ESP32. Pierdes las curvas de presión, pero sigues obteniendo el tiempo de ciclo y las temperaturas.
La guía de IoT industrial con MQTT explica el patrón de gateway en general. Lo importante aquí es publicar un mensaje completo por disparo, disparado por el fin de ciclo, no un flujo de valores muestreados con un temporizador.
Diseño del mensaje: un disparo, un mensaje
Usa un topic por máquina y un payload que lleve el número de disparo, el molde y el material para que cada registro se describa por sí mismo:
connectmq/demo/<your-id>/plant1/molding/imm07/shot
{
"shot": 48211,
"mold": "M-2231",
"material": "PP-H 12 MFI",
"cycle_time": 18.42,
"fill_time": 0.86,
"peak_pressure": 1065,
"cushion": 4.8,
"recovery_time": 6.1,
"barrel": [205, 215, 225, 230],
"mold_temp": {"fixed": 41.2, "moving": 43.0},
"ts": "2026-10-16T08:21:44.120Z"
}
Mantén unidades coherentes entre máquinas (segundos, bar, milímetros, grados Celsius) y documéntalas una vez. Publica con QoS 1 para que un breve corte de red no haga perder disparos; el gateway almacena en búfer y el broker confirma cada mensaje. Si tu planta ya usa Sparkplug B, ConnectMQ puede decodificarlo y republicarlo en topics ISA-95, de modo que una celda de moldeo no tiene que cambiar su formato nativo.
Detectar la deriva disparo a disparo
El suscriptor siguiente mantiene una ventana móvil de disparos recientes por máquina y marca cualquier valor que se aleje más de tres desviaciones estándar de la media de la ventana. Es intencionadamente sencillo: sin entrenamiento de modelos, solo el comportamiento reciente de la propia máquina como referencia. Publica los disparos marcados en un topic alert al que pueden suscribirse un dashboard, una luz andon o una herramienta de mensajería.
import json
import statistics
from collections import defaultdict, deque
import paho.mqtt.client as mqtt
PREFIX = "connectmq/demo/r5t1w8/plant1/molding"
WATCH = ["cycle_time", "fill_time", "peak_pressure", "cushion", "recovery_time"]
WINDOW = 50
MIN_SHOTS = 20
SIGMA = 3.0
history = defaultdict(lambda: {k: deque(maxlen=WINDOW) for k in WATCH})
def on_connect(client, userdata, flags, reason_code, properties):
client.subscribe(f"{PREFIX}/+/shot", qos=1)
def on_message(client, userdata, msg):
machine = msg.topic.split("/")[-2]
shot = json.loads(msg.payload)
issues = []
for key in WATCH:
value = shot.get(key)
if value is None:
continue
window = history[machine][key]
if len(window) >= MIN_SHOTS:
mean = statistics.fmean(window)
sd = statistics.pstdev(window) or 1e-9
z = (value - mean) / sd
if abs(z) > SIGMA:
issues.append({"param": key, "value": value, "mean": round(mean, 3), "z": round(z, 1)})
window.append(value)
if issues:
alert = {"machine": machine, "shot": shot.get("shot"), "mold": shot.get("mold"), "issues": issues}
client.publish(f"{PREFIX}/{machine}/alert", json.dumps(alert), qos=1)
print("ALERT", alert)
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="molding-watch-r5t1w8")
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.connectmq.com", 1883, keepalive=30)
client.loop_forever()
Algunas notas de ajuste sacadas de la práctica:
- Vacía la ventana cuando cambien el molde o el material; de lo contrario, el trabajo nuevo se juzga con el anterior. Compara
moldcon el último disparo y reinicia si cambia. - Ignora los primeros disparos tras una parada. El molde y el cilindro necesitan tiempo para estabilizarse, y esos disparos suelen desecharse de todos modos.
- Algunos parámetros merecen también límites fijos. Un colchón cercano a cero es un problema aunque haya ido bajando poco a poco, porque la media móvil sigue la deriva lenta. Combina la comprobación estadística con límites absolutos de la hoja de proceso.
- No alertes en cada disparo marcado. Exige que dos de los últimos cinco disparos estén fuera de rango antes de llamar a nadie, o las alertas quedarán silenciadas en una semana.
Para profundizar en gráficos de control y reglas de rachas, consulta SPC en tiempo real.
Qué hace el equipo con los datos
La monitorización solo compensa cuando cambia el comportamiento en planta. Flujos de trabajo típicos:
- Los ajustadores reciben una alerta en la luz andon de la celda cuando derivan el colchón o el tiempo de llenado, y revisan el secado del material y el anillo antirretorno antes de que se acumule desperdicio.
- Calidad vincula los datos de disparo con los números de lote y puede poner en cuarentena solo la ventana de tiempo afectada en lugar de la producción de un turno completo.
- Planificación de la producción usa los tiempos de ciclo reales por molde en lugar de los cotizados, lo que hace más realistas los programas y las ofertas. El artículo de monitorización del tiempo de ciclo profundiza en ello.
- Mantenimiento vigila tendencias lentas como el tiempo de dosificación y el ciclo de trabajo de las resistencias del cilindro para planificar trabajos en husillo y resistencias.
Los datos de ciclo y de estado de las mismas máquinas alimentan también el OEE: el recuento de disparos da la producción, el tiempo de ciclo da el rendimiento y los disparos marcados aproximan la pérdida de calidad.
Más allá del piloto
El servidor público en broker.connectmq.com sirve para demostrar la idea con un simulador, pero cualquiera puede leer su zona pública, y los parámetros de moldeo son conocimiento de proceso que no deberías compartir. Para la celda real, crea un broker privado en ConnectMQ y conecta cada gateway con su propio usuario, contraseña y client ID mediante TLS en el puerto 8883. Un broker MQTT gestionado significa que nadie del equipo de planta tiene que mantener el broker, y ejecutarlo como broker MQTT en la nube permite que el equipo de calidad corporativo vea los mismos datos de disparo que la planta. Las reglas de alerta por umbral del portal pueden cubrir los límites absolutos sencillos, mientras que la comprobación estadística se ejecuta en tu propio suscriptor. Los mismos datos pueden mostrar el estado de cada celda sobre un gemelo digital 3D de la nave. Para saber dónde encaja esto en un programa más amplio, lee la guía de fabricación inteligente.
Empieza con ConnectMQ
Crea un broker gratuito en app.connectmq.com con el plan Serverless y sin tarjeta de crédito, conecta el gateway de una inyectora y el suscriptor de deriva, y recibe esta misma semana tus primeras alertas por disparo.
Preguntas frecuentes
¿Cuál es el valor individual más útil para la monitorización del moldeo por inyección?
El colchón y el tiempo de llenado juntos detectan gran parte de los problemas de proceso, porque reflejan tanto la regularidad del disparo como la viscosidad del material. El tiempo de ciclo por sí solo informa sobre la productividad, no sobre la calidad.
¿Debo transmitir las curvas de presión completas por MQTT?
Normalmente no al principio. Los valores resumen por disparo son pequeños y cubren la mayoría de las necesidades; captura curvas completas solo para piezas críticas y mantenlas dentro del límite de tamaño de mensaje de tu plan de broker.
¿Se pueden monitorizar máquinas antiguas sin OPC UA?
Sí. Una señal de molde abierto da el tiempo de ciclo y el recuento, y los termopares añadidos dan las temperaturas. Publicas menos valores, pero la canalización MQTT es idéntica.
¿Cómo evito falsas alarmas después de un cambio de molde?
Reinicia la referencia móvil cuando cambien el molde o el material y omite los primeros disparos de estabilización. Combina las comprobaciones estadísticas con límites fijos de la hoja de proceso.



