Zum Hauptinhalt springen

Überwachungsmodul "diagnostics"

Beschreibung

Aufgabe des Überwachungsmoduls "diagnostics" ist es, unterschiedliche Arten von Eingangsdaten bezüglich festgelegter Kriterien zu überwachen und die hieraus resultierenden Alarminformationen anschließend in die smartCORE Alarmdatenbank des Alarm-Managers zu schreiben.

Diese Datenbank kann zur weiteren Verarbeitung der Alarmmeldungen z.B. mit dem opticloud-Plugin an die optiCloud angebunden werden.

Zu den Arten überwachter Eingangsdaten zählen unter anderem

  • Boolesche Werte, z.B. Status-Flags oder Ergbenisse berechneter Logik
  • Double-Werte (Fließkomma), z.B. Messwerte oder berechnete Größen, die gegen einen festen Grenzwert verglichen werden. Eine einstellbare Hysterese ist für die Unterdrückung von Rauschen vorgesehen. Um Extremwerte nachzuverfolgen, können Aktualisierungen der Meldung aktiviert werden.
  • Integer-Codes, z.B. Status- oder ENUM-Codes oder bestimmte bits oder bit-Abschnitte; dabei können einzelne Codes oder Code-Bereiche mittels eine White/Black-List gefiltert werden und jeweils dem Zustand HIGH oder LOW zugeordnet werden. Nicht passende Codes werden über einen eigenen Fehlerzustands-Alarm gemeldet bis ein gültiger Code eintrifft. Um Statuswechsel nachzuverfolgen, können Aktualisierungen der Meldung aktiviert werden.
  • String-Werte (Text), z.B. Logbuch-Meldungen eines Gerätes; dabei können Textelemente über Regular Expressions (PCRE) extrahiert, als White/Black-List gefiltert und dem Zustand HIGH oder LOW zugeordnet werden. Nicht passende Texte werden über einen eigenen Fehlerzustands-Alarm gemeldet bis ein gültiger Code eintrifft.
  • ErrorCode: Eine Folge von Error-Codes (<string>) in Verbindung entweder mit einem Level-Kanal oder einem Transfer-Kanal. Das Diagnostics-Modul führt intern eine Tabelle mit Fehlercodes und der zugehörigen Meldungsinstanz. Meldungen können einzelnen Codes oder als Template einem Code-Bereich (Wildcard) oder allen eingehenden Codes zugewiesen werden.

Darüberhinaus werden im Rahmen der Zusammenstellung von Alarmmeldungen aktuelle Werte von smartCORE Kanälen erfasst (sogenannte Snapshots) sowie benutzerdefinierte Metadaten integriert. Das folgende Schema gibt einen Überblick über die implementierte Funktionalität der Alarm-Logik. Je Message-Eintrag stehen die hellgelb hinterlegten Blöcke zur Verfügung:

Overview

Die Verarbeitung der Daten eines überwachten Kanals erfolgt aus Sicht des Diagnose-Plugins, d.h. es findet eine implizite Umwandlung in den erwarteten Datentyp statt. Damit spielt der Datentyp des Kanals für die Auswertung keine Rolle, sofern dieser entsprechend konvertierbar ist.

Verwendete Schnittstellen & Protokolle

  • smartCORE Alarmdatenbank

JSON-Konfiguration

In den folgenden Abschnitten werden Beispielkonfigurationen aufgelistet sowie hieran beteiligte Modulparameter diskutiert.

Beispielkonfiguration (Überwachung auf Boolesche Werte)

In diesem Beispiel wird ein Kanal als Boolean gelesen auf den Wert true überwacht.

Zur Konvertierung des Datentyps gilt:

  • <integer, <unsigned integer> oder <double> ist true, wenn das Sample 0\ne 0 ist,
  • <string> ist true, wenn der String nicht leer ist
{
"module": "diagnostics",
"factory": "diagnostics",
"config": {
"pollingIntervalMs": 1000,
"messages": [
{
"messageLevel": "WARNING",
"context": "Monitoring someBooleanChannel",
"channel": "someBooleanChannel",
"activation": "high"
}
]
}
}

Beispielkonfiguration (Überwachung der Überschreitung eines numerischen Werts mit Stabilisierungsverzögerungen und Hysterese)

In diesem Beispiel wird ein Kanal als Double gelesen und auf die Überschreitung des Wertes von 42.0 hin überwacht.

