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.
Baudrate und Parität: warum 8E1 Standard ist
Modbus Baudrate und Parität müssen auf jedem Gerät gleich sein. Sie lernen, warum die Spezifikation 19200 8E1 vorgibt und was 3,5 Zeichen Pause bewirken.
Was diese Lektion behandelt
- Die vier Einstellungen, die auf jedem Gerät gleich sein müssen
- Elf Bit pro Zeichen, und die Pause von 3,5 Zeichen als Grenze
- Ein Gerät wiederfinden, dessen Einstellungen niemand notiert hat
Vorher lesen: RS485 erklärt: A, B, Common und Terminierung
Baudrate und Parität handelt kein Modbus-Gerät mit dem anderen aus. Sie stellen beide Seiten von Hand ein, und weicht ein einziger Wert ab, bleibt die Linie stumm. Aus denselben Parametern folgt außerdem die gesamte Zeitrechnung von Modbus RTU, denn das Protokoll erkennt Anfang und Ende eines Frames nur an der Pause davor und danach. Nach dieser Lektion lesen Sie die vier Werte aus einem Datenblatt ab und rechnen die zugehörigen Pausen selbst aus.
Vier Einstellungen, die überall gleich sein müssen
Schauen wir zuerst auf einen konkreten Dialog. So sieht die serielle Konfiguration eines Energiezählers aus, der an einer SPS oder an einer Modbus-Erweiterung im Gebäudeleitsystem hängt:
| Feld im Dialog | Wert | Was dahintersteckt |
|---|---|---|
| Baud rate | 9600 | Bits pro Sekunde auf der Leitung |
| Data bits | 8 | ein Nutzbyte pro Zeichen |
| Parity | Even | ein Prüfbit, das die Anzahl der Einsen gerade macht |
| Stop bits | 1 | eine Bitzeit Ruhe am Ende des Zeichens |
Diese Kombination schreibt man kurz als 9600 8E1: 8 Datenbits, Even Parity, 1 Stoppbit. Ein zweiter Zähler am selben Bus, der auf 9600 8N1 steht, passt nicht dazu, obwohl die Baudrate identisch ist.
Daraus folgt die Regel, und die Spezifikation formuliert sie ohne Spielraum: Übertragungsmodus und serielle Parameter müssen auf einer Modbus-Linie bei allen Teilnehmern gleich sein. Eine Aushandlung wie bei Ethernet gibt es nicht. Steht daneben noch ein Feld "Mode" mit RTU und ASCII, lassen Sie es auf RTU. RTU ist für jedes Gerät Pflicht, ASCII nur eine Option und in diesem Kurs kein Thema. Wie diese Parameter ins Gesamtbild passen, steht in der Übersicht zu Modbus RTU als Protokoll.
Warum ein Zeichen immer 11 Bit dauert
Ein Zeichen ist ein Byte plus Rahmen. Nehmen wir die ersten beiden Bytes einer FC03-Anfrage, 01 03 00 6B 00 03 74 17. So gehen die Serveradresse 0x01 und der Funktionscode 0x03 bei 8E1 über die Leitung:
| Position | Bedeutung | Byte 0x01 | Byte 0x03 |
|---|---|---|---|
| 1 | Startbit | 0 | 0 |
| 2 bis 9 | 8 Datenbits, LSB zuerst | 1 0 0 0 0 0 0 0 | 1 1 0 0 0 0 0 0 |
| 10 | Paritätsbit, even | 1 | 0 |
| 11 | Stoppbit | 1 | 1 |
0x01 enthält genau eine Eins. Das Paritätsbit ergänzt auf eine gerade Anzahl und wird selbst 1. 0x03 enthält zwei Einsen, die Anzahl ist bereits gerade, also bleibt das Paritätsbit 0. Beide Zeichen sind trotzdem exakt gleich lang.
Die Regel dahinter: 1 Startbit plus 8 Datenbits plus 1 Paritätsbit plus 1 Stoppbit ergeben 11 Bit. Und der Sonderfall, der die Regel rettet: Fällt das Paritätsbit weg, schreibt die Spezifikation dafür ein zweites Stoppbit vor, wörtlich "the use of no parity requires 2 stop bits". Der Rahmen bleibt bei 11 Bit, und damit bleibt auch die Zeitrechnung des Busses gleich, egal welche Parität Sie einstellen.
8E1, 8O1, 8N2 und der Sonderfall 8N1
Vier Kombinationen begegnen Ihnen im Feld, aber nur drei stehen so in der Spezifikation:
| Kurzform | Bits pro Zeichen | Status in der Spezifikation |
|---|---|---|
| 8E1 | 11 | Pflicht, und Even Parity ist der vorgeschriebene Standardwert |
| 8O1 | 11 | erlaubt, optional |
| 8N2 | 11 | erlaubt, die Unterstützung wird empfohlen |
| 8N1 | 10 | nicht konform, weil das zweite Stoppbit fehlt |
8N1 kommt trotzdem viel vor, es steht nur nicht in der Spezifikation. Beim Eastron SDM630 etwa trägt das Holding-Register "Network Parity Stop" ab Werk den Wert 0, und der bedeutet ein Stoppbit ohne Parität. Ein sehr verbreiteter Zähler startet also außerhalb der Norm.
Welche Baudrate, und warum nicht die höchste
9600 und 19200 muss jedes Gerät beherrschen, und 19200 ist laut Spezifikation der vorgeschriebene Standardwert. Dieselbe Spezifikation nennt an anderer Stelle 9600 als die typische Rate im Feld, und viele Geräte kommen ab Werk genau so heraus. Vorgabe und Praxis laufen hier auseinander, und deshalb probieren Sie bei einem unbekannten Gerät zuerst 9600.
Eine Grenze gibt es nach oben nicht im Protokoll, wohl aber in der Physik. Jede implementierte Baudrate muss beim Senden auf 1 Prozent genau eingehalten werden und beim Empfangen 2 Prozent Abweichung vertragen. Wichtiger für die Anlage: Geschwindigkeit und Leitungslänge tauschen gegeneinander, und schnellere Flanken vertragen weniger Störeinkopplung. Wählen Sie die niedrigste Rate, mit der Sie Ihre Zykluszeit erreichen; diese Rechnung führt die Lektion zu Pollintervall und Buslast aus. Wie Länge, Terminierung und Topologie zusammenhängen, steht in der Anleitung zur RS485-Verkabelung für Modbus und in der Lektion zu RS485 als physikalischer Ebene.
Wie lange dauert ein Zeichen bei Ihrer Baudrate?
Die Rechnung passt in eine Zeile: Zeichenzeit gleich 11 geteilt durch die Baudrate. Bei 9600 Baud sind das 11 geteilt durch 9600, also 0,0011458 Sekunden oder 1,1458 ms. Auf dieser einen Zahl steht die gesamte Zeitrechnung des Busses.
| Baudrate | 1 Zeichen | t1,5 | t3,5 |
|---|---|---|---|
| 9600 | 1,146 ms | 1,719 ms | 4,010 ms |
| 19200 | 0,573 ms | 0,859 ms | 2,005 ms |
| 38400 | 0,286 ms | fest 750 Mikrosekunden | fest 1,750 ms |
Verdoppeln Sie die Baudrate, halbiert sich jede Zeile. Das ist der eigentliche Grund, warum jemand von 9600 auf 19200 geht: nicht die Datenmenge, sondern die Pausen.
Warum die Pause zwischen Frames die Grenze ist
Ein RTU-Frame hat kein Längenfeld und kein Startzeichen. Der Empfänger erkennt die Grenze ausschließlich an der Stille auf der Leitung. Deshalb sind zwei Zeitfenster Teil des Protokolls: Eine Pause von mindestens 3,5 Zeichenzeiten trennt zwei Frames, und eine Lücke von mehr als 1,5 Zeichenzeiten innerhalb eines Frames macht dieses Frame ungültig. Der Empfänger verwirft es dann kommentarlos.
Oberhalb von 19200 Baud empfiehlt die Spezifikation feste Timer, weil die Interrupt-Last sonst zu hoch wird: 750 Mikrosekunden für t1,5 und 1,750 ms für t3,5. Zwei Details werden dabei oft falsch weitergegeben. Die Grenze liegt bei "größer als 19200", auf genau 19200 Baud gelten noch die gerechneten Werte. Und die festen Zeiten sind eine Empfehlung, keine harte Pflicht.
Diese Pausen kosten echte Zykluszeit. Eine FC03-Anfrage ist 8 Byte lang, das sind bei 9600 Baud 9,17 ms Sendezeit, dazu zweimal t3,5 mit zusammen 8,02 ms. Vom ersten Bit bis zum frühestmöglichen Antwortbeginn vergehen also rund 17,19 ms, und darin steckt noch keine einzige gelesene Messgröße.
Ein unbekanntes Gerät finden, ohne zu raten
Ein Zähler im Verteiler, kein Datenblatt, kein Vorgänger, den man fragen kann. Raten Sie nicht, sondern gehen Sie die Matrix systematisch ab und ändern Sie dabei immer nur eine Größe.
Die Reihenfolge folgt der Wahrscheinlichkeit: erst 9600 8N1, dann 9600 8E1, dann 19200 8E1, danach der Rest. Die Adresse halten Sie zunächst auf 1 fest, denn das ist die häufigste Werkseinstellung. Erst wenn keine Parameterkombination antwortet, gehen Sie die Serveradressen 1 bis 247 durch und lassen dabei die Parameter stehen. Wie ein solcher Sweep abläuft, beschreibt der Beitrag zum Scannen eines Modbus-Netzwerks.
Häufige Fehler
Annehmen, dass No Parity der Standard ist. Die Spezifikation gibt 19200 8E1 vor, während viele günstige Geräte ab Werk auf 9600 8N1 stehen. Beide Annahmen sind zu oft falsch. Lesen Sie den Wert im Datenblatt nach oder gehen Sie die Kombinationen ab.
Zwei Dinge gleichzeitig ändern. Wer Baudrate und Parität in einem Schritt verstellt, kann das Ergebnis nicht mehr zuordnen. Ändern Sie eine Größe, testen Sie, und gehen Sie erst dann weiter.
Die höchste Baudrate wählen, weil das Gerät sie anbietet. Höhere Geschwindigkeit bedeutet kürzere zulässige Leitungslänge und weniger Reserve gegen Störungen. Nehmen Sie die niedrigste Rate, mit der Ihre Zykluszeit noch aufgeht.
Erwarten, dass eine falsche Parität eine Fehlermeldung erzeugt. Das Gerät sieht ein verstümmeltes Frame, verwirft es und schweigt. Sie bekommen einen Timeout, und der sieht exakt aus wie ein Kabelbruch oder eine falsche Adresse.
Selbst ausprobieren
Ziel: einmal selbst rechnen, danach den Effekt einer falschen Einstellung sehen. Sie brauchen ein Gerät am Bus und einen USB-RS485-Adapter. Verwendet wird mbpoll, kostenlos nutzbar, auch gewerblich. Adapter, Portname und Schalter gehen Schritt für Schritt aus der Lektion über das erste Gerät hervor.
- 1
Zeichenzeit ausrechnen
Teilen Sie 11 durch Ihre Baudrate. Bei 9600 Baud kommen 1,1458 ms heraus.
- 2
t3,5 ausrechnen
Multiplizieren Sie die Zeichenzeit mit 3,5. Bei 9600 Baud sind das 4,010 ms.
- 3
Dieselbe Rechnung für 19200 Baud
Füllen Sie die offenen Zeilen im Block unten aus und prüfen Sie, ob sich beide Werte halbieren.
- 4
Ein Register mit korrekten Parametern lesen
Setzen Sie in der Kommandozeile genau die Werte ein, die im Gerät stehen.
- 5
Nur die Parität verstellen
Wiederholen Sie den Aufruf mit einer Parität, die das Gerät nicht hat, und notieren Sie, was Sie sehen.
- 6
Nur die Baudrate verstellen
Setzen Sie die Parität zurück und verdoppeln Sie stattdessen die Baudrate. Vergleichen Sie das Bild mit dem vorigen Schritt.
Zeichenzeit = 11 / Baudrate
9600 Baud = 11 / 9600 = 1,1458 ms
t3,5 = 3,5 x 1,1458 = 4,010 ms
19200 Baud = 11 / 19200 = ? ms
t3,5 = 3,5 x ? = ? ms
mbpoll -m rtu -a 1 -b 9600 -P none -t 4 -r 1 -c 2 -1 /dev/ttyUSB0
mbpoll -m rtu -a 1 -b 9600 -P even -t 4 -r 1 -c 2 -1 /dev/ttyUSB0
mbpoll -m rtu -a 1 -b 19200 -P none -t 4 -r 1 -c 2 -1 /dev/ttyUSB0
Ohne Hardware. Starten Sie den Simulator von pymodbus über TCP, ebenfalls kostenlos nutzbar, auch gewerblich, und stellen Sie fest, dass Baudrate und Parität dort keine Rolle spielen, weil Modbus TCP keine seriellen Parameter kennt. Rechnen Sie die Zeiten auf Papier aus. Unter Linux und macOS können Sie mit einem virtuellen Schnittstellenpaar von socat die vollständige Übung nachstellen.
Erwartetes Ergebnis: 0,573 ms und 2,005 ms in den offenen Zeilen, und zwei fehlgeschlagene Aufrufe, die beide dasselbe Bild liefern. Ein falscher Parameter erzeugt Stille, keine saubere Fehlermeldung. Genau darauf baut die Lektion zur Fehlersuche bei Modbus RTU auf.
Zusammenfassung
- Baudrate, Datenbits, Parität und Stoppbits werden nicht ausgehandelt, deshalb müssen alle Teilnehmer einer Modbus-Linie identisch eingestellt sein.
- Ein RTU-Zeichen ist immer 11 Bit lang, weil bei No Parity ein zweites Stoppbit an die Stelle des Paritätsbits tritt.
- 8E1 ist der vorgeschriebene Standardwert, während 8N1 mit seinen 10 Bit im Feld verbreitet, aber nicht spezifikationskonform ist.
- Die Zeichenzeit ist 11 geteilt durch die Baudrate, also 1,1458 ms bei 9600 Baud, und daraus folgen t1,5 mit 1,719 ms und t3,5 mit 4,010 ms.
- Ein falsch eingestellter serieller Parameter führt zu einem Timeout und nicht zu einer Exception, weil ein verstümmeltes Frame unbeantwortet bleibt.
Ü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.