Datenbank (ODBC)
Das Protokoll Datenbank ermöglicht es 2WinScada, Tag-Werte periodisch aus einer Tabelle in der Datenbank eines anderen Systems zu lesen und bei Bedarf Werte in diese Tabelle zu schreiben. Es ist für Tabellen im Format „Adresse–Wert“ gedacht, bei denen jede Zeile die Adresse (Name oder Nummer) und den Wert einer Variablen enthält.
2WinScada verbindet sich mit der Datenbank nur über ODBC. Jede Datenbank, für die auf dem Server ein ODBC-Treiber installiert ist (z. B. Microsoft SQL Server, PostgreSQL, MySQL), kann verwendet werden; einen integrierten, datenbankspezifischen Verbindungstreiber gibt es nicht. Die Lese- und Schreibabfragen werden von 2WinScada aus den eingegebenen Tabellen- und Spaltennamen erzeugt; freie SQL-Abfragen werden nicht geschrieben.
Lizenz
Die Datenbankintegration ist in den Lizenz-Editionen Standard und Professional verfügbar, in der Edition Starter nicht. Enthält die Lizenz die Datenbankintegration nicht, werden der Verbindungstest und die Kommunikation zur Laufzeit gesperrt. Einzelheiten finden Sie auf der Seite Lizenz.
ODBC-Datenquelle definieren
Soll in der Verbindungszeichenfolge ein DSN verwendet werden, wird vor der Kanaldefinition auf dem 2WinScada-Server eine ODBC-Datenquelle angelegt:
- Installieren Sie auf dem Server den 64-Bit-ODBC-Treiber der Datenbank, mit der die Verbindung hergestellt werden soll. Da der 2WinScada-Dienst als 64-Bit-Prozess läuft, können 32-Bit-Treiber und 32-Bit-Datenquellen nicht verwendet werden.
- Öffnen Sie unter Windows das Werkzeug ODBC-Datenquellen (64-Bit) (Suche nach „ODBC“ im Startmenü oder Windows-Tools).
- Wählen Sie die Registerkarte System-DSN. Da 2WinScada als Windows-Dienst läuft, sieht es die Einträge unter Benutzer-DSN eines anderen Windows-Benutzers als des Dienstkontos nicht.
- Klicken Sie auf Hinzufügen, wählen Sie den Treiber und klicken Sie auf Fertig stellen. Geben Sie im eigenen Fenster des Treibers Server, Datenbank und Anmeldedaten ein und speichern Sie die Datenquelle.


Ist der gewünschte Treiber nicht in der Liste, wenden Sie sich an Ihren Datenbankadministrator, um den richtigen Treiber zu erhalten.
Kanaldefinition
Auf der Registerkarte Allgemein des Fensters für einen neuen Kanal geben Sie den Kanalnamen ein und wählen unter Verbindungstyp den Eintrag Database aus. Nachdem Sie die Verbindungseinstellungen vorgenommen haben, klicken Sie auf Speichern.

