Modbus TCP Timeout oder Connection refused: Checkliste zur Fehlersuche

· Von Vladimir Chemeris, Entwickler von Modbus TCP FieldKit

Kurzantwort: Finden Sie zuerst die Schicht. Connection refused heißt: Die IP-Adresse funktioniert, aber auf diesem Port lauscht nichts. Ein Connect-Timeout deutet auf Routing, eine Firewall oder einen toten Host. Steht die Verbindung und laufen danach Lesezugriffe in den Timeout, prüfen Sie Unit-ID und Framing. Eine Modbus Exception bedeutet, dass das Netzwerk in Ordnung ist.

Das Symptom lesen

Symptom Was es ausschließt Als Nächstes prüfen
Connection refused (Verbindung abgelehnt) Host läuft, Route funktioniert Portnummer, Dienst am Gerät aktiviert
Connect timeout Noch nichts Gleiches Subnetz? VLAN, Firewall, Stromversorgung des Geräts
Verbindung steht, Lesezugriffe laufen in den Timeout Netzwerk und Port Unit-ID, Modbus TCP vs. RTU-Framing, Client-Limit
Funktioniert, fällt dann in Abständen aus Grundeinstellungen Abfragerate, konkurrierende Clients, Wi-Fi-Qualität
Exception 83 02 und ähnliche Den gesamten Netzwerkpfad Adressierung. Siehe Exception Codes
Exception 0A oder 0B Den Weg vom Client zum Gateway Die serielle Seite hinter dem Gateway

Den ersten und den dritten Fall haben wir auf einem lokalen Server mit pymodbus 3.16.1 nachgestellt: Ein geschlossener Port lieferte ConnectionRefusedError, und ein Frame mit einer Protocol-ID ungleich null bekam gar keine Antwort, nur einen Client-Timeout. Schweigen sagt weniger aus als ein Fehler.

Schritt 1: Erreichen Sie den Host?

Pingen Sie ihn an, wenn das Gerät ICMP erlaubt. Viele Industriegeräte tun das nicht, ein fehlgeschlagener Ping beweist also wenig. Prüfen Sie, dass beide Seiten im selben Subnetz liegen, und achten Sie auf Gast-WLAN, das Clients oft voneinander isoliert.

Auf dem iPhone gibt es eine weitere Hürde: iOS fragt bei der ersten Verbindung nach der Berechtigung für Lokales Netzwerk. Haben Sie „Nicht erlauben“ gewählt, kann die App nichts in Ihrem LAN erreichen, bis Sie die Berechtigung unter Einstellungen einschalten.

Schritt 2: Stimmt der Port?

Der Implementation Guide reserviert TCP 502 für Modbus. Reale Geräte weichen ab. Gateways verwenden oft einen anderen Port, und an RS-485-Konvertern tauchen 8899 und 4196 auf. Geräte suchen in FieldKit prüft standardmäßig 502, 1502, 8899 und 4196 und zeigt Ihnen, welche geantwortet haben.

Eine Portnummer verrät nicht das Protokoll. Port 8899 kann ein transparenter Konverter sein, ein Modbus-TCP-Gateway oder ein Solarman-Logger, der V5 spricht.

Schritt 3: Verbunden, aber stumm

Das ist der häufigste Fall. Drei Ursachen decken das meiste ab.

Falsche Unit-ID. Hinter einem Gateway wählt die Unit-ID das serielle Gerät aus. Senden Sie eine Nummer, die kein Gerät hat, antwortet ein Gateway nach Spezifikation mit Exception 0B, andere lassen den Client in den Timeout laufen. Scannen Sie die gängigen Werte. Mehr zur Unit-ID.

Falsches Framing. Ein Konverter im transparenten Modus reicht Bytes direkt an RS-485 weiter. Eine Anfrage mit MBAP-Framing bedeutet dem Gerät auf der anderen Seite nichts, also sagt es nichts. Wechseln Sie zu RTU over TCP und versuchen Sie einen Lesezugriff. So erkennen Sie, welchen Modus Sie haben.

Zu viele Clients. Der Implementation Guide erlaubt Geräten, ihre Verbindungen zu begrenzen, und kleine Geräte lassen womöglich nur einen oder zwei zu. Schließen Sie SCADA, andere Poller und alte Sitzungen und versuchen Sie es erneut. Ein Gateway nimmt Ihre TCP-Verbindung unter Umständen an und liefert Ihnen trotzdem nichts.

Schritt 4: Es funktioniert, dann nicht mehr

  • Langsamer abfragen. RS-485 ist langsam. Bei 9600 Baud dauert das Lesen von 125 Registern allein auf der Leitung etwa eine Drittelsekunde, und ein Poller, der schneller abfragt, als der Bus antworten kann, baut einen Rückstau auf.
  • Timeout erhöhen. Ein Konverter bringt Latenz mit. Probieren Sie 2000 ms, bevor Sie einen Fehler annehmen.
  • Nach einem zweiten Master suchen. RTU hat keine Transaction-ID, daher können zwei Master an einer Leitung gegenseitig ihre Antworten empfangen.
  • Wi-Fi prüfen. Ein schwaches Signal in einem Stahlschrank sieht aus wie ein unzuverlässiges Gerät. Stellen Sie den Wert als Diagramm dar und achten Sie auf die Lücken.

Schritt 5: Mit einem funktionierenden Client vergleichen

Scheitert ein Tool und ein anderes funktioniert, liegt die Antwort im Unterschied. Notieren Sie, was jedes sendet: Unit-ID, Protocol-ID, Framing und Adresse. Zeichnen Sie den funktionierenden Frame mit Wireshark auf und fügen Sie ihn in den Frame-Decoder ein.

Quellen

FAQ

Warum verbindet sich Modbus TCP, antwortet aber nicht?

Der TCP-Port ist offen, aber auf Modbus-Ebene antwortet nichts. Übliche Ursachen sind eine falsche Unit-ID hinter einem Gateway, ein RTU-Konverter im transparenten Modus, der RTU-Frames erwartet, oder ein Gerät, das bereits die maximale Zahl an Clients bedient.

Was ist der Standard-Port von Modbus TCP?

Port 502. Der Implementation Guide reserviert ihn für Modbus, und viele Gateways und Testtools bieten auch andere Ports an, etwa 1502 oder 8899.

Heißt Connection refused, dass das Gerät ausgeschaltet ist?

Nein. Es bedeutet, dass etwas unter dieser IP-Adresse geantwortet und den Port abgelehnt hat. Der Host läuft, und der Port ist falsch oder der Dienst läuft nicht. Ein toter Host führt stattdessen zu einem Timeout.