Modbus RTU over TCP oder Modbus TCP: Was spricht Ihr Konverter?

· Von Vladimir Chemeris, Entwickler von Modbus TCP FieldKit

Kurzantwort: Modbus TCP hat einen 7 Byte langen MBAP-Header und keine CRC-Prüfsumme. RTU over TCP sendet einen einfachen RTU-Frame mit Unit-Adresse und CRC durch einen TCP-Socket. Ein Konverter im transparenten Modus braucht RTU over TCP. Ein Konverter im Gateway-Modus übersetzt und braucht daher Modbus TCP. Senden Sie das falsche, erhalten Sie Stille statt eines Fehlers.

Derselbe Lesezugriff, zweimal

Zwei Register ab Adresse 0 von Unit 1 lesen:

Modbus TCP    00 01 00 00 00 06 01 03 00 00 00 02
RTU over TCP  01 03 00 00 00 02 C4 0B

Der Modbus-TCP-Frame beginnt mit einem 6 Byte langen Header und dann der Unit-ID. Der RTU-Frame beginnt mit der Unit-Adresse und endet mit einer CRC. Die Mitte, die PDU, ist identisch.

Prüfen Sie die CRC selbst: Fügen Sie die zweite Zeile in den Frame-Decoder ein.

Modbus TCP RTU over TCP
Header MBAP, 7 Byte Unit-Adresse, 1 Byte
Integrität Nur TCP Zusätzlich CRC-16
Transaction-ID Ja Nein
Gleichzeitige Anfragen Mehrere, laut Spezifikation Eine nach der anderen
Verwendet von PLCs, Gateways, direkte Geräte Transparente serielle Konverter

Die Modbus-Spezifikation definiert RTU over TCP nicht. Hersteller haben es als Praxis übernommen und benennen es unterschiedlich: „RTU over TCP“, „serial tunnel“, „transparent mode“, „raw TCP“.

Zwei Konvertermodi

Transparent (raw). Der Konverter kopiert Bytes zwischen TCP und RS-485, ohne sie zu lesen. Er versteht Modbus nicht. Ihr Client muss RTU-Frames mit CRC senden.

Modbus-TCP-Gateway. Der Konverter wertet MBAP aus, baut einen RTU-Frame, wartet auf die Antwort und gibt sie als Modbus TCP zurück. Ihr Client sendet Standard-Modbus-TCP, und das Gateway kümmert sich um Timing und CRC.

Viele Wi-Fi- und Ethernet-Konverter, etwa Elfin EW11, USR und Waveshare, bieten beide als Konfigurationsoption an. Prüfen Sie die Weboberfläche oder das Herstellertool. Baudrate, Parität und Stoppbits stellen Sie im Konverter ein, sie müssen zum Gerät passen.

So erkennen Sie, welchen Modus Sie haben

Wenn Sie die Konfiguration nicht einsehen können:

  1. Öffnen Sie eine TCP-Verbindung und senden Sie einen Modbus-TCP-Lesezugriff.
  2. Eine gültige Antwort oder eine Exception bedeutet: Das Gerät spricht Modbus TCP.
  3. Bei einem Timeout senden Sie auf einer neuen Verbindung einen RTU-over-TCP-Lesezugriff auf dasselbe Register.
  4. Kommt jetzt eine gültige Antwort, ist es der transparente Modus.
  5. Schweigen bei beiden deutet auf die serielle Seite: Unit-ID, Baudrate, Parität oder A/B-Verdrahtung.

Diese Abfolge bietet FieldKit nach einem Timeout als Try RTU over TCP an. Sie sendet einen Lesezugriff und keine Schreibzugriffe.

Fallstricke bei RTU over TCP

Keine Transaction-ID. Eine verspätete Antwort kann wie die Antwort auf Ihre nächste Anfrage aussehen. Ein sorgfältiger Client schließt die Verbindung nach einem Timeout, damit er keine verspätete Antwort für die nächste hält.

Ein Master. Eine RTU-Antwort sagt nicht, welche Register sie enthält. Bei zwei Mastern am Bus können Sie Werte erhalten, die für jemand anderen bestimmt waren, und sie sehen gültig aus. Das ist der gefährlichste Fehler in diesem Aufbau, weil nichts einen Fehler meldet.

Echo. Manche Adapter geben zurück, was sie senden. Bei Function 05 und 06 entspricht eine normale Antwort der Anfrage, ein Echo sieht also wie eine Bestätigung aus, und eine spätere Exception bleibt womöglich unbemerkt. Lesen Sie den Wert nach einem Schreibzugriff zurück.

Broadcast. Unit 0 ist auf seriellen Leitungen Broadcast, und Geräte antworten darauf nicht. Ein Client, der auf eine Antwort wartet, läuft in den Timeout.

Herstellerprotokolle. Manche Solar-Datenlogger lauschen auf 8899, verpacken Modbus aber in ein eigenes Protokoll wie Solarman V5. Ohne Unterstützung dieses Protokolls funktioniert auf ihnen keines der beiden Framings. FieldKit unterstützt V5 nicht.

Welchen Modus wählen

Bietet der Konverter beide, ist der Gateway-Modus die sicherere Voreinstellung: Sie erhalten eine Transaction-ID, das Gateway übernimmt das serielle Timing, und es kann 0A und 0B melden. Der transparente Modus hat seine Berechtigung, wenn ein Tool rohen seriellen Zugriff verlangt oder wenn Sie die Bytes sehen müssen, die über die Leitung gehen.

Quellen

FAQ

Was ist Modbus RTU over TCP?

Ein RTU-Frame mit Unit-Adresse und CRC, den der Client ohne MBAP-Header innerhalb einer TCP-Verbindung sendet. Ein transparenter Konverter von seriell auf Netzwerk leitet diese Bytes direkt an RS-485 weiter.

Kann ich einen Modbus-TCP-Client mit einem transparenten RS-485-Konverter verwenden?

Nicht mit dem standardmäßigen Modbus-TCP-Framing. Das serielle Gerät empfängt MBAP-Bytes, die es nicht auswerten kann, und bleibt stumm. Verwenden Sie einen Client, der RTU over TCP unterstützt, oder stellen Sie den Konverter auf den Modbus-TCP-Gateway-Modus.

Verrät mir die Portnummer das Protokoll?

Nein. 8899 ist bei Konvertern üblich, aber derselbe Port kann transparentes RTU, ein Modbus-TCP-Gateway oder ein Herstellerprotokoll wie Solarman V5 bedienen.