Modbus
Wer heute eine Maschine in Betrieb nimmt, stolperer früher oder später über drei Drähte, ein paar Register und die Frage: „Warum redet das Gerät nicht mit der Steuerung?“ In sehr vielen Fällen ist die Antwort Modbus – ein Kommunikationsprotokoll, das seit den späten 1970er-Jahren existiert und trotzdem in fast jeder neuen Anlage auftaucht. Stromzähler, Frequenzumrichter, Temperaturregler, einfache Sensoren: Viele davon sprechen Modbus, oft als günstigste Option neben teureren Feldbussen.
Modbus ist bewusst einfach gehalten. Genau das macht es robust, herstellerunabhängig und leicht zu lernen – aber auch fehleranfällig, wenn man die wenigen Grundregeln nicht kennt. Dieser Beitrag zeigt, wie Modbus aufgebaut ist, wie Daten zwischen den Geräten ausgetauscht werden und worauf es bei der Inbetriebnahme und Fehlersuche ankommt.
Vorwissen
- Grundlagen industrieller Kommunikation
- Serielle Schnittstellen (RS232, RS485)
- Zahlensysteme und Datentypen: Binär, Hexadezimal, Integer, Float (IEEE 754)
Lernziele
Nach diesem Beitrag kannst du:
- erklären, was Modbus ist und warum es trotz seines Alters so verbreitet ist
- das Master-Slave-Prinzip und den Anfrage-Antwort-Ablauf beschreiben
- die vier Datenbereiche von Modbus unterscheiden und Register richtig adressieren
- die wichtigsten Funktionscodes nennen und eine Fehlerantwort erkennen
- die Übertragungsarten RTU, ASCII und TCP voneinander abgrenzen
- typische Fehler bei einer Modbus-RTU-Inbetriebnahme systematisch eingrenzen
1. Was ist Modbus und wo wird es eingesetzt
Modbus ist ein Kommunikationsprotokoll – also ein vereinbarter Satz von Regeln, nach denen zwei Geräte Daten austauschen. Es legt fest, wie eine Anfrage aussieht, wie die Antwort darauf aussehen muss und in welcher Reihenfolge die einzelnen Bytes übertragen werden. Was Modbus nicht festlegt, ist die Bedeutung der einzelnen Werte. Ob in einem bestimmten Register eine Temperatur, eine Drehzahl oder ein Fehlercode steht, steht im Handbuch des jeweiligen Geräts.
Entstanden ist Modbus als firmeneigenes Protokoll für speicherprogrammierbare Steuerungen. Heute ist die Spezifikation offen und frei verfügbar, niemand zahlt Lizenzgebühren dafür. Diese Kombination – einfach, kostenlos, offen dokumentiert – hat dazu geführt, dass praktisch jeder Hersteller von Automatisierungstechnik eine Modbus-Schnittstelle anbietet.
In der Praxis trifft man Modbus überall dort, wo Geräte gelegentlich ein paar Werte austauschen müssen, ohne dass extreme Geschwindigkeit gefragt ist: Energiezähler, die ihren Verbrauch an eine Leitwarte melden. Frequenzumrichter, die Drehzahl-Sollwerte von der Steuerung bekommen. Klimatechnik, Heizungsregler, Wechselrichter in Photovoltaikanlagen. Modbus ist selten die schnellste oder eleganteste Lösung, aber fast immer eine, die funktioniert und die jeder versteht.
Im Vergleich zu modernen Feldbus-Systemen wirkt Modbus schlicht. Es kennt keine aufwändige Geräteverwaltung und keine zyklische Echtzeit-Garantie. Wie sich Modbus genau in die übrige Feldbus-Welt einordnet, ist ein eigenes Thema – hier reicht die Einordnung: Modbus ist der gemeinsame Nenner, auf den sich Geräte verschiedener Hersteller fast immer einigen können.
Ein Modbus-Slave eines Herstellers liefert in Register 30002 einen Wert. Woher weiß die Steuerung, ob dieser Wert eine Temperatur in °C oder eine Drehzahl in 1/min ist?
- a) Aus der Gerätedokumentation des Herstellers, das Protokoll selbst legt das nicht fest
- b) Modbus überträgt die Einheit automatisch im Telegramm mit
- c) Die Einheit ergibt sich zwingend aus der Registernummer
- d) Die Steuerung erkennt die Einheit am Wertebereich
Richtig: a)
Modbus definiert nur, wie Bytes übertragen werden, nicht ihre physikalische Bedeutung. Welcher Wert in welchem Register liegt und welche Einheit er hat, steht ausschließlich in der Registertabelle des Geräteherstellers. b und d sind frei erfunden, eine Einheitsübertragung gibt es nicht. c ist falsch, weil die Registernummer nur eine Adresse ist und nichts über die Bedeutung aussagt.
Warum ist Modbus trotz seines Alters in neuen Anlagen noch so häufig anzutreffen?
- a) Weil es das schnellste verfügbare Industrieprotokoll ist
- b) Weil es gesetzlich für Automatisierungsanlagen vorgeschrieben ist
- c) Weil es als einziges Protokoll Echtzeitgarantien bietet
- d) Weil es offen, lizenzfrei und herstellerübergreifend einfach umzusetzen ist
Richtig: d)
Die Verbreitung von Modbus beruht on Offenheit, fehlenden Lizenzkosten und der einfachen Implementierung – fast jeder Hersteller unterstützt es. a ist falsch, Modbus ist eher langsam. b gibt es nicht. c ist falsch, gerade Echtzeitgarantien sind nicht die Stärke von Modbus.
2. Master-Slave-Prinzip und Kommunikationsablauf
Modbus folgt einem einfachen Grundprinzip: Ein Gerät gibt den Takt vor, alle anderen warten. Das active Gerät heißt Master, die passiven Geräte heißen Slave. In neueren Spezifikationen werden dieselben Rollen als Client (für den Master) und Server (für die Slaves) bezeichnet – gemeint ist dasselbe.
Der Ablauf ist immer gleich: Der Master schickt eine Anfrage an einen bestimmten Slave. Dieser Slave bearbeitet die Anfrage und schickt eine Antwort zurück. Erst danach darf der Master die nächste Anfrage stellen. Ein Slave wird niemals von sich aus aktiv – er meldet sich nur, wenn er angesprochen wurde. Dieses ständige reihum Abfragen nennt man Polling.
Damit der Master weiß, mit wem er spricht, hat jeder Slave eine eindeutige Slave-Adresse. Gültig sind die Adressen 1 bis 247. Die Adresse 0 ist eine Besonderheit: Sie ist die Broadcast-Adresse. Eine Anfrage an Adresse 0 richtet sich an alle Slaves gleichzeitig – die führen den Befehl aus, antworten aber bewusst nicht, weil sonst alle gleichzeitig auf den Bus sprechen würden.
Eine einzelne Nachricht auf dem Bus – egal ob Anfrage oder Antwort – heißt Telegramm oder Frame. Jedes Telegramm enthält mindestens die Slave-Adresse, die gewünschte Aktion und eine Prüfinformation.
Dieser strenge Anfrage-Antwort-Rhythmus hat eine wichtige Folge: Auf einem Modbus-Strang gibt es nur einen Master. Zwei Master würden sich gegenseitig ins Wort fallen, weil beide gleichzeitig senden wollten. Wer aus einer Anlage zwei Stellen gleichzeitig auf dieselben Geräte zugreifen lassen will, muss sich also etwas überlegen.
Ein Slave mit der Adresse 5 soll einen Messwert liefern, meldet sich aber nie von selbst, obwohl der Wert sich ständig ändert. Was ist die korrekte Erklärung?
- a) Das ist normales Modbus-Verhalten – ein Slave sendet nur nach einer Anfrage des Masters
- b) Der Slave ist defekt, ein funktionierender Slave sendet bei Änderungen automatisch
- c) Die Slave-Adresse 5 ist für Broadcast reserviert
- d) Der Master hat den Slave noch nicht über seine neue Adresse informiert
Richtig: a)
Im Master-Slave-Prinzip ist der Slave grundsätzlich passiv und antwortet ausschließlich auf Anfragen. Will man aktuelle Werte, muss der Master regelmäßig abfragen (Polling). b ist falsch, weil eigenständiges Senden nicht vorgesehen ist. c stimmt nicht, Broadcast ist Adresse 0. d ist erfunden.
Warum antwortet ein Slave auf eine Anfrage an die Broadcast-Adresse 0 nicht?
- a) Weil Broadcast nur zum Lesen, nicht zum Schreiben verwendet wird
- b) Weil Adresse 0 grundsätzlich ungültig ist und ignoriert wird
- c) Weil der Master Broadcast-Antworten ohnehin verwirft
- d) Weil bei einer Antwort aller Slaves gleichzeitig die Telegramme auf dem Bus kollidieren würden
Richtig: d)
Ein Broadcast geht an alle Slaves gleichzeitig. Würden alle antworten, sendeten sie gleichzeitig auf eine gemeinsame Leitung – die Signale würden sich überlagern und unbrauchbar machen. Deshalb führen Slaves den Broadcast-Befehl aus, schweigen aber. a ist falsch, Broadcast wird typischerweise zum Schreiben genutzt. b ist falsch, 0 ist gültig, aber speziell. c beschreibt nicht den eigentlichen Grund.
Auf einem Modbus-RTU-Strang sollen zwei Steuerungen gleichzeitig als Master arbeiten. Welche Aussage trifft zu?
- a) Das ist problemlos möglich, solange beide unterschiedliche Adressen haben
- b) Zwei Master auf einem Strang führen zu Konflikten, da beide senden wollen
- c) Der zweite Master wird automatisch zum Slave
- d) Das ist erlaubt, solange beide dieselbe Baudrate nutzen
Richtig: b)
Klassisches Modbus erlaubt pro Strang nur einen Master. Zwei aktive Master würden beide ungefragt senden und sich gegenseitig stören. a ist falsch, Adressen betreffen nur Slaves. c passiert nicht automatisch. d löst das Grundproblem nicht.
3. Das Datenmodell: Coils, Register und Adressierung
Damit Master und Slave dieselben Daten meinen, hat Modbus ein festes Datenmodell. Alle Werte eines Slaves sind in vier Bereiche eingeteilt. Zwei davon arbeiten bitweise, zwei wortweise, und sie unterscheiden sich darin, ob man sie nur lesen oder auch schreiben darf.
| Bereich | Größe | Zugriff | Typische Verwendung |
|---|---|---|---|
| Discrete Inputs | 1 Bit | nur lesen | Eingänge, Statusbits (z. B. Schalter offen/zu) |
| Coils | 1 Bit | lesen und schreiben | Ausgänge, Steuerbits (z. B. Relais ein/aus) |
| Input Registers | 16 Bit | nur lesen | Messwerte (z. B. Temperatur, Drehzahl) |
| Holding Registers | 16 Bit | lesen und schreiben | Sollwerte, Parameter (z. B. Grenzwert) |
Ein Coil ist also ein einzelnes Bit, das man setzen oder zurücksetzen kann – der Name stammt historisch von einer Relaisspule. Ein Register ist ein 16-Bit-Wert, mit dem sich Zahlen von 0 bis 65535 darstellen lassen. Ein Discrete Input und ein Input Register sind reine Leseinformationen vom Slave; ein Holding Register und ein Coil kann der Master auch beschreiben.
Der häufigste Stolperstein: die Adressierung
Hier liegt die größte Fehlerquelle bei Modbus überhaupt. Es gibt zwei Zählweisen, die leicht verwechselt werden.
In der klassischen, aus der Dokumentation bekannten Schreibweise haben die vier Bereiche feste Nummernkreise: Coils beginnen bei 00001, Discrete Inputs bei 10001, Input Registers bei 30001, Holding Registers bei 40001. Diese Nummern sind 1-basiert und enthalten die Bereichskennung in der führenden Ziffer. „Holding Register 40005″ meint also das fünfte Holding Register.
Im eigentlichen Telegramm wird aber 0-basiert adressiert, und die Bereichskennung fällt weg. Das fünfte Holding Register (Doku: 40005) wird im Telegramm als Adresse 4 übertragen. Diese Verschiebung um 1 und das Weglassen der führenden Ziffer sind die Ursache für unzählige Inbetriebnahmen, bei denen „der falsche Wert“ gelesen wird.
Werte über mehrere Register
Ein einzelnes Register fasst nur 16 Bit – das reicht für ganze Zahlen bis 65535. Für größere Zahlen oder für Kommazahlen werden zwei aufeinanderfolgende Register zu einem 32-Bit-Wert kombiniert. So überträgt man etwa eine Gleitkommazahl nach IEEE 754 oder einen Zählerstand, der über 65535 hinausgeht.
Dabei lauert die nächste Falle: die Reihenfolge der beiden Register. Das ist eine Frage der Endianness. Manche Geräte legen das höherwertige Wort zuerst ab (Big-Endian), andere das niederwertige (Little-Endian). Liest man die Register in der falschen Reihenfolge zusammen, kommt ein völlig sinnloser Wert heraus. Welche Reihenfolge ein Gerät verwendet, steht im Handbuch – und muss in der auslesenden Steuerung passend eingestellt werden.
Ein Frequenzumrichter soll von der Steuerung einen neuen Drehzahl-Sollwert bekommen. Welcher Datenbereich ist dafür der richtige?
- a) Holding Register
- b) Discrete Input
- c) Input Register
- d) Coil
Richtig: a)
Ein Sollwert ist ein mehrstelliger Zahlenwert, der von außen geschrieben werden muss – das ist genau die Aufgabe des beschreibbaren Holding Registers. b und c sind nur lesbar, scheiden also aus. d ist ein einzelnes Bit und kann keinen Zahlenwert aufnehmen.
In der Gerätedokumentation steht der Messwert in „Input Register 30007″. Welche Adresse wird im Modbus-Telegramm tatsächlich übertragen?
- a) 30007
- b) 30006
- c) 7
- d) 6
Richtig: d)
Die Doku-Adresse ist 1-basiert und enthält die Bereichskennung 3. Im Telegramm fällt die führende Ziffer weg (Input Register ist über den Funktionscode definiert) und die Zählung ist 0-basiert: 30007 wird zu Telegrammadresse 6. a und b behalten fälschlich die Bereichskennung. c vergisst die Verschiebung um 1.
Ein 32-Bit-Float wird über zwei Register übertragen und ergibt einen unsinnigen Wert, obwohl beide Register korrekt gelesen werden. Was ist die wahrscheinlichste Ursache?
- a) Die Baudrate ist zu niedrig eingestellt
- b) Der Slave verwendet eine falsche Adresse
- c) Die beiden Register wurden in falscher Wortreihenfolge zusammengesetzt
- d) Es wurde ein Coil statt eines Registers gelesen
Richtig: c)
Werden beide Register korrekt gelesen, aber falsch herum zu einem 32-Bit-Wert kombiniert (Big- statt Little-Endian oder umgekehrt), entsteht ein sinnloser Wert. a beeinflusst die Geschwindigkeit, nicht den Zahlenwert. b würde gar kein oder ein anderes Register liefern. d ist ausgeschlossen, da Register gelesen wurden.
Worin unterscheiden sich Coils von Discrete Inputs?
- a) Coils sind 16 Bit breit, Discrete Inputs nur 1 Bit
- b) Coils können gelesen und geschrieben werden, Discrete Inputs nur gelesen
- c) Discrete Inputs liegen im Adressbereich 40001, Coils bei 30001
- d) Es gibt keinen Unterschied, beide Begriffe meinen dasselbe
Richtig: b)
Beide sind einzelne Bits, aber Coils sind beschreibbar (typisch für Ausgänge), Discrete Inputs nur lesbar (typisch für Eingänge). a ist falsch, beide sind 1 Bit. c vertauscht die Bereiche und betrifft ohnehin Register. d ist falsch.
4. Funktionscodes
| Funktionscode | Bedeutung | Datenbereich |
|---|---|---|
| 01 | mehrere Coils lesen | Coils |
| 02 | mehrere Discrete Inputs lesen | Discrete Inputs |
| 03 | mehrere Holding Registers lesen | Holding Registers |
| 04 | mehrere Input Registers lesen | Input Registers |
| 05 | ein einzelnes Coil schreiben | Coils |
| 06 | ein einzelnes Holding Register schreiben | Holding Registers |
| 15 | mehrere Coils schreiben | Coils |
| 16 | mehrere Holding Registers schreiben | Holding Registers |
Man erkennt die Logik: Die Lesebefehle 01 bis 04 decken die vier Datenbereiche ab. Geschrieben werden kann nur in die beschreibbaren Bereiche – Coils und Holding Registers. Code 05 und 06 schreiben einen einzelnen Wert, 15 und 16 schreiben gleich mehrere auf einmal.
Aufbau einer Anfrage
Eine typische Lese-Anfrage besteht aus wenigen Angaben: an welchen Slave (Adresse), was tun (Funktionscode), ab welcher Adresse (Startadresse) und wie viele Werte (Anzahl). Eine Anfrage „Lies ab Holding Register 0 zehn Register aus Slave 2″ enthält also Slave-Adresse 2, Funktionscode 03, Startadresse 0 und Anzahl 10. Der Slave antwortet mit demselben Funktionscode und liefert die zehn Registerwerte zurück.
Wenn etwas schiefgeht: die Fehlerantwort
Kann ein Slave eine Anfrage nicht ausführen – etwa weil die angefragte Adresse bei ihm gar nicht existiert –, schickt er keine normale Antwort, sondern eine Exception. Daran erkennt man sie: Im Funktionscode der Antwort ist das höchstwertige Bit gesetzt. Aus Funktionscode 03 (hexadezimal 0x03) wird so 0x83. Der Master sieht am gesetzten Bit sofort, dass etwas nicht stimmt.
Zusätzlich liefert die Exception einen Exception-Code, der den Grund nennt. Die wichtigsten:
| Exception-Code | Bedeutung |
|---|---|
| 01 | Funktionscode wird vom Slave nicht unterstützt |
| 02 | angefragte Adresse existiert nicht |
| 03 | Datenwert unzulässig (z. B. Anzahl zu groß) |
| 04 | Fehler im Gerät bei der Bearbeitung |
Ein Master will zehn Messwerte aus den Input Registers eines Slaves auslesen. Welcher Funktionscode ist korrekt?
- a) 04
- b) 03
- c) 06
- d) 16
Richtig: a)
Input Registers werden mit Funktionscode 04 gelesen. b (03) liest Holding Registers, ein anderer Bereich. c (06) und d (16) sind Schreibbefehle und können Input Registers ohnehin nicht beschreiben, da diese nur lesbar sind.
Eine Antwort kommt mit dem Funktionscode 0x86 zurück, obwohl die Anfrage Funktionscode 0x06 hatte. Was bedeutet das?
- a) Der Slave hat versehentlich einen anderen Befehl ausgeführt
- b) Der Slave verwendet eine andere Modbus-Version
- c) Die Antwort gehört zu einem anderen Slave
- d) Es liegt eine Exception vor, das höchste Bit im Funktionscode ist gesetzt
Richtig: d)
0x06 mit gesetztem höchstem Bit ergibt 0x86 – das ist die Markierung einer Fehlerantwort (Exception). Der mitgelieferte Exception-Code nennt den Grund. a beschreibt nicht den Mechanismus. b und c sind erfunden; die Adresse stünde an anderer Stelle im Telegramm.
Ein Slave antwortet auf eine Schreibanfrage in ein Holding Register mit Exception-Code 02. Welche Maßnahme ist am sinnvollsten?
- a) Die Baudrate erhöhen
- b) Das Schreiben mehrfach wiederholen, bis es klappt
- c) Prüfen, ob die Registeradresse beim Slave existiert – meist Adress-Offset-Problem
- d) Den Funktionscode von 06 auf 03 ändern
Richtig: c)
Exception-Code 02 bedeutet „Adresse existiert nicht“. Die häufigste Ursache ist die Verwechslung von 1-basierter Doku-Adresse und 0-basierter Telegrammadresse. a betrifft das Timing, nicht die Adresse. b ändert nichts, der Fehler bleibt. d würde aus dem Schreiben ein Lesen machen und löst das Problem nicht.
5. Modbus RTU, ASCII und TCP
Bis hierher ging es um den Inhalt der Telegramme – Adressen, Funktionscodes, Register. Wie diese Telegramme tatsächlich über die Leitung gehen, hängt von der Übertragungsart ab. Davon gibt es drei.
Modbus RTU ist die mit Abstand häufigste Variante. Die Telegramme werden binär und damit sehr kompakt übertragen, meist über eine serielle RS485-Verbindung. RTU ist sparsam, schnell genug für die meisten Anwendungen und der Standardfall in der Industrie.
Modbus ASCII überträgt dieselben Informationen als lesbare Textzeichen. Das macht die Telegramme etwa doppelt so lang und damit langsamer. ASCII ist heute selten und spielt fast nur in Altanlagen oder bei besonderen Anforderungen eine Rolle.
Modbus TCP läuft über ein normales Ethernet-Netzwerk. Die Modbus-Telegramme werden dabei in TCP/IP-Pakete verpackt und über den festgelegten Port 502 übertragen. TCP nutzt die vorhandene Netzwerkinfrastruktur und erlaubt größere Entfernungen sowie höhere Geschwindigkeiten als die serielle Variante.
Telegrammaufbau: RTU gegen TCP
Der inhaltliche Kern – Slave-Adresse, Funktionscode, Daten – ist bei allen Varianten gleich. Unterschiedlich ist, was außen herum kommt.
Bei RTU sichert eine CRC-Prüfsumme das Telegramm ab. CRC steht für Cyclic Redundancy Check, also zyklische Redundanzprüfung. Vereinfacht gesagt rechnet der Sender aus allen Bytes des Telegramms nach einem festen Verfahren eine Kontrollzahl aus und hängt sie ans Ende. Der Empfänger rechnet dieselbe Zahl noch einmal aus und vergleicht. Stimmen beide nicht überein, wurde unterwegs mindestens ein Bit verfälscht, und das Telegramm wird verworfen. Die CRC erkennt also Übertragungsfehler auf Bitebene, ohne dass man die zugrundeliegende Mathematik im Detail kennen muss.
Bei TCP entfällt die CRC. Die Fehlersicherung übernimmt bereits das darunterliegende TCP/IP. Stattdessen bekommt das Telegramm einen kurzen Zusatz vorangestellt, den MBAP-Header (Modbus Application Header). Er enthält unter anderem eine laufende Nummer, mit der sich Anfrage und Antwort eindeutig zuordnen lassen, und die Länge des Telegramms.
Das Timing bei RTU: warum die 3,5-Zeichen-Pause zählt
Ein RTU-Telegramm hat keine festen Start- oder Endbytes. Es gibt also kein Zeichen, das sagt „hier fängt ein neues Telegramm an“ oder „hier ist es zu Ende“. Stattdessen erkennt der Empfänger das Ende eines Telegramms allein an einer Pause auf der Leitung: Schweigt der Bus für die Dauer von mindestens 3,5 Zeichen, gilt das Telegramm als abgeschlossen. Eine kürzere Lücke von etwa 1,5 Zeichen markiert dagegen einen ungewöhnlich großen Abstand innerhalb eines Telegramms und gilt als Fehler.
Diese Zeiten sind keine festen Millisekunden-Werte, sondern hängen von der Baudrate ab. Bei langsamer Übertragung dauert ein Zeichen länger, also auch die Pause. Bei schneller Übertragung wird beides kürzer. Genau deshalb muss man beim Einstellen von Timeout-Zeiten in einer Steuerung wissen, wie lang die Pause bei der gewählten Baudrate tatsächlich ist.
Ein Zeichen umfasst auf der seriellen Leitung üblicherweise 11 Bit: 1 Startbit, 8 Datenbits, 1 Paritätsbit und 1 Stoppbit. Daraus lassen sich die Zeiten direkt berechnen.
Wodurch erkennt ein Empfänger bei Modbus RTU, dass ein Telegramm zu Ende ist?
- a) An einer Pause auf der Leitung von mindestens 3,5 Zeichen
- b) An einem festen Endbyte am Telegrammschluss
- c) An der CRC-Prüfsumme, die immer am Anfang steht
- d) An einer im MBAP-Header angegebenen Länge
Richtig: a)
RTU hat keine festen Start-/Endbytes. Das Telegrammende wird allein an der Stille von mindestens 3,5 Zeichen Dauer erkannt. b ist falsch, ein solches Endbyte gibt es nicht. c ist falsch, die CRC steht am Ende und dient der Fehlererkennung, nicht der Längenbestimmung. d beschreibt Modbus TCP, nicht RTU.
Welche Aufgabe hat die CRC-Prüfsumme im RTU-Telegramm?
- a) Sie verschlüsselt die übertragenen Daten
- b) Sie gibt die Länge des Telegramms an
- c) Sie enthält die Slave-Adresse in komprimierter Form
- d) Sie erlaubt dem Empfänger, Übertragungsfehler auf Bitebene zu erkennen
Richtig: d)
Die CRC ist eine aus dem Telegramm berechnete Kontrollzahl. Stimmen die vom Empfänger nachgerechnete und die mitgesendete Zahl nicht überein, wurde mindestens ein Bit verfälscht. a ist falsch, CRC verschlüsselt nicht. b ist falsch, die CRC gibt keine Länge an. c ist erfunden.
Eine Modbus-RTU-Strecke läuft stabil bei 9600 Baud. Nach Umstellung auf 115200 Baud treten sporadische Telegrammfehler auf. Was ist die wahrscheinlichste Ursache?
- a) Die CRC funktioniert bei hohen Baudraten nicht mehr
- b) Die in der Steuerung eingestellten Timeout-/Pausenzeiten passen nicht mehr zur neuen Baudrate
- c) Modbus RTU ist auf 9600 Baud begrenzt
- d) Der Funktionscode ändert sich mit der Baudrate
Richtig: b)
Die 3,5- und 1,5-Zeichen-Zeiten sind baudratenabhängig. Bei höherer Baudrate werden sie kürzer; sind die Timeouts noch auf den langsameren Wert eingestellt, kommt es zu Erkennungsfehlern. a ist falsch, die CRC ist baudratenunabhängig. c ist falsch, RTU läuft auch deutlich schneller. d ist Unsinn, der Funktionscode hängt nicht von der Baudrate ab.
Warum benötigt Modbus TCP keine CRC-Prüfsumme im Telegramm?
- a) Weil Ethernet generell fehlerfrei überträgt
- b) Weil bei TCP keine Bitfehler auftreten können
- c) Weil die Fehlersicherung bereits durch das darunterliegende TCP/IP erfolgt
- d) Weil der MBAP-Header die Daten verschlüsselt
Richtig: c)
TCP/IP bringt eine eigene Prüfung mit, sodass eine zusätzliche CRC im Modbus-Telegramm überflüssig wäre. a und b sind falsch, fehlerfreie Übertragung gibt es nicht, aber TCP fängt Fehler ab. d ist falsch, der MBAP-Header verschlüsselt nichts, er dient der Zuordnung und Längenangabe.
6. Fehlersuche und Praxis bei Modbus RTU
Die meisten Modbus-Probleme tauchen bei der Inbetriebnahme einer RTU-Strecke auf. Die gute Nachricht: Es sind fast immer dieselben paar Ursachen. Wer sie der Reihe nach abklopft, findet den Fehler meist schnell.
Die Fehler lassen sich in zwei Gruppen teilen. Die einen betreffen die Protokollebene – also Adressierung, Datentypen, Funktionscodes. Die anderen betreffen die physikalische Ebene – die RS485-Verdrahtung selbst. Die physikalische Seite (Wellenwiderstand, Terminierung, Leitungsführung) gehört ausführlich zum Thema der seriellen Schnittstellen und wird hier nur als Checkliste angerissen. Der Schwerpunkt liegt auf den protokollspezifischen Fehlern, die typisch für Modbus sind.
Checkliste Protokollebene (Modbus-spezifisch)
- Adress-Offset: Wird 1-basiert dokumentiert, aber 0-basiert adressiert? Das ist der mit Abstand häufigste Fehler. Eine Exception mit Code 02 ist ein deutlicher Hinweis.
- Falscher Datenbereich: Holding Register statt Input Register angesprochen, Lese- statt Schreibcode verwendet.
- Endianness: 32-Bit-Werte über zwei Register in falscher Wortreihenfolge zusammengesetzt – Werte wirken sinnlos, obwohl die Kommunikation läuft.
- Funktionscode nicht unterstützt: Nicht jeder Slave kennt jeden Code. Exception-Code 01 weist darauf hin.
- Doppelte Slave-Adresse: Zwei Geräte mit derselben Adresse am selben Strang antworten gleichzeitig – das Ergebnis ist unbrauchbar.
Checkliste physikalische Ebene (nur kurz – Details bei den seriellen Schnittstellen)
- Baudrate und Parität an allen Geräten gleich eingestellt? Schon eine Abweichung verhindert jede Kommunikation.
- A und B vertauscht? Die beiden Datenadern von RS485 müssen an allen Teilnehmern gleich angeschlossen sein.
- Busabschluss an den beiden Enden vorhanden? Fehlende oder falsche Terminierung führt zu Reflexionen und sporadischen Fehlern.
Wie A/B-Verdrahtung, Wellenwiderstand und korrekte Terminierung im Detail funktionieren, ist Thema der seriellen Schnittstellen – dort werden die physikalischen Grundlagen von RS485 ausführlich behandelt. Für die Modbus-Fehlersuche genügt es zu wissen, dass diese Punkte zu prüfen sind.
Vorgehen bei der Inbetriebnahme
Bewährt hat sich ein schrittweises Vorgehen. Zuerst die physikalischen Basics: gleiche Baudrate und Parität, korrekte A/B-Verdrahtung, Abschluss an beiden Enden. Dann mit einer einfachen Modbus-Master-Software am Laptop eine einzelne Anfrage an ein einzelnes Gerät schicken – bevor die SPS überhaupt ins Spiel kommt. Antwortet das Gerät, ist die halbe Miete eingefahren. Antwortet es mit einer Exception, grenzt der Exception-Code den Fehler schon ein. Kommt gar keine Antwort, liegt es meist an Verdrahtung, Baudrate oder einer falschen Slave-Adresse.
Für tiefergehende Analysen hilft ein Busmonitor oder Protokollanalysator, der den kompletten Datenverkehr mitschneidet. Damit sieht man genau, welches Telegramm gesendet und was geantwortet wurde – unverzichtbar, wenn zwei Geräte sich partout nicht verstehen.
Bei der Inbetriebnahme antwortet ein Slave gar nicht – keine normale Antwort, keine Exception. Was ist die unwahrscheinlichste Ursache?
- a) A und B der RS485-Leitung sind vertauscht
- b) Die Baudrate ist an Master und Slave unterschiedlich eingestellt
- c) Die Slave-Adresse im Master stimmt nicht mit der des Geräts überein
- d) Ein 32-Bit-Wert wurde in falscher Wortreihenfolge zusammengesetzt
Richtig: d)
Falsche Endianness führt zu einem sinnlosen Wert, setzt aber voraus, dass überhaupt eine Antwort kommt – sie ist also keine Ursache für völliges Schweigen. a, b und c verhindern dagegen jede Antwort und sind klassische Ursachen für „keine Reaktion“.
Welcher der folgenden Fehler ist ein protokollspezifisches Modbus-Problem und nicht ein physikalisches RS485-Problem?
- a) Fehlender Busabschluss an den Leitungsenden
- b) Vertauschte A/B-Datenadern
- c) Verwechslung von 1-basierter und 0-basierter Registeradresse
- d) Reflexionen durch falschen Wellenwiderstand
Richtig: c)
Der Adress-Offset ist ein reines Protokollthema und gehört in den Modbus-Beitrag. a, b und d betreffen die physikalische RS485-Ebene und werden bei den seriellen Schnittstellen behandelt.
Warum testet man bei der Inbetriebnahme von sinnvollerweise zuerst mit einer Modbus-Master-Software am Laptop, bevor die SPS eingebunden wird?
- a) Weil sich so Geräte- und Verdrahtungsfehler isoliert prüfen lassen, ohne SPS-Programmfehler als zusätzliche Unbekannte
- b) Weil die SPS keine Modbus-Telegramme senden kann
- c) Weil die Master-Software die Baudrate automatisch korrigiert
- d) Weil eine SPS keine Exceptions auswerten kann
Richtig: a)
Mit einer schlanken Master-Software prüft man Gerät, Adresse und Verdrahtung, ohne dass ein möglicher Fehler im SPS-Programm das Bild verfälscht. So trennt man die Fehlerquellen sauber. b und d sind falsch. c ist erfunden, die Software korrigiert nichts automatisch.
Abschlusstest
Ein Hersteller dokumentiert einen Sollwert als „Holding Register 40010″. Im Telegramm wird beim Schreiben Funktionscode 06 verwendet. Welche Telegrammadresse muss eingetragen werden?
- a) 9
- b) 40010
- c) 40009
- d) 10
Richtig: a)
Die Doku-Adresse 40010 ist 1-basiert mit Bereichskennung 4. Im Telegramm fällt die Kennung weg und die Zählung ist 0-basiert: 40010 wird zu 9. b und c behalten die Bereichskennung. d vergisst die Verschiebung um 1.
Welche Aussage zum Master-Slave-Prinzip von Modbus ist korrekt?
- a) Jeder Slave darf jederzeit von sich aus Daten an den Master senden
- b) Auf einem Strang können beliebig viele Master gleichzeitig arbeiten
- c) Ein Slave antwortet nur auf eine konkrete Anfrage des Masters
- d) Der Master hat die Adresse 0
Richtig: c)
Slaves sind passiv und antworten ausschließlich auf Anfragen. a widerspricht dem Prinzip. b ist falsch, pro Strang nur ein Master. d verwechselt Broadcast (Adresse 0) mit dem Master, der selbst keine Slave-Adresse trägt.
Ein Messwert liegt als 32-Bit-Float in zwei Holding Registern. Beim Auslesen kommt ein unrealistisch hoher Wert heraus, die Kommunikation läuft aber fehlerfrei. Was prüft man zuerst?
- a) Ob die CRC-Prüfsumme stimmt
- b) Ob die Baudrate hoch genug ist
- c) Ob ein Coil statt eines Registers gelesen wurde
- d) Ob die beiden Register in der richtigen Wortreihenfolge kombiniert werden
Richtig: d)
Fehlerfreie Kommunikation, aber sinnloser Wert deutet stark auf falsche Endianness beim Zusammensetzen der zwei Register. a scheidet aus, da bei CRC-Fehlern gar keine gültige Antwort käme. b betrifft nur die Geschwindigkeit. c ist ausgeschlossen, es wurden Register gelesen.
Welcher Funktionscode schreibt mehrere Holding Registers auf einmal?
- a) 16
- b) 03
- c) 06
- d) 04
Richtig: a)
Code 16 schreibt mehrere Holding Registers. b (03) liest sie nur. c (06) schreibt nur ein einzelnes Register. d (04) liest Input Registers.
Eine Antwort kommt mit Funktionscode 0x84 und Exception-Code 01 zurück. Was bedeutet das?
- a) Adresse existiert nicht
- b) Der Funktionscode 04 wird vom Slave nicht unterstützt
- c) Datenwert unzulässig
- d) Interner Gerätefehler
Richtig: b)
0x84 ist 0x04 mit gesetztem höchstem Bit – also eine Exception auf eine Anfrage mit Funktionscode 04 (Input Registers lesen). Exception-Code 01 bedeutet „Funktionscode nicht unterstützt“. a wäre Code 02, c wäre Code 03, d wäre Code 04.
Warum ist das Timing bei Modbus RTU baudratenabhängig kritisch, bei Modbus TCP aber kein Thema?
- a) TCP verwendet eine festere CRC
- b) TCP überträgt langsamer und braucht daher kein Timing
- c) RTU hat ein festes Endbyte, das bei hoher Baudrate verloren geht
- d) RTU erkennt das Telegrammende nur über Pausenzeiten, die mit der Baudrate skalieren; TCP nutzt einen Längeneintrag im MBAP-Header
Richtig: d)
RTU erkennt das Telegrammende an der 3,5-Zeichen-Pause, deren Dauer von der Baudrate abhängt. TCP kennt die Telegrammlänge aus dem MBAP-Header und ist damit nicht auf Pausen angewiesen. a ist falsch. b ist falsch, TCP ist meist schneller. c ist falsch, RTU hat kein Endbyte.
Ein Gerät soll über die Broadcast-Adresse einen Parameter gesetzt bekommen. Was ist zu erwarten?
- a) Alle Slaves antworten gleichzeitig mit einer Bestätigung
- b) Nur der Slave mit der niedrigsten Adresse antwortet
- c) Die Slaves führen den Befehl aus, senden aber keine Antwort
- d) Der Master erhält eine Sammelantwort aller Slaves
Richtig: c)
Bei einem Broadcast (Adresse 0) führen alle Slaves den Befehl aus, antworten aber bewusst nicht, um Buskollisionen zu vermeiden. a und d würden genau diese Kollision auslösen. b ist erfunden.
Welcher Datenbereich eignet sich, um einen reinen Statuseingang (ein/aus, nur lesbar) eines Slaves abzufragen?
- a) Holding Register
- b) Discrete Input
- c) Coil
- d) Input Register
Richtig: b)
Ein einzelnes, nur lesbares Bit ist genau ein Discrete Input. c (Coil) ist zwar ein Bit, aber beschreibbar – für einen reinen Eingang nicht passend. a und d sind 16-Bit-Register und für ein einzelnes Statusbit überdimensioniert.
Bei der Inbetriebnahme einer RS485-Strecke kommt von keinem der drei Slaves eine Antwort. Welche Prüfung ist am sinnvollsten zuerst?
- a) Den 32-Bit-Float auf richtige Endianness prüfen
- b) Baudrate, Parität und A/B-Verdrahtung an allen Teilnehmern kontrollieren
- c) Die Exception-Codes auswerten
- d) Den MBAP-Header analysieren
Richtig: b)
Antwortet kein einziges Gerät, liegt der Fehler fast immer auf der physikalischen bzw. Grundeinstellungs-Ebene: Baudrate/Parität ungleich oder A/B vertauscht. a setzt eine funktionierende Antwort voraus. c geht nicht, wenn gar keine Antwort kommt. d betrifft TCP, nicht RTU.
Was beschreibt das Modbus-Datenmodell nicht?
- a) Welcher physikalische Wert (z. B. Temperatur in °C) in einem bestimmten Register steht
- b) Die vier Datenbereiche (Coils, Discrete Inputs, Input/Holding Registers)
- c) Ob ein Bereich lesbar oder schreibbar ist
- d) Ob ein Bereich bitweise oder wortweise organisiert ist
Richtig: a)
Das Datenmodell legt Struktur, Zugriffsart und Organisation der Bereiche fest, aber nicht die physikalische Bedeutung eines konkreten Werts – die steht in der Herstellerdokumentation. b, c und d sind genau das, was das Datenmodell beschreibt.
Eine Modbus-RTU-Strecke wird von 9600 auf 19200 Baud umgestellt. Was passiert mit der erforderlichen 3,5-Zeichen-Pause?
- a) Sie bleibt in Millisekunden gleich
- b) Sie wird länger
- c) Sie wird kürzer
- d) Sie entfällt ganz
Richtig: c)
Bei höherer Baudrate dauert ein Zeichen kürzer, also auch die 3,5-Zeichen-Pause. a ist falsch, sie ist baudratenabhängig. b ist die falsche Richtung. d ist falsch, die Pause bleibt das Telegrammende-Kriterium.
Welche Kombination beschreibt Modbus TCP korrekt?
- a) Binär, über RS485, mit CRC
- b) Über Ethernet, Port 502, mit MBAP-Header statt CRC
- c) Als Klartext, doppelt so lang wie RTU
- d) Über RS232, mit 3,5-Zeichen-Pause als Telegrammende
Richtig: b)
Modbus TCP läuft über Ethernet auf Port 502 und ersetzt die CRC durch den MBAP-Header. a beschreibt RTU. c beschreibt ASCII. d mischt serielle RTU-Eigenschaften mit RS232.
Glossar
- Modbus
- Offenes, lizenzfreies Kommunikationsprotokoll für die Automatisierung, das Daten nach dem Master-Slave-Prinzip über Register und Funktionscodes austauscht.
- Master / Client
- Das aktive Gerät auf dem Bus, das Anfragen stellt; alle anderen Geräte antworten nur darauf.
- Slave / Server
- Ein passives Gerät mit eindeutiger Adresse, das ausschließlich auf Anfragen des Masters antwortet.
- Polling
- Das fortlaufende, reihum erfolgende Abfragen aller Slaves durch den Master.
- Telegramm / Frame
- Eine einzelne Nachricht auf dem Bus, bestehend aus Adresse, Funktionscode, Daten und Prüfinformation.
- Coil
- Ein einzelnes, les- und schreibbares Bit, typischerweise für Ausgänge oder Steuerbits.
- Discrete Input
- Ein einzelnes, nur lesbares Bit, typischerweise für Statuseingänge.
- Input Register
- Ein 16-Bit-Wert, der nur gelesen werden kann, typischerweise für Messwerte.
- Holding Register
- Ein 16-Bit-Wert, der gelesen und geschrieben werden kann, typischerweise für Sollwerte und Parameter.
- Funktionscode
- Die Zahl im Telegramm, die festlegt, welche Aktion der Slave ausführen soll (z. B. 03 für Register lesen).
- Exception
- Eine Fehlerantwort des Slaves, erkennbar am gesetzten höchsten Bit im Funktionscode, ergänzt um einen Exception-Code als Begründung.
- CRC (Cyclic Redundancy Check)
- Eine aus dem gesamten Telegramm berechnete Kontrollzahl, mit der der Empfänger Übertragungsfehler auf Bitebene erkennt.
- MBAP-Header
- Zusatz am Anfang eines Modbus-TCP-Telegramms mit laufender Nummer und Längenangabe; ersetzt bei TCP die CRC.
- Endianness (Big-/Little-Endian)
- Die Reihenfolge, in der zwei Register zu einem 32-Bit-Wert kombiniert werden; muss zwischen Gerät und auslesender Steuerung übereinstimmen.
- Broadcast-Adresse
- Die Adresse 0, mit der eine Anfrage an alle Slaves gleichzeitig geht; die Slaves führen den Befehl aus, antworten aber nicht.
