FB_CMA_HistArray
Berechnet die Häufigkeitsverteilung für ein- und mehrkanalige reell-wertige Zeitreihen.
Der Baustein FB_CMA_HistArray berechnet die Häufigkeitsverteilung (in der graphischen Darstellung Histogramm genannt) von ein- und auch mehrkanaligen reell-wertigen Eingangsdaten. Jeder Kanal wird dabei unabhängig voneinander betrachtet. Für jeden einzelnen Kanal wird die Häufigkeitsverteilung der zyklisch eingehenden Datenpuffer berechnet, wobei als Eingangspuffer sowohl Einzelwerte oder auch Arrays zugelassen sind.
Zur Parametrierung werden der untere und obere Grenzwert sowie die Anzahl der Klassen (auch Bins genannt) übergeben. Die einzelnen Klassengrenzen werden dann im dadurch definierten Gesamtbereich in gleich großen Intervallen verteilt, vgl. Histogramm. Werte, die unterhalb der unteren Grenze, sowie Werte, die oberhalb der oberen Grenze liegen, werden jeweils in zwei zusätzlichen Bins gezählt.
Der Rückgabewert ist ein zweidimensionales Array mit unsigned 64-Bit Integer-Werten. Der erste Index ist die Nummer des Kanals und der zweite Index ist die Nummer des betreffenden Histogramm-Bins. Dabei sind die Zählungen der Elemente mit einem Wert unterhalb des unteren Grenzwerts, bzw. oberhalb des oberen Grenzwerts jeweils im ersten bzw. letzten Bin enthalten.
Wenn ein Histogrammzähler einen Wert von 2 hoch 64, ungefähr 1.8E19, überschreitet, läuft in der aktuellen Implementation der Zähler über, ohne dass eine Fehlermeldung erzeugt wird. Bei einem Zählschritt alle 100 Mikrosekunden geschähe dies frühestens nach 59 Millionen Jahren.
Gedächtniseigenschaften
Die Stichprobenmenge N, welche zur Berechnung des aktuellen Ergebnisses genutzt wird, erhöht sich automatisch bei jedem neuen eingehenden Datensatz, d.h. der Baustein verwendet alle Eingangswerte seit dessen Instanziierung. Das Zurücksetzen der Stichprobenmenge auf Null (löschen des internen Speichers des FBs) ist über eine ResetData()
Methode oder, bei Verwendung der CallEx()
Methode über die Variable bResetData
vorgesehen.
Konfiguration
Mit den Initialisierungsparametern werden bereits die Grenzwerte, für die Samples in den regulären Histogramm-Bins gezählt werden, festgelegt. Diese können mit der Configure()
Methode für jeden Kanal individuell angepasst werden.
NaN Vorkommnis
Enthält ein Satz von Eingangswerten die spezielle Konstante NaN, so wird der Statistik für diesen Kanal bei diesem Zeitschritt kein Wert hinzugefügt, d.h. sie wird als Indikator für fehlende Werte behandelt. Am Ausgang sind keine NaN Werte zu erwarten.
Verhalten bei der Verarbeitung mehrkanaliger Eingangsdaten
Bei der Verarbeitung mehrerer Kanäle (nChannels > 1
) besteht die Möglichkeit unterschiedlicher Rückgabewerte je Kanal. In diesem Fall können gesonderte Rückgabewerte am Funktionsbaustein abgefragt werden. Sind die Ergebnisse von einem oder mehreren Kanälen unzulässig, jedoch nicht alle Kanäle, dann entspricht der Wert am Baustein eCM_InfRTime_AmbiguousChannelResults
. Sind die Ergebnisse aller Kanäle unzulässig, dann entspricht der Wert am Baustein eCM_ErrRTime_ErrornousChannelResults
.
Die Abfrage einer Liste der Rückgabewerte aller Kanäle kann über die Methode GetChannelErrors()
erfolgen.
Bei der Verarbeitung mehrerer Unterkanäle (nSubChannels > 0
) ist die Formatierung der Eingangs- und Ausgangsdaten gesondert zu beachten. Bestehen die Eingangsdaten aus einem mehrkanaligen Ergebnis eines vorangestellten Funktionsbausteins, muss der Wert von nChannels
übernommen werden, eine weitere Konfiguration erfolgt in diesem Fall über den Parameter nSubChannels
.
Beispiel: Bei der statistischen Betrachtung (z.B. durch FB_CMA_Quantiles) der Frequenzkanäle eines mehrkanaligen Spektrums (z.B. FB_CMA_MagnitudeSpectrum) ist der Wert von nChannels
identisch zur Anzahl der Eingangssignale zu wählen, die Anzahl der Unterkanäle nSubChannels
entspricht der Länge des Spektrums.
Beispielimplementierung
Eine exemplarische Implementierung ist unter folgendem Link verfügbar: Histogramm.
Ein- und Ausgänge
Die Ein- und Ausgangspuffer entsprechen folgender Definition (Shape). Die variablen Parameter sind Teil des Bausteineingangs stInitPars
.
Varianten | Eingangspuffer (MultiArray input stream) | Ausgangspuffer (MultiArray output stream) |
---|---|---|
Standardvariante |
|
|
Standardvariante für mehrere Datensätze |
|
|
Mehrkanalige Variante |
|
|
Mehrkanalige Variante für mehrere Datensätze |
|
|
*: Die Länge dieser Dimension kann beliebig gewählt werden und sich so der Applikation bzw. dem Ausgangspuffer des vorrausgehenden Algorithmus anpassen.
Eingangsparameter
Die Eingangsparameter dieses Bausteins repräsentieren Initialisierungsparameter und müssen bereits bei der Deklaration der FB Instanz zugewiesen werden! (Alternativ: Init()-Methode). Sie dürfen nur einmalig zugewiesen werden. Eine Änderung zur Laufzeit ist nicht möglich.
VAR_INPUT
stInitPars : ST_CM_HistArray_InitPars; // init parameter
nOwnID : UDINT; // ID for this FB instance
aDestIDs : ARRAY[1..cCMA_MaxDest] OF UDINT; // IDs of destinations for output
nResultBuffers : UDINT := 4; // number of MultiArrays which should be initialized for results (0 for no initialization)
tTransferTimeout : LTIME := LTIME#500US; // timeout checking off during access to inter-task FIFOs
END_VAR
stInitPars
: Baustein-spezifische Struktur mit Initialisierungsparametern vom Typ ST_CM_HistArray_InitPars. Die Parameter müssen mit der obigen Definition der Ein- und Ausgangspuffer übereinstimmen.nOwnID
: Identifiziert die Bausteininstanz mit einer eindeutigen ID. Diese muss immer größer als null sein. Eine bewährte Vorgehensweise ist die Definition einer Enumeration für diesen Zweck.aDestIDs
: Legt die Ziele durch Angabe derer IDs fest, zu denen die Ergebnisse weitergeleitet werden sollen. Die Definition des Ausgangspuffers (wie oben beschrieben) muss mit der Definition des Eingangspuffers jedes gewählten Zieles übereinstimmen.nResultBuffers
: Der Funktionsbaustein initialisiert einen Transfer Tray Stream mit der gegebenen Anzahl an MultiArray Puffern. Der Defaultwert ist vier.tTransferTimeout
: Einstellung des synchronen Timeout für interne MultiArray Weiterleitungen. Siehe Kapitel Parallelverarbeitung.
Ausgangsparameter
VAR_OUTPUT
bError : BOOL; // TRUE if an error occurs. Reset by next method call.
hrErrorCode : HRESULT; // '< 0' = error; '> 0' = info; '0' = no error/info
ipErrorMessage : I_TcMessage := fbErrorMessage; // Shows detailed information about occurred errors, warnings and more.
nCntResults : ULINT; // Counts outgoing results (MultiArrays were calculated and sent to transfer tray).
END_VAR
-
bError
: Der Ausgang istTRUE
, falls ein Fehler auftritt. -
hrErrorCode
: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom TypHRESULT
ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert. -
ipErrorMessage
: Beinhaltet nähere Informationen zum aktuellen Rückgabewert. Siehe hierzu den Abschnitt Fehlerbeschreibung und Information. Für diesen speziellen Schnittstellenzeiger ist intern sichergestellt, dass er immer gültig/zugewiesen ist.
Methoden
Call():
Die Methode wird jeden Zyklus aufgerufen, um den Algorithmus auf die aktuellen Eingangsdaten anzuwenden. Der Baustein wartet auf Eingangsdaten, sofern die Methode weder neue Ergebnisse noch einen Fehler angibt. Dies ist ein reguläres Verhalten im Ablauf der Analysekette.
- Rückgabewert: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom Typ
HRESULT
ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert.
METHOD Call : HRESULT
VAR_OUTPUT
bNewResult : BOOL; // TRUE every time when outgoing MultiArray was calculated and sent to transfer tray.
bError : BOOL; // TRUE if an error occurs.
hrErrorCode : HRESULT; // '< 0' = error; '> 0' = info; '0' = no error/info
END_VAR
bError
: Der Ausgang istTRUE
, falls ein Fehler auftritt.hrErrorCode
: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom TypHRESULT
ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert. Dieser Ausgang ist identisch zum Rückgabewert der Methode.
Falls ein Timeout eintritt oder kein MultiArray Puffer für das Ergebnis verfügbar ist, so gehen weder die Eingangsdaten noch die Ergebnisdaten verloren. Sie werden beim nächsten Aufruf weitergeleitet. |
CallEx() :
Die Methode wird jeden Zyklus aufgerufen um das Histogramm aus dem Eingangssignal zu berechnen. Eine alternative Methode ist Call()
.
Die Auswertung des Histogramms ist in der Regel erheblich rechenaufwendiger als die Registrierung neuer Eingangswerte. Deswegen kann eine Benutzung der Methode CallEx()
die Laufzeit je nach den konfigurierten Parametern erheblich verkürzen, indem statistische Ergebnisse erst berechnet werden, wenn sie benötigt werden.
Der Baustein wartet auf Eingangsdaten, sofern die Methode weder neue Ergebnisse noch einen Fehler angibt. Dies ist ein reguläres Verhalten im Ablauf der Analysekette.
- Rückgabewert: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom Typ
HRESULT
ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert.
METHOD CallEx : HRESULT
VAR_INPUT
nAppendData : UDINT; // count of data buffers which are appended until calculation (1= calculate always)
bResetData : BOOL; // automatic reset of dataset buffer after each calculation
END_VAR
VAR_OUTPUT
bNewResult : BOOL; // TRUE every time when outgoing MultiArray was calculated and sent to transfer tray.
bError : BOOL; // TRUE if an error occurs.
hrErrorCode : HRESULT; // '< 0' = error; '> 0' = info; '0' = no error/info
END_VAR
nAppendData
: Legt fest wie viele Eingangsdatenpuffer gesammelt werden sollen bevor eine Berechnung ausgeführt wird, denn vorzugsweise werden mehrere Datenblöcke angefügt um ein präzises Ergebnis zu erreichen.bResetData
: Falls gesetzt, wird der interne Datenpuffer nach Berechnung vollständig gelöscht.bError
: Der Ausgang istTRUE
, falls ein Fehler auftritt.hrErrorCode
: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom TypHRESULT
ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert. Dieser Ausgang ist identisch zum Rückgabewert der Methode.
Falls ein Timeout eintritt oder kein MultiArray Puffer für das Ergebnis verfügbar ist, so gehen weder die Eingangsdaten noch die Ergebnisdaten verloren. Sie werden beim nächsten Aufruf weitergeleitet. |
Configure() :
Mit dem Aufruf dieser Methode können die Histogrammargumente neu konfiguriert werden. Dies ermöglicht eine feine Einstellung der Parameter fMinBinned
und fMaxBinned
während der Laufzeit. Das entsprechende SPS Array muss wie folgt definiert sein.
- Rückgabewert: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom Typ
HRESULT
ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert.
METHOD Configure : HRESULT
VAR_INPUT
pArg : POINTER TO LREAL; // pointer to 2-dimensional array (LREAL) of arguments
nArgSize : UDINT; // size of arguments buffer in bytes
END_VAR
Die Eingangspuffer entsprechen einer der folgenden Definitionen (input shape). Die variablen Parameter sind Teil des Bausteineingangs stInitPars
. Die zwei zu konfigurierenden Parameter je Kanal und Unterkanal sind [fMinBinned, fMaxBinned]
.
Varianten | Eingangspuffer (MultiArray input stream) |
---|---|
Identische Konfiguration aller Kanäle und Unterkanäle |
|
Kanalspezifische Konfiguration |
|
Unterkanalspezifische Konfiguration |
|
Kanal- und unterspezifische Konfiguration |
|
Init():
Üblicherweise ist diese Methode in einer Condition Monitoring Applikation nicht notwendig. Sie bietet eine Alternative zur Bausteininitialisierung. Die Init()
Methode darf nur während der Initialisierungsphase der SPS aufgerufen werden. Sie kann nicht während der Laufzeit verwendet werden. Es sei auf die Verwendung von einer FB_init
Methode oder dem Attribut 'call_after_init
' hingewiesen (siehe TwinCAT SPS Referenz). Hiermit wird zudem die Bausteinkapselung erleichtert.
Die Eingangsparameter der Bausteininstanz dürfen nicht bei der Deklaration zugewiesen werden, falls die Initialisierung mit der Init() Methode erfolgen soll.
- Rückgabewert: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom Typ
HRESULT
ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert.
METHOD Init : HRESULT
VAR_INPUT
stInitPars : ST_CM_HistArray_InitPars; // init parameter
nOwnID : UDINT; // ID for this FB instance
aDestIDs : ARRAY[1..cCMA_MaxDest] OF UDINT; // IDs of destinations for output
nResultBuffers : UDINT := 4; // number of MultiArrays which should be initialized for results (0 for no initialization)
END_VAR
stInitPars
: Baustein-spezifische Struktur mit Initialisierungsparametern vom Typ ST_CM_HistArray_InitPars. Die Parameter müssen mit der obigen Definition der Ein- und Ausgangspuffer übereinstimmen.nOwnID
: Identifiziert die Bausteininstanz mit einer eindeutigen ID. Diese muss immer größer als null sein. Eine bewährte Vorgehensweise ist die Definition einer Enumeration für diesen Zweck.aDestIDs
: Legt die Ziele durch Angabe derer IDs fest, zu denen die Ergebnisse weitergeleitet werden sollen. Die Definition des Ausgangspuffers (wie oben beschrieben) muss mit der Definition des Eingangspuffers jedes gewählten Zieles übereinstimmen.nResultBuffers
: Der Funktionsbaustein initialisiert einen Transfer Tray Stream mit der gegebenen Anzahl an MultiArray Puffern. Der Defaultwert ist vier.
ResetData():
Die Methode löscht alle bereits hinzugefügten Datensätze, vgl. Gedächtniseigenschaft des Funktionsbausteins. Wird nach einem ResetData()
die Call()
-Methode wieder aufgerufen, muss entsprechend erst der interne Speicher wieder aufgefüllt werden um ein gültiges Ergebnis zu berechnen.
- Rückgabewert: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom Typ
HRESULT
ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert.
METHOD ResetData : HRESULT
VAR_INPUT
END_VAR
Alternativ kann der automatische Reset in der Methode CallEx()
verwendet werden.
PassInputs():
Solange eine FB_CMA_Source
Instanz aufgerufen wird und somit Signaldaten zu einem Zielblock übertragen werden, müssen wie in der API SPS Referenz erläutert alle weiteren Blöcke der Analysekette zyklisch aufgerufen werden.
Manchmal ist es sinnvoll, einen Algorithmus für eine bestimmte Zeit nicht auszuführen. Beispielsweise sollten manche Algorithmen nur nach vorherigem Training bzw. Konfiguration ausgeführt werden. Zwar muss der Funktionsbaustein dennoch zyklisch aufgerufen werden, aber es ist ausreichend, wenn die am Baustein ankommenden Daten im Kommunikationsring weitergeleitet werden. Dies geschieht mittels der Methode PassInputs()
anstelle der Methode Call()
. Hierbei wird der Algorithmus selbst nicht aufgerufen und entsprechend kein Ergebnis berechnet sowie kein Ausgangspuffer generiert.
- Rückgabewert: Falls ein Fehler auftritt, wird ein entsprechender Fehlercode vom Typ
HRESULT
ausgegeben. Mögliche Werte sind in der Liste der Fehlercodes erläutert.
METHOD PassInputs : HRESULT
VAR_INPUT
END_VAR
GetChannelErrors():
Die Methode ermöglicht die Abfrage einer Liste der kanalspezifischen Rückgabewerte bei der Verarbeitung mehrerer Kanäle (nChannels > 1
). Ein Aufruf ist sinnvoll für den Fall, dass der Rückgabewert des Bausteins einem der Werte eCM_InfRTime_AmbiguousChannelResults
oder eCM_ErrRTime_ErrornousChannelResults
entspricht.
-
Rückgabewert: Information über den Ausleseprozess der Liste der Fehlercodes. Der Wert wird auf
TRUE
gesetzt, falls die Abfrage erfolgreich war,FALSE
anderenfalls.
METHOD GetChannelErrors : BOOL
VAR_IN_OUT
aChannelErrors : ARRAY[*] OF HRESULT;
END_VAR
-
aChannelErrors
: Fehlerliste vom TypHRESULT
der LängenChannels
.
Ähnliche Funktionsbausteine
Der Baustein FB_CMA_Quantiles berechnet die Quantile von Verteilungen von Eingangswerten.
Der Baustein FB_CMA_MomentCoefficients berechnet die statistischen Momentenkoeffizienten : Mittelwert, Standardabweichung, Schiefe (Skew) und Kurtosis.
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken |
---|---|---|
TwinCAT v3.1.4022.25 | PC or CX (x86, x64) | Tc3_CM, Tc3_CM_Base |
Eingeschränkter Funktionsumfang bereits mit CM 3.1 verfügbar. Siehe Abschnitt Kompatibilität. |