Die virtuellen Modbus-Geräte sind softwarebasierte Schnittstellen für die Kommunikation über Modbus TCP oder Modbus RTU. Sie bilden die mit externen Modbus-Geräten ausgetauschten Daten im Prozessabbild des RevPi ab. Dadurch können andere Softwarekomponenten auf die Modbus-Daten wie auf Ein- und Ausgangsdaten eines Erweiterungsmoduls zugreifen.
Ein RevPi kann dabei als Modbus-Client oder Modbus-Server eingesetzt werden:
-
Als Modbus-Client initiiert der RevPi die Kommunikation und liest oder schreibt Daten eines Modbus-Servers.
-
Als Modbus-Server stellt der RevPi Daten bereit und beantwortet Anfragen eines Modbus-Clients.
Die benötigte Schnittstelle wird in der Applikation PiCtory als virtuelles Gerät konfiguriert. Je nach Übertragungsart, Rolle und benötigter Größe des Prozessabbilds stehen verschiedene Varianten zur Verfügung:
-
Modbus TCP
-
Modbus RTU
-
Modbus TCP Server
-
Modbus TCP Server (512 I/O Words)
-
Modbus TCP Client
-
Modbus TCP Client (150 Input Words)
-
Modbus RTU Server
-
Modbus RTU Server (512 I/O Words)
-
Modbus RTU Client
-
Modbus RTU Client (150 Input Words)
Jedes virtuelle Modbus-Gerät stellt bis zu 32 Register für Eingänge und 32 Register für Ausgänge im Prozessabbild bereit. Für einen größeren Datenumfang können zusätzlich bis zu 30 virtuelle Modbus-Geräte konfiguriert werden.
Virtuelle Modbus-Geräte eignen sich beispielsweise für:
-
Anbindung von Sensoren, Aktoren und Messgeräten
-
Datenaustausch mit Steuerungen und Gateways
-
Bereitstellung von Prozesswerten für andere Modbus-Geräte
-
Übernahme von Messwerten, Sollwerten und Steuerbefehlen in das Prozessabbild
|
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. |
Modbus-Client und Modbus-Server #
Im Modbus-Protokoll übernimmt jedes Gerät eine der beiden Rollen:
Modbus-Client
Initiiert die Kommunikation:
-
Register eines Modbus-Servers lesen,
-
Register eines Modbus-Servers schreiben und
-
sämtliche Modbus-Anfragen starten.
Modbus-Server
Stellt seine Daten in Form von Registern zur Verfügung:
-
Anfragen eines Modbus-Clients beantworten,
-
Register zum Lesen oder Schreiben bereitstellen
Übertragungsarten #
-
Modbus TCP
-
Modbus RTU
-
Kommunikation über TCP/IP-Netzwerke
-
Basiert auf dem Modbus-Protokoll
-
Identifikation der Geräte über IP-Adresse und Unit-ID
-
Serielle Kommunikation
-
Binäre Datenübertragung
-
Verwendung einer Server-Adresse zur Adressierung der Teilnehmer
Funktionsweise Modbus-Register:
Ein Modbus-Register ist eine 16-Bit große Speicherstelle (2 Byte), die zur Speicherung und Übertragung von Daten verwendet wird. Im RevPi werden Register als Ein- oder Ausgangswörter im Prozessabbild dargestellt.
Je nach Gerät können unterschiedliche Register implementiert sein. Die Registeradressierung erfolgt abhängig vom Hersteller entweder ab Adresse 0 oder Adresse 1.
Registertypen
Modbus definiert vier logische Speicherbereiche.
-
Holding Register (40001 … 49999)
-
Les- und schreibbar
-
für Sollwerte und Konfigurationsdaten
-
Funktionscodes 03, 06 und 16
-
-
Input Register (30001 … 39999)
-
Nur lesbar
-
für Messwerte
-
Funktionscode 04
-
-
Coils (00001 … 09999)
-
Einzelne Bits
-
Lese- und schreibbar
-
Für digitale Ausgänge
-
Funktionscodes 01, 05 und 15
-
-
Discrete Inputs (10001 … 19999)
-
Einzelne Bits
-
Nur lesbar
-
Für digitale Eingänge
-
Funktionscode 02
-
Adressierung
Je nach Kontext wird dieselbe Adresse unterschiedlich dargestellt.
-
Protokollebene: 0-basierte Adressierung (0 … 65535)
-
Anwenderdarstellung: 1-basierte Adressierung mit Bereichspräfix (z. B. 40001)
Beispiel: Das Holding Register 40001 wird im Modbus-Protokoll als Adresse 0 übertragen.
Datenformate
Da ein Register nur 16 Bit umfasst, werden größere Datentypen auf mehrere Register verteilt.
-
32-Bit Integer oder Float: 2 Register
-
64-Bit Integer oder Double: 4 Register
-
Zeichenketten: abhängig vom Gerät ein oder zwei Zeichen pro Register
Byte- und Word-Reihenfolge
Innerhalb eines Registers verwendet Modbus standardmäßig Big-Endian.
Bei Datentypen, die mehrere Register belegen, kann zusätzlich die Reihenfolge der Register (Word Order) je nach Hersteller unterschiedlich sein.
Modbus-Funktionscodes #
Die unterstützten Funktionscodes hängen vom jeweiligen Gerät ab.
| 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 |
0x0F |
Write Multiple Coils |
0x10 |
Write Multiple Registers |
Kommunikation konfigurieren #
-
Modbus TCP
-
Modbus RTU
Folgende Parameter werden benötigt:
-
IP-Adresse des Servers
-
TCP-Port (standardmäßig
502) -
Unit-ID
Die Unit-ID wird abhängig von der Gerätearchitektur verwendet:
-
Bei einem direkten Modbus-TCP-Gerät identifiziert sie den angesprochenen Server.
-
Hinter einem Modbus-TCP-zu-RTU-Gateway adressiert sie den gewünschten RTU-Server (
1 … 247). Häufig wird die Unit-ID255verwendet, um das Gateway selbst anzusprechen. Beachte hierzu die Dokumentation des jeweiligen Herstellers.
Konfiguration der seriellen Schnittstelle:
-
Baudrate
-
Datenbits
-
Parität
-
Stoppbits
-
Server-Adresse: Die Server-Adresse identifiziert den gewünschten Modbus-Server eindeutig innerhalb eines RTU-Busses.
-
Zulässiger Adressbereich:
1 … 247 -
Adresse
0ist für Broadcast-Nachrichten reserviert. -
Jeder Server am selben Bus benötigt eine eindeutige Adresse.
Kommunikationsablauf #
-
Der Modbus-Client baut die Verbindung zum Modbus-Server auf.
-
Der Client sendet einen Funktionscode und die gewünschte Registeradresse.
-
Der Server beantwortet die Anfrage mit den angeforderten Daten oder bestätigt den Schreibzugriff.
Beispiele #
-
Modbus TCP
-
Modbus RTU
Benötigte Informationen:
-
IP-Adresse des Servers: 192.168.0.103
-
TCP-Port: 502
-
Unit-ID: 255
-
Register: 1000
-
Funktion: Read Holding Registers
Benötigte Informationen:
-
Serielle Schnittstellenparameter: 9600 Baud, 8 Datenbits, keine Parität, 1 Stoppbit
-
Server-Adresse: 1
-
Register: 1000
-
Funktion: Read Input Registers