Predictive Maintenance-Konnektor
Übersicht
Abschnitt betitelt „Übersicht“Der Predictive-Konnektor reichert eine eingehende Meddle-Payload mit Predictive-Maintenance-Metriken für eines oder mehrere konfigurierte Signale an. Für jedes Signal berechnet er einen Trend (Änderungsrate), eine Schätzung der verbleibenden Nutzungsdauer (RUL) in Zyklen und einen Gesundheitsscore zwischen 0 und 100. Er löst außerdem ein optionales Warn-Flag aus, wenn die RUL unter einen benutzerdefinierten Schwellenwert fällt.
Konnektor-Typen:
Predictive- Zustandsbehafteter Prozessor, der einen rollenden Buffer pro Signal verwaltet und angereicherte Payloads ausgibt
Obwohl es sich um einen Prozessor handelt, ist der Konnektor unter industrial/ kategorisiert, da sein primärer Anwendungsfall die Zustandsüberwachung von Maschinen, Motoren, Pumpen und anderen industriellen Anlagen ist.
Funktionen
Abschnitt betitelt „Funktionen“- ✅ Drei Trend-Berechnungsmethoden: lineare Regression, gleitender Durchschnitt, EWMA
- ✅ Obere und untere Grenzen pro Signal
- ✅ RUL-Schätzung in Zyklen bis zu den konfigurierten Grenzen
- ✅ Gesundheitsscore abgeleitet aus dem Abstand zu konfigurierten Grenzen (0-100)
- ✅ Optionales RUL-Warn-Flag unterhalb eines Schwellenwerts
- ✅ Tolerante numerische Konvertierung (verarbeitet Ints, Floats, Strings)
- ✅ Ursprüngliche Payload bleibt erhalten — prädiktive Felder werden hinzugefügt
Grundkonfiguration
Abschnitt betitelt „Grundkonfiguration“Lineare Regression-Trend mit RUL-Alarm
Abschnitt betitelt „Lineare Regression-Trend mit RUL-Alarm“{ "type": "Predictive", "config": { "signals": [ { "key": "vibration_rms", "upperLimit": 0.8, "degradationRate": 0.001 } ], "windowSize": 30, "method": "linear_regression", "alertOnRul": 168 }}EWMA-Glättung für verrauschte Signale
Abschnitt betitelt „EWMA-Glättung für verrauschte Signale“{ "type": "Predictive", "config": { "signals": [ { "key": "bearing_temperature", "upperLimit": 95.0, "lowerLimit": 20.0 } ], "windowSize": 50, "method": "ewma" }}Mehrere Signale
Abschnitt betitelt „Mehrere Signale“{ "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 }}Konfigurationsparameter
Abschnitt betitelt „Konfigurationsparameter“Signals
Abschnitt betitelt „Signals“Erforderliche, nicht-leere Liste der zu überwachenden Signale.
{ "signals": [ { "key": "vibration_rms", "upperLimit": 0.8, "lowerLimit": 0.0, "degradationRate": 0.001 } ]}Signal: Key
Abschnitt betitelt „Signal: Key“Der Payload-Schlüssel, der bei jedem Zyklus gelesen wird. Muss exakt mit der eingehenden Payload übereinstimmen.
{ "key": "vibration_rms" }Signal: UpperLimit / LowerLimit
Abschnitt betitelt „Signal: UpperLimit / LowerLimit“Die konfigurierten Betriebsgrenzen für dieses Signal.
{ "upperLimit": 0.8, "lowerLimit": 0.0}upperLimit- Der “Alarm-Hoch”-Wert. Wenn der Trend positiv ist, wird die RUL als Abstand zu dieser Grenze geteilt durch den Trend berechnetlowerLimit- Der “Alarm-Niedrig”-Wert. Wenn der Trend negativ ist, wird die RUL als Abstand unter dem aktuellen Wert geteilt durch|trend|berechnet
Mindestens eine der beiden sollte für eine sinnvolle RUL gesetzt werden; andernfalls wird RUL als +Inf gemeldet.
Signal: DegradationRate
Abschnitt betitelt „Signal: DegradationRate“Reserviert für zukünftige Verwendung (erwartete Degradationssteigung pro Signal). Optional.
{ "degradationRate": 0.001 }Window Size
Abschnitt betitelt „Window Size“Erforderlich. Die Anzahl der aktuellen Samples, die im Ring-Buffer pro Signal aufbewahrt werden.
{ "windowSize": 30 }Empfohlene Werte:
- Schnelle/saubere Signale: 10-30
- Verrauschte industrielle Sensoren: 50-200
- Langsame Degradationssignale: 500+
Die Fenstergröße steuert auch den EWMA-Glättungsfaktor: alpha = 2 / (windowSize + 1).
Erforderlich. Einer der folgenden:
linear_regression- Kleinste-Quadrate-Steigung über das gesamte Fenster (benötigt ≥ 3 Samples)moving_average- Differenz zwischen aufeinanderfolgenden gleitenden Durchschnitten (benötigt ≥ 1 Sample)ewma- Exponentiell gewichteter gleitender Durchschnitt; Trend ist Delta zwischen aufeinanderfolgenden EWMA-Werten (benötigt ≥ 1 Sample)
{ "method": "linear_regression" }Auswahl einer Methode:
- Lineare Regression: am besten, wenn Sie der jüngsten Vergangenheit als Prädiktor für die Degradationssteigung vertrauen (Motorlager, allmählicher Verschleiß)
- Gleitender Durchschnitt: am besten, wenn Sie Rauschunterdrückung mit minimaler Verzögerung wünschen
- EWMA: am besten, wenn aktuelle Samples mehr Gewicht haben sollen als alte (sich schnell ändernde Systeme)
Alert On RUL
Abschnitt betitelt „Alert On RUL“Optional. Wenn die RUL unter diesen Schwellenwert (in Zyklen) fällt, wird die Ausgabe-Payload mit <key>_rul_alert: true markiert.
{ "alertOnRul": 168 }Die Einheit ist “Zyklen” — also die Anzahl der Samples bis zur projizierten Erreichung des Limits. Um in Echtzeit umzurechnen, multiplizieren Sie mit dem vorgelagerten Sampling-Intervall.
Ausgabe-Payload
Abschnitt betitelt „Ausgabe-Payload“Jedes Signal produziert drei neue Schlüssel (und optional einen vierten):
{ "vibration_rms": 0.62, "vibration_rms_trend": 0.005, "vibration_rms_rul": 36, "vibration_rms_health_score": 22.5, "vibration_rms_rul_alert": true}| Schlüssel | Bedeutung |
|---|---|
<key>_trend | Änderungsrate pro Zyklus |
<key>_rul | Verbleibende Nutzungsdauer in Zyklen (oder +Inf, wenn nicht vorhersagbar) |
<key>_health_score | 0-100-Score (100 = gesund, 0 = an/jenseits einer Grenze) |
<key>_rul_alert | Auf true gesetzt, nur wenn alertOnRul konfiguriert ist und RUL darunter liegt |
Die ursprünglichen Schlüssel aus der eingehenden Payload werden unverändert durchgereicht.
Berechnungsreferenz
Abschnitt betitelt „Berechnungsreferenz“linear_regression: Steigungm = (n·Σxy − Σx·Σy) / (n·Σx² − (Σx)²)über das Fenstermoving_average:mean(window_t) − mean(window_{t−1})ewma:EWMA_t − EWMA_{t−1}, mitalpha = 2 / (windowSize + 1)
- Wenn
trend > 0undupperLimitgesetzt:RUL = (upperLimit − currentVal) / trend - Wenn
trend < 0undlowerLimitgesetzt:RUL = (currentVal − lowerLimit) / |trend| - Andernfalls:
RUL = +Inf(keine sinnvolle Schätzung)
Wenn der aktuelle Wert die relevante Grenze bereits überschritten hat, ist RUL = 0.
Health Score
Abschnitt betitelt „Health Score“- Wenn beide Grenzen gesetzt sind: 100 bedeutet am Mittelpunkt; 0 an einer der Grenzen (linear)
- Wenn nur obere: 100 bei 0, 0 bei
upperLimit(linear) - Wenn nur untere: 100 bei hohen Werten, 0 bei
lowerLimit - Wenn weder: 100 (keine Einschränkungen, Signal nur informativ)
Alle Scores werden auf [0, 100] begrenzt.
Datenfluss
Abschnitt betitelt „Datenfluss“DataPayload → Predictive → DataPayload + (<key>_trend, _rul, _health_score, _rul_alert?)Beispiel (linear_regression, windowSize=10, upperLimit=0.8):
Letzte 10 Samples von vibration_rms:
[0.42, 0.45, 0.47, 0.51, 0.55, 0.58, 0.60, 0.63, 0.65, 0.68]- Trend (Steigung): ≈ +0,029 pro Zyklus
- Aktueller Wert: 0,68
- RUL: (0,8 − 0,68) / 0,029 ≈ 4,1 Zyklen
- Health-Score: ((0,8 − 0,68) / 0,8) × 100 = 15,0
- Falls
alertOnRul: 10gesetzt →_rul_alert: true
Häufige Anwendungsfälle
Abschnitt betitelt „Häufige Anwendungsfälle“1. Verfolgung der Lagerdegradation
Abschnitt betitelt „1. Verfolgung der Lagerdegradation“Vibrations-RMS überwachen und Ausfall 7 Tage im Voraus vorhersagen (unter der Annahme von 1-Minuten-Sampling, 168 Zyklen/Woche × 60 ≈ 10080 Zyklen/Woche):
{ "type": "Predictive", "config": { "signals": [ { "key": "vibration_rms", "upperLimit": 0.8 } ], "windowSize": 60, "method": "linear_regression", "alertOnRul": 10080 }}2. Schmiersystem-Druckwacht
Abschnitt betitelt „2. Schmiersystem-Druckwacht“{ "type": "Predictive", "config": { "signals": [ { "key": "oil_pressure_bar", "lowerLimit": 2.0 } ], "windowSize": 30, "method": "ewma", "alertOnRul": 240 }}3. Multi-Signal-Pumpen-Gesundheitsbewertung
Abschnitt betitelt „3. Multi-Signal-Pumpen-Gesundheitsbewertung“{ "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" }}Die nachgelagerte Pipeline kann einen Gesamt-Pumpen-Gesundheitsscore berechnen, indem <signal>_health_score-Schlüssel aggregiert werden.
Fehlerbehebung
Abschnitt betitelt „Fehlerbehebung“insufficient data points
Abschnitt betitelt „insufficient data points“Problem: Fehler bei den ersten Samples gemeldet
Lösungen:
- Erwartetes Verhalten —
linear_regressionbenötigt mindestens 3 Samples, bevor ein Trend ausgegeben werden kann - EWMA und gleitender Durchschnitt benötigen mindestens 1 Sample
- Verwenden Sie einen nachgelagerten
Filter-Konnektor, um die Warnung bei Bedarf zu unterdrücken
cannot convert <type> to float64
Abschnitt betitelt „cannot convert <type> to float64“Problem: Ein Signalwert kann nicht in eine Zahl konvertiert werden
Lösungen:
- Bestätigen, dass der vorgelagerte Konnektor numerische Werte für den konfigurierten
keyliefert - Booleans, Structs und Arrays können nicht verarbeitet werden — verwenden Sie einen vorgelagerten
Transform, um einen Skalar zu extrahieren - Strings werden von vorgelagerten Konnektoren akzeptiert, die OEE-artiges numerisches Parsing durchführen, aber
Predictiveerfordert mitconnector.ToFloat64-kompatible Typen
RUL ist immer +Inf
Abschnitt betitelt „RUL ist immer +Inf“Problem: Trend scheint 0 zu sein oder keine Grenze ist gesetzt
Lösungen:
- Das Signal muss einen Trend ungleich Null UND eine mit der Trendrichtung ausgerichtete Grenze haben
- Wenn sich das Signal nicht ändert, ist die RUL nicht sinnvoll definiert — dies ist korrektes Verhalten
- Für ein flaches, aber degradiertes Signal bevorzugen Sie den Gesundheitsscore gegenüber der RUL
RUL-Alarme feuern ständig
Abschnitt betitelt „RUL-Alarme feuern ständig“Problem: Falsche _rul_alert: true über viele Zyklen
Lösungen:
windowSizeerhöhen, um die Trendschätzung zu glätten- Von
linear_regressionzuewmafür weniger jittrige Trends wechseln - Den
alertOnRul-Schwellenwert anheben, um ihn an Ihre echte Vorlaufzeit anzupassen
Health-Score ist 0 ohne erkennbaren Grund
Abschnitt betitelt „Health-Score ist 0 ohne erkennbaren Grund“Problem: Score bleibt bei 0
Lösungen:
- Überprüfen, dass der aktuelle Wert die konfigurierte Grenze nicht bereits überschritten hat — wenn ja, ist der Score korrekt 0
- Wenn nur
lowerLimitgesetzt ist und der Wert gleich 0 ist, ist die Formelvalue / lowerLimitebenfalls 0 - Sowohl
upperLimitals auchlowerLimitfür einen mittelpunktbasierten Score konfigurieren
Best Practices
Abschnitt betitelt „Best Practices“1. Grenzen anhand echter Betriebsdaten kalibrieren
Abschnitt betitelt „1. Grenzen anhand echter Betriebsdaten kalibrieren“Übernehmen Sie upperLimit nicht aus einem Hersteller-Datenblatt. Profilieren Sie die Anlage für einige Wochen und wählen Sie eine Grenze, die 10-20% innerhalb des katastrophalen Schwellenwerts liegt.
2. Fenstergröße an die Sampling-Kadenz anpassen
Abschnitt betitelt „2. Fenstergröße an die Sampling-Kadenz anpassen“Für 1Hz-Daten und wöchentliche Degradation kann ein Fenster von ~1 Stunde (3600 Samples) überdimensioniert sein — die meisten Degradationssignale benötigen nicht so viel Historie. Beginnen Sie mit ~30 Samples und stimmen Sie ab.
3. Lineare Regression für diagnostisches Trending verwenden
Abschnitt betitelt „3. Lineare Regression für diagnostisches Trending verwenden“Die Steigung der linearen Regression ist die am besten interpretierbare Trend-Ausgabe und der richtige Standard für langsame industrielle Degradation.
4. Alarmierung beim ersten Sample vermeiden
Abschnitt betitelt „4. Alarmierung beim ersten Sample vermeiden“Die ersten ≤ 3 Samples produzieren Trends von Null oder RUL von +Inf. Verwenden Sie einen nachgelagerten Trigger oder Filter, damit Alarme beim Start nicht fälschlicherweise auslösen.
5. Mit einer Alarm-Zustandsmaschine verketten
Abschnitt betitelt „5. Mit einer Alarm-Zustandsmaschine verketten“Den _rul_alert-Flag in einen Isa182-Block einspeisen, um einen standardisierten Bestätigungs-Workflow zusätzlich zur reinen Vorhersage anzuwenden.
Beispiel-Workflows
Abschnitt betitelt „Beispiel-Workflows“Predictive → Alarm → Benachrichtigung
Abschnitt betitelt „Predictive → Alarm → Benachrichtigung“ModbusReader → Predictive → Isa182 → Alert (E-Mail)- ModbusReader: Holt
vibration_rmsundbearing_tempvon einem Vibrationssensor - Predictive: Berechnet Trend, RUL und Gesundheitsscore für beide Signale
- Isa182: Triggert einen Alarm, wenn
vibration_rms_rul_alert == trueoderbearing_temp_health_score < 30 - Alert: E-Mailt das Wartungsteam
Multi-Signal-Anlagen-Gesundheits-Dashboard
Abschnitt betitelt „Multi-Signal-Anlagen-Gesundheits-Dashboard“OpcuaReader → Predictive → Reshape → Chart (Anzeige pro Signal) └→ InfluxDb2Writer- OpcuaReader: Liest alle relevanten Signale vom OPC UA-Server der Anlage
- Predictive: Reichert jedes Signal mit
_trend,_rul,_health_scorean - Reshape: Strukturiert die Payload für den Chart-Verbrauch um
- Chart: Rendert eine Anzeige pro Signal-Gesundheitsscore
- InfluxDb2Writer: Persistiert für langfristige Trendanalysen
Verwandte Konnektoren
Abschnitt betitelt „Verwandte Konnektoren“- ISA-18.2 - RUL-Alarme in eine Zustandsmaschine einhüllen
- Anomaly Detection - Statistische Ausreißer erkennen
- Aggregation - Signale vor der Einspeisung in Predictive mitteln
- Trigger - Bedingte Ausgabe bei RUL-Alarmen
- InfluxDB - Prädiktive Metriken zur Analyse persistieren
Zusätzliche Ressourcen
Abschnitt betitelt „Zusätzliche Ressourcen“- ISO 17359 - Zustandsüberwachung und Diagnose von Maschinen (allgemeine Richtlinien)
- ISO 13374 - Zustandsüberwachung und Diagnose von Maschinensystemen (Datenverarbeitung, Kommunikation und Präsentation)
- NASA Prognostics Center of Excellence - RUL-Methodikforschung
- Exponentially Weighted Moving Average (EWMA) Referenz