Protokollieren von MODBUS RTU in MS SQL-Datenbank in Echtzeit
Eine vollständige Anleitung zum Abfragen von MODBUS-RTU-Seriengeräten und zum Exportieren der Registerdaten direkt in eine MS SQL-Datenbank mit eigener Datenbankstruktur.
1. Protokollkonfiguration: MODBUS RTU
Kommunikationstyp: Aktive Abfrage (Master/Slave über RS485/COM)
Da MODBUS Daten binär überträgt, muss der Parser bestimmte Holding-Register (z. B. 40001) oder Input-Register extrahieren. Wenn Ihr Sensor 32-Bit-Gleitkommazahlen verwendet, konfigurieren Sie den Parser so, dass er zwei benachbarte 16-Bit-Register liest und das korrekte Byte-Swapping (Endianness) anwendet, um den Float-Wert zu rekonstruieren.
Wenden Sie diese Basiskonfiguration für die serielle Verbindung an:
{
"port": "COM3",
"baud_rate": 9600,
"data_bits": 8,
"stop_bits": 1,
"parity": "none",
"protocol": "modbus_rtu_serial",
"poll_interval_ms": 1000
}
MODBUS-RTU-Plugin-Auswahl zur Abfrage und zum Parsen von Daten.

MODBUS-RTU-Abfragewarteschlange: benutzerdefinierte Konfiguration zum Lesen verschiedener Register.
Bereit, MODBUS RTU mit Microsoft SQL Server zu verbinden?
2. Datenbankeinrichtung: Microsoft SQL Server
Verwenden Sie den integrierten SQL Server Native Client oder OLE DB-Provider im ODBC-Exportmodul des Data Loggers. Die Windows-Authentifizierung wird nahtlos unterstützt, wenn das Logger-Dienstkonto über Datenbankzugriff verfügt.
Verwenden Sie das folgende SQL-Skript, um Ihre Zieltabelle zu erstellen. Verwenden Sie DATETIME2 anstelle von DATETIME für eine höhere Präzision bei Zeitstempeln, was für die hochfrequente industrielle serielle Protokollierung entscheidend ist.
CREATE TABLE SerialData ( RecordID INT IDENTITY(1,1) PRIMARY KEY, LogTime DATETIME2 DEFAULT SYSUTCDATETIME(), PortID NVARCHAR(20), SensorReading FLOAT );

Microsoft SQL Server-Konnektor in unserem Logger.

SQLServer-Datenbank-Verbindungseinstellungen. Zum Beispiel SQL Express.

SQL-Warteschlange.
3. Protokollspezifische Problembehandlung
- Timeout- oder CRC-Fehler: Im Gegensatz zu TCP ist serielles MODBUS RTU auf strikte Zeitvorgaben angewiesen. Überprüfen Sie, ob Ihre RS485-A/B-Leitungen nicht vertauscht sind und dass die Baudrate und die Geräte-ID in der Software exakt mit dem Slave-Gerät übereinstimmen.
- Das Gerät gibt den Fehlercode „Illegal address“ zurück: Versuchen Sie, in Ihrer MODBUS-Anforderung Funktion #3 anstelle von Funktion #4 zu verwenden. Überprüfen Sie andernfalls, ob Sie die korrekte Registeradresse verwenden. Versuchen Sie, einen absoluten Offset anzugeben (keine logische Adresse wie 40001).
- Ich habe mehrere Werte, die ich in einer Datenzeile exportieren möchte. Der Logger schreibt jedoch einen Wert pro Zeile: Sie müssen die Option „Alle Daten auf einmal exportieren“ in den MODBUS-Plugin-Einstellungen aktivieren.
4. Datenbankspezifische Problembehandlung
- Anmeldung für Benutzer fehlgeschlagen / Zugriff verweigert: Wenn RS232 Data Logger als Windows-Hintergrunddienst ausgeführt wird, stellen Sie sicher, dass der Dienst unter einem Domänenkonto mit db_datawriter-Rollen ausgeführt wird, und nicht unter dem standardmäßigen Konto 'Lokales System'. Oder erstellen Sie einen separaten Benutzer mit der Authentifizierungsmethode 'SQL Server'.
- Was passiert, wenn meine Datenbank offline ist? Werde ich meine Daten verlieren?: Verwenden Sie das SQL Database Pro-Plugin. Es kann Daten in eine temporäre Datei schreiben, während Ihre Datenbank offline ist, und diese später wiederherstellen.
- Der Code funktioniert nur, wenn Sie Zahlen senden. Wenn ich versuche, einen Buchstaben zu senden, funktioniert es nicht.: 1. Sie sollten die Parser-Variable als Zeichenfolge deklarieren. 2. Ihre Tabelle sollte die Spalte mit dem Typ 'VARCHAR' oder 'NVARCHAR' enthalten. Die Größe dieser Spalte sollte für Ihre Daten ausreichend sein. 3. Sie sollten den Datentyp 'string' für die entsprechende Spalte im Datenexport-Plugin auf der Seite 'Binding' auswählen.