Feature

SCADA ohne Symbolbibliothek

Eine HMI für ein Pumpwerk als ein einziges Custom Widget, das TagoAI aus einer Beschreibung geschrieben hat: was das Prozessbild zeigt, wie Befehle ins Feld gelangen und der Prompt zum Nachbauen.

Fabio Rosa ·
SCADA ohne Symbolbibliothek

Das Prozessbild unten zeigt ein Abwasserpumpwerk: einen Pumpensumpf, zwei Pumpen, einen Druckschieber, Durchfluss und Druck live, Bedienelemente mit Bestätigungsschritt, eine Alarmliste und einen Füllstandstrend. Das Ganze ist ein einziges Custom Widget auf einem TagoIO-Dashboard. TagoAI hat es aus einer schriftlichen Beschreibung geschrieben, und der ganze Aufbau samt dem Simulator, der es mit Daten speist, hat einen Nachmittag gedauert.

Pump Station PS-01, eine HMI im SCADA-Stil, dargestellt von einem einzigen TagoIO Custom Widget: der Pumpensumpf bei 69,3 % mit Sollwert- und Alarmlinien, Pumpe P-101 in Betrieb, P-102 gestoppt, Schieber V-101 offen, dazu die Bedienelemente, die Alarmliste und ein Füllstandstrend über vier Stunden.

Dieser Beitrag zeigt, was auf dem Prozessbild zu sehen ist, wie Daten und Befehle durch die Plattform laufen und wie Sie dasselbe in Ihrem eigenen Konto bauen. Den Prompt, mit dem wir bei TagoAI angefangen haben, finden Sie weiter unten: Starten Sie damit und setzen Sie Ihre eigenen Anlagenteile ein.

Warum TagoIO keine Symbolbibliothek hat

Prozessbilder in SCADA-Systemen entstehen seit Jahrzehnten auf dieselbe Weise: eine Symbolbibliothek (Tanks, Pumpen, Ventile), eine Zeichenfläche mit festen Koordinaten und ein Dialog zur Variablenanbindung pro Symbol. Die Bibliothek setzt die Obergrenze. Jedes Anlagenteil, das der Hersteller nicht gezeichnet hat, wird zur Entwicklungsaufgabe, meist SVG-Bearbeitung plus eine Skriptebene, die nur dieses eine Werkzeug versteht.

TagoIO hat nie eine Symbolbibliothek ausgeliefert, und wir haben das auch nicht vor. Ein Custom Widget kann eine React-Komponente sein, die von der Plattform gebündelt und gehostet wird, mit Hooks, die Live-Daten der Geräte liefern und Befehle zurückschreiben. Seit Juli 2026 schreibt TagoAI solche Komponenten aus einem Prompt, direkt in seinem Chat-Panel auf dem Dashboard. Aus dem R&I-Fließbild wird eine Beschreibung: “ein Pumpensumpf mit zwei Pumpen, einem Druckschieber und einem Druckmessumformer an der Drucksammelleitung”. Das Sonderaggregat, das nur Ihr Kunde betreibt, ist ein Satz mehr. Die Darstellung skaliert von selbst, weil sie SVG in einem einzigen Widget ist; ein Raster mit festen Spalten, das Sie pflegen müssten, gibt es nicht.

Der Tausch ist klar. Sie bekommen keine 100 Symbole zum Herumziehen. Sie bekommen ein Prozessbild, das eigens für Ihre Anlage gezeichnet ist, im Stil, den Ihre Bediener erwarten, und Sie ändern es, indem Sie die Änderung beschreiben.

Was das Prozessbild zeigt

Die Darstellung folgt der Praxis der High-Performance-HMI: neutraler Hintergrund, graue Anlagenteile, Farbe nur für Zustände. Cyan steht für Flüssigkeit, Durchfluss, einen offenen Schieber oder einen laufenden Motor. Gelb und Rot bleiben Alarmen, Alarmgrenzen und Warnungen vorbehalten, damit sich ein Problem von allem anderen auf dem Prozessbild abhebt.

Pumpensumpf. Der Füllstand erscheint als Füllung mit einer kleinen Welle an der Oberfläche. Gestrichelte Linien markieren den Sollwert (SP) und die obere und untere Alarmgrenze (HH, LL). Die große Zahl ist der Wert der Füllstandsmessung LT-101.

Pumpen P-101 und P-102. Das Laufrad dreht sich, solange die Pumpe läuft, und die Beschriftung zeigt den Motorstrom. Bei einer Störung wird die Pumpe rot und bekommt einen pulsierenden Ring, und statt der Buttons Start und Stop erscheint Reset fault.

