Der Unterschied zwischen Modbus RTU und Modbus TCP liegt im Netz unter denselben Modbus-Anfragen. Modbus RTU ist für einen seriellen Bus gedacht: Ein Master fragt adressierte Geräte nacheinander über ein RS-485-Leiterpaar ab, und jeder Frame endet mit einer 16-Bit-CRC. Modbus TCP ist für ein IP-Netz gedacht: Ein Client verbindet sich mit der IP-Adresse des Geräts auf Port 502, und ein 7-Byte-MBAP-Header tritt an die Stelle von serieller Adresse und CRC. An einem bestehenden Standort richtet sich die Wahl meist nach der Schnittstelle der vorhandenen Geräte.
Dieser Leitfaden gehört zur Reihe über Modbus und RS-485.
Modbus TCP vs RTU: die Unterschiede
| Modbus RTU | Modbus TCP | |
|---|---|---|
| Transport | Serielle Leitung: RS-485 oder RS-232 für ein einzelnes Gerät | TCP/IP über Ethernet oder WLAN |
| Geschwindigkeit | Standardmäßig 19.200 Baud, 9.600 ebenfalls vorgeschrieben, andere Raten optional | Ethernet mit 10 oder 100 Mbit/s; meist begrenzt die Verarbeitung im Gerät |
| Port | Eine serielle Schnittstelle: RS-485-Klemmen oder ein COM-Port | TCP-Port 502, oder 802 für Modbus Security |
| Geräteadresse | 1 bis 247 auf dem Bus, 0 für Broadcast | IP-Adresse, dazu eine Unit-ID für Geräte hinter einem Gateway |
| Frame | Adresse, Funktionscode, Daten, 16-Bit-CRC | MBAP-Header (7 Bytes), Funktionscode, Daten |
| Fehlerprüfung | CRC in jedem Frame | TCP-Prüfsummen; keine Modbus-CRC |
| Frame-Abgrenzung | Pause von mindestens 3,5 Zeichenzeiten | Längenfeld im Header |
| Gleichzeitige Anfragen | Jeweils eine auf dem Bus | Mehrere Verbindungen; Transaktionskennung ordnet jede Antwort zu |
| Typische Einstellungen | Baudrate, Parität, Stoppbits, Adresse | IP-Adresse, Port 502, Unit-ID |
| Verkabelung | Verdrilltes Leiterpaar als Linienstruktur, Abschluss an beiden Enden | Standortnetzwerk |
| Verbindung beider Varianten | Ein Gateway am Bus beantwortet TCP-Clients und gibt jede Anfrage als RTU-Frame weiter | Die Unit-ID benennt das serielle Gerät hinter dem Gateway |
Der Leitfaden zu RS-485 und Modbus erklärt die serielle Schicht unter Modbus RTU und die Unterschiede zu RS-232. Die Funktionscodes sind bei beiden Varianten gleich: 03 liest Holding-Register, 04 liest Eingangsregister, 06 und 16 schreiben. Datentypen, Wortreihenfolge und Skalierung sind ebenfalls gleich. Der Leitfaden zu Registertabellen erläutert sie.
So funktioniert das Modbus-TCP-Protokoll
Modbus TCP überträgt das Modbus-Anwendungsprotokoll in TCP/IP-Paketen zwischen Client und Server (früher Master und Slave). Ein Client, etwa ein SCADA-System, ein BMS oder ein Gateway, öffnet eine TCP-Verbindung zu einem Server, etwa einem Zähler oder einer SPS, und sendet darüber seine Anfragen. Der Server beantwortet jede Anfrage und sendet nie unaufgefordert Daten.
Ein Server wartet auf TCP-Port 502, den die IANA für Modbus registriert hat. Bei manchen Geräten lässt sich der Port ändern, und manche seriellen Gateways verwenden für jede serielle Leitung einen eigenen Port. Ein Client kann eine Verbindung für viele Anfragen offen halten. Ein Server nimmt Verbindungen mehrerer Clients an, bis zu seiner eigenen Grenze.
Datentabellen und Funktionscodes
Jedes Modbus-Gerät stellt seine Daten, ob über TCP oder RTU, in vier Tabellen bereit:
| Tabelle | Größe eines Eintrags | Zugriff | Lesen mit | Schreiben mit |
|---|---|---|---|---|
| Coils | 1 Bit | Lesen und Schreiben | 01 | 05 (einzeln), 15 (mehrere) |
| Diskrete Eingänge | 1 Bit | Nur Lesen | 02 | Nicht beschreibbar |
| Eingangsregister | 16 Bit | Nur Lesen | 04 | Nicht beschreibbar |
| Holding-Register | 16 Bit | Lesen und Schreiben | 03 | 06 (einzeln), 16 (mehrere) |
Energiezähler stellen ihre Messwerte in Eingangs- oder Holding-Registern bereit. Ein 32-Bit-Wert, etwa eine Spannung als Gleitkommazahl oder ein Energiezählerstand, belegt zwei aufeinanderfolgende Register. Die Registertabelle nennt die Reihenfolge der beiden. Das Telegramm enthält eine nullbasierte Adresse: Das Holding-Register, das ein Handbuch als 40108 angibt, hat die Adresse 107 (0x006B). Der Modbus-Adresskonverter rechnet zwischen beiden Schreibweisen um.
Frames im Vergleich
Eine Anfrage zum Lesen von drei Holding-Registern ab Adresse 0x006B auf Gerät 17 sieht in beiden Varianten so aus:
| Variante | Bytes (hexadezimal) |
|---|---|
| Modbus RTU | 11 03 00 6B 00 03, gefolgt von der 2-Byte-CRC |
| Modbus TCP | 00 01 00 00 00 06 11 03 00 6B 00 03 |
Im TCP-Frame bilden die ersten sieben Bytes den MBAP-Header: Transaktionskennung (0x0001), Protokollkennung (bei Modbus immer 0), Länge des folgenden Teils (6 Bytes) und Unit-ID (0x11). Die Protokolldateneinheit nach dem Header ist identisch. Der Rechner für Modbus CRC und LRC berechnet die RTU-Prüfbytes:
Die Antwort des Servers wiederholt den MBAP-Header mit ihrer eigenen Länge, gefolgt von Funktionscode, Byteanzahl und Registerwerten. Enthalten die drei Register 555, 0 und 100, lautet das Antworttelegramm in Modbus TCP:
00 01 00 00 00 09 11 03 06 02 2B 00 00 00 64
Die Länge beträgt nun 9 Bytes: Unit-ID, Funktionscode, Byteanzahl und 6 Datenbytes. Kann ein Gerät eine Anfrage nicht ausführen, sendet es eine Ausnahmeantwort: den Funktionscode mit gesetztem höchstwertigem Bit (0x83 für Funktion 03), gefolgt von einem Ausnahmecode. Code 02, unzulässige Datenadresse (Illegal Data Address), bedeutet meist eine falsche Adresse oder einen Lesezugriff über das Ende eines Registerblocks hinaus:
00 01 00 00 00 03 11 83 02
Die Modbus-Funktions- und Ausnahmecodes erklären jeden Code.
Ein Zählerwert über RTU und über TCP
Eastron bietet den Drehstromzähler SDM630 mit RS-485 als SDM630-Modbus und mit Ethernet als SDM630-TCP an. Beide Protokolldokumente führen die Spannung Phase 1 gegen Neutralleiter unter der Eingangsregister-Referenz 30001, Protokolladresse 0, als 32-Bit-Gleitkommazahl in zwei Registern, gelesen mit Funktion 04. Die Protokolldateneinheit ist bei beiden 04 00 00 00 02:
| Zähler | Anfrage nach der Spannung von Phase 1 (hexadezimal) |
|---|---|
| SDM630-Modbus mit Busadresse 1 | 01 04 00 00 00 02 71 CB |
| SDM630-TCP mit Unit-ID 1 | 00 01 00 00 00 06 01 04 00 00 00 02 |
Eine Antwort mit den Daten 43 66 00 00 ergibt 230,0 V, wenn das höherwertige Wort zuerst kommt; der Modbus-Registerdecoder zeigt die anderen Wortreihenfolgen. Eastron veröffentlicht für jedes Modell eine eigene Registertabelle. Prüfen Sie deshalb jeden Punkt in der Tabelle des Modells vor Ort, statt anzunehmen, dass die serielle Tabelle übertragbar ist.
Zeitbedarf und Durchsatz
Auf einem RTU-Bus läuft jeweils nur eine Anfrage. Ihre Dauer umfasst die Übertragungszeit von Anfrage und Antwort, die Antwortzeit des Geräts und die Pause zwischen Frames. Bei 9.600 Baud und gerader Parität braucht jedes Zeichen 11 Bit, also ein Byte etwa 1,15 ms. Der Modbus-Leitfaden für serielle Leitungen legt oberhalb von 19.200 Baud eine Frame-Pause von 1,75 ms fest. Der Rechner für Modbus-RTU-Zeitbedarf summiert die Zeiten für einen ganzen Bus:
Der Leitfaden zu Abfragen und Wiederholungen zeigt, wie ein ausgefallenes Gerät den Zyklus verlängert. Bei Modbus TCP ist das Netzwerk selten der Engpass. Häufig begrenzen die Verarbeitungszeit des Geräts und die Zahl gleichzeitiger Verbindungen. Viele Zähler lassen nur wenige TCP-Verbindungen zu, manche nur eine. Prüfen Sie diese Grenze, bevor mehrere Systeme denselben Zähler abfragen.
Modbus-TCP-Verbindung testen
Prüfen Sie die Verbindung Schicht für Schicht. So weist jeder Fehler auf eine einzige Ursache hin:
- Lesen Sie IP-Adresse, Subnetzmaske und Standardgateway des Geräts am Display oder im Konfigurationswerkzeug ab. Prüfen Sie, ob der Client im selben Subnetz liegt oder ob ein Router und die Firewall den Verkehr zulassen.
- Prüfen Sie von einem Computer in diesem Netz, ob TCP-Port 502 eine Verbindung annimmt. Unter macOS oder Linux meldet
nc -vz 192.0.2.10 502, ob der Port offen ist (setzen Sie die Adresse Ihres Geräts ein). - Lesen Sie mit einem Modbus-Client ein Register, dessen Wert Sie am Display des Geräts sehen, etwa eine Phasenspannung. Verwenden Sie die Unit-ID aus dem Handbuch.
- Vergleichen Sie Wert, Skalierung und Einheit mit dem Display. Ergänzen Sie erst danach den Rest der Registertabelle.
- Öffnet sich der Port, aber jeder Lesezugriff läuft in einen Timeout, prüfen Sie die Unit-ID und ob ein anderer Client die einzige Verbindung belegt, die das Gerät annimmt.
Modbus RTU zu TCP: Gateways und Unit-IDs
Ein Gateway zwischen serieller Leitung und Ethernet ermöglicht Modbus-TCP-Clients den Zugriff auf RTU-Geräte. Der Client sendet seine TCP-Anfrage an die IP-Adresse des Gateways und trägt die Adresse des seriellen Geräts als Unit-ID ein. Das Gateway sendet die Anfrage auf den Bus, wartet auf die Antwort und gibt sie über TCP zurück.
Drei Punkte erfordern besondere Aufmerksamkeit:
- Unit-ID bei direkten TCP-Geräten. Der Modbus-TCP-Leitfaden sagt, dass die Unit-ID bei Adressierung des Servers über seine IP-Adresse nicht verwendet wird, und empfiehlt 0xFF. Viele Geräte ignorieren sie; manche verlangen 1 oder ihre eigene serielle Adresse. Verwenden Sie den Wert aus dem Gerätehandbuch.
- Timeouts. Der TCP-Timeout des Clients muss länger sein als der serielle Timeout des Gateways plus dessen Wartezeit für andere Anfragen auf dem Bus. Sonst gibt der Client auf, während das Gateway noch wartet.
- RTU über TCP. Manche Umsetzer leiten RTU-Frames mit CRC, aber ohne MBAP-Header unverändert über eine TCP-Verbindung. Das ist nicht Modbus TCP; der Client muss für diesen Modus eingestellt sein. Der Leitfaden zu Protokoll-Gateways erklärt den Unterschied zwischen Brücke und übersetzendem Gateway, und der Leitfaden zu Modbus- und BACnet-Gateways die Auswahl.
Dokumentieren Sie für jeden Punkt IP-Adresse, Port, Unit-ID und das physische Gerät, das antwortet. Nach einem Gateway-Tausch sollten Sie zuerst diese Zuordnung prüfen.
Modbus TCP oder RTU: Auswahl für einen Standort
Wählen Sie den Transport passend zur vorhandenen Geräteschnittstelle:
| Situation | Übliche Wahl |
|---|---|
| Zähler nur mit RS-485-Klemmen in ein oder zwei Verteilungen | Modbus RTU auf einem kurzen Bus oder eine lokale Schnittstelle |
| Geräte mit Ethernet-Anschluss in einem verwalteten Netz | Modbus TCP mit einem mit der Standort-IT abgestimmten Adressplan |
| Bestehender RTU-Bus, den bereits ein BMS abfragt | Über BMS oder Gateway lesen; keinen zweiten Master hinzufügen |
| Viele serielle Geräte, deren Daten mehrere Systeme benötigen | Modbus-TCP-Gateway vor dem Bus |
| Serielle Zähler weit vom Gateway entfernt, ohne möglichen Kabelweg | Drahtlose Modbus-Schnittstelle neben den Zählern |
Beschaffen Sie für beide Varianten vor der Hardwareauswahl die Registertabelle des genauen Modells und Firmwarestands. „Modbus unterstützt“ sagt nichts darüber, welche Werte das Gerät bereitstellt.
Sicherheit
Modbus TCP und Modbus RTU bieten weder Authentifizierung noch Verschlüsselung. Jeder Client mit Zugang zu Port 502 kann lesen und, sofern das Gerät es erlaubt, schreiben. Schützen Sie die Geräte über die Netzarchitektur: ein separates Netz oder VLAN für Steuerungstechnik, Firewallregeln nur für benötigte Systeme und keine Freigabe zum Internet.
Die Modbus Organization veröffentlicht ein eigenes Modbus Security-Protokoll, das Modbus mit TLS und X.509-Zertifikaten auf Port 802 versieht. Beide Enden müssen es unterstützen. Ein Gateway vor einem ungesicherten Modbus-Gerät macht das Gerät nicht sicher; es verschiebt lediglich die Schutzgrenze.
Prüfen Sie Lesezugriffe vor jedem Schreibversuch. Behandeln Sie Schreibzugriffe als eigenen, mit dem Anlagenverantwortlichen abgestimmten Schritt.
Modbus TCP und RTU mit Edge
Edge auf dem ZGW-20 Gateway ist für beide Varianten ein Modbus-Client. Es fragt Modbus-TCP-Geräte im Standortnetz ab, einschließlich RTU-über-TCP-Umsetzern, und Modbus-RTU-Geräte an einem seriellen Anschluss: dem RS-485-Eingang der E/A-Platine in der Industrieausführung oder einem USB-Seriell-Adapter. Jede Verbindung hat eine eigene Warteschlange, eigene Timeouts und ein eigenes Abfrageintervall. Für einen Zähler ohne mögliche Datenleitung zum Gateway liest ein ZMB Modbus Interface die Register über RS-485 und sendet sie über das Zigbee-Mesh. Edge stellt auch einen Modbus-Server bereit. Dadurch kann ein BMS- oder SCADA-System die Standortdaten vom Gateway als Modbus-TCP-Register an Port 10502 lesen. Der Leitfaden zu Modbus- und BACnet-Gateways vergleicht das mit einem eigenständigen Protokollumsetzer. Um Edge zuerst mit einem Zähler zu testen, betreiben Sie es auf einem mit System Manager eingerichteten Raspberry Pi. Ein Modbus-Gerät mit bis zu 32 Registern ist dort kostenlos lizenziert; siehe Edge auf einem Raspberry Pi evaluieren. Der Leitfaden zur Modbus-RS-485-Inbetriebnahme beschreibt die serielle Seite im Detail.
Häufige Fragen
Was ist der Unterschied zwischen Modbus TCP und Modbus RTU?
Modbus RTU läuft über eine serielle Leitung wie RS-485: binäre Frames mit CRC-Fehlerprüfung und ein Master, der Geräte nach Adresse abfragt. Modbus TCP nutzt ein IP-Netz: dieselben Anfragen mit einem 7-Byte-MBAP-Header über TCP an Port 502. TCP übernimmt die Fehlerprüfung. Funktionscodes und Registertabellen bleiben gleich.
Modbus TCP oder RTU: Was soll ich verwenden?
Verwenden Sie die Schnittstelle, die das Gerät bereits hat. Modbus TCP passt zu Geräten mit Ethernet-Anschluss in einem verwalteten Netz und lässt mehrere Systeme ein Gerät im Rahmen seiner Verbindungsgrenze lesen. Modbus RTU passt zu Zählern mit RS-485-Klemmen in ein oder zwei Verteilern, an einem kurzen Bus mit einem Master. Müssen serielle Geräte ein IP-Netz erreichen, setzen Sie ein Gateway vor den Bus.
Welchen Port verwendet Modbus TCP?
TCP-Port 502. Das separate Protokoll Modbus Security kapselt Modbus in TLS und verwendet Port 802.
Welchen Port verwendet Modbus RTU?
Keinen im Sinne eines Netzwerkports. Modbus RTU läuft über eine serielle Schnittstelle: die RS-485-Klemmen des Geräts oder einen COM-Port bzw. USB-Seriell-Adapter am Computer. Port 502 gehört zu Modbus TCP. Ein Seriell-Ethernet-Gateway kann jeder seiner seriellen Leitungen einen eigenen TCP-Port geben.
Was ist die Unit-ID bei Modbus TCP?
Ein Ein-Byte-Feld im MBAP-Header. Ein Gateway leitet damit eine Anfrage an ein serielles Gerät dahinter weiter; die Unit-ID enthält dann dessen Adresse. Für ein direktes Modbus-TCP-Gerät empfiehlt der Leitfaden 0xFF. Viele Geräte erwarten aber 1 oder akzeptieren jeden Wert.
Was ist Modbus RTU über TCP?
Ein RTU-Frame mit Adresse und CRC, der ohne MBAP-Header unverändert über eine TCP-Verbindung gesendet wird. Manche Seriell-Ethernet-Umsetzer arbeiten so. Es ist nicht Modbus TCP; der Client muss für jedes Gerät auf den richtigen Modus eingestellt sein.
Sind Modbus TCP und Modbus TCP/IP dasselbe?
Ja. Beide Namen bezeichnen Modbus-Anfragen in TCP-Paketen in einem IP-Netz, mit dem 7-Byte-MBAP-Header vor jeder Anfrage. Modbus RTU über TCP ist etwas anderes: Es sendet RTU-Frames mit CRC und ohne MBAP-Header über eine TCP-Verbindung.
Wie teste ich eine Modbus-TCP-Verbindung?
Prüfen Sie, ob die IP-Adresse des Geräts in einem Netz liegt, das der Client erreicht, und ob TCP-Port 502 eine Verbindung annimmt. Lesen Sie dann mit der Unit-ID aus dem Handbuch ein Register, dessen Wert Sie am Display des Geräts sehen. Vergleichen Sie Wert, Skalierung und Einheit mit dem Display, bevor Sie den Rest der Registertabelle lesen.