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.
Ihr erstes Modbus Gerät mit mbpoll auslesen
Ein Modbus Gerät auslesen in acht Schritten: Adapter, Parameter, Adresse, Register, Kontrolle. Inklusive Variante ohne Hardware mit einem freien Simulator.
Was diese Lektion behandelt
- Den USB-nach-RS485-Adapter anschließen und den Port finden
- Die mbpoll-Befehlszeile, Argument für Argument
- Nach jedem Schritt eine Kontrolle, und zurück zu Volt oder Ampere
Vorher lesen: Eine Modbus Registertabelle richtig lesen, RS485 erklärt: A, B, Common und Terminierung, Baudrate und Parität: warum 8E1 Standard ist
Ein Modbus Gerät auslesen heißt in der Praxis: vier Angaben aus dem Datenblatt in einen Befehl tippen und prüfen, ob eine Zahl zurückkommt, die stimmen kann. Alles aus den ersten acht Lektionen läuft hier in einer einzigen Handlung zusammen. Nach dieser Lektion lesen Sie ein Register mit mbpoll aus, benennen jedes Argument der Befehlszeile und wissen nach jedem Schritt, welche Fehlerquelle Sie gerade ausgeschlossen haben.
Was Sie vorher brauchen
An Hardware brauchen Sie einen USB-nach-RS485-Adapter, eine Verbindung mit drei Adern (D0, D1 und Common) und ein Gerät unter Spannung. Wichtiger sind die vier Angaben aus dem Datenblatt, denn ohne sie ist jeder weitere Schritt Raten.
| Angabe | Beispiel Eastron SDM630 | Woher |
|---|---|---|
| Serveradresse | 1 (Werkseinstellung) | Datenblatt oder Display am Gerät |
| Baudrate | 9600 (Werkseinstellung) | Datenblatt |
| Parität und Stoppbit | keine Parität, 1 Stoppbit, also 8N1 | Datenblatt |
| Register mit Zählweise | Netzfrequenz, 3X-Nummer 30071, PDU-Adresse 0x0046, float32 über zwei Input-Register | Registertabelle |
Serveradressen laufen von 1 bis 247. Die 0 ist der Broadcast und antwortet nie, 248 bis 255 sind reserviert. Kennen Sie die Adresse nicht, gehört das in eine eigene Aufgabe: dafür gibt es die Anleitung zum Scannen eines Modbus-Netzwerks. Wie diese vier Angaben ins Protokoll passen, steht in der Übersicht zu Modbus RTU.
Adapter anschließen und den Port finden
Der Adapter meldet sich am Rechner als serielle Schnittstelle, und Sie brauchen deren Namen.
| Betriebssystem | Typischer Name | So finden Sie ihn |
|---|---|---|
| Linux | /dev/ttyUSB0 | ls /dev/ttyUSB* vor und nach dem Einstecken |
| Windows | COM3 | Geräte-Manager, Abschnitt Anschlüsse (COM und LPT) |
| macOS | /dev/cu.usbserial-XXXXXXXX | ls /dev/cu.* |
Auf macOS gibt es zu jedem Adapter zwei Einträge, einen mit tty. und einen mit cu. davor. Nehmen Sie immer den cu.-Eintrag. Der tty.-Eintrag wartet auf ein Carrier-Detect-Signal, das ein RS485-Adapter nie liefert, und Ihr Befehl bleibt einfach hängen, ohne Fehlermeldung.
Der erste Befehl, Argument für Argument
So sieht der Befehl aus, der zwei Holding-Register ab der Datenblattnummer 1 liest:
mbpoll -m rtu -a 1 -b 9600 -P none -t 4 -r 1 -c 2 -1 /dev/ttyUSB0
| Argument | Bedeutung |
|---|---|
-m rtu | Modus Modbus RTU statt TCP |
-a 1 | Serveradresse 1, im Werkzeug oft "slave id" genannt |
-b 9600 | Baudrate |
-P none | keine Parität |
-t 4 | Datenblock: 4 sind Holding-Register, 3 sind Input-Register |
-r 1 | Startregister in der 1-basierten Zählung des Datenblatts |
-c 2 | Anzahl der Register |
-1 | genau eine Abfrage statt endlosem Polling |
/dev/ttyUSB0 | die serielle Schnittstelle aus dem vorigen Abschnitt |
Die Regel dahinter: jedes Argument beschreibt genau eine der vier Angaben aus dem Datenblatt, plus die Schnittstelle. Fehlt eine, füllt das Werkzeug sie mit seiner eigenen Vorgabe auf, und die passt selten.
Ein zweites Beispiel, das sich an genau einer Stelle unterscheidet. Die Messwerte des SDM630 liegen in Input-Registern statt in Holding-Registern, also wird aus -t 4 ein -t 3. Die Netzfrequenz hat die PDU-Adresse 0x0046, dezimal 70, in der 1-basierten Zählung von mbpoll also -r 71:
mbpoll -m rtu -a 1 -b 9600 -P none -t 3 -r 71 -c 2 -1 /dev/ttyUSB0
Eastron verlangt bei diesem Zähler eine gerade Anzahl Register pro Anfrage, -c 2 ist hier also keine Wahl, sondern Bedingung.
Wenn Ihnen ein Fenster lieber ist als eine Kommandozeile, macht der Register Explorer in ModbusCloud Diagnostics dieselbe Abfrage mit Eingabefeldern für Serveradresse, Schnittstelle und Register. In dieser Lektion bleibt mbpoll der Weg, weil Sie an den Argumenten sehen, was tatsächlich gesendet wird.
Was Sie sehen, wenn es klappt
Sie sehen drei Blöcke: zuerst die Verbindungsparameter, wie mbpoll sie verstanden hat, dann eine Zeile pro gelesenem Register mit Index und Wert, und beim Beenden eine Poll-Statistik.
Die Statistik zählt frames transmitted gegen received. Sind beide Zahlen gleich, hat jedes Frage-Antwort-Paar funktioniert, und damit haben Sie in einem einzigen Aufruf bewiesen, dass Verdrahtung, Baudrate, Parität, Serveradresse und Registeradresse alle fünf stimmen. Halten Sie die Anfrage beim Testen klein: FC03 und FC04 erlauben bis zu 125 Register, viele Geräte setzen eine niedrigere Grenze, der SDM630 zum Beispiel 80.
Was Sie sehen, wenn es nicht klappt
Es gibt genau drei Fehlerbilder, und jedes zeigt in eine andere Richtung.
| Was Sie sehen | Was das bedeutet | Wo Sie suchen |
|---|---|---|
Timeout, received bleibt 0 | Es kommt nichts zurück | Verdrahtung, Baudrate, Parität, Serveradresse |
| Exception, zum Beispiel Exception 02 | Das Frame kam fehlerfrei an und wurde abgelehnt | Registeradresse, Zählweise, Funktionscode |
| Eine Zahl, die nicht sein kann | Die Kommunikation ist gut, die Auslegung nicht | Datentyp, Word Order, Skalierungsfaktor |
Die mittlere Zeile bringt die gute Nachricht. Eine Exception heißt: Ihr Gerät hat geantwortet und damit bewiesen, dass Verdrahtung, Busparameter und Serveradresse stimmen. Eine Antwortzeit von einer bis mehreren Sekunden ist bei 9600 Baud normal, geben Sie dem Werkzeug also einen Moment. Kennen Sie Baudrate und Parität gar nicht, gehen Sie systematisch vor statt wahllos.
Die vollständige Zuordnung von Symptom zu Ursache steht in der Lektion zur RTU-Fehlersuche.
Vom Registerwert zur echten Einheit
Eine Zahl auf dem Bildschirm ist noch kein Messwert. Das Datenblatt sagt Ihnen, wie breit der Wert ist und durch welchen Faktor Sie ihn teilen. Eine NIBE-Wärmepumpe liefert die Temperatur als vorzeichenbehaftete 16-Bit-Zahl und teilt durch 10, eine Daikin über DCOM-LT/MB teilt durch 100. Lesen Sie dort 2150, sind das 21,50 Grad Celsius.
Ein SMA-Wechselrichter folgt SunSpec und löst dasselbe anders. Die Netzfrequenz steht dort als ganze Zahl in Register 40202, und die Zehnerpotenz liegt daneben in einem eigenen Skalierungsregister. Dort steht -2, ein Rohwert von 5001 ist also 5001 mal 10 hoch -2, somit 50,01 Hz. Dieselbe Mechanik läuft auch andersherum: die DC-Leistung hat den Skalierungsfaktor 2, ein Rohwert von 57 sind also 5.700 W und nicht 57 W.
Der SDM630 wiederum liefert die Netzfrequenz als IEEE-754-float32 über zwei Input-Register, höherwertiges Register zuerst. Stehen dort 42 48 und 00 00, ergibt das in dieser Reihenfolge genau 50,0 Hz. Tauschen Sie die beiden Register, sieht die Zahl nach keiner Netzfrequenz mehr aus. Warum dieselben vier Bytes vier verschiedene Zahlen ergeben können, arbeitet später im Kurs die Lektion über Word Order und Float aus.
Danach kommt die Plausibilitätsprüfung. Suchen Sie eine Größe, deren Größenordnung Sie sicher kennen: eine Netzspannung liegt zwischen etwa 207 und 253 V, das sind 230 V plus/minus 10 Prozent nach EN 50160, die Netzfrequenz bei rund 50 Hz. Steht im Frequenzfeld 5001, fehlt der Faktor 100. Steht dort 12,7, haben Sie das falsche Register erwischt. Wie Sie die passende Zeile im Datenblatt zerlegen, zeigt die Lektion zum Lesen einer Registertabelle.
Was Sie festhalten, bevor Sie den Schrank schließen
Vier Werte auf ein Etikett an der Klemmenreihe: Baudrate, Parität, Serveradresse und das Register, mit dem Sie getestet haben. Dazu dieselben Angaben in die Anlagendokumentation.
Erst wenn ein Register nachweislich lesbar ist, lohnt sich der nächste Schritt in Richtung Leitsystem, zum Beispiel die Einbindung in Home Assistant.
Häufige Fehler
Die Vorgaben des Werkzeugs nicht kennen. Wer -m rtu vergisst, bekommt einen Verbindungsfehler, der nichts mit dem Bus zu tun hat, und sucht dann stundenlang an der Verkabelung. Prüfen Sie im Zweifel die Kopfzeile der Ausgabe: dort steht, welchen Modus und welche Parameter mbpoll tatsächlich benutzt.
Auf macOS den tty.-Port wählen. Das Kommando hängt ohne Fehlermeldung, weil der Treiber auf ein Carrier-Detect-Signal wartet. Nehmen Sie den cu.-Eintrag desselben Adapters.
Ohne -1 abfragen und den Dauerlauf für einen Hänger halten. mbpoll pollt in der Grundeinstellung weiter, bis Sie abbrechen. Für einen einzelnen Test setzen Sie -1, für eine Dauerbeobachtung lassen Sie es weg und lesen die Statistik beim Abbruch.
Mehrere Dinge gleichzeitig ändern. Wer Adresse, Baudrate und Adernpaar in einem Rutsch verstellt, weiß bei Erfolg nicht, was geholfen hat, und bei Misserfolg nicht, was er schon ausgeschlossen hat. Eine Änderung, ein Versuch, eine Notiz.
Selbst ausprobieren
- 1
mbpoll installieren
Debian und Ubuntu:
sudo apt install mbpoll. macOS:brew install mbpoll. Kontrolle:mbpoll --helpzeigt den Hilfetext. - 2
Adapter einstecken
Kontrolle: die Schnittstelle taucht auf, unter Linux mit
ls /dev/ttyUSB*, unter Windows im Geräte-Manager. - 3
D0, D1 und Common verdrahten
Kontrolle: messen Sie im Ruhezustand das Vorzeichen zwischen D0 und D1, wie in der Lektion zur RS485-Leitung beschrieben.
- 4
Die vier Angaben heraussuchen
Serveradresse, Baudrate, Parität und Register mit Zählweise. Kontrolle: Sie können alle vier aufschreiben.
- 5
Zwei Register lesen
mbpoll -m rtu -a 1 -b 9600 -P none -t 4 -r 1 -c 2 -1 /dev/ttyUSB0. Kontrolle: Sie bekommen zwei Zahlen zurück. - 6
Bei Stille genau eine Sache ändern
Erst die Serveradresse, dann die Parität, dann die Baudrate, dann D0 und D1 tauschen. Kontrolle: nach jedem Versuch notieren, was Sie geändert haben.
- 7
Den Wert in die Einheit zurückrechnen
Mit dem Faktor aus dem Datenblatt. Kontrolle: die Größenordnung passt zu dem, was Sie erwarten.
- 8
Die Einstellungen festhalten
Etikett an der Klemmenreihe plus Eintrag in der Dokumentation. Kontrolle: jemand anders kann das Gerät auslesen, ohne Sie anzurufen.
Füllen Sie das zuerst für Ihr eigenes Gerät aus.
Serveradresse ....... ____
Baudrate ............ ____
Parität, Stoppbits .. ____
Register + FC ....... ____
Rohwert ____ x 10^____ = ____ Einheit: ____
Ohne Hardware. Installieren Sie den Simulator mit python -m pip install "pymodbus[serial,simulator]==3.15.0" und starten Sie ihn mit pymodbus.simulator --modbus_server server --modbus_device device. Er lauscht auf Port 5020, also ohne Administratorrechte. Dann ersetzen Sie die seriellen Argumente durch -m tcp -p 5020 127.0.0.1 und gehen dieselben Schritte durch, ohne Schritt 2, 3 und 8.
mbpoll -m tcp -p 5020 -a 1 -t 4 -r 3 -c 1 -0 -1 127.0.0.1
Mit -0 zählt mbpoll ab null, -r 3 ist also die PDU-Adresse 3. Der mitgelieferte Datensatz ist so gebaut, dass Sie alle drei Fehlerbilder üben können: PDU-Adresse 3 enthält 17001 und liefert diesen Wert bei jeder Lesung unverändert, der float32 über die PDU-Adressen 6 und 7 startet bei 404,17 und steigt bei jeder Abfrage an, und PDU-Adresse 1 ist als ungültig konfiguriert und gibt eine echte Exception zurück. pymodbus steht unter der BSD-3-Lizenz und ist frei nutzbar, auch geschäftlich. Unter Linux und macOS können Sie mit socat ein virtuelles Schnittstellenpaar anlegen und die RTU-Variante vollständig nachstellen.
Erwartetes Ergebnis: zwei Registerwerte auf dem Bildschirm, zurückgerechnet in eine plausible Einheit, und ein Etikett am Schrank.
Zusammenfassung
- Ein Modbus Gerät auslesen braucht vier Angaben aus dem Datenblatt: Serveradresse, Baudrate, Parität mit Stoppbit und die Registeradresse samt Zählweise.
- mbpoll arbeitet ohne
-m rtuüber Modbus TCP und ohne-bund-Pmit 19200 und gerader Parität, während die meisten Geräte ab Werk auf 9600 8N1 stehen. - Eine gelungene Abfrage beweist in einem Schritt, dass Verdrahtung, Busparameter, Serveradresse und Registeradresse gleichzeitig stimmen.
- Stille, Exception und eine unplausible Zahl sind drei verschiedene Fehlerbilder, die in drei verschiedene Richtungen zeigen.
- Baudrate, Parität, Serveradresse und Testregister gehören auf ein Etikett an der Klemmenreihe, bevor Sie den Schrank schließen.
Ü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.