



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. 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