Zum Hauptinhalt springen

Virtuelle Tags

Übersicht​

Ein virtueller Tag ist kein Tag, der direkt von einem Sensor oder einer PLC gelesen wird. Es ist ein neuer Tag, der durch die Berechnung von Werten mehrerer anderer Tags erstellt wird. In Anlagen gibt es oft Werte, die «nicht gemessen, aber sichtbar sein sollen», wie etwa die Differenz zweier Drücke (Differenzdruck), die Summe der Anlagenleistung oder der Durchschnitt mehrerer Sensoren. Wenn diese als virtuelle Tags angelegt werden, werden die Werte wie bei normalen Tags gespeichert, in Ansichten dargestellt und es können Alarme dafür konfiguriert werden.

Ein virtueller Tag besteht aus zwei Teilen:

ElementWoFunktion
Der Tag selbstVerbindung bearbeiten → Liste verbundener Tags → [Virtueller Tag]Registrierung von Tag-ID, Name und Datentyp
FormelTag-Konfigurationsformular → Tab BerechnungEQL-Statement, das Quell-Tags liest und den Wert generiert

Ohne eine Formel erhält ein virtueller Tag keinen Wert (ausgenommen sind virtuelle Datenpunkte, die manuell eingegeben werden).


Anwendungsbereiche​

VerwendungszweckBeispielKern der Formel
Differenz zweier TagsDifferenzdruck = Einlassdruck − Auslassdruck, Abweichung = Sollwert − Istwertto_double(a.value) - to_double(b.value)
SummeGesamtleistung = Summe der Anlagenleistungto_double(a.value) + to_double(b.value) + to_double(c.value)
DurchschnittDurchschnittstemperatur mehrerer Sensoren(to_double(a.value) + to_double(b.value)) / 2
Maximum · MinimumHöchste Temperatur unter mehreren SensorenCASE WHEN to_double(a.value) >= to_double(b.value) THEN a.value ELSE b.value END
VerhältnisProduktionsmenge im Verhältnis zur Rohstoffeinspeisungto_double(a.value) / to_double(b.value)
Zeitdurchschnitt eines TagsDurchschnitt der letzten 10 SekundenAVG(TO_DOUBLE(value)) und Zeitfenster — Beispiele in der Hilfe des Berechnungs-Tabs

Spezialfunktionen zur Auswahl des Maximalwerts aus mehreren Tags (wie greatest) gibt es nicht in der EQL-Funktionsliste. Für Maxima und Minima wird wie oben CASE verwendet.


Funktionsweise​

Das im Berechnungs-Tab eingegebene EQL wird im Moment der Speicherung als Statement an den CEP verteilt. Sobald ein neuer Wert in einem Quell-Tag eingeht, generiert das Statement eine Ergebniszeile. Diese Zeile wird zum Wert (Datenpunkt) des virtuellen Tags und fließt durch die gleiche Pipeline wie erfasste Werte. Daher werden Werte virtueller Tags identisch zu normalen Tags gespeichert, über Stream- und Trendansichten sowie APIs gelesen und können von Alarmen oder anderen Formeln verwendet werden.

PunktBei virtuellen Tags
SpeicherungSpeicherung über denselben Pfad wie normale Tags. Einsehbar über Trend, Stream und API
DatentypFolgt dem bei der Registrierung gewählten Datentyp
EinheitIm Registrierungsdialog gibt es kein Feld, daher bleibt es leer. Die Eingabe erfolgt im Tab Tag-Attribute des Konfigurationsformulars
AktualisierungszeitpunktSobald ein neuer Wert in der Quelle eingeht. Es handelt sich nicht um eine zyklische Berechnung
AktualisierungsrateWird durch das Statement bestimmt. Mit OUTPUT LAST EVERY 1 SEC wird maximal ein Wert pro Sekunde ausgegeben
Qualität (quality)Die Qualität der Quelle wird nicht automatisch übertragen. Es wird der Wert übernommen, der im Feld quality steht (im Beispiel 192 = GOOD)
Bei Verbindungsabbruch der QuelleEs entstehen keine neuen Werte. Es wird nicht mit «0» aufgefüllt — es bleibt leer nach dem letzten Wert
Bei leerem ErgebniswertDas Ergebnis wird verworfen und es wird kein Datenpunkt erstellt
AlarmKann genau wie normale Tags Ziel von Alarmbändern oder EQL-Alarmen sein
Übertragung der Quellqualität

