Zum Hauptinhalt springen

Schnelleinstieg 2: Werte in eine Datenbank schreiben

Dieser zweite Schnelleinstieg baut auf dem ersten Flow auf und bleibt bei Bordmitteln: Statt eines Fremdsystems dient eine SQLite-Datenbank als Ziel – eine einzelne Datei, kein Server. Ein Flow erzeugt alle 10 Sekunden einen wandernden Messwert und schreibt ihn mit dem DB Log Table-Transferobjekt in eine Tabelle, die der OPC Router selbst anlegt; ein zweiter Flow liest den jeweils letzten Wert zurück in eine Variable, und ein dritter räumt regelmäßig auf, damit die Datei nicht unbegrenzt wächst.

Zum Lernen gedacht, nicht für die Produktion

Eine SQLite-Datei neben dem OPC Router ist ideal zum Ausprobieren – ohne Server, ohne Anmeldung. Für den Produktionseinsatz ist dieser Aufbau nicht gedacht: Dort gehören Prozessdaten in einen richtigen Datenbankserver, etwa PostgreSQL, Microsoft SQL Server oder MySQL/MariaDB; die Best Practice Datenbanken zeigt, worauf es dabei ankommt.

Vorbereitung: die SQLite-Anbindung

  1. Legen Sie im Bereich Plug-ins unter Storage → Dateibasierte Datenbanken eine SQLite-Anbindung an: Name SQLite, als Datei ein Pfad, auf dem der OPC Router schreiben darf – unter Windows zum Beispiel C:\Data\produktion.db, im Docker-Container /data/db/quickstart.db.
  2. Prüfen Sie die Angaben mit Verbindung testen und bestätigen Sie mit OK.

SQLite-Anbindung mit Datei und Klammerverhalten

hinweis

Im Docker-Container gehört der Datenpfad /data selbst dem Root-Benutzer, die Dienste laufen aber unter einem eigenen Benutzerkonto – direkt unter /data kann der OPC Router nicht schreiben. Legen Sie deshalb einmalig ein dienst-eigenes Unterverzeichnis an; die Datenbankdatei darin erzeugt der OPC Router anschließend selbst:

docker exec <container> sh -c 'mkdir -p /data/db && chown opcrouter:opcrouter /data/db'

Die Hintergründe stehen beim SQLite Plug-in.

Legen Sie außerdem – wie im ersten Schnelleinstieg – eine globale Variable LetzteTemperatur vom Typ Float64 an; sie nimmt am Ende den zurückgelesenen Wert auf.

1. Der Schreib-Flow: Messwert erzeugen und ablegen

Legen Sie einen Flow Temperatur aufzeichnen an und projektieren Sie vier Objekte:

  1. Time-Trigger – zyklische Übertragung, Intervall 10 Sekunden.
  2. Formel & Taschenrechner aus Tools & ETL – als Formel 21.5 + RAND() * 2: Sie liefert bei jedem Transfer einen Wert zwischen 21,5 und 23,5, wie ihn ein echter Fühler liefern würde. Legen Sie das Ergebnis als Ausgang Temperatur an.
  3. Konstanten – ein Wert Linie 1 vom Typ String, damit jede Zeile ihre Herkunft trägt.
  4. DB Log Table aus der Gruppe Datenbank – die Anbindung SQLite, als Tabellenname Temperaturverlauf, und in den Tabellenspalten:
SpalteDatentypBesonderheit
IDInt64Primärschlüssel mit Auto-Inkrement (unter „Erweiterte Optionen anzeigen“)
TemperaturDouble
LinieString

DB Log Table mit der Anbindung SQLite, dem Tabellennamen Temperaturverlauf und den Spalten

Formel &amp; Taschenrechner mit der Formel 21.5 + RAND() * 2

Verbinden Sie per Item Link das Rechnerergebnis Temperatur mit der Spalte Temperatur und die Konstante Linie 1 mit der Spalte Linie. Die Spalte ID bleibt unverbunden – sie zählt selbst hoch.

Der Schreib-Flow: Time-Trigger, Formel, Konstante und DB Log Table mit den Item Links

hinweis

Die ID-Spalte lohnt sich von Anfang an: Über sie liest der zweite Flow gleich den neuesten Datensatz, und nachträglich lässt sich ein Primärschlüssel bei SQLite nicht mehr ergänzen – der Strukturabgleich kann einer bestehenden Tabelle keine solche Spalte hinzufügen, erst eine neue Tabelle bekommt sie.

2. Der Lese-Flow: den letzten Wert zurückholen

