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.