Zur Konvertierung des Datentyps gilt:

  • <bool> werden in 0 und 1 übersetzt,
  • <string> liefert als Wert die Länge des Strings

Im Beispiel ist es zur Auslösung notwendig, dass die Überschreitung mindestens 5 Sekunden lang andauert bzw. zur Deaktivierung, dass diese mindestens 10 Sekunden lang nicht vorliegt und hierfür der Wert des Kanals unterhalb des Schwellwerts minus seiner Hysterese liegt.

Es wird zudem eine Ereignis bezogene Meldung generiert, die den aktuellen Wert, das bisherige Extremum, d.h. in diesem Fall Maximum, sowie den Schwellwert beinhaltet.

Diese Meldung wird sowohl bei initialer Überschreitung als auch bei Deaktivierung aktualisiert. Außerdem wird diese Meldung bei Abweichungen des aktuellen Werts vom zuletzt gemeldeten Extremum, die größer als die Hysterese sind, ebenfalls aktualisiert.

{
"module": "diagnostics",
"factory": "diagnostics",
"config": {
"pollingIntervalMs": 1000,
"messages": [
{
"messageLevel": "WARNING",
"context": "Monitoring measured someValueChannel",
"messageEvent": "Some WARNING occurred (current value ${value} > ${boundary}) (maximum value ${minmax} on ${minmaxDate} at ${minmaxTime})",
"channel": "someValueChannel",
"threshold": 42.0,
"hysteresis": 7.0,
"activation": "high",
"stabilizationSecondsRaise": 5,
"stabilizationSecondsRelease": 10,
}
]
}
}

Beispielkonfiguration (Überwachung enumerierter Werte)

In diesem Beispiel wird ein Kanal als Integer-Wert gelesen und überwacht.

Zur Konvertierung des Datentyps gilt:

  • <bool> werden in 0 und 1 übersetzt,
  • <float> oder <double> werden ohne Nachkommastellen verwendet,
  • <string> liefert als Wert die Länge des Strings

In diesem Beispiel werden die Wertebereiche 17 und 77-99 als Auslösebedingung (HIGH), die Wertebereiche 31-39, 66 und 69-71 als Deaktivierungsbedingung (LOW) sowie sämtliche anderen Bereiche als ungültige Alarmbedingung interpretiert.

{ 
"module": "diagnostics",
"factory": "diagnostics",
"config": {
"pollingIntervalMs": 1000,
"messages": [
{
"messageLevel": "WARNING",
"context": "Monitoring someEnumeratedChannel",
"messageEvent": "Some WARNING occurred",
"messageFailure": "INVALID error occurred",
"channel": "someEnumeratedChannel",
"activation": "enum",
"valuesHigh": "17,77-99",
"valuesLow": "31-39,66,69-71"
}
]
}
}

Beispielkonfiguration (Überwachung eines Error Streams)

In diesem Beispiel werden FehlerCodes (ErrorCode) aus einem sogenannten Error Stream überwacht. Dieser besteht aus den beiden sourceErrorCode und sourceErrorLevel Kanälen, die zeitlich synchron sein müssen. Der Fehlercode-Kanal wird als <string> gelesen, sodass fast beliebige Kanäle als Quelle verwendet weren können. Der Fehlerlevel-Kanal muss ganzzahlige <integer> Werte liefern. Die aus diesem Error Stream extrahierten Codes stehen allen ErrorCode-Messages in der Reihenfolge ihrer Definition zur Verarbeitung zur Verfügung. Ein bestimmter Code kann jeweils nur in einer ErrorCode-Message berücksichtigt werden.

Im Beispiel werden sowohl der benutzerspezifische Fehlercode "47:11", Fehlercodes, die mit "ERR:" beginnen, als auch sämtliche anderen unbekannten Fehlercodes überwacht. Wenn das Message-Objekt für verschiedene Codes verwendet werden soll, muss es als Template markiert werden.

{
"module": "diagnostics",
"factory": "diagnostics",
"config": {
"pollingIntervalMs": 1000,
"sourceErrorCode": "Some.Name.Space.ErrorCodeChannel",
"sourceErrorLevel": "Some.Name.Space.ErrorLevelChannel",
"messages": [
{
"errorCode": "47:11",
"messageLevel": "ALARM",
"context": "Monitoring Error-Stream for 47:11",
"messageEvent": "ALARM ${errorCode} occurred"
},
{
"isTemplate": true,
"errorCode": "ERR:*",
"messageLevel": "ERROR",
"context": "Monitoring for ERR-codes",
"messageEvent": "Error ${errorCode} occurred"
},
{
"isTemplate": true,
"messageLevel": "WARNING",
"context": "Collection unknown codes",
"messageEvent": "Unknown code ${errorCode} occurred"
}
]
}
}