Legen Sie einen zweiten Flow Letzte Temperatur lesen an:

  1. Time-Trigger – Intervall 30 Sekunden.
  2. DB Select aus der Gruppe Datenbank – Anbindung SQLite, Tabelle Temperaturverlauf, als Spalte Temperatur, sortiert absteigend nach ID, Limit 1: Das liefert genau den neuesten Datensatz.
  3. Variablen-Transferobjekt – die Variable LetzteTemperatur.

Verbinden Sie den Select-Ausgang Temperatur mit der Variablen.

Der Lese-Flow: Time-Trigger, DB Select mit Sortierung nach ID und das Variablen-Transferobjekt

3. Der Aufräum-Flow: alte Werte löschen

Ein Flow, der alle 10 Sekunden schreibt und nie löscht, lässt die Datei unbegrenzt wachsen. Zu jedem Log-Flow gehört deshalb ein Gegenstück, das alte Daten wieder entfernt. Legen Sie einen dritten Flow Alte Werte löschen an:

  1. Time-Trigger – Intervall 60 Sekunden.
  2. DB Select – Anbindung SQLite, Tabelle Temperaturverlauf, als Spalte ID, absteigend sortiert, Limit 1: Das liefert die höchste bisher vergebene ID.
  3. Formel & Taschenrechner – ein Platzhalter HoechsteID als Eingang und die Formel HoechsteID - 12; das Ergebnis heißt Grenze.
  4. DB Delete aus der Gruppe Datenbank – Anbindung SQLite, Tabelle Temperaturverlauf, und auf dem Reiter Filter eine Bedingung: Spalte ID, Vergleich SMALLER OR EQUAL. Sobald der Grenzwert aus dem Flow verknüpft ist, zeigt die Bedingung ihn als Dynamischer Wert an.

Der Filter des DB Delete-Transferobjekts: ID kleiner oder gleich dem verknüpften Grenzwert

Verbinden Sie per Item Link das Select-Ergebnis ID mit dem Platzhalter HoechsteID und das Rechnerergebnis Grenze mit dem Filter-Eingang. Der Flow behält so immer die zwölf neuesten Zeilen – zum Zusehen im Schnelleinstieg genau richtig. In einem echten Aufbau wäre die Grenze deutlich größer („behalte die letzten 100.000") oder ein Zeitraum über eine Zeitstempelspalte.

Der Aufräum-Flow: Time-Trigger, DB Select nach der höchsten ID, Formel und DB Delete mit dem Filter

4. Veröffentlichen

Haken Sie in der Ansicht Veröffentlichen den Wurzelknoten an – er nimmt alle ausstehenden Änderungen mit: die SQLite-Anbindung, die neue Variable und die drei neuen Flows – und klicken Sie Änderungen produktiv schalten.

Die Veröffentlichen-Ansicht mit angehaktem Wurzelknoten: die SQLite-Anbindung und die Flows des Schnelleinstiegs stehen zur Veröffentlichung an

5. Zusehen, wie Daten entstehen

Im Status-Bereich zeigt der Flow Temperatur aufzeichnen, wie alle 10 Sekunden ein neuer Transferpunkt auf der Zeitleiste ankommt und der gerade geschriebene Wert über die Verbindung zum DB Log Table läuft:

Der Schreib-Flow im Status-Bereich: alle 10 Sekunden kommt ein Transferpunkt an, der aktuelle Wert wandert über die Verbindung

Im Flow Letzte Temperatur lesen steht am Variablen-Objekt der zuletzt gelesene Messwert:

Flow-Status des Lese-Flows mit dem zurückgelesenen Wert am Variablen-Transferobjekt

Die Tabelle selbst füllt sich derweil Zeile um Zeile – mit wandernden Werten, einer Herkunftsspalte und einer hochzählenden ID. Dass auch der Aufräum-Flow arbeitet, zeigt die Tabelle selbst: Die Zeilenzahl pendelt um die eingestellte Grenze, während die kleinste ID im Minutentakt nachrückt. Damit ist der Kreis geschlossen: erzeugen, ablegen, zurücklesen, aufräumen.

Weiterlesen

  • DB Log Table – alle Optionen des Transferobjekts, das seine Tabelle selbst pflegt.
  • DB Select – Filter, Sortierung und Transfermarkierungen beim Lesen.
  • DB Delete – Löschen mit Filtern: das Gegenstück, das Logtabellen klein hält.
  • Formel & Taschenrechner – rechnen mit Platzhaltern aus dem Flow.
  • Best Practice Datenbanken – Selects mit Filtern, Transferflags und Indizes, sobald es ernst wird.