Zum Hauptinhalt springen
Version: 5.3

... einen neuen, aktuellen 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 diese Verbindung alternativ als Vorlage/Instanz zu realisieren. Gezeigt ist hier aber die einfache Variante.

Erforderliche Felder/Spalten:

<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:

DB-Anbindung<Ihre DB-Anbindung aus der Plug-in-Konfiguration>
TypSelect

Registerkarte: Allgemein

Tabelle<Tabelle, die Ihre Daten enthält>
Verfügbare Spalten/Verwendete Spalten<Alle Werte-Spalten>

Registerkarte: Filter

Filter„Filter 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

Sortierung nach Spalte<Zeitstempel-Spalte>
SortierreihenfolgeAbsteigend (neuester Wert oben)
Anzahl der Datensätze begrenzen auf1 (nur der erste Datensatz = der neueste soll transferiert werden)
Fehler bei leerem Abfrageergebnisdeaktiviert. Wenn kein neuer, aktueller Datensatz vorhanden ist, sollte das nicht als Fehler gewertet werden
Transfer bei leerem Abfrageergebnis abbrechenaktiviert. Es wird nichts transferiert, wenn kein neuer Datensatz vorhanden ist.

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

<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:

Verbindung

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

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

hinweis

Anmerkung: 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, 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önnten Sie einen Script-Trigger programmieren, der den Transfer auslöst, sobald er vom Datenbankserver informiert wird. Allerdings würde bedingt durch die Zykluszeit des OPC Routers wieder eine Verzögerung eintreten (max. 50 ms in der Standardeinstellung). Wenn es darum geht, keinen Datensatz zu verlieren, sollten Sie alle nicht transferierten Datensätze auslesen.