Schieber V-101 und Drucksammelleitung. Eine laufende Pumpe animiert ihre eigenen Leitungen, die Drucksammelleitung dagegen nur, solange der Schieber offen ist. Stoppen Sie beide Pumpen, und die Drucksammelleitung steht still. PT-101 zeigt den Förderdruck, FT-102 den Abfluss, und bei einem Druck über 5,5 bar wird die Messstelle gelb.

Bedienelemente. Start und Stop je Pumpe, Open und Close für den Schieber und Plus-/Minus-Tasten für den Sollwert. Jeder Befehl verlangt eine Bestätigung, und ein Pumpen- oder Schieberbefehl zeigt danach PENDING, bis das Feld den neuen Zustand zurückmeldet oder 20 Sekunden vergangen sind. Solange das Pumpwerk auf AUTO steht, sind Befehle an Pumpen und Schieber gesperrt; der Sollwert bleibt einstellbar.

Alarme und Trend. Aktive Alarme werden aus den Live-Werten abgeleitet: Füllstand über HH, Füllstand unter LL, eine Pumpe, die gegen einen geschlossenen Schieber läuft, eine Antriebsstörung oder 30 Minuten ohne Daten. Darunter steht der Alarmverlauf mit Quittierstatus, und ein einziger Acknowledge-Button im Kopf des Alarmpanels quittiert alle Einträge auf einmal. Der Trend zeigt den Füllstand der letzten vier Stunden mit denselben Referenzlinien SP, HH und LL.

Kopfzeile. Der Umschalter AUTO/MANUAL, eine Live-Anzeige mit dem Alter des neuesten Datensatzes, den das Widget empfangen hat, und ein Alarmzähler, der blinkt, solange ein Alarm mit hoher Priorität aktiv ist.

So funktioniert es

Alles auf dem Prozessbild ist eine Gerätevariable, und jeder Befehl ist ein Datensatz auf dem Gerät. Das Widget verlässt sich nie auf den eigenen Klick auf eine Pumpe oder einen Schieber: Es markiert das Anlagenteil als PENDING und wartet, bis das Feld den Zustand zurückmeldet.

Der Datenpfad der HMI: Die SPS oder RTU meldet ihren Zustand über ein Gateway an das Gerät Pump Station 01, und das Widget liest ihn live; ein Bedienbefehl wird zu einem Datensatz auf dem Gerät, der die Analysis Pump Station Controller startet, und diese schickt den Steuerbefehl zurück an die SPS.

Das Gerät Pump Station 01 enthält jeden Wert des Prozessbilds: wet_well_level mit Sollwert und Grenzwerten, inflow, outflow, discharge_pressure, Zustand, Strom und Betriebsstunden jeder Pumpe, valve_state, station_mode sowie die Alarmereignisse und Quittierungen. Das Widget liest diese Variablen, so wie sie in seinen Datenquellen gebunden sind, mit dem Hook useRealtimeData aus dem TagoIO Custom Widget SDK. Beim Laden erhält es die neuesten gespeicherten Datensätze, bis zu dem Limit an Datensätzen, das am Widget eingestellt ist, und danach jeden neuen Datensatz, sobald er eintrifft. Trend, aktive Alarme und PENDING-Markierungen entstehen so alle aus einem einzigen Datenstrom.

Befehle laufen in die Gegenrichtung. Bestätigt der Bediener Start für P-102, ruft das Widget sendData aus dem Hook useSendData mit { variable: "pump_2_cmd", value: "start" } auf. Das Dashboard schreibt diesen Datensatz auf das Gerät und startet die Analysis Pump Station Controller mit dem Datensatz als Scope, weil das Widget so eingestellt ist, dass es beim Senden von Daten eine Analysis ausführt. In der Analysis steckt der eigentliche Steuerbefehl ans Feld: ein MQTT-Publish, ein LoRaWAN-Downlink, ein TagoTiP-Befehl über MQTT oder ein HTTP-Aufruf an ein Gateway. In der Demo simuliert sie außerdem die Reaktion des Prozesses, sodass sich der Füllstand bewegt und die Pumpen ohne Hardware ihren Zustand wechseln.

Alarme nutzen dieselben Datensätze. Bei jedem Lauf schreibt die Analysis ein Alarmereignis für jede Bedingung, die seit ihrem letzten Lauf eingetreten ist; der Alarm für veraltete Daten bleibt im Widget. Das Widget leitet die Liste der aktiven Alarme aus den Live-Werten ab und markiert Einträge im Verlauf als quittiert, wenn ein alarm_ack-Datensatz neuer ist als das Ereignis.

Selbst nachbauen