a.quality und b.quality sind Integer-Felder und können im Statement direkt gelesen werden. Um quality je nach Quellqualität unterschiedlich zu setzen, muss diese Logik direkt in das Statement eingebaut werden — die Platform berechnet dies nicht automatisch.


Erstellung​

1. Registrierung des virtuellen Tags​

Ein virtueller Tag gehört zu einer Verbindung. Daher befindet sich die Registrierungsschaltfläche im Verbindungsbildschirm.

  1. Öffnen Sie in der Verwaltung der Verbindungen die Verbindung, der der virtuelle Tag zugeordnet sein soll, und rufen Sie den Bearbeitungsmodus auf. Es ist sinnvoll, ihn der Verbindung zuzuordnen, über die die Quell-Tags eingehen.
  2. Klicken Sie im Panel Liste verbundener Tags unten im Formular auf die Schaltfläche [Virtueller Tag] (Tooltip «Virtuellen Tag hinzufügen»).

Liste verbundener Tags im Bearbeitungsmodus der Verbindung — Nummern in Lesereihenfolge

NummerPositionFunktion
①Panel-KopfListe verbundener Tags — «Tags, die aktuell dieser Verbindung zugeordnet sind». Wird nur im Bearbeitungsmodus einer gespeicherten Verbindung gefüllt
②Rechts im Panel-Kopf[Virtueller Tag] — Öffnet den untenstehenden Dialog Virtuellen Tag hinzufügen
③HauptbereichListe der Tags dieser Verbindung — Tag-ID, Tag-Name, Datentyp, Einheit, Beschreibung
  1. Geben Sie im Dialog Virtuellen Tag hinzufügen die folgenden Informationen ein und klicken Sie auf Speichern.

Dialog Virtuellen Tag hinzufügen — Nummern in Lesereihenfolge

NummerFeldRegel
①Hinweis«Registrierung eines virtuellen Tags. Die Tag-ID muss zwingend mit TAG_ beginnen. Nach Auswahl des Datentyps wird die Eingabe bei virtuellen Datenpunkten in diesem Format validiert.»
②Tag-IDErforderlich. Beginn mit TAG_, nur Großbuchstaben, Ziffern und _, 5~30 Zeichen. Virtuelle Tags werden konventionell mit TAG_V_ benannt — ID-Regeln
③Tag-NameErforderlich. Platzhalter: «Beschreibende Bezeichnung»
④DatentypString · Short · Integer · Long · Float · Double · Boolean · Date. Standardwert: String
⑤BeschreibungErforderlich. Platzhalter: «Verwendungszweck dieses Tags angeben» — wird bei Leeren nicht gespeichert
⑥Unten rechts[Speichern]
Der Standardwert für den Datentyp ist String

Der Dialog öffnet sich mit der Auswahl String. Wenn der virtuelle Tag Zahlen berechnet, ändern Sie dies in Double. Da Alarmbänder nur für numerische und boolesche Tags konfiguriert werden können, wäre bei einer Einstellung auf String später keine Band-Alarmierung möglich.

Erstellung im Registrierungsbildschirm für neue Verbindungen nicht möglich

Die Liste verbundener Tags wird nur im Bearbeitungsmodus einer bereits gespeicherten Verbindung angezeigt (Verbindungsmanagement). Da virtuelle Tags die ID der Verbindung mit speichern, wird die Registrierung bei noch nicht gespeicherten Verbindungen abgelehnt.

Löschen der Verbindung löscht auch virtuelle Tags

Wenn eine Verbindung gelöscht wird, werden alle zugehörigen Tags, einschließlich virtueller Tags, gelöscht. Zugehörige Alarmkonfigurationen und Formeln werden ebenfalls entfernt. Beachten Sie dies, falls Sie einen virtuellen Tag einer anderen Verbindung als der der Quell-Tags zugeordnet haben.

