Modbus
Modbus ist ein Protokoll zum Austausch von Messwerten und Schaltbefehlen zwischen Geräten der Automatisierungstechnik. Entworfen wurde es 1979 von Modicon, dem Hersteller der ersten speicherprogrammierbaren Steuerung, und es ist damit das älteste Feldbusprotokoll, das heute noch in großem Umfang eingesetzt wird.
Seine Langlebigkeit verdankt es der Einfachheit. Ein Modbus-Telegramm besteht aus wenigen Bytes, lässt sich auf einem Mikrocontroller mit minimalem Aufwand umsetzen und ist frei verwendbar. Wechselrichter, Energiezähler, Heizungsregler, Klimageräte und Industriesteuerungen sprechen es, oft als einzige offene Schnittstelle neben einem herstellereigenen Protokoll.
Ein Gerät fragt, die anderen antworten
Modbus kennt keine gleichberechtigten Teilnehmer. Ein Gerät stellt Anfragen, alle übrigen antworten nur, wenn sie angesprochen werden. Traditionell heißen die Rollen Master und Slave; die Modbus Organization verwendet seit 2020 die Bezeichnungen Client und Server.
Das abfragende Gerät arbeitet die Teilnehmer der Reihe nach ab. Ein Gerät kann nicht von sich aus melden, dass sich ein Wert geändert hat — es muss gefragt werden. Wie schnell eine Änderung ankommt, hängt deshalb allein davon ab, wie oft abgefragt wird.
Das Datenmodell von Modbus
Alles, was ein Modbus-Gerät anbietet, liegt in vier Bereichen:
| Bereich | Größe | Zugriff | Typischer Inhalt |
|---|---|---|---|
| Discrete Inputs | 1 Bit | nur lesen | Schaltzustand eines Eingangs |
| Coils | 1 Bit | lesen und schreiben | Relais, Schaltausgang |
| Input Registers | 16 Bit | nur lesen | Messwert |
| Holding Registers | 16 Bit | lesen und schreiben | Sollwert, Parameter |
Welcher Wert in welchem Register steht, legt der Gerätehersteller fest und dokumentiert es in einer Registertabelle. Ohne diese Tabelle ist ein Modbus-Gerät nicht nutzbar — das Protokoll selbst verrät nichts über den Inhalt.
Der Zugriff erfolgt über Funktionscodes. Die wichtigsten sind 01 und 02 zum Lesen von Bits, 03 und 04 zum Lesen von Registern, 05 und 06 zum Schreiben einzelner Werte sowie 15 und 16 zum Schreiben mehrerer Werte auf einmal.
Drei Übertragungsarten
Modbus RTU ist die verbreitetste Form. Sie überträgt binär über eine serielle Leitung, meist RS485, und sichert jedes Telegramm mit einer CRC-Prüfsumme. Die Grenze zwischen zwei Telegrammen ergibt sich aus einer Pause von mindestens dreieinhalb Zeichenlängen — ein Detail, das bei falsch eingestellter Baudrate zu sporadischen Fehlern führt.
Modbus ASCII überträgt dieselben Daten als lesbare Zeichen. Der Aufwand verdoppelt sich, dafür lässt sich der Verkehr mit einem einfachen Terminalprogramm mitlesen. Heute selten.
Modbus TCP verpackt das Telegramm in eine TCP-Verbindung auf Port 502. Die Prüfsumme entfällt, weil TCP die Sicherung übernimmt; stattdessen kommt ein kurzer Kopf hinzu, der die Anfrage einer Antwort zuordnet. Dadurch kann ein Client mehrere Anfragen gleichzeitig offen halten, was über serielle Leitungen nicht geht.
Die Teilnehmeradresse umfasst bei den seriellen Varianten die Werte 1 bis 247; Adresse 0 ist ein Rundruf an alle, der nicht beantwortet wird. Bei Modbus TCP übernimmt die IP-Adresse diese Rolle, das Adressfeld bleibt aber erhalten und dient der Weiterleitung hinter einem Gateway.
Die beiden klassischen Fehlerquellen
Register um eins verschoben
Historisch werden Register mit fünfstelligen Nummern angegeben: 40001 für das erste Holding Register, 30001 für das erste Input Register. Auf der Leitung überträgt das Protokoll aber Adressen ab 0 — das Register 40001 wird als Adresse 0 angefragt.
Manche Hersteller dokumentieren die fünfstellige Form, andere die Adresse auf der Leitung, manche mischen beides. Wer einen Wert um genau eine Position versetzt ausliest, hat fast immer diesen Versatz erwischt.
Byte- und Wortreihenfolge
Ein Register fasst 16 Bit. Größere Werte — eine Gleitkommazahl oder ein 32-Bit-Zähler — belegen zwei aufeinanderfolgende Register. Welches davon die höherwertige Hälfte trägt, legt das Protokoll nicht fest.
In der Praxis treten alle vier Kombinationen auf: beide Register und beide Bytes in Big-Endian-Reihenfolge, beide in Little-Endian, sowie die beiden Mischformen mit vertauschten Registern bei beibehaltener Byte-Reihenfolge. Sieht ein ausgelesener Wert aus wie Unsinn, ist dies nach dem Registerversatz die zweite Stelle, an der zu suchen ist.
Auslesewerkzeuge bieten die Umschaltung meist als Einstellung an, oft unter der Bezeichnung Word Swap oder Byte Order.
Was Modbus nicht leistet
- Keine Datentypen. Ob ein Register eine vorzeichenlose Zahl, einen Messwert mit Nachkommastelle oder zwei zusammengehörige Bytes enthält, steht nur in der Dokumentation.
- Keine Einheiten und kein Maßstab. Ein Wert von 235 kann 23,5 °C bedeuten oder 235 Volt.
- Keine Selbstbeschreibung. Ein Gerät lässt sich nicht fragen, was es anbietet.
- Keine Sicherheit. Weder Authentisierung noch Verschlüsselung sind vorgesehen. Wer Modbus TCP erreicht, kann lesen und schreiben. Eine gesicherte Variante über TLS existiert seit 2018, ist in Geräten aber kaum zu finden.
Der letzte Punkt ist der ernsteste. Modbus-TCP-Geräte gehören niemals ungeschützt ins offene Netz; sie gehören in ein abgetrenntes Segment, erreichbar nur über eine kontrollierte Verbindung.
Abgrenzung
PROFIBUS nutzt ebenfalls RS485, bringt aber Gerätebeschreibungen, Diagnose und feste Zykluszeiten mit. Es ist das deutlich umfangreichere System.
PROFINET setzt auf Ethernet auf und ist auf Echtzeitverhalten ausgelegt — Eigenschaften, die Modbus TCP nicht besitzt.
BACnet stammt aus der Gebäudeautomation und beschreibt seine Datenpunkte selbst, einschließlich Einheit und Bedeutung.
CAN verteilt Nachrichten an alle Teilnehmer, statt einzeln abzufragen, und regelt den Buszugriff selbst.
Modbus bleibt neben all diesen bestehen, weil es den kleinsten gemeinsamen Nenner bildet: Fast jedes Gerät mit Datenschnittstelle spricht es, und sei es nur zusätzlich.
Normen
- Modbus Application Protocol Specification V1.1b3 – Funktionscodes und Datenmodell
- Modbus over Serial Line Specification and Implementation Guide V1.02 – RTU und ASCII
- Modbus Messaging on TCP/IP Implementation Guide V1.0b – Modbus TCP
- IEC 61158 – Industrielle Kommunikationsnetze, Feldbusse (Modbus als Typ 15)