Conector de Alarmas ISA-18.2
Descripción General
Sección titulada «Descripción General»El conector ISA-18.2 implementa el ciclo de vida de gestión de alarmas definido por el estándar ANSI/ISA-18.2 (Management of Alarm Systems for the Process Industries). Es un procesador que consume cargas de Meddle, evalúa condiciones de alarma definidas por el usuario y emite una nueva carga cada vez que una alarma cambia de estado — enriquecida con metadatos de alarma como prioridad y estado actual.
Tipos de Conector:
Isa182- Procesador de alarmas con estado (evalúa condiciones, rastrea el estado por alarma)
El conector se coloca en la categoría industrial/ porque la gestión de alarmas es un requisito fundamental para el control de procesos, la manufactura por lotes y las plantas dirigidas por SCADA.
Características
Sección titulada «Características»- ✅ Máquina de estados de alarmas ISA-18.2 (normal, sin confirmar, confirmada, retorno sin confirmar)
- ✅ Lenguaje de expresiones MXL para condiciones de alarma arbitrarias
- ✅ Prioridad por alarma (low, medium, high, urgent)
- ✅ Histéresis con deadband para suprimir el aleteo cerca de un umbral
- ✅ Temporizadores configurables de retardo de activación (on-delay) y de desactivación (off-delay) en milisegundos
- ✅ Emite una carga sólo en transiciones de estado (evita ruido)
- ✅ Claves de metadatos estándar
_alarm_*para enrutamiento/alertado descendente
Configuración Básica
Sección titulada «Configuración Básica»Alarma de Umbral Simple
Sección titulada «Alarma de Umbral Simple»{ "type": "Isa182", "config": { "alarms": [ { "name": "high_temperature", "condition": "temperature > 80", "priority": "high" } ] }}Con Deadband y Retardos
Sección titulada «Con Deadband y Retardos»{ "type": "Isa182", "config": { "alarms": [ { "name": "high_temperature", "condition": "temperature > 80", "priority": "high", "setpoint": 80, "deadband": 2.0, "delayOn": 5000, "delayOff": 10000 } ], "shelveTimeout": 3600000, "maxShelves": 25 }}Múltiples Alarmas
Sección titulada «Múltiples Alarmas»{ "type": "Isa182", "config": { "alarms": [ { "name": "high_pressure", "condition": "pressure > 10.0", "priority": "urgent", "delayOn": 2000 }, { "name": "low_flow", "condition": "flow_rate < 5.0", "priority": "medium", "delayOn": 10000 }, { "name": "tank_overflow", "condition": "tank_level > 95", "priority": "high", "setpoint": 95, "deadband": 1.0 } ] }}Parámetros de Configuración
Sección titulada «Parámetros de Configuración»Un array obligatorio de definiciones de alarma. Se requiere al menos una alarma.
{ "alarms": [ { "name": "high_temp", "condition": "temperature > 80", "priority": "high" } ]}Alarma: Name
Sección titulada «Alarma: Name»Un identificador único para la alarma. Usado como valor de _alarm_name en las cargas emitidas.
{ "name": "compressor_1_high_temp"}Convención recomendada: <activo>_<medida>_<condición> (ej. pump_3_low_pressure).
Alarma: Condition
Sección titulada «Alarma: Condition»Una expresión MXL evaluada contra cada carga entrante. Cuando el resultado es true, la alarma se considera activa.
{ "condition": "temperature > 80 AND pressure < 5"}Ejemplos:
{ "condition": "temperature > 80" }{ "condition": "vibration_rms >= 0.7" }{ "condition": "tank_level < 10 OR tank_level > 95" }{ "condition": "(motor_running == true) AND (current > 12.5)" }La condición se parsea al inicio; una expresión inválida rechaza la configuración del conector antes del tiempo de ejecución.
Alarma: Priority
Sección titulada «Alarma: Priority»Severidad usada para el enrutamiento descendente. Debe ser una de:
lowmediumhighurgent
{ "priority": "urgent"}Alarma: Setpoint y Deadband
Sección titulada «Alarma: Setpoint y Deadband»Histéresis aplicada alrededor del umbral de la alarma para suprimir el aleteo.
{ "setpoint": 80, "deadband": 2.0}setpoint- El valor nominal del umbral (informativo; usado junto condeadband)deadband- La banda de histéresis. Cuando la condición transita de inactiva a activa, permanece activa hasta que el valor subyacente cruza por debajo desetpoint - deadband
Valores recomendados: 1-5% del rango operativo para evitar transiciones espurias en señales ruidosas.
Alarma: DelayOn
Sección titulada «Alarma: DelayOn»Retardo de activación en milisegundos. La condición debe permanecer activa de forma continua durante este tiempo antes de que la alarma transite a unacknowledged.
{ "delayOn": 5000}Valores recomendados:
- Procesos rápidos: 500-2000ms
- Alarmas de proceso estándar: 5000-15000ms
- Alarmas de tendencia: 30000ms+ (30s)
Alarma: DelayOff
Sección titulada «Alarma: DelayOff»Retardo de desactivación en milisegundos. La condición debe permanecer inactiva de forma continua durante este tiempo antes de que la alarma transite a rtn_unacknowledged.
{ "delayOff": 10000}Un retardo de desactivación más largo mantiene una alarma visible el tiempo suficiente para que los operadores la confirmen.
Shelve Timeout y Max Shelves
Sección titulada «Shelve Timeout y Max Shelves»{ "shelveTimeout": 3600000, "maxShelves": 25}shelveTimeout- Duración por defecto (ms) durante la cual una alarma puede estar archivada (shelved)maxShelves- Número máximo de alarmas archivadas simultáneamente
Estos parámetros reflejan las restricciones de archivado de ISA-18.2 y se reenvían a las herramientas descendentes de UI/gestión.
Máquina de Estados de Alarmas
Sección titulada «Máquina de Estados de Alarmas»El conector implementa la máquina de estados ISA-18.2. Cada alarma mantiene uno de los siguientes estados:
| Estado | Significado |
|---|---|
normal | La condición está inactiva; no se requiere atención del operador |
unacknowledged | La condición se activó; el operador no la ha confirmado |
acknowledged | El operador confirmó mientras la condición seguía activa |
rtn_unacknowledged | La condición volvió a la normalidad, pero la alarma previa nunca fue confirmada |
Se emite una nueva carga en cada transición de estado.
Carga de Salida
Sección titulada «Carga de Salida»Cuando una alarma cambia de estado, la carga original se copia y se enriquece con las siguientes claves:
{ "...campos originales...": "...", "_alarm_name": "high_temperature", "_alarm_state": "unacknowledged", "_alarm_priority": "high", "_alarm_timestamp": "2026-05-20T10:14:33.123456789Z"}Referencia de campos:
_alarm_name- Coincide con elnamede la definición de la alarma_alarm_state- Estado actual (normal,unacknowledged,acknowledged,rtn_unacknowledged)_alarm_priority- Prioridad de la definición de la alarma_alarm_timestamp- Timestamp UTC RFC 3339 con precisión de nanosegundos de la transición
Flujo de Datos
Sección titulada «Flujo de Datos»DataPayload → Isa182 → (al cambiar de estado) → DataPayload + metadatos _alarm_* → (sin cambio de estado) → absorbido silenciosamenteEjemplo:
Flujo de entrada (1Hz):
{ "temperature": 78.0 }{ "temperature": 81.0 }{ "temperature": 82.0 }{ "temperature": 79.0 }{ "temperature": 78.5 }Con la alarma high_temperature: temperature > 80, delayOn: 0, delayOff: 0:
- Muestra 1 (78.0): condición falsa, el estado permanece en
normal, sin emisión - Muestra 2 (81.0): condición verdadera, estado →
unacknowledged, carga emitida - Muestra 3 (82.0): condición sigue verdadera, sin cambio de estado, sin emisión
- Muestra 4 (79.0): condición falsa, estado →
rtn_unacknowledged, carga emitida - Muestra 5 (78.5): condición sigue falsa, sin cambio de estado, sin emisión
Casos de Uso Comunes
Sección titulada «Casos de Uso Comunes»1. Alarma de Proceso por Alta Temperatura
Sección titulada «1. Alarma de Proceso por Alta Temperatura»{ "type": "Isa182", "config": { "alarms": [ { "name": "reactor_high_temp", "condition": "reactor_temperature > 150", "priority": "urgent", "setpoint": 150, "deadband": 5, "delayOn": 3000, "delayOff": 10000 } ] }}2. Salud Multi-Variable de un Compresor
Sección titulada «2. Salud Multi-Variable de un Compresor»{ "type": "Isa182", "config": { "alarms": [ { "name": "compressor_overload", "condition": "motor_current > 25 AND oil_pressure < 2.0", "priority": "urgent", "delayOn": 5000 }, { "name": "compressor_vibration", "condition": "vibration_rms > 0.7", "priority": "high", "setpoint": 0.7, "deadband": 0.05, "delayOn": 10000 }, { "name": "compressor_temp_drift", "condition": "discharge_temp > 95", "priority": "medium", "delayOn": 30000 } ] }}3. Monitoreo de Nivel de Tanque con Histéresis
Sección titulada «3. Monitoreo de Nivel de Tanque con Histéresis»{ "type": "Isa182", "config": { "alarms": [ { "name": "tank_low_level", "condition": "tank_level < 10", "priority": "high", "setpoint": 10, "deadband": 2, "delayOn": 5000, "delayOff": 30000 }, { "name": "tank_high_level", "condition": "tank_level > 90", "priority": "high", "setpoint": 90, "deadband": 2, "delayOn": 5000, "delayOff": 30000 } ], "shelveTimeout": 3600000, "maxShelves": 10 }}Solución de Problemas
Sección titulada «Solución de Problemas»Las Alarmas Nunca Se Disparan
Sección titulada «Las Alarmas Nunca Se Disparan»Problema: La condición parece evaluarse como falsa incluso cuando los datos subyacentes deberían activarla
Soluciones:
- Confirma que el nombre del campo en la condición coincide exactamente con la carga (sensible a mayúsculas)
- Verifica el tipo de dato —
temperature > 80fallará sitemperaturellega como cadena. Inserta unTransformaguas arriba para forzar los tipos - Verifica que el conector ascendente está realmente entregando cargas al procesador (revisa el dataflow con un escritor
LogoConsole)
Re-Activación Constante (Aleteo)
Sección titulada «Re-Activación Constante (Aleteo)»Problema: Una señal ruidosa oscila repetidamente alrededor del umbral, generando muchas transiciones
Soluciones:
- Añade un
deadbanddel 1-5% del rango operativo - Aumenta
delayOnpara que las excursiones breves se ignoren - Aplica un
MovingAverageoEWMAaguas arriba para suavizar la entrada
Alarma Atascada en unacknowledged
Sección titulada «Alarma Atascada en unacknowledged»Problema: La alarma ya no está activa, pero el estado nunca vuelve a normal
Soluciones:
- ISA-18.2 requiere confirmación explícita antes de volver a
normal. El estadortn_unacknowledgedes la ruta estándar cuando la condición se borra antes de la confirmación - La confirmación se suele activar desde una HMI o herramienta de alerta — conecta una que actualice el estado de la alarma en tu sistema descendente
Expresión MXL Inválida al Inicio
Sección titulada «Expresión MXL Inválida al Inicio»Problema: El conector no arranca con ErrIsa182ConditionEval
Soluciones:
- Verifica que la condición se parsea con la sintaxis MXL — las comparaciones usan
>,<,>=,<=,==,!= - Los conectores booleanos son
AND,OR,NOT - Envuelve sub-expresiones complejas entre paréntesis
Mejores Prácticas
Sección titulada «Mejores Prácticas»1. Usa Deadbands Agresivamente en Sensores Ruidosos
Sección titulada «1. Usa Deadbands Agresivamente en Sensores Ruidosos»Incluso un pequeño deadband (1-2% del rango) reduce drásticamente el volumen de alarmas en plantas reales.
2. Escalona los Retardos por Prioridad
Sección titulada «2. Escalona los Retardos por Prioridad»[ { "priority": "urgent", "delayOn": 1000 }, { "priority": "high", "delayOn": 5000 }, { "priority": "medium", "delayOn": 15000 }, { "priority": "low", "delayOn": 30000 }]Las alarmas urgentes deberían dispararse rápido; las de menor prioridad pueden tolerar ventanas de confirmación más largas.
3. Mantén los Nombres de Alarmas Estables
Sección titulada «3. Mantén los Nombres de Alarmas Estables»El alertado descendente a menudo pivota sobre _alarm_name. Trata los nombres de alarmas como parte de tu esquema público; no los renombres a la ligera.
4. Combínalo con un Router para Escalado por Prioridad
Sección titulada «4. Combínalo con un Router para Escalado por Prioridad»Enruta por _alarm_priority a diferentes canales de alerta (urgent → SMS, high → email, medium → sólo dashboard).
5. Evita Alarmas Excesivas (ISA-18.2 §8)
Sección titulada «5. Evita Alarmas Excesivas (ISA-18.2 §8)»El estándar recomienda ≤ 6 alarmas por hora por operador de media. Usa deadbands, retardos y condiciones de alarma consolidadas para mantenerte dentro de ese margen.
Flujos de Trabajo de Ejemplo
Sección titulada «Flujos de Trabajo de Ejemplo»Pipeline de Alarmas de Extremo a Extremo
Sección titulada «Pipeline de Alarmas de Extremo a Extremo»OpcuaReader → Isa182 → Router → ┬─ Alert (urgent → SMS) ├─ Alert (high → email) └─ InfluxDb2Writer (registro de auditoría)- OpcuaReader: Extrae variables de proceso de un PLC a 500ms de cadencia
- Isa182: Evalúa todas las alarmas configuradas; emite cargas sólo en el cambio de estado
- Router: Ramifica según
_alarm_priority - Alert (urgent): Envía SMS por el canal de notificaciones
- Alert (high): Envía email
- InfluxDb2Writer: Audita todas las transiciones de alarma para cumplimiento
Mantenimiento Predictivo Combinado con Activación de Alarmas
Sección titulada «Mantenimiento Predictivo Combinado con Activación de Alarmas»ModbusReader → Predictive → Isa182 → Alert- ModbusReader: Lee vibración y temperatura
- Predictive: Calcula la tendencia y la vida útil restante
- Isa182: Se dispara en
vibration_rms_rul < 168(menos de 7 días de vida útil restante) - Alert: Notifica a mantenimiento
Conectores Relacionados
Sección titulada «Conectores Relacionados»- Trigger - Emisión más simple basada en condiciones sin máquina de estados
- Alert - Envía cargas de alarma a canales de notificación
- Router - Ramifica por
_alarm_priority - Predictive - Combina con RUL predictivo para alertado proactivo
- Filter - Pre-filtra las entradas antes de la evaluación de alarmas
Recursos Adicionales
Sección titulada «Recursos Adicionales»- Estándar ANSI/ISA-18.2 - Management of Alarm Systems for the Process Industries
- EEMUA 191 - Alarm Systems: A Guide to Design, Management and Procurement
- Directrices de Gestión de Alarmas (ISA)