Zum Hauptinhalt springen

Neuesten noch nicht übertragenen Datensatz auslesen

Im vorigen Beispiel wurde zyklisch der aktuelle Datensatz aus der Tabelle oder dem Filterergebnis übertragen. Im Folgenden wird gezeigt, wie der aktuelle Datensatz nur dann übertragen wird, wenn er neu ist, also vorher noch nicht übertragen wurde. Sie benötigen dazu neben der Zeitstempelspalte eine Spalte, in der ein erfolgter Datentransfer protokolliert wird. Dieses Beispiel enthält gleich einen zusätzlichen Filter (ConfigID als ID der Messwertreihe) sowie einen Filter auf die Spalte Transfer, um nur nicht transferierte Datensätze zu filtern. Genau wie das vorige Beispiel wäre auch dieser Flow alternativ als Vorlage/Instanz zu realisieren. Gezeigt ist hier aber die einfache Variante.

Erforderliche Felder/Spalten:

NameBeschreibung
<Zeitstempel>Zeitstempel vom Typ Datum/Uhrzeit, nach dem sortiert wird
<Transfer>Spalte, in der ein erfolgter Transfer angezeigt wird (Typ: Int, Standardwert: 0)
ConfigIDID der Messwertreihe
<Werte>Spalte(n) mit den relevanten Werten

Projektieren Sie ein DB-Transferobjekt mit folgenden Eigenschaften:

NameKonfiguration
Datenquelle<Ihre Datenbankanbindung aus dem Plug-ins-Bereich>
TypSelect

Registerkarte: Allgemein

NameKonfiguration
Tabelle<Tabelle, die Ihre Daten enthält>
SpaltenAlle benötigten Werte-Spalten von Verfügbar nach Verwendet verschieben.

Registerkarte: Filter

NameKonfiguration
FilterFilter hinzufügen legt einen neuen Filter an. Sie benötigen 2 Filter. Die Verknüpfung UND erfolgt standardmäßig.
Filter/Filtergruppe bearbeiten

Spalte: ConfigID

Vergleichsoperator: EQUAL

Spalte: Transfer

Vergleichsoperator: EQUAL

VorschauHier sollte jetzt stehen: WHERE (ConfigID = ? AND Transfer = ?)

Datenbank Select Transferobjekt

Registerkarte: Abfrage

NameKonfiguration
SortierreihenfolgeAbsteigend – damit steht der neueste Datensatz oben.
Sortierungsspalte<Zeitstempel-Spalte>
Datensätze nach durchgeführtem Transfer markierenAusgewählt. Nur mit dieser Option trägt der OPC Router die Transfermarkierung in die Quelltabelle zurück.
Spalte zum Markieren<Transfer>
MarkierungswerteNicht transferiert: 0, Transferiert: 1, Fehler beim Transferieren: 2. Die drei Werte müssen sich unterscheiden.
Anzahl Datensätze begrenzen aufAktiviert, Wert 1 – nur der oberste und damit neueste Datensatz wird übertragen.
Verhalten bei leerem AbfrageergebnisTransfer abbrechen – ist kein neuer Datensatz vorhanden, wird nichts transferiert und kein Fehler ausgelöst.
hinweis

Für die Markierung benötigt die Quelltabelle einen einfachen Primärschlüssel auf der numerischen Spalte ID. Alle Eigenschaften der Registerkarte beschreibt DB Select-Transferobjekt.

Dieses Transferobjekt filtert also die Daten nach der einzugebenden ConfigID und dem Transferkürzel. Für das Transferkürzel muss „0“ eingegeben werden. Legen Sie ein Konstantenobjekt an mit:

Benötigte Konstanten

NameBeschreibung
<ConfigID>ID der Messwertreihe
0für nicht transferierte Datensätze

Verbinden Sie den ConfigID-Wert mit dem Filter-Element ConfigID und die 0 mit dem Filter-Element Transfer:

Flow

Projektieren Sie einen Time-Trigger, der die Datenbank zyklisch pollt.

Nach dem Transfer schreibt der OPC Router „1“ in die Spalte Transfer, bei einem Transferfehler „2“. Es wird mit dieser Projektierung jeweils der neueste Datensatz der Messwertreihe mit Transfer = 0 übertragen.

Flow abschließen

Bis hierher ist die Datenquelle projektiert. Zum lauffähigen Flow fehlen drei Schritte:

  1. Datenziel anbinden. Verbinden Sie die Elemente des DB-Transferobjekts über Item Links mit dem Transferobjekt Ihres Zielsystems. Welche Zielsysteme zur Verfügung stehen und welche Eigenschaften ihre Transferobjekte haben, steht im Kapitel des jeweiligen Plug-ins: alle Plug-ins von A bis Z.
  2. Produktiv schalten. Wählen Sie in der Ansicht Veröffentlichen die Änderungen aus und klicken Sie auf Änderungen produktiv schalten. Bis dahin arbeitet die Laufzeit mit dem zuletzt veröffentlichten Stand weiter.
  3. Ergebnis prüfen. Die Statusanzeige zeigt, ob der Flow läuft. Im Flow-Status sehen Sie jeden einzelnen Transfer und die übertragenen Werte; die Spalte Transfer der Quelltabelle steht danach auf 1.
warnung

Wenn die Daten in der Quelltabelle schneller einlaufen als der Time-Trigger pollt, kann es vorkommen, dass der übertragene Datensatz bereits nicht mehr aktuell ist oder dass Datensätze übersprungen werden. Wägen Sie ab zwischen der erforderlichen Genauigkeit und dem Ressourcenverbrauch am Datenbankserver. Für Datenbankserver, die einen Notification Service anbieten, können Sie stattdessen einen Skript-Trigger programmieren, der den Transfer auslöst, sobald der Datenbankserver ihn informiert. Wenn es darum geht, keinen Datensatz zu verlieren, sollten Sie alle nicht transferierten Datensätze auslesen.