Registerkarte Verbindungsparameter:
| Feld | Beschreibung | Standard |
|---|---|---|
| Datenquellenname | Listet die auf dem Server definierten ODBC-Datenquellen auf. Die gewählte Datenquelle wird automatisch als Wert DSN= in Verbindungszeichenfolge geschrieben; die übrigen Teile der Zeichenfolge bleiben erhalten. | Leer |
| Verbindungszeichenfolge | ODBC-Verbindungszeichenfolge. Für die Verbindung wird nur diese Zeichenfolge verwendet. Pflichtfeld. | DSN=ServerName;UID=;PWD=; |
| Verbindung testen | Versucht, mit der Verbindungszeichenfolge im Formular vom Server aus eine Verbindung zur Datenbank zu öffnen (siehe Gespeichertes Passwort). | — |
Wichtige Schlüssel der Verbindungszeichenfolge:
DSN: Name der ODBC-DatenquelleUID: Benutzername für die DatenbankPWD: Passwort dieses Benutzers
Beispiele für Verbindungszeichenfolgen (ersetzen Sie die Werte in spitzen Klammern durch Ihre eigenen Angaben):
DSN=<datenquellenname>;UID=<benutzer>;PWD=<passwort>;Die Verbindung kann auch ohne DSN hergestellt werden, indem der Treibername direkt angegeben wird:
Driver={ODBC Driver 17 for SQL Server};Server=192.168.1.10;Database=<datenbank>;UID=<benutzer>;PWD=<passwort>;Verwenden Sie in der Verbindungszeichenfolge einen eigenen Datenbankbenutzer für 2WinScada, der nur die benötigte Tabelle lesen kann (und, falls geschrieben wird, die betreffende Spalte aktualisieren kann).
Gespeichertes Passwort
Wird ein gespeicherter Kanal geöffnet, wird das Passwort in der Verbindungszeichenfolge nicht angezeigt; es erscheint als PWD=********, und das gespeicherte Passwort bleibt erhalten.
- Wird die Verbindungszeichenfolge mit unverändertem
PWD=********gespeichert, bleibt das gespeicherte Passwort erhalten. - Um das Passwort zu ändern, geben Sie anstelle von
********das neue Passwort ein. - Ein leerer Wert
PWD=oder das Löschen des SchlüsselsPWDentfernt das Passwort. - Bei einem neuen Kanal, der im Raster durch Kopieren/Einfügen entsteht, wird das Passwort nicht kopiert; es muss neu eingegeben werden.
Verbindung testen verwendet bei einem gespeicherten Kanal das gespeicherte Passwort, wenn sich die Verbindungszeichenfolge nicht geändert hat. Wurde in der Verbindungszeichenfolge ein beliebiges Feld wie Server, DSN, Treiber oder Benutzer geändert, wird das gespeicherte Passwort nicht an ein anderes Ziel gesendet, und der Test endet mit dem Fehler Das gespeicherte Passwort kann nicht verwendet werden, da sich die Verbindungszeichenfolge vom gespeicherten Kanal unterscheidet. (3056). Geben Sie in diesem Fall das Passwort erneut ein oder speichern Sie den Kanal zuerst und testen Sie danach. Geben Sie bei einem neuen (nicht gespeicherten) Kanal das Passwort ausdrücklich ein.
Ist Verbindung testen erfolgreich, zeigt die Schaltfläche ein Häkchen. Schlägt der Test fehl, erscheint auf dem Bildschirm eine allgemeine Fehlermeldung; der ausführliche Fehlertext des Treibers wird aus Sicherheitsgründen nur in das Dienstprotokoll geschrieben.
Gerätedefinition
Jedes Gerät steht für eine Tabelle in der Datenbank, mit der der Kanal verbunden ist. Auf der Registerkarte Allgemein werden die Felder Name und Aktiv wie bei den anderen Protokollen festgelegt.

