Du kannst einen RevPi als Modbus Server (Master) oder als Modbus Client (Slave) verwenden. Für diese Übertragungsarten stehen über PiCtory entsprechende Virtual Devices als Schnittstellen zur Verfügung.
|
Note
|
Ab RevPi Bookworm (08/2025) muss zusätzlich die Firewall des RevPi für die Standard-Ports des Modbus Server freigegeben werden: ▷ Füge den Service revpi-modbus-default zu den Firewall-Einstellungen in Cockpit hinzu, siehe Firewall. |
Es können pro virtuellem Gerät maximal 32 Register jeweils für Eingangs- und Ausgangsdaten verwendet werden. Für weitere Ein- und Ausgänge können bis zu 30 Modbus Virtual Devices konfiguriert werden.
-
ModbusTCP Slave
-
ModbusTCP Slave (512 I/O Words)
-
ModbusRTU Slave
-
ModbusRTU Slave (512 I/O Words)
-
ModbusTCP Master
-
ModbusTCP Master (150 Input Words)
-
ModbusRTU Master
-
ModbusRTU Master (150 Input Words)
Verglichen mit anderen Feldbussen stellt der Modbus eine simple Alternative dar, um Daten auszutauschen. Das Modbus-Protokoll ist offen. Es basiert auf Server-Client-Kommunikation. Prinzipiell darf jeder Teilnehmer im Netzwerk senden. In der Praxis wird die Kommunikation jedoch immer vom Server initiiert.
Übertragungsarten (Auswahl) #
-
Modbus RTU (Remote Terminal Unit):
-
Serielle Kommunikation
-
Daten werden binär übertragen
-
-
Modbus TCP (Transmission Control Protocol)
-
erweitert Modbus RTU für TCP/IP-Netzwerke
-
Modbus Server #
-
fragt Daten von Modbus Clients ab
-
fungiert als Client, da er keine Daten zur Verfügung stellt
Modbus Client #
-
stellt Daten zur Verfügung
-
fungiert als Server, da er Daten zur Verfügung stellt
Modbus-Register #
Ein Modbus-Register ist eine 16-Bit große Speicherstelle (2 Bytes), die zur Datenspeicherung und -übertragung im Modbus-Protokoll verwendet wird. Register können Werte von 0 bis 65.535 (unsigned) speichern.
Welche Register es gibt, ist gerätespezifisch. Die Register werden entweder von 0 oder von 1 gezählt.
Registertypen im Modbus-Datenmodell #
Modbus definiert vier Speicherbereiche mit unterschiedlichen Zugriffsrechten.
Holding Register (40001 … 49999) #
-
Lese- und schreibbar
-
Speichern von Sollwerten, Konfigurationsdaten
-
Funktionscode 03 (lesen), 06/16 (schreiben)
Input Register (30001 … 39999) #
-
Nur lesbar
-
Für Messwerte, Sensordaten
-
Funktionscode 04 (lesen)
Coils (00001 … 09999) #
-
Einzelne Bits, lese- und schreibbar
-
Digitale Ausgänge (An/Aus-Zustände)
Discrete Inputs (10001 … 19999) #
-
Einzelne Bits, nur lesbar
-
Digitale Eingänge
Adressierung #
Die Registeradressierung erfolgt je nach Kontext unterschiedlich:
-
Protokollebene: 0-basiert (0 … 65535)
-
Anwenderebene: 1-basiert mit Präfix (z. B. 40001 für erstes Holding-Register)
Beispiel:
Holding-Register 40001 wird auf Protokollebene als Adresse 0 übertragen.
Dateninterpretation #
Da ein Register nur 16 Bit speichert, werden größere Datentypen über mehrere Register verteilt:
-
32-Bit Float: 2 aufeinanderfolgende Register
-
64-Bit Double: 4 aufeinanderfolgende Register
-
Strings: Ein Zeichen pro Register oder gepackt (2 Zeichen/Register)
Byte-Reihenfolge #
Die Interpretation der Bytes innerhalb eines Registers und über mehrere Register hinweg kann variieren:
-
Big-Endian: Höherwertiges Byte zuerst (Modbus-Standard)
-
Little-Endian: Niederwertiges Byte zuerst
-
Bei Multi-Register-Werten zusätzlich: Word-Reihenfolge beachten
Beispiel:
-
Temperaturwert: 23.5 °C
-
Skalierung: Wert × 10 gespeichert
-
Registerinhalt: 235 (0x00EB)
-
Übertragung: [0x00][0xEB]
Funktionen oder Dienste #
-
implementieren Zugriff auf Daten
-
Unterscheidung
-
lesend
-
schreibend
-
beides
-
-
Datenbreite
-
Datenwort (2 Bytes)
-
Bit
-
-
welche Funktionen implementiert sind, ist abhängig vom Gerät
Daten abfragen #
▷ Datenverbindung des Modbus Server und Modbus Client konfigurieren.
-
Modbus TCP – Netzwerkkonfiguration (statischer IP-Adressen, Netzmaske)
-
Modbus RTU – Serielle Schnittstelle (Baudrate, Datenbits, Parität, Stoppbits)
▷ Auf dem Modbus Server die entsprechende Funktion aufrufen, die der Client zur Verfügung stellt.
Modbus RTU Client-ID #
In Modbus RTU ist die Client-ID zwingend erforderlich und hat folgende Funktionen:
-
Eindeutige Adressierung jedes Geräts am Bus im Wertebereich 1 … 247.
-
Ermöglicht dem Master, gezielt einzelne Slaves anzusprechen.
-
Jedes Gerät am selben Bus muss eine eindeutige Client-ID haben.
-
Die ID 0 ist für Broadcast-Nachrichten reserviert.
Modbus TCP Unit-ID #
Die Unit-ID wird entweder zur direkten Geräteidentifikation oder zur Gateway-Adressierung verwendet:
-
Entweder identifiziert die Unit-ID ein spezifisches Modbus-TCP-Gerät, das direkt über seine IP-Adresse angesprochen wird. In diesem Fall entspricht die Unit-ID funktional der Client-ID.
-
Oder die Unit-ID adressiert Geräte hinter einem Modbus-TCP-zu-RTU-Gateway. Dabei gilt: Die Unit-IDs 1-247 adressieren die dahinterliegenden Modbus-RTU-Geräte, während die Unit-ID 255 das Gateway selbst adressiert.
Die korrekte Einstellung hängt vom Gerätetyp ab: Bei direkten Modbus-TCP-Geräten wird die gerätespezifische Unit-ID verwendet, bei Gateway-Konfigurationen entweder die Unit-ID des Zielgeräts (1 … 247) oder 255 für das Gateway selbst.
Modbus-Funktionscodes (Beispiele) #
| Code | Funktion |
|---|---|
0x01 |
Read Coils |
0x02 |
Read Discrete Inputs |
0x03 |
Read Holding Registers |
0x04 |
Read Input Registers |
0x05 |
Write Single Coil |
0x06 |
Write Single Register |
Beispiel für Modbus RTU benötigte Informationen:
-
Serielle Schnittstelle Parameter: 9600 Baud, 8 Datenbits, 1 Stoppbit, keine Parität
-
Client-Adresse: 1
-
Modbus-Register: 1000
-
Modbus-Funktion: READ_INPUT_REGISTER
Beispiel für Modbus TCP benötigte Informationen:
-
IP-Adresse des Client: 192.168.0.103
-
Unit-ID: 255
-
Client-Register: 1000
-
Modbus-Funktion: READ_HOLDING_REGISTER