2. Eingabe der Formel​

  1. Öffnen Sie im Tag-Bildschirm das Konfigurationsformular des soeben erstellten Tags.
  2. Geben Sie im Tab Berechnung im Feld EQL das Statement ein.
  3. Setzen Sie im Bereich Deployment desselben Tabs den Anwendungsstatus auf Aktiv.
  4. Klicken Sie auf Speichern für diesen Tab — Tabs werden separat gespeichert (Tag-Registrierungs-/Bearbeitungsformular).

Berechnungs-Tab des Tag-Konfigurationsformulars — Nummern in Lesereihenfolge

NummerPositionFunktion
①Hilfe zur EQL-Berechnung«Erzeugt automatisch berechnete Datenpunkte für den Tag mittels EQL.» sowie Beispiel-Statements
②EQLFormeleditor. Bei Ablehnung der Speicherung wird die Ursache im Kasten direkt unter diesem Feld angezeigt — siehe unten
③Deployment → AnwendungsstatusMuss auf Aktiv stehen, um verteilt zu werden
④Unten rechts[Speichern] — Speichert nur diesen Tab

Die Formel muss folgenden Regeln entsprechen:

RegelGrund
Das Ergebnis muss die vier Felder timestamp · value · quality · error_code liefernFehlt eines dieser Felder oder ist value leer, wird das Ergebnis verworfen
Quellwerte müssen mittels to_double(…) umgewandelt werdenTag-Werte (value) fließen als Strings. Sie dürfen nicht direkt addiert oder subtrahiert werden
Jedem Quell-Tag muss in Point(tag_id = '…').win:length(1) ein Alias (a, b …) zugewiesen werdenSo werden die jeweils aktuellsten Werte der Tags für die Berechnung gepaart
Es muss ein vollständiges SELECT Statement verwendet werden, nicht nur eine ZeileDer CEP kompiliert das Statement beim Speichervorgang

Bei Ablehnung der Speicherung​

Beim Speichern wird das Statement kompiliert. Bei Fehlern wird die Speicherung verweigert (HTTP 422). Die Ursache wird direkt auf dem Bildschirm angezeigt.

Unter dem Feld ② EQL erscheint ein roter Hinweiskasten «EQL cannot be read». Diese Ablehnung wird nicht als separater Toast angezeigt.

Inhalt des KastensBeschreibung
Positions-Chip«Zeile N, Spalte M». Der Cursor springt an diese Position; ein Klick auf den Chip führt erneut dorthin. Im Editor wird diese Stelle markiert
TextStatement des Compilers (Ursache) und Korrekturhinweis
Original-Engine-Text anzeigenEingeklapptes Originalstatement der Engine

Falls der Compiler keine Position nennt, erscheint nur der Text ohne Chip. Die Markierung verschwindet, sobald das Statement korrigiert wurde.

Die Speicherung wird ebenfalls verweigert, wenn der CEP nicht gestartet ist und somit keine Prüfung erfolgen kann — nicht geprüfte Statements werden nicht gespeichert. In diesem Fall liegt kein Fehler im Statement vor, im Editor wird nichts angezeigt, sondern es erscheint ein Toast: «Could not verify EQL because connection to CEP engine failed.» (HTTP 503). Versuchen Sie die Speicherung erneut, nachdem der CEP gestartet ist. Andere Bereiche, in denen EQL gespeichert oder geprüft wird (z. B. Statements, Alarmkonfigurationen, Abfrageausführungen), lehnen Eingaben in derselben Weise ab (Ursachentext sowie Zeile und Spalte) (Betrieb virtueller Tags).

Die allgemeine Syntax finden Sie unter EQL und CEP — EQL Language.

3. Prüfung der Werterfassung​

Wählen Sie im Stream-Bildschirm den virtuellen Tag aus und prüfen Sie, ob Werte fließen. Damit der virtuelle Tag Werte generiert, müssen in den Quell-Tags aktuelle Daten eingehen.

Werte ohne Formel eingeben — virtuelle Datenpunkte​

Die Schaltfläche [Virtueller Datenpunkt] im Stream-Bildschirm öffnet einen Dialog, mit dem Zeitstempel und Wert manuell für einen Tag eingegeben werden können. Die Zeit wird im ISO 8601-Format (2024-01-15T17:10:15.123Z) eingegeben. Dies dient zum Testen von Ansichten oder Alarmen, bevor eine Formel existiert.


Beispiel — Filterdifferenzdruck​

