Condition Monitoring mit Frequenzanalyse
Dieses Lernprogramm baut eine komplette Überwachungsanwendung auf der Grundlage von TwinCAT 3 Condition Monitoring API auf. Von der Datensammlung bis zum Hinzufügen von leistungsstarken Analysealgorithmen hilft es dabei, einen Arbeitsfluss für Condition-Monitoring-Anwendungen zu erstellen. Das Blockdiagramm unten zeigt die schematische Anordnung der Anwendung. Zum besseren Verständnis der Programmierung ist das Dokument weiter in Designschritten unterteilt.
Das Beispiel können Sie hier herunterladen:
FrequencyAnalysis_Tutorial.zip
Sie können es Ihren Wünschen entsprechend umgestalten und erweitern.
Blockdiagramm
Schritt 1: Anwendungsspezifikation
Der erste Schritt bei der Konzeption einer Zustandsüberwachungsanwendung besteht darin, die wichtigsten Ziele der Anwendung zu bestimmen, z.B. automatische Warnmeldung bei übermäßigen Vibrationen oder bei Erkennung einer Fehlfunktion im Lager mit Hilfe der Frequenzanalyse. Wichtig ist auch, andere technische Faktoren wie Messsensoren, Abtastrate des Reglers und erwartete Genauigkeit zu berücksichtigen. Bei diesem Lernprogramm besteht das Ziel darin, kleine und große Fehler im Eingangssignal mit Hilfe des Magnitudenspektrums und seiner Quantilenverteilung zu erkennen. Darüber hinaus wird ein Klassifizierer verwendet, um den allgemeinen Zustand als „Normalzustand“, „Warnzustand“ oder „Alarmzustand“ vorauszusagen. Die Tabelle unten zeigt eine Liste der in diesem Lernprogramm verwendeten Funktionsbausteine.
Funktionsbaustein |
---|
FB_CMA_Souce |
FB_CMA_Sink |
FB_CMA_MagnitudeSpectrum |
FB_CMA_Quantiles |
FB_CMA_DiscreteClassification |
Für eine ausführlichere Beschreibung zwecks Auswahl des richtigen Algorithmus für spezifische Probleme, wie Lageranalyse, Getriebeanalyse oder Frequenzanalyse wird auf die an anderer Stelle beschriebenen Konzepte verwiesen. Da das Ziel des Lernprogramms in der Erkennung allgemeiner Veränderungen im Eingangssignal besteht, ist ein Magnitudenspektrum mit einer Auflösung von 4096 Linien ausreichend. Es werden die 50% und 90% Quantile der Spektralwerte berechnet und das Ergebnis gemäß der drei Zustände klassifiziert in "Normalzustand", „Warnzustand“ und "Alarmzustand“.
Schritt 2: Konfiguration der SPS-Tasks
Da die Zustandsüberwachung und –analyse sich aus einer Datenerfassungsstufe, Berechnungsstufe und einer Auswertungsstufe zusammensetzt, ist die Task entsprechend den Rechenanforderungen von jeder Stufe aufzugliedern. Unter Task Einstellung finden Sie zusätzliche Informationen zu diesem Thema. In diesem Lernprogramm soll das Magnitudenspektrum von 4096 Linien berechnet werden, dazu sind ca. 3200 Datenerfassungen notwendig. Das bedeutet, in der Datensammlungsstufe muss eine Quellen-MultiArray unter Berücksichtigung von Überlappung 1600 Datenerfassungen sammeln. Mit einer 10x Oversampling werden 160 Zyklen benötigt, oder 160ms bei 1ms Triggerung, um ein einziges Multiarray zu füllen. Aus diesem Grunde wird folgende Einstellung für die Berechnungstask empfohlen:
Berechnungszyklenzeit < (Datensammlungszyklenzeit * Puffergröße / Oversampling-Faktor)*0,5
Für das Lernprogramm ist die Berechnungszykluszeit auf 10ms festgelegt. Bei der realen Anwendung ist es wichtig, die Rechenlast zu berücksichtigen, die von anderen gleichzeitig auf derselben Steuerung ausgeführten Aufgaben wie Visualisierung, Netzwerkkommunikation, beeinflusst wird. Weitere Informationen zu Taskeinstellungen finden Sie im Abschnitt Taskzykluszeit. Beachten Sie zudem, ausreichenden Routerspeicherplatz vor dem Start des Aufbaus einer Condition-Monitoring-Anwendung zu reservieren. Dieses Lernprogramm wurde für das Arbeiten mit einem Routerspeicherplatz von 32 MB eingestellt.
Schritt 3: Konfiguration der Funktionsbausteine
Bei diesem Schritt werden die oben aufgeführten Funktionsbausteine entsprechend den Anwendungsanforderungen konfiguriert. Wie bereits erwähnt sammelt das Quell-MultiArray 1600 Datenerfassungen, um ein Spektrum zu berechnen. Darum wird der aDimSizes Parameter auf 1600 gesetzt. Da das Lernprogramm nur einen Kanal in Betracht zieht, wird nDims auf 1 gesetzt.
PROGRAM CM_Worker
VAR CONSTANT
cInitSourceSpectrum : ST_MA_MultiArray_InitPars := ( eTypeCode := eMA_TypeCode_LREAL, nDims := 1, aDimSizes := [1600]);
END_VAR
In der Berechnungstask wird das Magnitudenspektrum für die Berechnung eines Spektrums von 4096 Linien, angezeigt mittels cFFTLength, konfiguriert. Weil die Spektrumsberechnung mit periodischer Abarbeitung von diskreten Segmenten eines Dauersignals verbunden ist, wird eine sogenannte Fensterfunktion verwendet. Eine korrekt ausgewählte Fensterfunktion verbessert die Signaltransformationseffizienz, verringert die Schwankungen dank der overlapp-add Methode und verbessert die spektrale Auflösung. Zudem verringert die Fensterfunktion in praktischen Anwendungen den Leakage Effekt in der Nähe von kritischen Frequenzen. In dem Lernprogramm wurde das Hann Fenster gewählt. Der Magnitudenspektrum-Funktionsbaustein bietet viele Skalierungsoptionen, aus denen der Effektivwert (RMS) ausgewählt wurde. Der Grund hierfür ist, dass im Falle von in der Zeit veränderlicher physikalischer Signale ein Effektivwert ein bevorzugter Indikator der mittleren Leistung des Signals darstellt, im Vergleich z.B. zum Spitzenwert des Signals. Im Schwingungsbeschleunigungsspektrum zeigen einzelne Linien die Effektivwerte der Schwingungen bei entsprechender Frequenz an und können direkt in den entsprechenden Einheiten wie z.B. mm/s² oder g ausgedrückt werden.
PROGRAM MAIN_CM
VAR CONSTANT
cInitSpectrum : ST_CM_MagnitudeSpectrum_InitPars := ( nFFT_Length := 4096,
nWindowLength := 2*1600,
bTransformToDecibel:= FALSE,
eWindowType := eCM_HannWindow,
eScalingType := eCM_RMS);
END_VAR
Das Ergebnis des Magnitudenspektrums wird über einen Sink Funktionsbaustein, mit vorgegebener Länge des Arrays auf nFFT_Length/2+1, in ein Array kopiert. Beim nächsten Schritt in der Analysekette wird ein Quantilfunktionsbaustein für die Berechnung der 50% und 90% Quantile der Spektralwerte konfiguriert. Die Spektralwerte sind häufig hochgradig fluktuierend, so dass eine Auswertung im Falle zu niedriger oder zu hoher Werte schwierig ist. Mit Hilfe der Quantilen kann das Maximum, Minimum oder sogar der Mittelwert über ein spezifiziertes Zeitintervall ermittelt werden. Diese Art der bereichsbasierten Auswertung ist häufig zuverlässiger und einfacher zu handhaben. Ein 50% Quantilwert Q0.5 ist ein Wert, für den fast 50% der Werte einer Verteilung kleiner als Q0.5 sind. Er wird auch als Medianwert bezeichnet. Ähnlich gilt, dass eine 90% Quantile Q0.9 einen Wert anzeigt, für den 90% der Werte einer Verteilung kleiner als Q0.9 sind.
VAR CONSTANT
cInitQuantiles : ST_CM_Quantiles_InitPars := ( nChannels := (4096/2+1),
fMinBinned := -10,
fMaxBinned := 10,
nBins := 100,
nMaxQuantiles := 2);
END_VAR
Im Programm werden die Quantile folgendermaßen konfiguriert:
(*--------- Configure quantile args ---------*)
IF bConfigureQuantile THEN
FOR nChannel := 1 TO (cFFTLength/2+1) DO
aQuantilesArg[nChannel,1]:= 0.50; // 50% quantile
aQuantilesArg[nChannel,2]:= 0.90; // 90% quantile
END_FOR
fbQuantiles.Configure( pArg := ADR(aQuantilesArg), nArgSize := SIZEOF(aQuantilesArg));
bConfigureQuantile := FALSE;
END_IF
Hier finden Sie die ausführliche Beschreibung des Funktionsbausteins FB_CMA_Quantiles. Beachten Sie, dass die Parameter fMinBinned und fMaxBinned den erwarteten Bereich des Eingangssignals definieren und nBins die Anzahl der Bins darstellt, in die der Bereich des Signals unterteilt wird. Diese Parameter hängen vom jeweiligen Eingangssignal ab. Der Zustand des Signals wird auf der Grundlage der Quantileninformation klassifiziert. Der diskrete Funktionsbaustein kann mehrere Kanäle gleichzeitig abarbeiten, deswegen wird der Ausgang der Quantilen ihm direkt zugeführt. Der Klassifizierer ist darauf eingestellt, zwischen drei Zuständen zu unterscheiden, und den entsprechenden Zustand über den nMaxClasses Parameter anzuzeigen.
VAR CONSTANT
cInitClassification : ST_CM_DiscreteClassification_InitPars := (nChannels:= (4096/2+1),
nMaxClasses := 3);
END_VAR
Anmerkung: Der Ausgang des Quantilenfunktionsbausteins ist ein 2D-Array, das in diesem Fall die Anzahl der Spektrallinien über die Anzahl Quantilen ist. Aber der diskrete Klassifizierer erlaubt lediglich ein eindimensionales Array, das die Anzahl der Eingangskanäle enthält. Um einen Konflikt der Dimension zu vermeiden, ist der Pufferumwandler von FB_CMA_BufferConverting zu verwenden. Dieser Funktionsbaustein wandelt ein zweidimensionales Multiarray in ein eindimensionales Array ohne Datenverlust um. Der Code-Ausschnitt beschreibt die entsprechende Verwendung.
VAR CONSTANT
cInitBuffer : ST_MA_MultiArray_InitPars := ( eTypeCode := eMA_TypeCode_LREAL,
nDims := 1,
aDimSizes := [(4096/2+1)]);
END_VAR
VAR
fbBufferConverter : FB_CMA_BufferConverting := (stInitPars := cInitBuffer, nOwnID := eID_BufferConverter, aDestIDs := [eID_Classify]);
END_VAR
Der Pufferumwandler ruft eine Methode auf:
fbBufferConverter.Copy1D(nWorkDimIn := 0,
nWorkDimOut := 0,
nElements := 0,
pStartIndexIn := 0,
pStartIndexOut := 0,
nOptionPars := 0);
Weitere Informationen zu diesem Funktionsbaustein finden Sie unter FB_CMA_BufferConverting. Zum Abschluss der Konfiguration des Funktionsbausteins muss jeder Sink Funktionsbaustein mit SPS-Arrays mit den korrekten Dimensionen verbunden werden.
Schritt 4: Feinabstimmung der Anwendungsparameter
Vor Beginn der Analyse, ist es wichtig den diskreten Klassifizierer bezüglich seiner Grenzwerte zu konfigurieren. Eine Klassifizierungsgrenze oder ein Schwellenwert ermöglicht es dem diskreten Klassifizierer, eingehende Kanäle ständig zu überwachen und festzustellen, ob einer der Eingangskanäle diesen Schwellenwert überschreitet. Die Schwellenwerte hängen von der jeweiligen Anwendung, den Genauigkeitsanforderungen, den zulässigen Detektionstoleranzen, usw. ab. In diesem Lernprogramm besteht das Ziel darin, kleine Fehler, vergleichbar mit Zufallsrauschen, und auch große Fehler, die bei einer bestimmten Frequenz (z.B. 200 Hz) auftreten, zu erkennen. Es werden die Schwelllwerte fWarning und fAlarm bestimmt. Überschreitet die Amplitude der Eingangskanäle fWarning, wechselt der allgemeine Zustand in den Warnzustand, wird fAlarm überschritten, erfolgt eine Alarmmeldung. Werden die Schwellwerte nicht überschritten befindet sich der Kanalzustand im normalen Bereich.
(*--------- Configure classifier args ---------*)
IF bConfigureClassifier THEN
fWarning := (fMonitoringLevel/100)*1.5;
fAlarm := (fMonitoringLevel/100)*2.5;
fbTeachTimer(IN := TRUE, PT := T#15S);
IF fbTeachTimer.Q THEN
fbTeachTimer(IN := FALSE);
FOR nChannel := 1 TO (cFFTLength/2+1) DO
aClassArgs[nChannel, 1] := (fMonitoringLevel/100)*aQuantilesCopy[nChannel,1];
aClassArgs[nChannel, 2] := fWarning*aQuantilesCopy[nChannel,1];
aClassArgs[nChannel, 3] := fAlarm*aQuantilesCopy[nChannel,1];
END_FOR
fbClassification.Configure(pArg := ADR(aClassArgs), nArgSize := SIZEOF(aClassArgs));
bConfigureClassifier := FALSE;
END_IF
END_IF
Der Code-Ausschnitt oben beschreibt die Konfiguration von diesem diskreten Klassifizierer, sodass ein Zeitgeberblock ein normales Betriebsfenster in die Lage versetzt, eine sogenannte Lernphase, in welcher der diskrete Klassifizierer konfiguriert wird, zu durchlaufen. Es wird vorausgesetzt, dass sich das Eingangssignal im Verlauf dieser Zeit normal verhält, d.h. innerhalb des zulässigen Bereichs verbleibt. Der Warnschwellenwert liegt bei 150% der “normalen” 50% Quantile und die Alarmschwelle bei 250% der normalen 50% Quantile. Da die 50% Quantile das durchschnittliche Verhalten beschreibt, eignet sich diese Schwellenwertkonfiguration für Anwendungen, deren Eingänge nur wenige Ausreißer aufweisen. Es kann auch die 90% Quantile als Schwellenwert bestimmt werden, wenn angenommen wird, dass das Eingangssignal wahrscheinlich stark schwankt. Es kann ebenfalls eine andere Variable, fMonitoringLevel, konfiguriert werden, dank derer ein bestimmtes Toleranzband um die zulässigen Werte gelegt wird, um die Anzahl von falschen Alarmen zu kontrollieren. Mit Hilfe dieses Parameters können die Schwellenwerte genauer abstimmt werden. Beachten Sie, dass die Schwellenwerte für den diskreten Klassifizierer individuell für alle Eingangskanäle festgelegt werden können.
Schritt 5: Anwendung starten
Kompilieren Sie den Code, laden Sie ihn auf das Zielsystem herunter und starten Sie die SPS, um das Lernprogramm auszuführen. Im Solution Explorer unter dem Knoten von VISU befindet sich eine kleine vorbereitete Visualisierung, genannt Dashboard die für einen Schnelltest verwendet werden kann. Für die Simulation wird das Eingangssignal mit einem Funktionsgenerator verbunden, der für die Erzeugung eines sinusförmigen 50Hz Signals mit einer Amplitude von 5 konfiguriert wurde. Sie können am Eingang andere verfügbare Signale, wie ein Impuls-, Dreieck- oder Sägezahnsignal oder aber auch ein Hardwaremodul wie EL3632 anlegen. Nach dem Start der Anwendung werden in den Displayfeldern die maximale Amplitude, die RMS-Amplitude und die Frequenz bei der maximalen Amplitude von der SPS in Echtzeit angezeigt.
In der Abbildung sehen Sie, dass der Zustand der Anwendung im entsprechenden Displayfeld angezeigt wird. Sie können einen geringfügigen Fehler simulieren, indem Sie auf die Add Fault Taste drücken. Sie können beobachten, wie der RMS-Wert des Eingangssignals langsam über den Schwellenwert ansteigt und der Zustand sich entsprechend ändert. Um einen großen Fehler zu simulieren, drücken Sie auf Small/Large Taste. Ähnlich wie im Falle des vorherigen Fehlers wird der RMS-Wert ansteigen, aber diesmal wird im „Fault Frequency“ Feld die Frequenz des Fehlersignals, die in diesem Falle 200Hz beträgt, angezeigt.
Schritt 6: Monitoring
Nach dem Start der SPS befinden sich in den Anzeigefeldern die aktuellen Werte. Anfangs erscheint die Reconfigure Taste als gedrückt und das Signal in der rechten Ecke ist deaktiviert. Das bedeutet, dass die Grenzwerte gerade für den diskreten Klassifizierer festgelegt werden. Nachdem die Konfiguration abgeschlossen ist, wird die Reconfigure Taste sich selbt zurücksetzen und der Zustand der Maschine wird als „Normalzustand“ angezeigt. Das Signal wechselt zu grün, was die gleiche Bedeutung hat.
Um einen Fehler zu simulieren, belassen Sie das Optionsfeld auf „Small Fault“ und drücken die Activate Disturbance (Störung aktivieren) Taste. Die Maschine wird in Folge zwischen „Normal-“ und „Warnzustand“ wechseln, und das Signal wird abwechselnd grün und orange dargestellt. Wird ein großer Fehler simuliert, indem das Optionsfeld umgeschaltet wird, dann wechselt der Maschinenzustand zum „Alarmzustand“ und das Signal zeigt rot an. Um die Störung zu unterbinden, lassen Sie die Activate Disturbance Taste los. Der Signalzustand kehrt wieder zu grün zurück. Beachten Sie, dass eine Änderung der Signalamplitude ebenfalls einen Fehlerzustand zur Folge hat. Wenn dies unerwünscht ist, dann drücken Sie die Reconfigure Taste erneut, um den diskreten Klassifizierer an diesen neuen Signalzustand anzupassen.
Voraussetzungen
Entwicklungsumgebung |
Zielplattform |
Einzubindende SPS-Bibliotheken |
---|---|---|
TwinCAT v3.1.4013 |
PC oder CX (x86, x64) |
Tc3_CM, Tc3_CM_Base, Tc3_MultiArray |