Beispielkonfiguration (Verwendung von Metadaten)

In diesem Beispiel wird ein Kanal wie in Besipiel 1 auf den Wert true überwacht. Ziel dieses Beispiels ist es, die Ergänzung von Alarmmeldungen um benutzerspezifische Metadaten zu veranschaulichen.

Es werden hierfür im Rahmen der Zusammenstellung der Alarmmeldung Metadaten in Form eines JSON-Objekts hinzugefügt, wobei immer die globalen Metadaten um die im Rahmen der Message spezifizierten Metadaten ergänzt bzw. auf oberster Ebene des JSON-Objekts ersetzt werden.

{
"module": "diagnostics",
"factory": "diagnostics",
"config": {
"pollingIntervalMs": 1000,
"globalMetadata": {
"actionToBePerformed":"some generic action",
"consequences":[
"consequence1",
"consequence2"
]
},
"messages": [
{
"messageLevel": "WARNING",
"context": "Monitoring someBooleanChannel",
"channel": "someBooleanChannel",
"activation": "high",
"metadata": {
"actionToBePerformed":"some CRITICAL action",
"consequences":[
"some SEVERE consequence",
"consequence1",
"consequence2"
],
"additionalRemarks":[
"some REMARK"
]
}
}
]
}
}

Beispielkonfiguration (Verwendung von Snapshot-Kanälen)

In diesem Beispiel wird ein Kanal wie in Besipiel 1 auf den Wert true überwacht.

Ziel dieses Beispiels ist es, die Ergänzung von Alarmmeldungen um einen benutzerspezifischen Snapshot von Kanalwerten zu veranschaulichen.

Es wird hierfür zum Zeitpunkt des initialen Auftretens der Alarmbedingung eine Momentaufnahme der aufgeführten smartCORE Kanäle angefertigt, die aus der Vereinigung aller globalen und meldungsbezogenen Snapshot-Kanälen besteht.

{
"module": "diagnostics",
"factory": "diagnostics",
"config": {
"pollingIntervalMs": 1000,
"globalSnapshot": [
"someGps.Location",
"someOutsideTemperature"
]
"messages": [
{
"messageLevel": "WARNING",
"context": "Monitoring someBooleanChannel",
"channel": "someBooleanChannel",
"activation": "high",
"snapshot": [
"somePressure",
"someTemperature",
"someQuantity",
]
}
]
}
}

Beispielkonfiguration (Verwendung von Snapshot-Gruppen)

In diesem Beispiel wird ein Kanal wie in Besipiel 1 auf den Wert true überwacht.

Dieses Beispiel veranschaulicht zusätzlich die Verwendung sogenannter Snapshot-Gruppen.

{
"module": "diagnostics",
"factory": "diagnostics",
"config": {
"pollingIntervalMs": 1000,
"snapshotGroups": [
{
"name": "gpsInfoChannels",
"channels": [
"GPS.Location",
"GPS.Altitude",
"GPS.SatCount"
]
},
{
"name": "EngineOilPTQChannels",
"channels": [
"Engine.Oil.Pressure",
"Engine.Oil.Temperature",
"Engine.Oil.Quantity"
]
}
],
"globalSnapshot": [
"gpsInfoChannels",
"someOutsideTemperature"
]
"messages": [
{
"messageLevel": "WARNING",
"context": "Monitoring someBooleanChannel",
"channel": "someBooleanChannel",
"activation": "high",
"snapshot": [
"Engine.Revs",
"EngineOilPTQChannels"
]
}
]
}
}

Globale Modulparameter

Im folgenden Abschnitt werden sämtliche Parameter des Moduls diskutiert.