Registerkarte Parameter:
| Feld | Beschreibung | Regel |
|---|---|---|
| Tabellenname | Tabelle, aus der die Daten gelesen werden | Pflichtfeld; mindestens 2 Zeichen |
| Name der Zeitspalte | Spalte mit dem Aktualisierungszeitpunkt der Zeile. Wird sie angegeben, wird für jede Adresse die Zeile mit dem neuesten Zeitpunkt gelesen. | Optional |
| Name der Adressspalte | Spalte mit dem Wert, der die Variable kennzeichnet (Name oder Nummer). Die Felder Adresse der Tags werden mit den Werten dieser Spalte abgeglichen. | Pflichtfeld |
| Name der Wertspalte | Spalte mit dem aktuellen Wert der Variablen | Pflichtfeld |
| Name der Schreibwertspalte | Spalte, in die der auf das Tag geschriebene Wert gespeichert wird. Bleibt das Feld leer, ist kein Schreiben möglich. Es kann auch dieselbe Spalte wie bei Name der Wertspalte angegeben werden. | Optional |
| Name der Qualitätsspalte | Spalte, die angibt, ob der Wert gültig ist | Optional |
| Guter Qualitätswert | Wert, der in der Qualitätsspalte „gut“ bedeutet (z. B. 1, true oder OK) | Muss ausgefüllt werden, wenn eine Qualitätsspalte verwendet wird |
| Nur bei Auslösung scannen | Wenn aktiviert, wird die Tabelle nicht periodisch gelesen, sondern nur, wenn sie von außen ausgelöst wird (siehe Ausgelöster Scan). | Aus |
Enthält ein Name Leerzeichen oder ein reserviertes Wort, schreiben Sie ihn mit der Quotierung der jeweiligen Datenbank (z. B. [Tag Değerleri] für SQL Server, "TagDegerleri" für PostgreSQL). Ist ein Schemaname erforderlich, kann er zusammen mit dem Tabellennamen angegeben werden (z. B. dbo.TagValues).
Beispieltabelle:
| tag_id | tag_value | updated_at | quality |
|---|---|---|---|
| 1001 | 15.74 | 2026-01-23 10:35:07 | 1 |
| 1002 | -23.38 | 2026-01-23 10:35:07 | 1 |
| 1003 | 13.53 | 2026-01-23 10:35:07 | 0 |
Für diese Tabelle werden Tabellenname TagValues, Name der Adressspalte tag_id, Name der Wertspalte tag_value, Name der Zeitspalte updated_at, Name der Qualitätsspalte quality und Guter Qualitätswert 1 eingegeben.
Leseabfrage
Ist Name der Zeitspalte leer, werden alle Zeilen der Tabelle gelesen. In diesem Fall darf die Tabelle für jede Adresse nur eine Zeile enthalten; gibt es mehrere Zeilen mit derselben Adresse, ist nicht garantiert, welche als Wert übrig bleibt.
Ist Name der Zeitspalte angegeben, werden nur die definierten Tag-Adressen abgefragt, und für jede Adresse wird die Zeile mit dem neuesten Zeitpunkt übernommen.
WARNING
Wird Name der Zeitspalte verwendet, muss die Adressspalte numerisch sein, und die Tag-Adressen dürfen nur als Zahlen eingegeben werden. Ist die Adressspalte eine Textspalte, lassen Sie das Feld Name der Zeitspalte leer und führen Sie in der Tabelle für jede Adresse nur eine Zeile.
Leseregeln:
- Eine Abfrage darf höchstens 30 Sekunden dauern; bei Überschreitung gilt der Lesevorgang als fehlgeschlagen.
- Eine Abfrage darf höchstens 100.000 Zeilen zurückgeben. Werden mehr Zeilen zurückgegeben, schlägt der Lesevorgang fehl; verwenden Sie bei großen Verlaufstabellen Name der Zeitspalte oder lesen Sie eine Tabelle oder Sicht (View), die nur die aktuellen Werte enthält.
- Ist Name der Qualitätsspalte nicht angegeben, wird die Qualität aller gelesenen Tags Good. Ist sie angegeben, wird der Qualitätswert der Zeile mit Guter Qualitätswert verglichen: bei einer logischen Spalte (bool) als
true/falseoder1/0, bei einer numerischen Spalte als Zahl, bei einer Textspalte als exakter Text. Bei nicht übereinstimmenden Zeilen wird die Tag-Qualität Bad. - Bei einem Lesefehler (Verbindung, Abfrage oder Timeout) wird die Qualität des Geräts und der Tags dieser Abfrage Bad. Bei einem erfolgreichen Lesevorgang wird die Gerätequalität Good.
Tag-Definition
Wählen Sie im Kanalbaum links das Gerät aus und fügen Sie in der Tag-Tabelle ein neues Tag hinzu (siehe Tag-Verwaltung).

