... 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) |
ConfigID | ID 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> |
Typ | Select |
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 |
Vorschau | Hier sollte jetzt stehen: WHERE (ConfigID = ? AND Transfer = ?) |
 (4) (5) (6) (7) (1).png)
DB-Transferobjekt
Registerkarte: Abfrage
Sortierung nach Spalte | <Zeitstempel-Spalte> |
Sortierreihenfolge | Absteigend (neuester Wert oben) |
Anzahl der Datensätze begrenzen auf | 1 (nur der erste Datensatz = der neueste soll transferiert werden) |
Fehler bei leerem Abfrageergebnis | deaktiviert. Wenn kein neuer, aktueller Datensatz vorhanden ist, sollte das nicht als Fehler gewertet werden |
Transfer bei leerem Abfrageergebnis abbrechen | aktiviert. 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 |
0 | fü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.
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.