ParameternameErforderlichDatentypsinnvoller WertebereichDefault-WertBeschreibung
pollingIntervalMsNeinINT1 -1000 (1 s)Verarbeitungsintervall [ms]
globalMetadataNeinJSON ObjectEMPTY JSON ObjectJSON Objekt mit beliebigen benutzerspezifizierten Metadaten
globalSnapshotNeinJSON Array of STRINGEMPTY JSON ArrayJSON Array, welches eine globale Liste mit Kanälen beinhaltet, deren Werte zum Zeitpunkt der Alarmierung punktuell erfasst werden sollen
snapshotGroupsNeinJSON Array of JSON ObjectEMPTY JSON Arraysiehe unten
activationMode1(veraltet)Siehe Beschreibung der Messages
messagesJAJSON Array of JSON ObjectKEIN Default-Wertsiehe unten
für Error-Stream oder Error-Table
sourceErrorCodeNein/Ja2 3STRINGKEIN Default-WertsmartCORE Kanal, gelesen als <string>, der einen zeitlich variablen Fehlercode beinhaltet
sourceErrorLevelNein/Ja2STRINGKEIN Default-WertsmartCORE Kanal, gelesen als <integer> der ein hierzu synchrones Fehlerlevel beinhaltet
neutralErrorLevel
neutraErrorCode4
Nein2
(veraltet)
INTEGER0Neutraler Fehlerlevel, bei dem KEIN Alarm ausgelöst wird
sourceBufferTransferNein/Ja3STRINGKEIN Default-WertsmartCORE Kanal, gelesen als <bool>, der das Framing für die Übertragung der Fehlertabelle steuert
timeoutBufferTransferNein/Ja3DOUBLE0Minimale Pause zwischen der Übertragung der Fehlertabellen in Sekunden

Globale Snapshot Gruppen "snapshotGroups"

Mehrere im Rahmen eines Snapshots zu erfassende Kanäle können in Form einer Snapshot-Gruppe als JSON-Objekt konfiguriert werden, deren Name dann im weiteren Verlauf der Konfiguration in Gruppen und Signallisten wie ein Kanalname verwendet werden kann. Sinnvollerweise sollten diese Gruppen so benannt werden, dass keine Überschreibung mit existierenden Kanalnamen erfolgt, da ein Name in einer Signalliste bei der Interpretation zuerst als Gruppenname geprüft wird.

Sind Kanalnamen in verschiedenen Gruppen oder Signallisten enthalten und damit vervielfacht, werden sie beim Zusammenstellen des Snapshot nur einmal in diesen aufgenommen.

ParameternameErforderlichDatentypsinnvoller WertebereichDefault-WertBeschreibung
nameJASTRINGName bzw. Alias der Snapshot-Gruppe
channelsJAJSON Array of STRINGListe aller Kanalnamen oder bereits definierten Gruppen

Konfiguration der Alarmmeldungen "messages"

Die Alarmmeldungen "messages" werden in Form von JSON Objekten und je nach Art der Überwachung unterschiedlich konfiguriert.

important

Über die Auswahl der Parameter wird bestimmt, welche Art der Überwachung ausgeführt wird. Die folgende Tabelle fasst dies zusammen. Sobald ein genannter Parameter verwendet wird, wird die entsprechende Funktion aktiviert:

Überwachung als...Parameter zur AktivierungErforderlichWeitere empfohlene ParameterBemerkung
ErrorCodeisTemplate
errorCode
Nein
Nein
Ignoriert channelName, da Datenquelle Error-Stream/-Table,
activation := HIGH
Keine Filterfunktion
Doublethreshold
boundary5
hysteresis
Ja
(veraltet)
Ja
channel
activation
stabilizationSecondsRaise
stabilizationSecondsRelease
Hysteresis ist immer >0.0\gt 0.0
IntegerstartBit
numberOfBits
valuesWhite
valuesBlack
valuesHigh
valuesLow
Nein
Nein
Nein
Nein
Empfohlen
Empfohlen
channel
activation
stabilizationSecondsRaise
stabilizationSecondsRelease
Mit numberOfBits == 1 wird das ausgewählte Bit wie im Mode Boolean behandelt.
StringregxWhite
regxBlack
regxHigh
regxLow
Nein
Nein
Empfohlen
Empfohlen
channel
activation
stabilizationSecondsRaise
stabilizationSecondsRelease
Wenn regxWhite Subexpressions definiert, werden diese für alle nachfolgenden Tests extrahiert und mit ';' verbunden.
Booleanchannel
activation
stabilizationSecondsRaise
stabilizationSecondsRelease

Gemeinsame Konfigurationsparameter

Unabhängig vom Typ der Überwachung sind folgende Parameter für Messages definiert:

