ModbusRTUMaster

Topics about the Software of Revolution Pi
Post Reply
Leucks
Posts: 1
Joined: 23 May 2025, 10:16

ModbusRTUMaster

Post by Leucks »

Hallo,

ich nutze einen Revolution Pi Connect S mit Bookworm:

PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
Pictory-Version: 2.11.1

Ich möchte den RevPi über RS485 mit einem Raspberry Pi verbinden, auf dem ein Waveshare RS485 HAT installiert ist.
Das funktioniert grundsätzlich:
Wenn ich auf dem Raspberry Pi einen pymodbus-Server (Slave) starte und vom RevPi aus mit einem eigenen pymodbus-Client-Skript darauf zugreife, kann ich erfolgreich Register lesen und schreiben. Die Kommunikation läuft also stabil.

Wenn ich jedoch in Pictory den Connect S wie im offiziellen Tutorial als Modbus RTU Master einrichte, kann ich zwar Holding Register schreiben, aber nicht lesen.
Analyse:

Auf dem Raspberry Pi (Slave) habe ich die eingehenden Modbus-Daten mitgeschnitten. Dabei konnte ich folgendes beobachten:

Beispiel – Schreiben eines Holding Registers (funktioniert):
01 06 01 2B 05 A5 3B 15 → korrektes 8-Byte-Telegramm

Beispiel – Lesen eines Holding Registers (funktioniert nicht):
01 03 03 E8 01 04 7A → nur 7 Bytes!

Das CRC 04 7A gehört eigentlich zu folgendem vollständigen Telegramm:
01 03 03 E8 00 01 04 7A
→ Das entspricht einem Lesezugriff auf Registeradresse 1000 (0x03E8), Länge 1 – also genau dem, was ich in Pictory eingestellt habe.

Nach weiteren Tests ist mir Folgendes aufgefallen:

Wenn ich Register unter 255 abfrage,

nur ein einzelnes Register lesen möchte,

oder die Adresse kleiner als 255 ist,

…werden anscheinend die High-Bytes (0x00) der Registeradresse und der Längenfelder im Telegramm weggelassen. Dadurch entstehen verkürzte Telegramme mit nur 6 oder 7 Bytes. Diese werden vom pymodbus-Server entweder als fehlerhaft zurückgewiesen („Register nicht vorhanden“) oder komplett ignoriert, weil sie nicht dem Modbus-RTU-Protokoll entsprechen.
Meine Fragen:

Ist dieses Verhalten bekannt?

Gibt es eine falsche Konfiguration meinerseits?

Wie kann ich das Problem beheben oder umgehen?

Wie gesagt: Die Modbus-Kommunikation funktioniert problemlos, wenn ich beide Seiten mit Python und pymodbus betreibe. Nur bei Verwendung von Pictory als Master treten die Probleme auf. Wenn ich das richtig verstehe, müssen Modbus-RTU-Anfragen immer mindestens 8 Bytes lang sein, um dem Standard zu entsprechen.

Viele Grüße
Sebastian
Post Reply