Connettore Allarmi ISA-18.2
Panoramica
Sezione intitolata “Panoramica”Il connettore ISA-18.2 implementa il ciclo di vita di gestione degli allarmi definito dallo standard ANSI/ISA-18.2 (Management of Alarm Systems for the Process Industries). È un processore che consuma payload Meddle, valuta condizioni di allarme definite dall’utente ed emette un nuovo payload ogni volta che un allarme cambia stato — arricchito con metadati di allarme come priorità e stato corrente.
Tipi Connettore:
Isa182- Processore di allarmi con stato (valuta condizioni, traccia lo stato per ogni allarme)
Il connettore è posizionato nella categoria industrial/ perché la gestione degli allarmi è un requisito fondamentale per il controllo di processo, la produzione batch e gli impianti gestiti da SCADA.
Caratteristiche
Sezione intitolata “Caratteristiche”- ✅ Macchina a stati di allarme ISA-18.2 (normal, unacknowledged, acknowledged, return-unacknowledged)
- ✅ Linguaggio di espressione MXL per condizioni di allarme arbitrarie
- ✅ Priorità per ogni allarme (low, medium, high, urgent)
- ✅ Isteresi deadband per sopprimere flapping vicino a una soglia
- ✅ Timer di on-delay e off-delay configurabili (in millisecondi)
- ✅ Emette un payload solo sulle transizioni di stato (evita rumore)
- ✅ Chiavi metadati standard
_alarm_*per routing/alerting a valle
Configurazione di Base
Sezione intitolata “Configurazione di Base”Allarme di Soglia Semplice
Sezione intitolata “Allarme di Soglia Semplice”{ "type": "Isa182", "config": { "alarms": [ { "name": "high_temperature", "condition": "temperature > 80", "priority": "high" } ] }}Con Deadband e Ritardi
Sezione intitolata “Con Deadband e Ritardi”{ "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 }}Allarmi Multipli
Sezione intitolata “Allarmi Multipli”{ "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 } ] }}Parametri di Configurazione
Sezione intitolata “Parametri di Configurazione”Un array obbligatorio di definizioni di allarmi. È richiesto almeno un allarme.
{ "alarms": [ { "name": "high_temp", "condition": "temperature > 80", "priority": "high" } ]}Allarme: Name
Sezione intitolata “Allarme: Name”Un identificatore univoco per l’allarme. Utilizzato come valore di _alarm_name nei payload emessi.
{ "name": "compressor_1_high_temp"}Convenzione raccomandata: <asset>_<misura>_<condizione> (es. pump_3_low_pressure).
Allarme: Condition
Sezione intitolata “Allarme: Condition”Un’espressione MXL valutata su ogni payload in ingresso. Quando il risultato è true, l’allarme è considerato attivo.
{ "condition": "temperature > 80 AND pressure < 5"}Esempi:
{ "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 condizione viene analizzata all’avvio; un’espressione non valida rifiuta la configurazione del connettore prima del runtime.
Allarme: Priority
Sezione intitolata “Allarme: Priority”Severità utilizzata per il routing a valle. Deve essere uno tra:
lowmediumhighurgent
{ "priority": "urgent"}Allarme: Setpoint e Deadband
Sezione intitolata “Allarme: Setpoint e Deadband”Isteresi applicata intorno alla soglia di allarme per sopprimere flapping.
{ "setpoint": 80, "deadband": 2.0}setpoint- Il valore di soglia nominale (informativo; usato insieme adeadband)deadband- La banda di isteresi. Quando la condizione transita da inattiva ad attiva, rimane attiva finché il valore sottostante non scende sottosetpoint - deadband
Valori raccomandati: 1-5% del range operativo per evitare transizioni spurie su segnali rumorosi.
Allarme: DelayOn
Sezione intitolata “Allarme: DelayOn”Ritardo di attivazione in millisecondi. La condizione deve rimanere attiva continuativamente per questo periodo prima che l’allarme transiti a unacknowledged.
{ "delayOn": 5000}Valori raccomandati:
- Processi veloci: 500-2000ms
- Allarmi di processo standard: 5000-15000ms
- Allarmi di trend: 30000ms+ (30s)
Allarme: DelayOff
Sezione intitolata “Allarme: DelayOff”Ritardo di disattivazione in millisecondi. La condizione deve rimanere inattiva continuativamente per questo periodo prima che l’allarme transiti a rtn_unacknowledged.
{ "delayOff": 10000}Un off-delay più lungo mantiene un allarme visibile abbastanza a lungo affinché gli operatori possano riconoscerlo.
Shelve Timeout e Max Shelves
Sezione intitolata “Shelve Timeout e Max Shelves”{ "shelveTimeout": 3600000, "maxShelves": 25}shelveTimeout- Durata predefinita (ms) per cui un allarme può essere messo in shelvemaxShelves- Numero massimo di allarmi simultaneamente in shelve
Questi parametri riflettono i vincoli di shelving ISA-18.2 e vengono inoltrati agli strumenti UI/management a valle.
Macchina a Stati degli Allarmi
Sezione intitolata “Macchina a Stati degli Allarmi”Il connettore implementa la macchina a stati ISA-18.2. Ogni allarme detiene uno dei seguenti stati:
| Stato | Significato |
|---|---|
normal | Condizione inattiva; nessuna attenzione operatore richiesta |
unacknowledged | La condizione è diventata attiva; l’operatore non ha riconosciuto |
acknowledged | L’operatore ha riconosciuto mentre la condizione è ancora attiva |
rtn_unacknowledged | La condizione è tornata normale, ma l’allarme precedente non è mai stato riconosciuto |
Un nuovo payload viene emesso ad ogni transizione di stato.
Payload di Output
Sezione intitolata “Payload di Output”Quando un allarme cambia stato, il payload originale viene copiato e arricchito con le seguenti chiavi:
{ "...campi originali...": "...", "_alarm_name": "high_temperature", "_alarm_state": "unacknowledged", "_alarm_priority": "high", "_alarm_timestamp": "2026-05-20T10:14:33.123456789Z"}Riferimento campi:
_alarm_name- Corrisponde alnamedalla definizione dell’allarme_alarm_state- Stato corrente (normal,unacknowledged,acknowledged,rtn_unacknowledged)_alarm_priority- Priorità dalla definizione dell’allarme_alarm_timestamp- Timestamp UTC in nanosecondi RFC 3339 della transizione
Flusso di Dati
Sezione intitolata “Flusso di Dati”DataPayload → Isa182 → (al cambio di stato) → DataPayload + metadati _alarm_* → (nessun cambio di stato) → assorbito silenziosamenteEsempio:
Stream di input (1Hz):
{ "temperature": 78.0 }{ "temperature": 81.0 }{ "temperature": 82.0 }{ "temperature": 79.0 }{ "temperature": 78.5 }Con allarme high_temperature: temperature > 80, delayOn: 0, delayOff: 0:
- Campione 1 (78.0): condizione falsa, stato resta
normal, nessuna emissione - Campione 2 (81.0): condizione vera, stato →
unacknowledged, payload emesso - Campione 3 (82.0): condizione ancora vera, nessun cambio di stato, nessuna emissione
- Campione 4 (79.0): condizione falsa, stato →
rtn_unacknowledged, payload emesso - Campione 5 (78.5): condizione ancora falsa, nessun cambio di stato, nessuna emissione
Casi d’Uso Comuni
Sezione intitolata “Casi d’Uso Comuni”1. Allarme di Processo Alta Temperatura
Sezione intitolata “1. Allarme di Processo 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. Salute Multi-Variabile del Compressore
Sezione intitolata “2. Salute Multi-Variabile del Compressore”{ "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. Monitoraggio Livello Serbatoio con Isteresi
Sezione intitolata “3. Monitoraggio Livello Serbatoio con Isteresi”{ "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 }}Risoluzione dei Problemi
Sezione intitolata “Risoluzione dei Problemi”Gli Allarmi Non Si Attivano Mai
Sezione intitolata “Gli Allarmi Non Si Attivano Mai”Problema: La condizione sembra valutare false anche quando i dati sottostanti dovrebbero attivarla
Soluzioni:
- Conferma che il nome del campo nella condizione corrisponda esattamente al payload (case-sensitive)
- Controlla il tipo di dato —
temperature > 80fallirà setemperaturearriva come stringa. Inserisci unTransforma monte per convertire i tipi - Verifica che il connettore a monte stia effettivamente consegnando payload al processore (controlla il dataflow con un writer
LogoConsole)
Ri-Attivazione Costante (Flapping)
Sezione intitolata “Ri-Attivazione Costante (Flapping)”Problema: Un segnale rumoroso oscilla ripetutamente attorno alla soglia, generando molte transizioni
Soluzioni:
- Aggiungi un
deadbanddell’1-5% del range operativo - Aumenta
delayOnin modo che brevi escursioni vengano ignorate - Applica una
MovingAverageoEWMAa monte per attenuare l’input
Allarme Bloccato in unacknowledged
Sezione intitolata “Allarme Bloccato in unacknowledged”Problema: L’allarme non è più attivo, ma lo stato non torna mai a normal
Soluzioni:
- ISA-18.2 richiede l’esplicito riconoscimento prima del ritorno a
normal. Lo statortn_unacknowledgedè il percorso standard quando la condizione si risolve prima del riconoscimento - Il riconoscimento è tipicamente guidato da un HMI o strumento di alerting — collegane uno che aggiorni lo stato dell’allarme nel tuo sistema a valle
Espressione MXL Non Valida all’Avvio
Sezione intitolata “Espressione MXL Non Valida all’Avvio”Problema: Il connettore non si avvia con ErrIsa182ConditionEval
Soluzioni:
- Verifica che la condizione venga analizzata con la sintassi MXL — i confronti usano
>,<,>=,<=,==,!= - I connettivi booleani sono
AND,OR,NOT - Avvolgi le sotto-espressioni complesse in parentesi
Migliori Pratiche
Sezione intitolata “Migliori Pratiche”1. Usa i Deadband Aggressivamente sui Sensori Rumorosi
Sezione intitolata “1. Usa i Deadband Aggressivamente sui Sensori Rumorosi”Anche un piccolo deadband (1-2% del range) riduce drasticamente il volume di allarmi negli impianti reali.
2. Scaglia i Ritardi per Priorità
Sezione intitolata “2. Scaglia i Ritardi per Priorità”[ { "priority": "urgent", "delayOn": 1000 }, { "priority": "high", "delayOn": 5000 }, { "priority": "medium", "delayOn": 15000 }, { "priority": "low", "delayOn": 30000 }]Gli allarmi urgent dovrebbero attivarsi velocemente; gli allarmi a priorità inferiore possono tollerare finestre di conferma più lunghe.
3. Mantieni Stabili i Nomi degli Allarmi
Sezione intitolata “3. Mantieni Stabili i Nomi degli Allarmi”L’alerting a valle spesso ruota attorno a _alarm_name. Tratta i nomi degli allarmi come parte del tuo schema pubblico; non rinominarli con leggerezza.
4. Abbina a un Router per Escalation Basata su Priorità
Sezione intitolata “4. Abbina a un Router per Escalation Basata su Priorità”Instrada per _alarm_priority verso canali di alerting diversi (urgent → SMS, high → email, medium → solo dashboard).
5. Evita Allarmi Eccessivi (ISA-18.2 §8)
Sezione intitolata “5. Evita Allarmi Eccessivi (ISA-18.2 §8)”Lo standard raccomanda ≤ 6 allarmi all’ora per operatore in media. Usa deadband, ritardi e condizioni di allarme consolidate per restare entro tale soglia.
Esempi di Flussi
Sezione intitolata “Esempi di Flussi”Pipeline di Allarme End-to-End
Sezione intitolata “Pipeline di Allarme End-to-End”OpcuaReader → Isa182 → Router → ┬─ Alert (urgent → SMS) ├─ Alert (high → email) └─ InfluxDb2Writer (log di audit)- OpcuaReader: Estrae variabili di processo da un PLC alla cadenza di 500ms
- Isa182: Valuta tutti gli allarmi configurati; emette payload solo al cambio di stato
- Router: Branchamento su
_alarm_priority - Alert (urgent): Invia SMS tramite il canale di notifica
- Alert (high): Invia email
- InfluxDb2Writer: Audit di tutte le transizioni di allarme per conformità
Manutenzione Predittiva Combinata con Trigger di Allarme
Sezione intitolata “Manutenzione Predittiva Combinata con Trigger di Allarme”ModbusReader → Predictive → Isa182 → Alert- ModbusReader: Legge vibrazione e temperatura
- Predictive: Calcola trend e vita utile residua
- Isa182: Si attiva su
vibration_rms_rul < 168(meno di 7 giorni di vita utile rimasti) - Alert: Notifica la manutenzione
Connettori Correlati
Sezione intitolata “Connettori Correlati”- Trigger - Emissione basata su condizione più semplice senza macchina a stati
- Alert - Invia payload di allarme a canali di notifica
- Router - Branchamento per
_alarm_priority - Predictive - Abbina alla RUL predittiva per allarmi proattivi
- Filter - Pre-filtra input prima della valutazione dell’allarme
Risorse Aggiuntive
Sezione intitolata “Risorse Aggiuntive”- Standard ANSI/ISA-18.2 - Management of Alarm Systems for the Process Industries
- EEMUA 191 - Alarm Systems: A Guide to Design, Management and Procurement
- Linee Guida di Alarm Management (ISA)