Sie brauchen ein TagoIO-Konto, in dessen Profil TagoAI aktiviert ist (Profile Settings, Services, AI Provider), und etwa eine Stunde. Für den ersten Durchlauf ist keine Hardware nötig; die Analysis simuliert das Pumpwerk.

  1. Das Gerät anlegen. Nehmen Sie für ein simuliertes Pumpwerk Custom HTTPS: Das braucht keine Seriennummer, und der Parser lässt Ihre Datensätze so, wie Sie sie senden. Wählen Sie als Speichertyp Mutable, damit Sie Werte später von Hand ändern können. Senden Sie erste Datensätze mit den Variablennamen, die dieser Aufbau verwendet: wet_well_level, level_setpoint, level_high_alarm, level_low_alarm, inflow, outflow, discharge_pressure, pump_1_state, pump_1_speed, pump_1_current, pump_1_runtime, dieselben vier für Pumpe 2, valve_state, station_mode, alarm, alarm_ack und alarm_state. Ein paar Dutzend wet_well_level-Punkte, verteilt über die letzten Stunden, geben dem Trend etwas zu zeichnen.
  2. Ein Dashboard vom Typ Normal anlegen und das TagoAI-Panel öffnen. Fügen Sie den Prompt unten ein, tragen Sie den Namen Ihres Geräts ein und senden Sie die Nachricht ab. TagoAI legt das Custom Widget an, schreibt den Code und richtet die Datenquellen des Widgets ein. Verfeinern Sie im Chat: “mach die Pumpen größer”, “setz die Alarme über den Trend”, “nimm unsere Tag-Namen”.
  3. Die Datenbindung prüfen. Öffnen Sie die Widget-Einstellungen und prüfen Sie, ob die Datenquellen jede Variable enthalten, die das Prozessbild liest, und jeden Befehl, den es schreibt (pump_1_cmd, pump_2_cmd, pump_1_reset, pump_2_reset, valve_cmd, level_setpoint, station_mode, alarm_ack), und ob sie genug Datensätze laden, um den Trend über vier Stunden zu füllen. Eine Variable, die nicht gebunden ist, wird beim Senden stillschweigend verworfen.
  4. Die Analysis für die Steuerung anlegen. Wählen Sie Deno oder Node als Runtime und hinterlegen Sie das Device-Token als Umgebungsvariable. Lesen Sie den letzten Wert jeder Zustandsvariable, wenden Sie die Befehle an, die im Scope angekommen sind, senden Sie den Steuerbefehl ins Feld und schreiben Sie den neuen Zustand zurück. Tragen Sie diese Analysis im Widget unter der Option “Run analysis when sending data” ein. Für eine Demo ergänzen Sie einen Simulationsschritt, damit der Füllstand auf die Pumpen reagiert.
  5. Ein Widget vom Typ Input Control ergänzen. Setzen Sie es unter die HMI, mit Textfeldern für die Prozessvariablen. Wer fault in pump_1_state oder 90 in wet_well_level eintippt, testet die Zustände der Anlagenteile und die Alarme auf dem Prozessbild am schnellsten.
  6. Das Widget dimensionieren. Volle Breite und etwa 800 px Höhe, Background auf transparent, Disable shadow eingeschaltet und Header visibility auf Show only buttons. Ein Button im Widget-Header, der die Analysis mit leerem Scope startet, schaltet die Simulation bequem einen Schritt weiter.

Der Prompt, mit dem wir angefangen haben, bereit zum Anpassen:

Erstelle eine HMI im SCADA-Stil für ein Abwasserpumpwerk als ein einziges Widget über die ganze Fläche, für das Gerät Pump Station 01. Dunkler High-Performance-HMI-Stil: neutraler Hintergrund, graue Anlagenteile, Farbe nur für Zustände und Alarme.

Zeichne ein SVG-Prozessbild: einen Pumpensumpf, der wet_well_level als gefüllte Fläche zeigt, mit einer Sollwertlinie (level_setpoint) und Alarmlinien oben und unten (level_high_alarm, level_low_alarm); eine Zulaufleitung mit inflow; zwei Kreiselpumpen P-101 und P-102, deren Zustand aus pump_1_state und pump_2_state kommt (running, stopped, fault), mit drehenden Laufrädern im Betrieb und Beschriftungen für pump_1_current / pump_2_current; eine Drucksammelleitung mit Schieber V-101 (valve_state open oder closed), Druckmessumformer PT-101 (discharge_pressure) und Durchflussmesser FT-102 (outflow). Animiere die Strömung nur in Leitungen, durch die tatsächlich etwas fließt.

Füge ein Bedienfeld hinzu: Start und Stopp je Pumpe (sende pump_1_cmd oder pump_2_cmd = start oder stop), Auf und Zu für den Schieber (sende valve_cmd), eine Sollwertverstellung mit Plus und Minus, die level_setpoint sendet, und einen AUTO/MANUAL-Umschalter (sende station_mode), der im AUTO-Betrieb die Befehle an Pumpen und Schieber sperrt. Jeder Befehl braucht einen Bestätigungsschritt und einen Zustand AUSSTEHEND, bis das Gerät den neuen Wert meldet.