| Feld | Datenbankregel |
|---|---|
| Adresse | Textdarstellung des Werts in der Adressspalte. Der Abgleich unterscheidet Groß- und Kleinschreibung und erfolgt exakt (z. B. 1001 oder Tank1_Seviye). |
| Datentyp | Zu den Daten in der Wertspalte passender Typ. Bei allen Typen außer Bool und String wird das Dezimaltrennzeichen automatisch umgewandelt. |
| Aktualisierungsintervall [s] | Leseperiode der Tabelle. Tags mit demselben Aktualisierungsintervall werden in einer Abfrage gelesen; jedes abweichende Intervall erzeugt eine eigene Abfrage. |
| Nur lesen | Wenn aktiviert, schreibt 2WinScada nicht auf dieses Tag. |
Der Tag-Wert wird nur aktualisiert, wenn sich der gelesene Wert ändert. Tags, die zu keiner Zeile der Tabelle passen, werden nicht aktualisiert.
Schreiben
Wird ein Wert auf ein Tag geschrieben, aktualisiert 2WinScada in den Zeilen mit passender Adresse die Spalte Name der Schreibwertspalte mit einer parametrisierten Abfrage.
- Wert und Adresse werden nicht als Text in die Abfrage eingefügt, sondern als Parameter gesendet. Bool-Werte werden als 1 oder 0 geschrieben.
- Ist die Adresse in einfachen Anführungszeichen eingegeben (z. B.
'Tank1'), wird sie als Text gesendet, ist sie eine Zahl, als Zahl, in allen anderen Fällen als Text. - Die Abfrage aktualisiert alle Zeilen mit passender Adresse. Schreiben Sie nicht in Verlaufstabellen, die mehrere Zeilen mit derselben Adresse enthalten.
- Schreibvorgänge werden in eine Warteschlange gestellt und jeweils einmal versucht; ein fehlgeschlagener Schreibvorgang wird nicht wiederholt. In der Warteschlange können höchstens 64 Schreibvorgänge warten; ist sie voll, wird ein neuer Schreibvorgang abgelehnt.
- Das Ergebnis des Schreibvorgangs ist beim nächsten Lesen des Tags sichtbar. Unterscheidet sich die Schreibspalte von der Wertspalte, ist das Gegensystem dafür verantwortlich, den Wert in die Wertspalte zu übertragen.
Ausgelöster Scan
Ist Nur bei Auslösung scannen aktiviert, liest das Gerät die Tabelle erst, wenn es ausgelöst wird. Bei der Auslösung werden alle Tags des Geräts ohne Rücksicht auf Aktualisierungsintervall [s] einmal gelesen, und die Werte werden auch dann erneut veröffentlicht, wenn sie sich nicht geändert haben.
Der Scan kann auf zwei Wegen ausgelöst werden:
- Aus Seitenskripten:
await this.srt.triggerDatabaseScan(<geraete-id>); - Über die Dienst-API von 2WinScada mit der Kennnummer des Geräts:
GET /api/DbClient/ScanTrigger?deviceId=<geraete-id>Beide Wege erfordern einen angemeldeten Benutzer mit der Rolle Editor.
Fehlerbehebung
| Symptom | Prüfungen |
|---|---|
| Liste Datenquellenname leer | Definieren Sie die Datenquelle im 64-Bit-ODBC-Werkzeug als System-DSN. Alternativ geben Sie im Feld Verbindungszeichenfolge eine Verbindungszeichenfolge ein, die mit Driver= beginnt. |
Verbindung testen meldet den Fehler 3056 | Die Verbindungszeichenfolge unterscheidet sich vom gespeicherten Kanal. Geben Sie das Passwort anstelle von ******** erneut ein oder speichern Sie den Kanal zuerst. |
| Verbindung testen schlägt fehl | Prüfen Sie die Treiberdetails im Dienstprotokoll, die Serveradresse, Benutzername und Passwort, den Netzwerkzugriff auf den Datenbankserver und ob der 64-Bit-Treiber installiert ist. Prüfen Sie, ob die Lizenz die Datenbankintegration enthält. |
| Qualität von Gerät und Tags Bad | Prüfen Sie die Schreibweise von Tabellenname und der Spaltennamen, ob der Benutzer die Tabelle lesen darf und ob die Abfrage innerhalb von 30 Sekunden abgeschlossen wird. |
| Lesen stoppt, sobald Name der Zeitspalte angegeben ist | Ist die Adressspalte eine Textspalte, lassen Sie das Feld Name der Zeitspalte leer (siehe Leseabfrage). |
| Tag-Wert wird nie aktualisiert | Prüfen Sie, ob der Wert Adresse des Tags exakt mit dem Wert in der Adressspalte übereinstimmt (Groß- und Kleinschreibung, Leerzeichen). |
| Tag-Qualität ständig Bad | Prüfen Sie, ob das Feld Guter Qualitätswert mit dem „guten“ Wert in der Qualitätsspalte übereinstimmt. |
| Lesen schlägt wegen der Zeilenzahl fehl | Die Tabelle gibt mehr als 100.000 Zeilen zurück. Verwenden Sie Name der Zeitspalte oder lesen Sie eine Sicht (View) mit den aktuellen Werten. |
| Schreiben ohne Wirkung | Prüfen Sie, ob das Feld Name der Schreibwertspalte ausgefüllt ist, die Einstellung Nur lesen, ob der Benutzer Aktualisierungsrechte hat und ob der Adresswert zu einer Zeile der Tabelle passt. |
| Ausgelöster Scan funktioniert nicht | Prüfen Sie, ob das Gerät aktiv ist, ob die richtige Gerätekennung verwendet wird und ob der auslösende Benutzer die Rolle Editor hat. |