PLCBytes
Modbus-Werkzeuge

Modbus Frame-Decoder

Fügen Sie die Hex-Bytes eines Modbus-RTU-, TCP- oder ASCII-Frames ein. Der Decoder zerlegt sie in Felder, prüft die CRC, ordnet Antworten ihren Anfragen zu und erklärt Exception-Codes.

Frames

Beispiel

RTU mit CRC, TCP mit MBAP-Header oder ASCII mit führendem Doppelpunkt. Mehrere Frames jeweils in eine eigene Zeile. Hex-Streams und Hex-Dumps aus Wireshark sowie Logs aus Modbus Poll funktionieren unverändert.

Beispiele

Zerlegte Frames

Läuft komplett in Ihrem Browser. Ihre Eingaben werden an keinen Server gesendet.

So sind Modbus-Frames aufgebaut

Modbus RTU

TeilBytes
Geräteadresse (Unit-ID)1
Funktionscode1
Daten0–252
CRC, niedriges Byte zuerst2

Modbus TCP

TeilBytes
Transaktions-ID2
Protokoll-ID, immer 02
Länge: Unit-ID + PDU2
Geräteadresse (Unit-ID)1
Funktionscode1
Daten0–252

Modbus ASCII

TeilBytes
:1
Geräteadresse (Unit-ID)2
Funktionscode2
Daten0–504
LRC2
CR LF2

Der Teil vom Funktionscode bis zum Ende der Daten heißt PDU und ist in allen drei Varianten gleich. Registerwerte werden mit dem höherwertigen Byte zuerst gesendet, nur die RTU-CRC mit dem niedrigen Byte zuerst.

So liest der Decoder einen Frame

Zuerst sucht er die Hülle. Ein RTU-Frame endet mit einer CRC, die zu den Bytes davor passt. Ein TCP-Frame beginnt mit einem 7 Byte langen MBAP-Header, dessen Längenfeld zum Rest passt. Ein ASCII-Frame beginnt mit einem Doppelpunkt. Innerhalb der Hülle bestimmt der Funktionscode, wie der Rest aufgebaut ist. Anfrage und Antwort derselben Funktion sind unterschiedlich aufgebaut, daher kann der Decoder sie unterscheiden, und er ordnet jede Antwort der Anfrage davor zu.

Eine Antwort auf eine Leseanfrage enthält nur die Werte, nicht die Startadresse. Fügen Sie die Anfrage zusammen mit der Antwort ein, dann zeigt der Decoder die echten Registernummern. Mit einem Klick öffnen Sie die Werte im Register-Decoder, der Floats, 32-Bit-Werte und die Byte-Reihenfolge findet.

Häufige Fehler

Fragen aus der Praxis

Was steht im MBAP-Header von Modbus TCP?

Sieben Bytes: Transaktions-ID (2), Protokoll-ID (2, immer 0), Länge (2) und Unit-ID (1). Die Länge zählt die Bytes danach, also Unit-ID plus PDU. 00 01 00 00 00 06 11 bedeutet Transaktion 1, Modbus-Protokoll, 6 Bytes folgen, Unit 17.

Wie kopiere ich einen Modbus-Frame aus Wireshark?

Klicken Sie in den Paketdetails mit der rechten Maustaste auf die Zeile Modbus/TCP und kopieren Sie sie als Hex-Stream, oder kopieren Sie die Bytes des ganzen Pakets. Beides funktioniert: Der Decoder erkennt Ethernet-, IPv4- und TCP-Header und überspringt sie. Ein Hex-Dump mit Offsets und ASCII-Spalte funktioniert ebenfalls.

Warum zeigt eine zerlegte Antwort keine Registernummern?

Eine Leseantwort enthält die Byteanzahl und die Werte, sonst nichts. Aus welchen Registern sie stammen, steht nur in der Anfrage. Fügen Sie die Anfrage in die Zeile über der Antwort ein, dann ordnet der Decoder beide zu, nummeriert die Register und gibt die Startadresse an den Register-Decoder weiter.

Was ist der Unterschied zwischen Modbus TCP und RTU over TCP?

Modbus TCP setzt den 7 Byte langen MBAP-Header vor die PDU und hat keine CRC. RTU over TCP schickt den unveränderten seriellen Frame samt Geräteadresse und CRC durch eine TCP-Verbindung. Ein Client mit der falschen Variante bekommt keine Antwort. Der Decoder kann beides: Ein Frame mit gültiger CRC wird als RTU gezeigt, egal wie er übertragen wurde.

Was bedeutet Exception-Code 0B?

Gateway Target Device Failed to Respond: Das Modbus-TCP-Gateway hat die Anfrage empfangen und auf die serielle Leitung geschickt, aber das Gerät dahinter hat nicht rechtzeitig geantwortet. Prüfen Sie, ob die Unit-ID der Adresse des seriellen Geräts entspricht, dann Baudrate und Parität des Gateways und die RS-485-Verdrahtung. Code 0A bedeutet, dass das Gateway nicht einmal wusste, wohin es die Anfrage schicken soll.

Verwandte Werkzeuge