Füge ein Alarmpanel hinzu: aktive Alarme, abgeleitet aus den Live-Werten (Füllstand über der oberen Grenze, Füllstand unter der unteren Grenze, Pumpe läuft bei geschlossenem Schieber, Pumpenstörung, 30 Minuten keine Daten), dazu den Verlauf der Variable alarm mit Quittierstatus; ein Button Quittieren sendet alarm_ack. Füge eine KPI-Leiste hinzu (Zufluss, Abfluss, Druck, Motorströme, Betriebsstunden) und einen Füllstandstrend über vier Stunden mit denselben Linien für Sollwert und Grenzen.

Die Ausgabe von TagoAI unterscheidet sich von Lauf zu Lauf, und es kommt auf einen präzisen Prompt an. Bitten Sie um eine Änderung nach der anderen und halten Sie die Tag-Namen konsistent mit dem Gerät: Die meisten Fehlgriffe entstehen, wenn eine Variable im Prompt anders heißt als auf dem Gerät.

Von der Demo zur Anlage

Den Simulator ersetzen. Behalten Sie die Analysis, löschen Sie den Simulationsschritt und den Zustand, den er zurückschreibt, und richten Sie den Steuerbefehl auf Ihr Gateway: ein MQTT-Topic, das die SPS abonniert, ein LoRaWAN-Downlink oder ein TagoTiP-Befehl über MQTT. Das Gerät bekommt seinen Zustand dann von der SPS, und am Prozessbild ändert sich nichts. Legen Sie das Gerät für den Produktivbetrieb mit Hybrid-Speicher an: Ein Mutable-Gerät fasst 50.000 Datensätze, während ein Hybrid-Gerät Messwerte in einen Immutable-Teil schreibt und Befehle und Sollwerte bearbeitbar hält.

Eine Flotte mit einem Prozessbild bedienen. Bauen Sie dasselbe Widget auf einem Blueprint Dashboard. Das Widget bindet sich an ein Blueprint-Gerät und wird auf das Pumpwerk aufgelöst, das der Nutzer auswählt. So deckt eine HMI alle Pumpwerke im Kanalnetz ab. Zeigen Sie das gewählte Pumpwerk in der Kopfzeile an, und lassen Sie die Analysis auf dem Gerät arbeiten, von dem der jeweilige Befehl kam, statt auf einem fest eingetragenen.

Das Prozessbild in TagoRUN an die Bediener geben. Custom Widgets funktionieren in TagoRUN-Portalen. Liefern Sie die HMI in Ihrer Anwendung unter Ihrer eigenen Marke aus, und Access Management entscheidet, welche Nutzer welche Pumpwerke sehen. Jeder Befehl, den ein Bediener sendet, ist ein gespeicherter Datensatz auf dem Gerät mit Zeitstempel, die Befehlshistorie gehört also zu den eigenen Daten des Pumpwerks.

Auch außerhalb des Prozessbilds alarmieren. Starten Sie die Analysis zusätzlich über eine Action, die bei eingehender Telemetrie auslöst, damit Alarmdatensätze auch dann geschrieben werden, wenn niemand klickt. Eine Action, die auf die Variable alarm reagiert, verschickt dann eine Push-Benachrichtigung, löst einen Webhook aus oder sendet E-Mail und SMS über Ihr SMTP-, SendGrid- oder Twilio-Konto, sobald ein neuer Alarmdatensatz geschrieben wird. Eine zeitgesteuerte Action kann die Analysis außerdem starten, um einen Alarm zu eskalieren, der unquittiert bleibt.

Das Prozessbild ehrlich halten. Das Widget zeigt das Alter des neuesten Datensatzes, den es empfangen hat, und löst nach 30 Minuten ohne Datensätze einen Alarm für veraltete Daten aus. Lassen Sie in einem echten Pumpwerk nur Telemetrie aus dem Feld in die Berechnung dieses Alters einfließen; eine HMI, die live aussieht, während die Verbindung ausgefallen ist, ist schlimmer als eine leere.

Zeichnen Sie Ihren Prozess

Öffnen Sie ein Dashboard vom Typ Normal oder Blueprint, klicken Sie auf das TagoAI-Symbol, fügen Sie den Prompt ein und ersetzen Sie unsere Tags durch Ihre. Ein Tanklager, eine Kältezentrale, eine Kompressoranlage oder eine Verpackungslinie folgt demselben Muster: Variablen rein, Befehle über eine Analysis raus und ein Prozessbild, beschrieben in natürlicher Sprache.

Die Details stehen in der Übersicht zu Custom Widgets, in der Anleitung für HMIs im SCADA-Stil und in der Dokumentation zu TagoAI. Stellen Sie Ihr Prozessbild in der TagoIO Community vor. Wir sind gespannt darauf.