ParameternameErforderlichDatentypsinnvoller WertebereichDefault-WertBeschreibung
messageLevelJASTRINGinfo, action, service, warning, alarm, error, fatalKEIN Default-WertSchweregrad der Alarmmeldung
contextJASTRINGKontext der Alarmmeldung
Statischer Text zur Identifiaktion einer Meldung
channelJA/Nein6STRINGName des überwachten smartCORE Kanals
activationJASTRINGlow, high, minimum, maximum, positiveEdge, negativeEdge, enumCodehighArt der Alarmaktivierung.
messageEventNeinSTRINGAlarmmeldung, wenn Alarm ausgelöst wird.
Es können Platzhalter für dynmische Meldungsinhalte verwendet werden.
needAcknowledgeNeinBOOLEANfalse, truefalseist eine Quittierung auf Cloud-Seite erforderlich
keepAcknowledgedStatusNeinBOOLEANfalse, truefalsesoll quittierter Status beibehalten werden
metadataNeinJSON ObjectEMPTY JSON ObjectBenutzerdefinierte Metadaten, die die globalen Metadaten potentiell überschreiben können
snapshotNeinJSON Array of STRINGEMPTY JSON Arraywährend des initialen Auftretens der Alarmbedingung zu erfassende Kanäle. Es wird der globale Snapshot "globalSnapshot" mit den hier spezifizierten und aufgelösten Snapshot-Gruppen (aus "snapshotGroups") sowie hier individuell spezifizierten Kanälen vereinigt.
Sofern die Filterfunktion verfügbar ist:
stabilizationSecondsRaiseNeinINTEGER1 -0Stabilisierungsverzögerung, nach der der Alarm ausgelöst werden soll (es wird der initiale Zeitpunkt des ersten Auftretens der Alarmbedingung gemeldet)
stabilizationSecondsReleaseNeinINTEGER1 -0Stabilisierungsverzögerung, nach der der Alarm deaktiviert werden soll (es wird der initiale Zeitpunkt des ersten Auftretens der Deaktivierungsbedingung gemeldet)
Sofern ein Fehlerereignis ausgelöst werden kann:
messageFailureNeinSTRINGAlarmmeldung, wenn Alarmierungsbedingung ungültig ist.
Es können Platzhalter für dynmische Meldungsinhalte verwendet werden.

Konfiguration der Aktivierung: activation

Folgende Werte sind für die Alarmaktivierung wählbar:

Enum-WertAliaseBedeutungBemerkung
lowAuslösung solange Quelle LOW liefertMode Double überwacht auf Minimum
high, (Default)Auslösung solange Quelle HIGH liefertMode Double überwacht auf Maximum
minimumminAuslösung solange Quelle LOW liefert mit UpdatesMode Double überwacht auf Minimum mit Aktualisierung
maximummaxAuslösung solange Quelle HIGH liefert mit UpdatesMode Double überwacht auf Maximum mit Aktualisierung
negativeEdgenegEdgeWechsel von HIGH->LOW löst ausMeldung als zustandsloses Ereignis7
positiveEdgeposEdgeWechsel von LOW->HIGH löst ausMeldung als zustandsloses Ereignis7
enumCodeenumAuslösung solange Quelle HIGH liefert mit UpdatesModes Integer/String aktualisieren jeweils für den neuen Fehlercode

Platzhalter für Meldungstexte

In den Meldungstexten messageEvent, messageFailure können folgende Platzhalter verwendet werden, um dynamisch den Text mit jedem Event oder jeder Aktualisierung durch aktuelle Werte zu ergänzen. Im Falle von templated-Errorcode-Messages können bestimmte Platzhalter auch in context ersetzt werden, wenn der Fehlercode zum ersten Mal registreiert wird.

Platzhalterersetzt durchBeispiel
${channel}Kanalname der MessagesomeChannelName
${unit}Physikalische Einheit des Kanals°C
${value}8Der aktuelle Datenwert des Kanals3.14159
${date}Das Datum des Ereignisses, YYYY-MM-DD2026-12-31
${time}Die Uhrzeit des Ereignisses, hh:mm:ss18:05:27
${errorCode}9Der auslösende FehlercodeERR:243:881
${errorLevel}9Der auslösende Fehler-Level8
${boundary}10
${raiseBoundary}10
Eingestellter Grenzwert zur Aktivierung threshold10.0
${releaseBoundary}10Grenzwert zur Deaktivierung threshold ±\pm hysteresis8.5
${minmax}10Letzter Extremwert seit Ereignis
oder falls nicht ermittelt:
17.9
(n.a.)
${minmaxDate}10Datum des Extremwerts
oder falls nicht zugewiesen:
2026-12-31
(n.a.)
${minmaxTime}10Uhrzeit des Extremwerts
oder falls nicht zugewiesen:
18:12:35
(n.a.)

