Connettore Manutenzione Predittiva
Panoramica
Sezione intitolata “Panoramica”Il connettore Predictive arricchisce un payload Meddle in ingresso con metriche di manutenzione predittiva per uno o più segnali configurati. Per ogni segnale calcola un trend (tasso di variazione), una stima della Vita Utile Residua (RUL) in cicli e uno score di salute tra 0 e 100. Solleva anche un flag di allerta opzionale quando la RUL scende sotto una soglia definita dall’utente.
Tipi Connettore:
Predictive- Processore con stato che mantiene un buffer mobile per segnale ed emette payload arricchiti
Sebbene sia un processore, il connettore è categorizzato sotto industrial/ perché il suo caso d’uso principale è il monitoraggio delle condizioni di macchine, motori, pompe e altri asset industriali.
Caratteristiche
Sezione intitolata “Caratteristiche”- ✅ Tre metodi di calcolo del trend: regressione lineare, moving average, EWMA
- ✅ Limiti superiori e inferiori per ogni segnale
- ✅ Stima RUL in cicli verso i limiti configurati
- ✅ Score di salute derivato dalla distanza dai limiti configurati (0-100)
- ✅ Flag di allerta RUL opzionale sotto soglia
- ✅ Coercizione numerica tollerante (gestisce int, float, stringhe)
- ✅ Payload originale preservato — i campi predittivi vengono fusi
Configurazione di Base
Sezione intitolata “Configurazione di Base”Trend con Regressione Lineare e Allerta RUL
Sezione intitolata “Trend con Regressione Lineare e Allerta RUL”{ "type": "Predictive", "config": { "signals": [ { "key": "vibration_rms", "upperLimit": 0.8, "degradationRate": 0.001 } ], "windowSize": 30, "method": "linear_regression", "alertOnRul": 168 }}Smoothing EWMA per Segnali Rumorosi
Sezione intitolata “Smoothing EWMA per Segnali Rumorosi”{ "type": "Predictive", "config": { "signals": [ { "key": "bearing_temperature", "upperLimit": 95.0, "lowerLimit": 20.0 } ], "windowSize": 50, "method": "ewma" }}Segnali Multipli
Sezione intitolata “Segnali Multipli”{ "type": "Predictive", "config": { "signals": [ { "key": "motor_current", "upperLimit": 25.0 }, { "key": "vibration_rms", "upperLimit": 0.8 }, { "key": "oil_pressure", "lowerLimit": 2.0 } ], "windowSize": 30, "method": "linear_regression", "alertOnRul": 48 }}Parametri di Configurazione
Sezione intitolata “Parametri di Configurazione”Signals
Sezione intitolata “Signals”Lista non vuota richiesta di segnali da monitorare.
{ "signals": [ { "key": "vibration_rms", "upperLimit": 0.8, "lowerLimit": 0.0, "degradationRate": 0.001 } ]}Signal: Key
Sezione intitolata “Signal: Key”La chiave del payload da leggere ad ogni ciclo. Deve corrispondere esattamente al payload in ingresso.
{ "key": "vibration_rms" }Signal: UpperLimit / LowerLimit
Sezione intitolata “Signal: UpperLimit / LowerLimit”I limiti operativi configurati per questo segnale.
{ "upperLimit": 0.8, "lowerLimit": 0.0}upperLimit- Il valore di “allarme alto”. Quando il trend è positivo, la RUL è calcolata come la distanza da questo limite divisa per il trendlowerLimit- Il valore di “allarme basso”. Quando il trend è negativo, la RUL è calcolata come la distanza sotto il valore corrente divisa per|trend|
Almeno uno dei due dovrebbe essere impostato per una RUL significativa; altrimenti la RUL viene riportata come +Inf.
Signal: DegradationRate
Sezione intitolata “Signal: DegradationRate”Riservato per uso futuro (pendenza di degradazione attesa per segnale). Opzionale.
{ "degradationRate": 0.001 }Window Size
Sezione intitolata “Window Size”Richiesto. Il numero di campioni recenti da mantenere nel buffer circolare per segnale.
{ "windowSize": 30 }Valori raccomandati:
- Segnali veloci/puliti: 10-30
- Sensori industriali rumorosi: 50-200
- Segnali di degradazione lenta: 500+
La dimensione della finestra guida anche il fattore di smoothing EWMA: alpha = 2 / (windowSize + 1).
Richiesto. Uno tra:
linear_regression- Pendenza dei minimi quadrati sull’intera finestra (richiede ≥ 3 campioni)moving_average- Differenza tra moving average successive (richiede ≥ 1 campione)ewma- Moving average pesata esponenzialmente; il trend è il delta tra valori EWMA successivi (richiede ≥ 1 campione)
{ "method": "linear_regression" }Scegliere un metodo:
- Regressione lineare: ottima quando ti fidi del recente passato come predittore della pendenza di degradazione (cuscinetti motore, usura graduale)
- Moving average: ottima quando vuoi reiezione del rumore ma latenza minima
- EWMA: ottima quando i campioni recenti dovrebbero pesare più di quelli vecchi (sistemi a rapida variazione)
Alert On RUL
Sezione intitolata “Alert On RUL”Opzionale. Quando la RUL scende sotto questa soglia (in cicli), il payload di output viene marcato con <key>_rul_alert: true.
{ "alertOnRul": 168 }L’unità è “cicli” — cioè il numero di campioni finché il segnale è previsto raggiungere il suo limite. Per tradurre in tempo reale, moltiplica per l’intervallo di campionamento a monte.
Payload di Output
Sezione intitolata “Payload di Output”Ogni segnale produce tre nuove chiavi (e opzionalmente una quarta):
{ "vibration_rms": 0.62, "vibration_rms_trend": 0.005, "vibration_rms_rul": 36, "vibration_rms_health_score": 22.5, "vibration_rms_rul_alert": true}| Chiave | Significato |
|---|---|
<key>_trend | Tasso di variazione per ciclo |
<key>_rul | Vita Utile Residua in cicli (o +Inf quando non prevedibile) |
<key>_health_score | Score 0-100 (100 = sano, 0 = al/oltre il limite) |
<key>_rul_alert | Impostato a true solo quando alertOnRul è configurato e la RUL è sotto di esso |
Le chiavi originali del payload in ingresso vengono passate invariate.
Riferimento del Calcolo
Sezione intitolata “Riferimento del Calcolo”linear_regression: pendenzam = (n·Σxy − Σx·Σy) / (n·Σx² − (Σx)²)sulla finestramoving_average:mean(window_t) − mean(window_{t−1})ewma:EWMA_t − EWMA_{t−1}, conalpha = 2 / (windowSize + 1)
- Se
trend > 0eupperLimitimpostato:RUL = (upperLimit − currentVal) / trend - Se
trend < 0elowerLimitimpostato:RUL = (currentVal − lowerLimit) / |trend| - Altrimenti:
RUL = +Inf(nessuna stima significativa)
Se il valore corrente è già oltre il limite rilevante, RUL = 0.
Health Score
Sezione intitolata “Health Score”- Se entrambi i limiti impostati: 100 significa al punto medio; 0 a qualsiasi limite (lineare)
- Se solo upper: 100 a 0, 0 al
upperLimit(lineare) - Se solo lower: 100 a valori alti, 0 al
lowerLimit - Se nessuno: 100 (nessun vincolo, segnale informativo)
Tutti gli score sono limitati a [0, 100].
Flusso di Dati
Sezione intitolata “Flusso di Dati”DataPayload → Predictive → DataPayload + (<key>_trend, _rul, _health_score, _rul_alert?)Esempio (linear_regression, windowSize=10, upperLimit=0.8):
Ultimi 10 campioni di vibration_rms:
[0.42, 0.45, 0.47, 0.51, 0.55, 0.58, 0.60, 0.63, 0.65, 0.68]- Trend (pendenza): ≈ +0.029 per ciclo
- Valore corrente: 0.68
- RUL: (0.8 − 0.68) / 0.029 ≈ 4.1 cicli
- Health score: ((0.8 − 0.68) / 0.8) × 100 = 15.0
- Se è impostato
alertOnRul: 10→_rul_alert: true
Casi d’Uso Comuni
Sezione intitolata “Casi d’Uso Comuni”1. Tracciamento Degradazione Cuscinetto
Sezione intitolata “1. Tracciamento Degradazione Cuscinetto”Monitora il valore RMS di vibrazione e prevedi il guasto a 7 giorni di distanza (assumendo campionamento di 1 minuto, 168 cicli/settimana × 60 ≈ 10080 cicli/settimana):
{ "type": "Predictive", "config": { "signals": [ { "key": "vibration_rms", "upperLimit": 0.8 } ], "windowSize": 60, "method": "linear_regression", "alertOnRul": 10080 }}2. Monitoraggio Pressione Sistema di Lubrificazione
Sezione intitolata “2. Monitoraggio Pressione Sistema di Lubrificazione”{ "type": "Predictive", "config": { "signals": [ { "key": "oil_pressure_bar", "lowerLimit": 2.0 } ], "windowSize": 30, "method": "ewma", "alertOnRul": 240 }}3. Score di Salute Pompa Multi-Segnale
Sezione intitolata “3. Score di Salute Pompa Multi-Segnale”{ "type": "Predictive", "config": { "signals": [ { "key": "motor_current", "upperLimit": 25 }, { "key": "discharge_pressure", "lowerLimit": 5, "upperLimit": 12 }, { "key": "vibration_rms", "upperLimit": 0.7 }, { "key": "bearing_temp", "upperLimit": 90 } ], "windowSize": 50, "method": "moving_average" }}La pipeline a valle può calcolare uno score di salute pompa complessivo aggregando le chiavi <segnale>_health_score.
Risoluzione dei Problemi
Sezione intitolata “Risoluzione dei Problemi”insufficient data points
Sezione intitolata “insufficient data points”Problema: Errore riportato per i primi campioni
Soluzioni:
- Comportamento atteso —
linear_regressionrichiede almeno 3 campioni prima di poter emettere un trend - EWMA e moving average richiedono almeno 1 campione
- Usa un connettore
Filtera valle per ignorare il warning se desiderato
cannot convert <type> to float64
Sezione intitolata “cannot convert <type> to float64”Problema: Il valore di un segnale non può essere convertito in numero
Soluzioni:
- Conferma che il connettore a monte stia consegnando valori numerici per la
keyconfigurata - Booleani, struct e array non possono essere elaborati — usa un
Transforma monte per estrarre uno scalare - Le stringhe sono accettate dai connettori a monte che fanno parsing numerico in stile OEE, ma
Predictiverichiede tipi compatibili conconnector.ToFloat64
La RUL È Sempre +Inf
Sezione intitolata “La RUL È Sempre +Inf”Problema: Il trend sembra essere 0 o nessun limite è impostato
Soluzioni:
- Il segnale deve avere un trend non zero E un limite allineato alla direzione del trend
- Se il segnale non sta cambiando, la RUL non è definita in modo significativo — è il comportamento corretto
- Per un segnale piatto ma degradato, preferisci lo score di salute alla RUL
Le Allerte RUL Si Attivano Costantemente
Sezione intitolata “Le Allerte RUL Si Attivano Costantemente”Problema: _rul_alert: true spurio su molti cicli
Soluzioni:
- Aumenta
windowSizeper attenuare la stima del trend - Passa da
linear_regressionaewmaper trend meno volatili - Aumenta la soglia
alertOnRulper allinearla al tempo di lead reale
L’Health Score È 0 Senza Motivo Apparente
Sezione intitolata “L’Health Score È 0 Senza Motivo Apparente”Problema: Lo score rimane bloccato a 0
Soluzioni:
- Verifica che il valore corrente non sia già oltre il limite configurato — se sì, lo score è correttamente 0
- Se solo
lowerLimitè impostato e il valore è uguale a 0, la formulavalore / lowerLimitè anch’essa 0 - Configura sia
upperLimitchelowerLimitper uno score basato sul punto medio
Migliori Pratiche
Sezione intitolata “Migliori Pratiche”1. Calibra i Limiti Sui Dati Operativi Reali
Sezione intitolata “1. Calibra i Limiti Sui Dati Operativi Reali”Non prendere upperLimit da un datasheet del fornitore. Profila l’asset per alcune settimane e scegli un limite che sia 10-20% all’interno della soglia catastrofica.
2. Abbina la Dimensione della Finestra alla Cadenza di Campionamento
Sezione intitolata “2. Abbina la Dimensione della Finestra alla Cadenza di Campionamento”Per dati a 1Hz e degradazione settimanale, una finestra di ~1 ora (3600 campioni) può essere eccessiva — la maggior parte dei segnali di degradazione non ha bisogno di così tanta storia. Inizia con ~30 campioni e calibra.
3. Usa la Regressione Lineare per il Trending Diagnostico
Sezione intitolata “3. Usa la Regressione Lineare per il Trending Diagnostico”La pendenza della regressione lineare è l’output di trend più interpretabile ed è il default corretto per la lenta degradazione industriale.
4. Evita Allerte al Primo Campione
Sezione intitolata “4. Evita Allerte al Primo Campione”I primi ≤ 3 campioni producono trend di zero o RUL di +Inf. Usa un Trigger o Filter a valle in modo che le allerte non si attivino spuriamente all’avvio.
5. Concatena con una Macchina a Stati di Allarme
Sezione intitolata “5. Concatena con una Macchina a Stati di Allarme”Alimenta il flag _rul_alert in un blocco Isa182 per applicare un workflow di riconoscimento standardizzato sopra la previsione grezza.
Esempi di Flussi
Sezione intitolata “Esempi di Flussi”Predictive → Allarme → Notifica
Sezione intitolata “Predictive → Allarme → Notifica”ModbusReader → Predictive → Isa182 → Alert (email)- ModbusReader: Estrae
vibration_rmsebearing_tempda un sensore di vibrazione - Predictive: Calcola trend, RUL e score di salute per entrambi i segnali
- Isa182: Attiva un allarme quando
vibration_rms_rul_alert == trueobearing_temp_health_score < 30 - Alert: Invia email al team di manutenzione
Dashboard di Salute Asset Multi-Segnale
Sezione intitolata “Dashboard di Salute Asset Multi-Segnale”OpcuaReader → Predictive → Reshape → Chart (gauge per segnale) └→ InfluxDb2Writer- OpcuaReader: Legge tutti i segnali rilevanti dal server OPC UA dell’asset
- Predictive: Arricchisce ogni segnale con
_trend,_rul,_health_score - Reshape: Ristruttura il payload per il consumo da parte del chart
- Chart: Renderizza un gauge per lo score di salute di ogni segnale
- InfluxDb2Writer: Persiste per analisi di trend a lungo termine
Connettori Correlati
Sezione intitolata “Connettori Correlati”- ISA-18.2 - Avvolgi le allerte RUL in una macchina a stati
- Anomaly Detect - Rileva outlier statistici
- Aggregation - Media i segnali prima di alimentare Predictive
- Trigger - Emissione condizionale su allerte RUL
- InfluxDB v2 - Persiste metriche predittive per analisi
Risorse Aggiuntive
Sezione intitolata “Risorse Aggiuntive”- ISO 17359 - Condition monitoring e diagnostica di macchine (linee guida generali)
- ISO 13374 - Condition monitoring e diagnostica di sistemi macchina (elaborazione dati, comunicazione e presentazione)
- NASA Prognostics Center of Excellence - Ricerca sulla metodologia RUL
- Riferimento Exponentially Weighted Moving Average (EWMA)