Alle Lektionen anzeigen
Teil 1
Grundlagen
Teil 2
Modbus RTU
- Lektion 5RS485 erklärt: A, B, Common und Terminierung20 Min.
- Lektion 6Baudrate und Parität: warum 8E1 Standard ist16 Min.
- Lektion 7Das Modbus RTU Frame Byte für Byte, plus CRC18 Min.
- Lektion 8Mehrere Modbus Geräte an einem RS485-Bus16 Min.
- Lektion 9Ihr erstes Modbus Gerät mit mbpoll auslesen22 Min.
- Lektion 10Modbus RTU Fehlersuche: vom Symptom zur Ursache20 Min.
Teil 3
Modbus TCP
Teil 4
Fortgeschritten
- Lektion 16Sicher auf ein Modbus Gerät schreiben18 Min.
- Lektion 17Word Order und Float: gleiche Bytes, anderer Wert22 Min.
- Lektion 18Poll-Intervall und Buslast selbst berechnen18 Min.
- Lektion 19Modbus Sicherheit: das Protokoll hilft nicht16 Min.
- Lektion 20Modbus integrieren: SPS, Home Assistant, Cloud20 Min.
- Lektion 21Modbus Inbetriebnahme: Checkliste und Spickzettel18 Min.
Mehrere Modbus Geräte an einem RS485-Bus
Mehrere Modbus Geräte an einem Bus brauchen eindeutige Adressen, eine durchdachte Abfragerate und echte Timeouts. So vermeiden Sie Kollisionen und Lücken.
Was diese Lektion behandelt
- Der Adressplan: Adresse 0, der reservierte Bereich und die 247 nutzbaren
- Warum eine doppelte Adresse den ganzen Bus lahmlegt, nicht ein Gerät
- Abfragereihenfolge, Timeouts und wie viele Geräte an ein Segment passen
Vorher lesen: RS485 erklärt: A, B, Common und Terminierung, Baudrate und Parität: warum 8E1 Standard ist
Mehrere Modbus Geräte an einem Bus teilen sich eine gemeinsame Leitung, auf der jedes Telegramm bei jedem Gerät ankommt. Nur das erste Byte, die Serveradresse, entscheidet darüber, wer antwortet und wer schweigt. Steht dieselbe Adresse zweimal auf der Linie, liegt nicht ein Gerät still, sondern der ganze Bus. Nach dieser Lektion stellen Sie einen Adressplan auf, erkennen eine doppelte Adresse am Fehlerbild und wählen Timeouts, die den Rest der Anlage nicht ausbremsen.
Woher der Client weiß, wer antwortet
Weil die Adresse vorne im Telegramm steht und der Server sie in der Antwort wiederholt. Hier ist eine vollständige Anfrage an den Zähler mit der Serveradresse 1, der drei Holding-Register ab PDU-Adresse 107 liefern soll, im Datenblatt die Nummer 40108:
01 03 00 6B 00 03 74 17
| Byte | Wert | Feld |
|---|---|---|
| 1 | 01 | Serveradresse: an wen die Frage geht |
| 2 | 03 | Funktionscode FC03, Holding-Register lesen |
| 3 bis 4 | 00 6B | Startadresse, PDU-Adresse 107 |
| 5 bis 6 | 00 03 | Anzahl: 3 Register |
| 7 bis 8 | 74 17 | CRC-16, Low-Byte zuerst |
Die Antwort desselben Zählers auf demselben Adernpaar:
01 03 06 02 2B 00 00 00 64 05 7A
| Byte | Wert | Feld |
|---|---|---|
| 1 | 01 | Serveradresse: wer geantwortet hat |
| 2 | 03 | derselbe Funktionscode FC03 |
| 3 | 06 | Byte Count: 6 Datenbytes folgen |
| 4 bis 9 | 02 2B 00 00 00 64 | die Werte 555, 0 und 100 |
| 10 bis 11 | 05 7A | CRC-16 über das gesamte Telegramm |
Zusammen sind das 1 plus 1 plus 1 plus 6 plus 2, also 11 Bytes. Daraus folgt die Regel: Der Client trägt die Zieladresse ein, der Server setzt seine eigene Adresse in die Antwort, und alle anderen Teilnehmer hören mit und schweigen.
Dieselbe Anfrage an den zweiten Zähler auf Adresse 3 unterscheidet sich in genau einem Punkt: Das erste Byte wird zu 03. Die beiden CRC-Bytes ändern sich dadurch mit, denn die Prüfsumme läuft über das komplette Telegramm. Der Client selbst hat übrigens keine Adresse. Adressiert werden nur Server.
Welche Adressen dürfen Sie nutzen?
Für Geräte gilt der Bereich 1 bis 247. Der Adressraum umfasst insgesamt 256 Adressen, aber 0 ist die Broadcast-Adresse und 248 bis 255 sind reserviert.
| Adresse | Bedeutung |
|---|---|
| 0 | Broadcast, alle Server hören mit |
| 1 bis 247 | individuelle Serveradressen |
| 248 bis 255 | reserviert, nicht verwenden |
Broadcast bedeutet: Jeder Server erkennt Adresse 0 und führt den Befehl aus, aber keiner antwortet, denn sonst würden alle gleichzeitig senden. Deshalb funktioniert Broadcast nur beim Schreiben, niemals beim Lesen. Ein Broadcast-Schreibbefehl sieht so aus:
00 06 00 01 00 03 99 DA
Das ist FC06, schreibe den Wert 3 auf PDU-Adresse 1, gerichtet an alle. Eine Antwort kommt nicht zurück, und das ist so gewollt.
Reserviert heißt nicht, dass Ihr Gerät die Adresse ablehnt. Viele akzeptieren 250 klaglos, und dann läuft es genau so lange gut, bis ein Gateway oder eine neue Firmware sich an die Spezifikation hält.
Was bei doppelter Adresse passiert
Beide Geräte antworten gleichzeitig. Ihre Signale liegen übereinander auf denselben zwei Adern, das Ergebnis ist kein lesbares Frame, und der Client meldet CRC-Fehler oder gar nichts. Weil die Überlagerung von der Bitfolge abhängt, kommen mal gültige und mal kaputte Antworten an, und genau dieses sprunghafte Bild sieht aus wie ein Kabelproblem.
Die Spezifikation schreibt den Herstellern dafür eine Warnung ins Handbuch: Sind zwei Geräte gleich adressiert, kann sich der gesamte serielle Bus abnorm verhalten, sodass der Client keinen einzigen Teilnehmer mehr erreicht. Eine doppelte Adresse legt also nicht ein Gerät lahm, sondern die ganze Linie.
Ein Gerät finden, dessen Adresse Sie nicht kennen
Sie fragen die Adressen der Reihe nach ab, von 1 bis 247, und notieren, welche antwortet. Ein Scanner macht nichts anderes: Er schickt dieselbe kurze Leseanfrage an jede Adresse und wertet aus, ob eine Antwort kommt oder der Timeout zuschlägt.
Entscheidend ist die Vorbedingung: genau ein Gerät am Bus. Sweepen Sie mit der kompletten Linie, dann liefert eine vorhandene Doppeladresse Treffer, die es gar nicht gibt. Baudrate und Parität müssen dabei stimmen, sonst antwortet niemand, obwohl alle da sind. Wie ein solcher Durchlauf abläuft, steht in der Anleitung zum Scannen eines Modbus-Netzwerks.
Wie viele Geräte passen an ein Segment?
Ohne Repeater sind 32 Geräte immer zulässig. Braucht auch nur ein Teilnehmer eine Leitungspolarisierung, kostet Sie das vier Plätze, es bleiben also 28.
Die Adressen 1 bis 247 klingen nach 247 Teilnehmern, sind aber keine Zusage über den Bus. Elektrisch zählt das Segment, und diese Grenze kommt zuerst.
Mehr als 32 geht nur, wenn jedes Gerät eine anteilige Unit Load mitbringt und das so im Datenblatt steht: mit Transceivern von einem Achtel Unit Load passen bis zu 256 Geräte an ein Segment, mit externem Fail-safe-Biasing noch 96. Sind Sie an der Grenze, hilft ein Repeater. Er macht aus einer langen Linie zwei Segmente, die jeweils wieder eigene Teilnehmer zählen dürfen, jedes mit Terminierung an seinen beiden Enden. Welches Kabel und welche Terminierung dazugehören, steht in der Anleitung zur RS485-Verkabelung für Modbus, und die elektrischen Hintergründe klärt die Lektion zu RS485, Terminierung und Biasing.
In welcher Reihenfolge fragen Sie ab?
Der Reihe nach, denn ein Client spricht immer nur mit einem Gerät. Die Zykluszeit ist damit schlicht die Summe aller Transaktionen, und das langsamste Gerät bestimmt das Tempo für alle.
Ein durchgerechnetes Beispiel: zehn Energiezähler, 9600 Baud, pro Zähler ein Block von 24 Registern. Die Anfrage ist 8 Byte lang, die Antwort 53 Byte, davor und danach stehen je 3,5 Zeichenzeiten Pause, zusammen 7. Das sind 68 Zeichenzeiten zu je 1,1458 ms bei 9600 Baud, also 77,92 ms reine Buszeit pro Zähler. Rechnet man 20 ms Verarbeitungszeit im Gerät dazu, eine Annahme und kein Wert aus der Spezifikation, sind es 97,92 ms pro Zähler und rund 979 ms für den Zyklus. Fragen Sie dieselben 24 Register in zwölf einzelnen Lesevorgängen ab, wächst derselbe Zyklus auf 5,7 Sekunden, also fast das Sechsfache.
Daraus folgt die Planungsregel: erst die Zykluszeit rechnen, dann das Poll-Intervall festlegen, nicht umgekehrt. Wie Sie daraus die Buslast bestimmen, vertieft die Lektion zu Poll-Intervall und Buslast. Welche Zähler sich für dichte Abfragen eignen, zeigt der Vergleich von Modbus-Energiezählern für Installateure.
Timeouts und Retries, die nichts kaputt machen
Die Spezifikation nennt bei 9600 Baud einen typischen Response-Timeout von 1 Sekunde bis zu einigen Sekunden und ein Turnaround-Delay von 100 bis 200 ms nach einem Broadcast. Das sind Anhaltspunkte, keine Vorgaben, und hier wird oft zu großzügig eingestellt.
Rechnen Sie das Beispiel weiter: Von den zehn Zählern fällt Zähler 7 aus. Neun Geräte brauchen zusammen 881 ms, dazu kommt einmal der volle Timeout von 1000 ms. Der Zyklus wächst auf 1.881 ms, verdoppelt sich also fast wegen eines einzigen Geräts. Macht der Client drei Versuche, bevor er aufgibt, wartet er dreimal 1000 ms auf dasselbe Gerät: 881 ms plus 3000 ms sind 3.881 ms. Steht das Poll-Intervall auf 2 Sekunden, läuft der Zyklus ab diesem Moment über sein eigenes Intervall, und Sie sehen Lücken bei allen Geräten, nicht nur beim toten.
Häufige Fehler
Adressen ohne Plan vergeben. Zwei Geräte auf 1, weil beide ab Werk auf 1 stehen, ist die häufigste Variante. Das Ergebnis sind CRC-Fehler, die nach einem Kabelproblem aussehen. Konfigurieren Sie jedes Gerät einzeln, bevor es an die Linie kommt.
Mit der kompletten Linie sweepen. Steckt bereits eine Doppeladresse im Bus, liefert der Sweep unbrauchbare Treffer. Hängen Sie ein Gerät nach dem anderen an und lesen Sie es einzeln aus.
Adresse 0 oder 250 verwenden. 0 ist Broadcast, 248 bis 255 sind reserviert. Manche Geräte übernehmen solche Werte trotzdem, und dann läuft es genau so lange gut, bis ein anderes Gerät sich an die Spezifikation hält.
Ein totes Gerät im Zyklus stehen lassen. Bei 1 Sekunde Timeout und drei Versuchen kostet ein einziger Ausfall drei Sekunden pro Runde, mehr als die neun funktionierenden Zähler zusammen. Das ist die übliche Erklärung für den Satz, seit letzter Woche sei alles langsam.
Selbst ausprobieren
Ziel dieser Übung: Sie erstellen einen Adressplan und sehen das Fehlerbild einer doppelten Adresse mit eigenen Augen.
- 1
Bus auf Papier zeichnen
Notieren Sie, welches Gerät an welcher Stelle der Linie sitzt und welche Serveradresse es bekommt. Vergeben Sie ausschließlich Adressen zwischen 1 und 247.
- 2
Die zwei Enden markieren
Zeichnen Sie die beiden physikalischen Enden der Linie ein und markieren Sie dort die Terminierung. Nur an diesen zwei Stellen.
- 3
Geräte einzeln anschließen
Hängen Sie ein Gerät an, lesen Sie es aus, und erst dann kommt das nächste dazu. So schließen Sie Verdrahtung und Adresse gleichzeitig aus.
- 4
Doppelte Adresse absichtlich erzeugen
Stellen Sie zwei Geräte bewusst auf dieselbe Adresse und lesen Sie diese Adresse aus. Notieren Sie, was Sie sehen: keine Antwort, oder abwechselnd gültige und fehlerhafte Frames.
- 5
Adressen wieder eindeutig machen
Stellen Sie die Adressen zurück und prüfen Sie, ob alle Geräte wieder antworten.
- 6
Zykluszeit ausrechnen
Zählen Sie Ihre Geräte, nehmen Sie die Registeranzahl pro Gerät und addieren Sie die Transaktionen so, wie es der Abschnitt zur Abfragereihenfolge vormacht. Legen Sie das Poll-Intervall deutlich über dieses Ergebnis.
- 7
Klemmenleiste beschriften
Kleben Sie ein Etikett mit Baudrate, Parität und Adresse an die Klemmenleiste. Der nächste Monteur muss dann nicht erneut sweepen.
Vervollständigen Sie danach dieses Paar. Die obere Zeile ist die geprüfte Anfrage an Server 1, die untere geht an Server 3:
Anfrage an Server 1: 01 03 00 6B 00 03 74 17
Anfrage an Server 3: 03 03 00 6B 00 03 __ __
Die letzten beiden Bytes sind nicht 74 17, denn die Prüfsumme läuft über das gesamte Telegramm inklusive Adressbyte. Wie Sie sie ausrechnen, steht in der Lektion zu RTU-Frame und CRC.
Ohne Hardware. Starten Sie zwei Instanzen des pymodbus-Simulators auf verschiedenen TCP-Ports und fragen Sie beide abwechselnd ab. pymodbus 3.15.0 ist kostenlos nutzbar, auch gewerblich. Die mitgelieferte Konfiguration lauscht auf Port 5020; für die zweite Instanz kopieren Sie die Setup-Datei und tragen in server_list einen anderen Port ein:
pymodbus.simulator --modbus_server server --modbus_device device --http_port 8081
pymodbus.simulator --json_file bus2.json --modbus_server server --modbus_device device --http_port 8082
Eine doppelte Adresse lässt sich dort nicht nachstellen, weil auf TCP die IP-Adresse die Geräte unterscheidet und nicht das Adressbyte. Genau dieser Unterschied ist die Brücke zum nächsten Kapitel.
Erwartetes Ergebnis: ein Adressplan auf Papier, eine ausgerechnete Zykluszeit und das Fehlerbild einer doppelten Adresse mit eigenen Augen gesehen.
Zusammenfassung
- Auf einem RS485-Bus hört jedes Gerät jedes Telegramm mit, und nur die Serveradresse im ersten Byte entscheidet, wer antwortet.
- Geräte bekommen Adressen zwischen 1 und 247, denn 0 ist Broadcast und 248 bis 255 sind reserviert.
- Zwei Geräte mit derselben Adresse senden gleichzeitig und machen nicht ein Gerät, sondern den gesamten Bus unbrauchbar.
- Ohne Repeater sind 32 Geräte zulässig, mit Leitungspolarisierung noch 28, und der Adressbereich sagt darüber nichts aus.
- Ein Client fragt immer nur ein Gerät ab, deshalb verlängert ein totes Gerät den Zyklus für alle anderen mit.
Überprüfen Sie sich selbst
Vier Fragen zu dieser Lektion. Zu jeder Antwort gibt es eine Erläuterung.
Frage 1 von 4
Selbst sehen, wie es funktioniert?
Das ModbusCloud Gateway liest die Geräte aus diesem Kurs aus, ohne dass Sie ein einziges Register programmieren.