Alle anderen und eventuell nicht verfügabre Platzhalter ${...} werden durch "(n.d.)" ersetzt.

Kanalwertüberwachung als Boolean

Die Überwachung als Boolean-Wert wird eingerichtet, wenn keine individuellen Parameter in dem Messages-Objekt hinzugefügt werden. Der Kanal liefert direkt die Werte true (HIGH) und false (LOW). Der Parameter activation bestimmt, mit welchem Pegel oder mit welcher Flanke die Meldung ausgelöst wird.

Kanalwertüberwachung als Double

Im Rahmen der numerischen Wertüberwachung eines smartCORE Kanals wird das Konfigurationsobjekt in messages durch die Parameter threshold oder hysteresis ergänzt. Der Parameter activation bestimmt, ob die Grenze threshold als Minimum oder Maximum zu lesen ist und demnach die hysteresis als Rückschaltung in den unkritischen Bereich unterhalb oder oberhalb der Grenze liegen muss.

ParameternameErforderlichDatentypsinnvoller WertebereichDefault-WertBeschreibung
threshold
boundary5
JAFLOAT0Schwellwert, dessen Überschreitung bzw. Unterschreitung zur initialen Erfüllung der Alarmbedingung führt
hysteresisJAFLOATlow, high, minimum, maximum0.5Zone unterhalb/oberhalb des Grenzwerts, in der der letzte Zustand beibehalten wird.
activationJASTRINGlow, high, minimum, maximumHIGHLegt fest, ob der Grenzwert als Minimum oder Maximum gelesen werden soll und ob ein Tracking des Extremwerts mit erneuter Signalisierung erfolgen soll.

Kanalwertüberwachung als Integer

Wird das Konfigurationsobjekt in messages durch mindestens einen der folgenden individuellen Parameter ergänzt, wird der zu überwachende Kanal als <integer> gelesen. Optional kann aus diesem Wert eine Bitgruppe mit einstellbarer Länge zur weiteren Verarbeitung extrahiert werden. Dieser Wert wird als Statuscode oder ENUM-Wert gefiltert und interpretiert:

ParameternameErforderlichDatentypsinnvoller WertebereichDefault-WertBeschreibung
bitPositionNeinINTEGER0..630Definiert eine Rechtsverschiebung des Integer-Werts vor der Analyse.
numberOfBitsNeinINTEGER1..64
0: keine Maskierung
0Maskiert entsprechend viele Bits aus dem Statuswort für die Analyse. Der maskierte Wert ist für numberOfBits <64\lt 64 vorzeichenlos. Falls numberOfBits == 1, erfolgt die weitere Verarbeitung des Bits als Boolean.
valuesWhiteNeinSTRING11(leer)Zulässige Wertebereiche für die Analyse, nicht enthaltene Werte werden ignoriert.
valuesBlackNeinSTRING11(leer)Nicht zulässige Wertebereiche für die Analyse, enthaltene Werte werden ignoriert.
valuesLowWAHLWEISESTRING11(leer)Spezifikation der Wertebereiche, die einer deaktivierten Alarmbedingung korrespondieren
valuesHighWAHLWEISESTRING11(leer)Spezifikation der Wertebereiche, die einer ausgelösten Alarmbedingung korrespondieren
activationJASTRINGhigh
enum
HIGHArt der Alarmaktivierung

Bevor die Werte des Kanals einer Auswertung zugeführt werden, können sie optional über die White- bzw. Black-Liste gefiltert werden. Es werden nur Werte verarbeitet, die in der valuesWhite Liste enthalten sind. Es werden alle Werte ingnoriert, die in der valuesBlack Liste ausgeschlossen werden.

Es können wahlweise eine bzw. beide der o.g. Wertebereichsspezifikationen valuesLow bzw. valuesHigh verwendet werden. Wird lediglich eine Spezifikation verwendet, z.B. valuesHigh, werden alle anderen Werte automatisch dem Gegenteil zugeordnet, hier z.B. LOW. Werden hingegen beide Spezifikationen verwendet, so entsprechen die nicht abgedeckten Wertebereiche einer ungültigen Alarmbedingung. Hierfür kann eine ungültige Alarmmeldung mit dem Text messageFailure spezifiziert werden.