Beispiel zur Erstellung eines Differenzdrucks aus zwei Druck-Tags vor und hinter einem Filter. Die Tag-IDs dienen nur zur Veranschaulichung.

TagID (Beispiel)Bemerkung
Filter-EinlassdruckTAG_PT_FILTER_INQuelle
Filter-AuslassdruckTAG_PT_FILTER_OUTQuelle
Filter-DifferenzdruckTAG_V_FILTER_DPVirtueller Tag · Datentyp Double · Einheit bar

EQL im Berechnungs-Tab:

SELECT current_timestamp() AS timestamp,
to_double(a.value) - to_double(b.value) AS value,
192 AS quality,
0 AS error_code
FROM Point(tag_id = 'TAG_PT_FILTER_IN').win:length(1) a,
Point(tag_id = 'TAG_PT_FILTER_OUT').win:length(1) b
OUTPUT LAST EVERY 1 SEC
TeilBedeutung
win:length(1) a, win:length(1) bPaart den jeweils aktuellsten Einzelwert von Einlass und Auslass
to_double(a.value) - to_double(b.value)Differenzdruck = Einlass − Auslass
192 AS qualityDeklariert die Ergebnisqualität als GOOD (Quellqualität wird nicht übernommen)
OUTPUT LAST EVERY 1 SECBerechnet bei Eintreffen eines Wertes an einer der beiden Quellen neu, gibt jedoch maximal einmal pro Sekunde einen Wert aus

Analog dazu führt die Änderung von - zu + zur Summe und / zum Verhältnis. Bei drei oder mehr Quellen werden c, d usw. in derselben Weise angehängt.


Alarme: «Eine Einstellung = Ein Tag»​

Alarmkonfigurationen — ob Band-Alarme oder EQL-Alarme — werden immer auf einen einzelnen Tag angewendet.

AlarmBindung an einen einzelnen Tag
Band-AlarmTab Alarmband im Tag-Konfigurationsformular — setzt Schwellenwerte für den Wert des Tags selbst. Ein Alarm pro Tag
EQL-AlarmDer Ziel-Tag im Alarmkonfigurationsformular ist erforderlich — der Alarm wird als Alarm dieses Tags aufgezeichnet

Um Alarme basierend auf Bedingungen aus mehreren Tags zu setzen, erstellen Sie zuerst einen virtuellen Tag für diese Kombination und konfigurieren den Alarm auf diesem virtuellen Tag. Berechnen Sie «Einlass − Auslass > 0,5» nicht innerhalb eines EQL-Alarms durch das Lesen zweier Tags, sondern erstellen Sie einen virtuellen Tag für den Differenzdruck und setzen Sie dort den Alarm «> 0,5». Dadurch wird der kombinierte Wert selbst gespeichert und im Trend sichtbar, und im Alarm wird genau festgehalten, aufgrund welches Wertes der Alarm ausgelöst wurde.

EQL-Alarme, die andere Tags lesen, werden bei Speicherung und Prüfung abgelehnt

Die Speicherung eines EQL-Alarm-Statements wird abgelehnt, wenn das Statement Tags liest, die nicht der Ziel-Tag sind, mehrere Tags mischt oder keine Tag-Bedingung enthält (Fehlercode alarm.eql.one_tag, HTTP 422). Die Funktion [EQL ausführen] im Formular prüft nach denselben Regeln und lehnt die Eingabe sofort ab. Da es sich um eine Regelverletzung ohne spezifische Position handelt, erscheint im EQL-Editor ein orangefarbener Kasten mit folgendem Text:

EQL-Alarme lesen nur einen Tag — den Tag des Alarms. Mehrere Tags, fehlende Tag-Bedingungen oder Joins mit anderen Tags werden abgelehnt. Richten Sie pro Tag einen Alarm ein oder berechnen Sie Tag-Vergleiche (Differenzdruck, Abweichung) über einen virtuellen Tag und konfigurieren Sie den Alarm für diesen Tag.

Sollte ein bereits gespeicherter Alarm Zeilen anderer Tags generieren, werden Zeilen, die nicht dem Ziel-Tag entsprechen, bei der Beurteilung ignoriert und die Diagnose diagnostic.tag.alarm_foreign_tag_rows hinterlassen. Solche Alarme sollten auf virtuelle Tags übertragen werden.

