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.

  1. Holding Register (40001 … 49999)

    • Les- und schreibbar

    • für Sollwerte und Konfigurationsdaten

    • Funktionscodes 03, 06 und 16

  2. Input Register (30001 … 39999)

    • Nur lesbar

    • für Messwerte

    • Funktionscode 04

  3. Coils (00001 … 09999)

    • Einzelne Bits

    • Lese- und schreibbar

    • Für digitale Ausgänge

    • Funktionscodes 01, 05 und 15

  4. 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-ID 255 verwendet, 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 0 ist für Broadcast-Nachrichten reserviert.

  • Jeder Server am selben Bus benötigt eine eindeutige Adresse.

Kommunikationsablauf #

  1. Der Modbus-Client baut die Verbindung zum Modbus-Server auf.

  2. Der Client sendet einen Funktionscode und die gewünschte Registeradresse.

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

Weitere Ressourcen #