Kanalwertüberwachung als String

Wird das Konfigurationsobjekt in messages durch mindestens einen der folgenden individuellen Parameter ergänzt, wird der zu überwachende Kanal als <string> (Text), z.B. als Logbucheintrag eines Subsystems, interpretiert:

ParameternameErforderlichDatentypsinnvoller WertebereichDefault-WertBeschreibung
regxWhiteNeinSTRING12(leer)Regulärer Ausdruck der zulässige Texte und Formatierungen prüft.
regxBlackNeinSTRING12(leer)Regulärer Ausdruck, der zu ignorierende Texte bestimmt.
regxLowWAHLWEISESTRING12(leer)Regulärer Ausdruck, der den Zustand LOW beschreibt
regxHighWAHLWEISESTRING12(leer)Regulärer Ausdruck, der den Zustand HIGH beschreibt
activationJASTRINGhigh
enum
HIGHArt der Alarmaktivierung

Bevor die Werte des Kanals einer Auswertung zugeführt werden, können sie optional über die White- bzw. Black-Ausdrücke gefiltert werden. Es werden nur Texte verarbeitet, die dem regxWhite Ausdruck entsprechen. Es werden alle Werte ingnoriert, die dem regxBlack Ausdruck entsprechen.

Wenn regxWhite Unterausdrücke (Terme in (...)) enthält, werden diese bei Übereinstimmung extrahiert und für alle nachfolgenden Analysen durch ';' miteinander verbunden. Dies vereinfacht die weitere Interpretation, da die Kern-Elemente bereits aus dem oft komplexen Kontext herausgelöst sind.

Beispiel:

"regxWhite": "Level:([A-Z]+),\\s+(.*)$"
"regxHigh" : "(ERROR|WARNING);"

Extrahiert aus einer Logbuch-Zeile:

2345987.3256346, abcDevice, Level:ERROR, Here some message!

die Elemente "ERROR" und "Here some message!". Die weitere Prüfung erfolgt für den Text "ERROR;Here some message!". regxHigh kann nun einfach auf die zwei zulässigen Fehlercodes prüfen.

Es können wahlweise eine bzw. beide der o.g. Ausdrücke regxLow bzw. regxHigh verwendet werden. Wird lediglich ein Ausdruck verwendet, z.B. regxHigh, werden alle anderen Werte automatisch dem Gegenteil zugeordnet, hier z.B. LOW. Werden hingegen beide Ausdrücke verwendet, so entsprechen die nicht abgedeckten Muster einer ungültigen Alarmbedingung. Hierfür kann eine ungültige Alarmmeldung mit dem Text messageFailure spezifiziert werden.

Überwachung von Fehlercodes: ErrorCode

Geräte, die Anlagen oder Anlagenteile steuern, können ihre Fehlerzustände in verschiedenen Formen nach außen kommunizieren:

  1. In Form von einzelnen Codes die jeweils mit dem Status "Kommt" oder "Geht" kombiniert sind

  2. In Form vollständig übertragener Fehler-Code-Tabellen (Fehlerspeicher) der noch anstehenden Codes. Hier ist durch Beobachtung zu ermitteln, welche einzelnen Codes "kommen" (neu hinzugekommen sind) oder "gehen" (nicht mehr enthalten sind). Die Übertragung der Tabelle wird durch ein Steuersignal angezeigt oder durch einen Timeout nach dem letzten Fehlercode abgeschlossen.

Das Beispiel im folgenden Diagramm zeigt dies für die Fehlercodes 17, 42, B7 und E8. Für maximal mögliche Flexibilität werden die Codes auf dem Kanal sourceErrorCodes immer als <string> gelesen und verarbeitet.

Beispiel für Fehlercodes

Das Diagnostics-Modul liest zentral die Kanäle

  1. sourceErrorCode und sourceErrorLevel, um einen Error-Stream zu interpretieren oder

  2. sourceErrrorCode und sourceBufferTransfer, um die Übertragung von Fehler-Code-Tabellen zu verfolgen.

important

Für diese Kanäle dürfen keine Datenreduktions-Filter an der Quelle konfiguriert werden. Die Zeitstempel spielen zur Lokalisierung und Synchronisation der Daten eine entscheidende Rolle!

