Byte-Reihenfolge

Modbus verwendet "BIG ENDIAN", d. h. in den Telegrammen werden die höherwertigen Bytes zuerst gesendet und folglich in den niederwertigen Adressen im Speicher abgelegt.

ibaPDA wandelt alle empfangenen 16- und 32-Bit-Werte in das Intel-Format "LITTLE ENDIAN" um ("Swapping"). Für Daten, die nicht von einer ursprünglichen Modbus-Steuerung kommen, bietet ibaPDA die Möglichkeit, die Swapping-Methode einzustellen. Siehe Allgemeine Moduleinstellungen.

Modbus RTU / Modbus TCP

Die folgende Darstellung zeigt den grundsätzlichen Aufbau des Modbus-Protokolls und die Unterschiede zwischen Modbus RTU und Modbus TCP.

RTU

Remote Terminal Unit

MBAP

Modbus Application Protocol

ADU

Application Data Unit

PDU

Protocol Data Unit

Bei Modbus-TCP wird dem Funktionscode der MBAP-Header vorangestellt, die Unit-ID entspricht der Geräteadresse (Slave-ID =Server-ID) des RTU-Protokolls und der CRC-Code entfällt.

Es gibt auch eine Variante "Modbus RTU over TCP/IP". Dabei wird die Modbus RTU-Message über TCP/IP übertragen. Dies wird beim Einsatz von Gateways Seriell/Ethernet verwendet.

MBAP Header

Der MBAP Header wird bei der Kommunikation mit TCP/IP verwendet, um die Modbus Applikationsdaten zu identifizieren. Der Header enthält folgende Felder:

Felder

Bytes

Beschreibung

Transaktions-ID

2

Kennzeichnung einer Modbus Request/Response Aktion

Kennzeichnet die Zuordnung der Aktionen. Wird vom Modbus-Client in der Anfrage (request) gesendet, der Modbus-Server kopiert die Transaktions-ID in das Antwort-Telegramm (response).

Protokoll-ID

2

0 = Modbus-Protokoll

Wird bei Multiplex-Verfahren verwendet, das Modbus-Protokoll hat den Wert 0.

Länge

2

Anzahl der folgenden Bytes

Gibt die Anzahl der folgenden Bytes wieder, inklusive Unit-ID, Funktionscode und Datenfelder.

Unit-ID

1

Adressierung eines Remote-Servers (Geräteadresse), der mit dem Modbus-Client verbunden ist

Das Feld wird vom Modbus-Client in der Anfrage (request) gesendet und vom Server mit demselben Wert in seiner Antwort zurückgeschickt.

Funktionscode

Ein Byte enthält den Funktionscode, der festlegt, welche Funktion aufgrund eines Requests durch den Server ausgeführt werden soll.

Der ibaPDA-Modbus-TCP-Client-Treiber unterstützt die Funktionen:

  • 0x01: Read Coils (Ausgänge lesen)

  • 0x02: Read Discrete Inputs (Eingänge lesen)

  • 0x03: Read Holding Registers (Halteregister lesen)

  • 0x04: Read Input Registers (Eingaberegister lesen)

  • 0x0F: Write Multiple Coils

  • 0x10: Write Multiple Registers

Datenfelder

Der Nutzdatenbereich ist in mehrere Unterbereiche unterteilt, wie Startadresse, Anzahl der Register, Anzahl der Bytes und die aktuellen Daten. Der Inhalt dieser Felder hängt vom verwendeten Funktionscode ab.