Beispiel — Differenzdruck > 0,5 bar für 5 Minuten​

Konfiguration eines EQL-Alarms für TAG_V_FILTER_DP. Im Bildschirm Erweiterte Alarme unter Alarm-Einstellung hinzufügen → Ziel-Tag TAG_V_FILTER_DP, Condition (EQL) → EQL wie folgt:

SELECT timestamp, tag_id, tag_name, value, quality, error_code,
CASE WHEN to_double(value) > 0.5 THEN 'HIGH' ELSE 'NORMAL' END AS band
FROM Point(tag_id = 'TAG_V_FILTER_DP').win:length(1)
TeilBedeutung
CASE … END AS bandLiefert für jeden Wert ein Feld band. Bei 'HIGH' schaltet der Alarm ein, bei 'NORMAL' aus — ohne das Feld band und 'NORMAL' wird die Speicherung abgelehnt
Point(tag_id = 'TAG_V_FILTER_DP')Liest nur den einen Ziel-Tag. Die Kombination der beiden Drücke wurde bereits vom virtuellen Tag erledigt

Die 5-minütige Dauer wird nicht im Statement, sondern im Formular unter Erfassungseinstellungen (ISA-18.2) → Einschaltverzögerung durch Eingabe von 300000 (ms) konfiguriert — Hilfe: «Der Alarm löst aus, wenn die Bedingung für diese Zeit (ms) anhält. 0 deaktiviert die Funktion, maximal 3.600.000 ms (1 Stunde).»

  • Wiederholte Benachrichtigungen (Push) können über das Formular unter Unterdrückung redundanter Alarme → Unterdrückungszeit (Min.) reduziert werden.
  • Prüfen Sie die Eingabe vor dem Speichern mit [EQL ausführen] im Formular. Die Prüfung erfolgt nach denselben Regeln (ein Tag, Feld band, Kompilierung) — Alarm-Konfigurationsformular.
  • Für Fälle, in denen eine Meldung sofort nach Überschreitung ohne Zeitverzögerung erfolgen soll, ist kein EQL-Alarm erforderlich — hierfür können Schwellenwerte im Tab Alarmband des Differenzdruck-Tags eingetragen werden.

Grenzen und Hinweise​

PunktInhalt
Anzahl Quell-TagsEs gibt keine festgeschriebene Obergrenze im Produkt. Da jedoch für jede Quelle ein Zeitfenster erstellt wird, sollte dieses wie in win:length(1) klein gehalten werden — bei großen Zeitfenstern steigt die Anzahl der zu paarenden Kombinationen exponentiell an
Virtuelle Tags von virtuellen TagsMöglich. Da Berechnungsergebnisse wie normale Tag-Werte zurückfließen, können sie als Quelle für andere Formeln dienen
Selbstbezogene BerechnungenWerden beim Speichern nicht geprüft. Erstellen Sie keine Selbstbezüge oder Zyklen (z. B. A liest B, B liest A)
Länge der FormelBis zu 4.000 Zeichen bei Verwendung der V5 API
CEP BackendDie obigen Beispiele beziehen sich auf das Standard-Backend (Aster CEP). Bei Installationen mit anderen Backends prüfen Sie bitte die Tabelle in CEP — Backends
QuellqualitätWird nicht automatisch propagiert — siehe Funktionsweise

API und MCP​

PfadBei virtuellen Tags
V5 API — RegistrierungPOST /api/v5/tag — Identisch zur Registrierung normaler Tags. opc_id ist erforderlich, tag_id wird mit TAG_V_… benannt
V5 API — FormelPATCH /api/v5/tag/{tag_id}/calculation — calculation_eql und use_calculation (true/false). Nach dem Speichern wird die Formel erneut verteilt
V5 API — LesenGET /api/v5/tag/{tag_id}/config gibt calculation_eql · use_calculation zurück
MCPEs gibt keine speziellen MCP-Tools für virtuelle Tags. Da MCP-Tools Werte über die Tag-ID lesen, werden virtuelle Tags analog zu normalen Tags via list_latest_tag_values · get_tag_history gelesen. Es gibt keine MCP-Tools zum Erstellen oder Ändern von Formeln

SDK-Methoden finden Sie im Tag-Service.


Verwandte Dokumente​