Betrieb virtueller Tags
Übersicht
Ein virtueller Tag ist ein Tag, der durch die Berechnung anderer Tag-Werte erstellt wird. Was er ist und wie er erstellt wird, ist im Benutzerhandbuch unter Virtuelle Tags beschrieben. Diese Seite behandelt ausschließlich das, was Administratoren wissen müssen: Wo die Berechnung läuft, wann sie bereitgestellt wird, wo Fehler protokolliert werden und was die Performance beeinflusst.
Eine Berechnung = Ein CEP-Statement
Das EQL, das in den Berechnung-Tab eines Tags eingegeben wird, wird als ein Statement in CEP bereitgestellt.
| Element | Wert |
|---|---|
| Statement-ID | CALCULATION_ + Tag-ID (z. B. CALCULATION_TAG_V_FILTER_DP) |
| Ein-/Ausschaltwert | use_calculation des Tags — Anwenden im Berechnungs-Tab |
| Ziel der Ergebnisse | Eine Ergebniszeile wird zu einem Datenpunkt dieses Tags und fließt in die gleiche Pipeline wie die Erfassungswerte — Speicherung, Alarme und andere Berechnungen lesen ihn wie einen normalen Tag |
| Ergebnisverarbeitung | Wenn das Statement ein Ergebnis liefert, wandelt ein asynchroner Worker dieses in einen Datenpunkt um und speist ihn in die Pipeline ein |
Das Berechnungsergebnis ist das einzige CEP-Ergebnis, dessen Wiedereintritt in CEP erlaubt ist. Andere CEP-Ergebnisse werden am CEP-Eingang nicht akzeptiert. Dadurch können virtuelle Tags als Quelle für andere virtuelle Tags dienen (Kaskadierung). Ob eine Berechnung sich selbst liest, wird bei der Speicherung nicht geprüft. Wenn ein Zyklus erstellt wird, liest das Statement seine eigene Ausgabe erneut.
Bereitstellungszeitpunkte
| Zeitpunkt | Aktion | Bei Fehler |
|---|---|---|
Speichern im Berechnungs-Tab · V5 PATCH /api/v5/tag/{tag_id}/calculation | Das Statement wird zuerst kompiliert, dann gespeichert; das alte Statement wird entfernt und das neue hochgeladen | Wenn die Kompilierung fehlschlägt, erfolgt keine Speicherung. Wenn gespeichert, aber die Bereitstellung fehlschlägt, ist die Antwort ein Fehler — ein nicht bereitgestelltes Statement wird nicht als Erfolg gemeldet |
| Serverstart | Alle Tags mit aktiviertem use_calculation werden gleichzeitig in 4er-Gruppen bereitgestellt | Dieser Tag wird übersprungen und die Bereitstellung der restlichen Tags wird fortgesetzt. Die Diagnose «Bereitstellung virtueller Tag fehlgeschlagen» wird aktiviert — siehe unten |
| Löschen eines Tags | Das Berechnungs-Statement des Tags wird entfernt und die Alarm-Einstellungen des Tags werden gelöscht | Selbst wenn ein Schritt fehlschlägt, werden der nächste Schritt und das Löschen aus der DB fortgesetzt |
| Löschen einer Verbindung | Die Berechnungen, Aggregationen und Alarme aller Tags dieser Verbindung (einschließlich virtueller Tags) werden entfernt und zusammen mit den Tags gelöscht | — |
Ablehnung der Speicherung — 422
Wenn ein Statement beim Speichern im Berechnungs-Tab nicht kompiliert werden kann, wird dies mit HTTP 422 abgelehnt, und die Ursache wird auf dem Bildschirm angezeigt.
| Ort | Inhalt |
|---|---|
| Informationsfeld direkt unter dem EQL-Editor | Titel «EQL konnte nicht gelesen werden», Positions-Chip «Zeile N Spalte M», Ursachen-Statement und Hinweis, eingeklappter Original-Engine-Text. Der Cursor springt an die Stelle (ohne Position nur das Statement ohne Chip). Es erscheint kein separates Toast-Fenster |
Statement des Servers (V5-Antwort detail) | «EQL-Kompilierung fehlgeschlagen (Zeile N Spalte M): …» — ohne Position: «EQL-Kompilierung fehlgeschlagen: …» |
| Erweiterungsfeld der V5-Antwort | reason = eql.compile, cause · compiler_message = aufbereitetes Compiler-Statement, engine_message = ursprüngliches Engine-Statement, line · col = 1-basierte Position |
Wenn CEP nicht gestartet ist und somit keine Prüfung erfolgen kann, erfolgt eine HTTP 503 Antwort und es erscheint ein Toast mit: «Verbindung zum CEP-Engine nicht möglich, EQL-Validierung fehlgeschlagen.» — Da dies kein Fehler im Statement ist, wird es nicht im Editor angezeigt. In den Serverlogs wird die Ablehnung als Tag calculation refused: tag_id=[…] und die Speicherung bei fehlender CEP-Verbindung als Tag calculation not saved - CEP could not check the EQL protokolliert.
Die gleiche Logik gilt für alle anderen Eingänge, die EQL empfangen.
| Eingang | Beispiele |
|---|---|
| Konsole | Tag-Berechnungs-Tab · Hinzufügen/Ändern von Asset-Statements · Plugin-Statements · Speichern von Alarm-Einstellungen · [EQL ausführen] Prüfung · Query-Ausführung |
| V5 | Tag-Formel · Asset-Statement · Alarm-Einstellungen · Query-Kompilierung/Ausführung |
Die Regel besagt, dass nicht validiertes EQL nicht in der DB gespeichert wird. Während eines CEP-Neustarts ist es normal, dass das Speichern im Berechnungs-Tab fehlschlägt; speichern Sie erneut, nachdem CEP gestartet ist.
Fehler bleiben in der Diagnose
Wenn eine Berechnung fehlschlägt, wird dies in der Diagnose in zwei Formen protokolliert.
| Code | Name · Typ · Schweregrad | Nachricht | Zeitpunkt |
|---|---|---|---|
diagnostic.tag.calculation_deploy_failed | Bereitstellung virtueller Tag fehlgeschlagen · Status · ERROR | Die Berechnung für Tag {target} konnte nicht angewendet werden({operation}): {error} | Wenn eine gespeicherte Formel beim Start oder bei der Neubereitstellung nicht in die Engine geladen werden konnte. Pro Tag ein Eintrag; verschwindet automatisch nach erfolgreicher Bereitstellung |
diagnostic.tag.calculation_listener_failing | Status · ERROR | Die Berechnung von Tag {target} schlägt fehl. | Wenn die Umwandlung eines Statement-Ergebnisses in einen Datenpunkt fehlschlägt. Verschwindet, wenn das nächste Ergebnis erfolgreich ist |
In {error} der Bereitstellung virtueller Tag fehlgeschlagen steht das von der Engine abgelehnte Statement, in den Diagnoseparametern line · col die Position. Das Detailpanel des Diagnosebildschirms enthält den Link «Bildschirm zur Korrektur öffnen», der direkt zum Einstellungsformular des Tags führt. Nach Korrektur und Speicherung im Berechnungs-Tab wird das Statement erneut bereitgestellt und die Diagnose gelöscht. Falls diagnostic.infra.component_unreachable(cep) gleichzeitig aktiv ist, muss zuerst CEP beheben werden.
Da unbereitgestelltes EQL nicht ausgeführt wird, gibt es für andere EQL-nutzende Funktionen pro Ziel jeweils einen eigenen Diagnoseeingrag.
| Code | Name | Ziel | Ziel von «Bildschirm zur Korrektur öffnen» |
|---|---|---|---|
diagnostic.tag.calculation_deploy_failed | Bereitstellung virtueller Tag fehlgeschlagen | Tag | Tag-Einstellungsformular |
diagnostic.tag.alarm_deploy_failed | Bereitstellung Tag-Alarm fehlgeschlagen | Alarm-Einstellungs-ID (Tag ist tag_id) | Alarm-Einstellungsformular |
diagnostic.asset.statement_deploy_failed | Bereitstellung Anlagen-Statement fehlgeschlagen | asset_id/statement_name | Statement-Tab des Assets |
Wenn in der Ergebniszeile einer der Werte timestamp · value · quality · error_code fehlt oder value leer ist, wird dies als Warnlog (kein Fehler) protokolliert und das Ergebnis verworfen. Wenn keine Werte für einen virtuellen Tag entstehen, die Diagnose aber keine Fehler zeigt, suchen Sie in den Serverlogs nach Calculated point validation failed.
Performance
| Aspekt | Grund |
|---|---|
| Anzahl virtueller Tags = Anzahl CEP-Statements | Für jeden virtuellen Tag läuft ein zusätzliches Statement. Vermeiden Sie es, dass dieselben Werte in mehreren virtuellen Tags separat berechnet werden |
| Kleine Zeitfenster für Quellen | Wenn zwei oder mehr Quellen kombiniert werden, entstehen Kombinationen der Werte innerhalb des Fensters. win:length(1) nutzt nur jeweils den neuesten Wert, was zu einer einzigen Kombination führt. Bei großen Zeitfenstern steigt die Anzahl der Kombinationen multiplikativ an |
OUTPUT LAST EVERY n | Da bei jedem Wert einer Quelle neu berechnet wird, führt eine hohe Anzahl schneller Quellen zu häufigeren Ergebnissen. Dieser Abschnitt ist ein Limit, das pro Intervall nur das letzte Ergebnis ausgibt — da das Ergebnis ein gespeicherter Datenpunkt ist, reduziert dies auch das Speichervolumen |
| Startzeit | Beim Start werden Berechnungs-Statements in 4er-Gruppen bereitgestellt. Bei vielen virtuellen Tags kann es nach dem Start eine Weile dauern, bis alle Berechnungen laufen |
Grenzen
| Element | Inhalt |
|---|---|
| Obergrenze für Quell-Tags | Es gibt keine festgelegte Obergrenze im Produkt |
| Kaskadierung (Virtueller Tag eines virtuellen Tags) | Möglich |
| Zyklus- · Selbstreferenzprüfung | Nicht vorhanden — wird bei der Speicherung nicht erkannt |
| Länge der Formel | 4.000 Zeichen bei Eingabe über V5 API |
| Syntax | Es werden nur Statements bereitgestellt, die vom gestarteten CEP-Backend akzeptiert werden — CEP — Backends |
Konfigurationsschlüssel
Es gibt keine spezifischen Konfigurationsschlüssel nur für die Berechnung virtueller Tags. Welches Engine das Statement ausführt, wird durch cep.backend von CEP bestimmt (CEP — Backends).
Verwandte Dokumente
- Virtuelle Tags — Benutzerhandbuch: Erstellung · Beispiele · Alarme
- Diagnose — Ort der Protokollierung von Berechnungsfehlern
- Performance-Optimierung
- CEP — Grenzen und Ablehnungs-Token