Grundsätzlich ist der Zeitstempel des Fehler-Codes im Kanal sourceErrorCode für die Interpretation ausschlaggebend. Der Kanal sourceErrorLevel muss mit exakt identischen Zeitstempeln den zugehörenden Level liefern. Er wird als <integer> gelesen und gegen den neutralErrorLevel ("geht") verglichen, um den Aktivierungszustand zu bestimmen.

Der Pegel des Kanals sourceBufferTransfer muss spätestens mit dem ersten Fehler-Code einer Tabelle auf true wechseln und muss nach dem letzten Code der Tabelle wieder auf false zurück fallen. Die Übertragungsrate oder Reihenfolge der Fehler-Codes spielt keine Rolle. Alternativ zum Steuerkanal kann auch ein Zeitintervall timeoutBufferTransfer verwendet werden. Die die Übertragung der Tabelle wird als vollständig angesehen, wenn in diesem Intervall nach dem vermeintlich letzten ErrorCode keine weiteren ErrorCodes eintreffen.

Wird das Konfigurationsobjekt in messages durch mindestens einen der folgenden individuellen Parameter ergänzt, greifen die entsprechenden "messages" auf diese Fehlercodes in der Reihenfolge der Definition zu. Dabei kann ein bestimmter Fehler-Code beobachtet und gemeldet werden oder als Template eine Gruppe von Codes oder schlicht sämtliche (verbleibende) Codes. Für jeden individuellen Code wird automatisch eine eigene Alarm-Meldung angelegt, die den Kommt/Geht-Zustand nachführt. Text-Bausteine können verwendet werden, um den Kontext initial und Meldungstexte dynamisch zu konfigurieren.

ParameternameErforderlichDatentypsinnvoller WertebereichDefault-WertBeschreibung
errorCodeWAHLWEISESTRING(leer)Fehlercode, der von dieser Überwachungseinheit überwacht wird, ggf. als WildMask-Text, falls isTemplate gesetzt ist.
(leer) entspricht "*"
isTemplateWAHLWEISEBOOLEANfalse, truefalseWird gesetzt, wenn dieser Message-Eintrag automatisch für passende Error-Codes dynamisch Meldungseinträge generieren soll.

Modul-Informationen

InformationWert
AutorenoptiMEAS GmbH
seit smartCORE2.6
ModultypConsumer
AbhängigkeitenKEINE

Footnotes

  1. Vor smartCORE 2.10.1 wurde activationMode verwendet, um zwischen Kanalüberwachung und Error-Stream-Betriebsart umzuschalten. Dies ist ab 2.10.1 nicht mehr notwendig, der Parameter wird ignoriert.

  2. Um die Error-Stream Funktion zu nutzen, sind diese Parameter zwingend anzugeben. 2 3

  3. Um die Error-Table Funktion zu nutzen, sind diese Parameter zwingend anzugeben. 2 3

  4. Vor smartCORE 2.10.1 wurde neutraErrorCode verwendet, obwohl sich der Wert auf den ErrorLevel-Kanal bezieht. Der Parameter wird zwar noch eingelesen, sollte aber nicht mehr verwendet werden.

  5. An vielen Stellen wird "threshold" als Grenzwert verwendet, so jetzt auch hier. Der Parameter boundary wird für threshold noch eingelesen, sollte aber nicht mehr verwendet werden. 2

  6. Wenn die Message in der Betriebsart Error-Stream oder Error-Table konfiguriert wird, wird die interne Datenquelle im Diagnostics Modul verwendet und der Kanal ignoriert.

  7. Es wird eine Alarm-Meldung generiert, die nur den Ereigniszeitpunkt enthält - kein "Kommt"/"Geht". 2

  8. Im Falle von Integer-Meldungen ist dies ggf. der aus dem eigentlichen Kanalwert extrahierte bit-Bereich. Im Falle von String ist dies ggf. der zusammengestze Text aus Unterausdrücken.

  9. nur in Verbindung mit ErrorCode 2

  10. nur in Verbindung mit Double 2 3 4 5 6

  11. Enthält als String eine durch Komma separierte Liste von einzelnen <integer>-Werten oder Wertebereiche der Form <integer> - <integer>. Leerzeichen werden ignoriert, Vorzeichen sind zulässig. Beispiel: "-100, -20 - -5, 12 - 34,47,55-57" 2 3 4

  12. Hier wird ein Regular Expression (PCRE) erwartet, dessen Steuerzeichen korrekt escaped werden müssen. Die Ausdrücke werden ohne Unterscheidung von Groß-/Kleinschreibung angewendet (case insensitive). 2 3 4