Die Modbus-Kommunikation steht, das Messgerät antwortet ohne Fehlermeldung und trotzdem zeigt die SPS völlig unplausible Werte. Aus 230,5 V werden beispielsweise 23.050 V, eine Temperatur erscheint negativ oder ein Energiezähler liefert eine Zahl im Milliardenbereich.
In solchen Fällen liegt der Fehler häufig nicht an der RS-485-Verbindung oder am Messgerät. Die übertragenen Register werden lediglich falsch interpretiert. Typische Ursachen sind ein Adressversatz um ein Register, der falsche Funktionscode, ein ungeeigneter Datentyp, vertauschte Wörter oder ein nicht berücksichtigter Skalierungsfaktor.
Die Fehlersuche sollte deshalb beim unveränderten Rohwert beginnen. Erst wenn Registeradresse, Registertyp, Datenlänge und Byte-Reihenfolge eindeutig stimmen, wird der Wert skaliert und in die gewünschte Einheit umgerechnet.
Geeignete analoge und digitale Schnittstellenmodule finden Sie im Bereich Modbus I/O. Eine Übersicht weiterer Anzeigen, Energiezähler, Messumformer und Schnittstellen bietet die Kategorie Messgeräte für den Anlagen- und Schaltschrankbau.
Inhaltsverzeichnis
- Warum funktioniert die Kommunikation trotz falscher Werte?
- Holding Register und Input Register unterscheiden
- 0- und 1-basierte Registeradressierung richtig behandeln
- INT16, INT32 und Float richtig auswählen
- Signed und Unsigned unterscheiden
- Byte- und Word-Reihenfolge prüfen
- Skalierungsfaktor und Einheit anwenden
- Polling, Aktualisierungszeit und Datenkonsistenz
- Geräteadresse und Kommunikationsparameter kontrollieren
- Rohregister mit Referenzsoftware prüfen
- Praxisbeispiel: Energiezähler zeigt falsche Spannung
- Typische Fehlerbilder schnell zuordnen
- Empfohlener Ablauf bei der Fehlersuche
- Welche Produkte eignen sich?
- Fazit
- Häufige Fragen
Warum funktioniert die Kommunikation trotz falscher Werte?
Eine erfolgreiche Modbus-Abfrage bestätigt zunächst nur, dass der angesprochene Teilnehmer eine formal gültige Antwort liefert. Sie bestätigt nicht, dass die Steuerung das richtige Register abfragt oder die empfangenen Bytes korrekt interpretiert.
Ein Gerät kann beispielsweise zwei gültige Register direkt nebeneinander bereitstellen. Wird durch einen Adressversatz statt der Spannung der Frequenzwert gelesen, antwortet das Gerät trotzdem fehlerfrei. Gleiches gilt, wenn zwei Register eines Float-Wertes in der falschen Reihenfolge zusammengesetzt werden.
Die Diagnose sollte deshalb zwei Ebenen trennen:
- Kommunikationsebene: Teilnehmer erreichbar, Telegramm gültig, keine Timeouts oder CRC-Fehler,
- Datenebene: richtiges Register, passender Funktionscode, korrekter Datentyp, richtige Reihenfolge und Skalierung.
Bei stabiler Kommunikation und reproduzierbar falschen Zahlen liegt die Ursache meist auf der Datenebene.
Holding Register und Input Register unterscheiden
Modbus unterscheidet mehrere Datenbereiche. Für Messgeräte sind vor allem Input Register und Holding Register relevant. Beide enthalten jeweils 16 Bit, werden aber über unterschiedliche Funktionscodes gelesen.
| Datenbereich | Typischer Funktionscode | Zugriff | Typische Verwendung |
|---|---|---|---|
| Coils | 01 | Lesen und Schreiben | Digitale Ausgänge und Befehle |
| Discrete Inputs | 02 | Nur Lesen | Digitale Zustände |
| Holding Register | 03 | Lesen, teilweise Schreiben | Parameter, Sollwerte und teilweise Messwerte |
| Input Register | 04 | Nur Lesen | Messwerte und Statusinformationen |
Manche Geräte stellen Prozesswerte ausschließlich als Input Register bereit. Andere Hersteller legen Messwerte in Holding Register oder ermöglichen den Zugriff über beide Bereiche. Maßgeblich ist immer die Registerliste des konkreten Geräts.
Wird ein Register mit dem falschen Funktionscode abgefragt, reagiert das Gerät entweder mit einer Modbus-Ausnahme oder liefert einen anderen Datenbereich. Deshalb müssen Adresse und Funktionscode gemeinsam dokumentiert werden.
0- und 1-basierte Registeradressierung richtig behandeln
Die Registeradressierung ist eine der häufigsten Ursachen für falsche Werte. Innerhalb des Modbus-Telegramms beginnt die Adresse bei null. Viele Handbücher nummerieren das erste Register jedoch mit 1 oder verwenden Schreibweisen wie 30001 und 40001.
Ein Datenpunkt mit der Bezeichnung 40001 kann je nach Software daher auf unterschiedliche Weise eingegeben werden:
- als vollständige Referenz 40001,
- als Registernummer 1,
- als Protokolladresse beziehungsweise Offset 0.
Einige Modbus-Programme ziehen den Bereichsbezeichner und den Versatz automatisch ab. Andere erwarten direkt die im Telegramm verwendete Nulladresse. Wird diese Besonderheit übersehen, entsteht typischerweise ein Versatz um genau ein Register.
Ein Beispiel:
- Herstellerdokumentation: Spannung ab Register 40001,
- tatsächliche PDU-Startadresse: 0,
- Software erwartet Offset: Eingabe 0,
- Software erwartet Registernummer: Eingabe 1 oder 40001.
Die Bezeichnung des Eingabefeldes allein ist nicht immer eindeutig. Am zuverlässigsten ist eine Testabfrage mehrerer aufeinanderfolgender Register. So lässt sich erkennen, an welcher Position ein plausibler Rohwert erscheint.
INT16, INT32 und Float richtig auswählen
Ein Modbus-Register enthält grundsätzlich 16 Bit. Viele Messwerte benötigen jedoch einen größeren Zahlenbereich oder Nachkommastellen und werden deshalb über zwei oder vier aufeinanderfolgende Register übertragen.
| Datentyp | Benötigte Register | Typische Verwendung |
|---|---|---|
| UINT16 / INT16 | 1 | Status, kleine Messbereiche und skalierte Werte |
| UINT32 / INT32 | 2 | Zählerstände, Energie und Betriebsstunden |
| IEEE-754 Float | 2 | Messwerte mit Nachkommastellen |
| UINT64 / INT64 | 4 | Große Summenzähler und Langzeitwerte |
| Double | 4 | Hochaufgelöste Gleitkommazahlen |
Wird ein 32-Bit-Wert nur als einzelnes 16-Bit-Register gelesen, fehlt die Hälfte der Information. Umgekehrt führt das Zusammenfassen zweier unabhängiger 16-Bit-Werte zu einer großen, aber bedeutungslosen Zahl.
Bei einem 32-Bit-Messwert sollten beide Register möglichst in einer gemeinsamen Abfrage gelesen werden. Dadurch wird verhindert, dass sich der Wert zwischen zwei getrennten Abfragen verändert und aus zwei unterschiedlichen Aktualisierungsständen zusammengesetzt wird.
Signed und Unsigned unterscheiden
Ein 16-Bit-Register kann als vorzeichenlose oder vorzeichenbehaftete Zahl interpretiert werden.
- UINT16: Wertebereich 0 bis 65.535,
- INT16: Wertebereich −32.768 bis +32.767.
Der gleiche Bitinhalt kann daher zwei verschiedene Zahlen darstellen. Der Rohwert 65.530 entspricht als vorzeichenloser Wert 65.530. Wird derselbe Inhalt als INT16 im Zweierkomplement interpretiert, ergibt sich −6.
Dieser Fehler tritt häufig bei Temperaturen, Blindleistungen, Leistungsfaktoren, bidirektionalen Strömen oder Durchflussrichtungen auf. Zeigt ein eigentlich negativer Messwert eine Zahl nahe 65.535, wurde wahrscheinlich UINT16 statt INT16 verwendet.
Bei 32-Bit-Werten gilt dasselbe Prinzip. Ob ein Wert signed oder unsigned ist, muss ausdrücklich aus der Registerbeschreibung hervorgehen.
Byte- und Word-Reihenfolge prüfen
Innerhalb eines einzelnen 16-Bit-Registers wird das höherwertige Byte zuerst übertragen. Bei Messwerten über mehrere Register ist zusätzlich zu klären, welches Register das höherwertige Wort enthält.
Für einen 32-Bit-Wert mit den vier Bytes A, B, C und D sind in Geräten und Software unter anderem folgende Darstellungen anzutreffen:
- ABCD: höherwertiges Wort zuerst, Bytes innerhalb der Wörter unverändert,
- CDAB: Wörter vertauscht,
- BADC: Bytes innerhalb der Wörter vertauscht,
- DCBA: Wörter und Bytes vertauscht.
Viele Programme bezeichnen diese Funktionen als Byte Swap, Word Swap, Big Endian, Little Endian oder Mid-Little Endian. Die Begriffe werden nicht in jeder Software identisch verwendet. Entscheidend ist daher nicht nur der Name der Einstellung, sondern der tatsächlich gebildete Byteablauf.
Ein Float-Wert von 230,0 kann beispielsweise als Hexadezimalwert 4366 0000 vorliegen. Werden die beiden Wörter vertauscht und als 0000 4366 interpretiert, entsteht ein völlig anderer Gleitkommawert.
Bei unplausiblen 32-Bit-Werten sollten deshalb alle vom Treiber unterstützten Word-Reihenfolgen systematisch getestet und mit einem bekannten Messwert verglichen werden.
Skalierungsfaktor und Einheit anwenden
Nicht jeder Messwert wird als fertige Gleitkommazahl übertragen. Viele Geräte verwenden Ganzzahlen mit einem separaten Skalierungsfaktor.
Ein Registerwert von 2305 kann beispielsweise bedeuten:
2305 × 0,1 V = 230,5 V
Typische Faktoren sind:
- × 0,1 oder ÷ 10,
- × 0,01 oder ÷ 100,
- × 10 oder × 100,
- eine Zehnerpotenz aus einem separaten Exponentenregister.
Neben dem Zahlenfaktor muss die Einheit stimmen. Ein Energiezähler kann beispielsweise Wh, kWh oder MWh übertragen. Bei Temperaturen können °C, K oder Zehntelgrad verwendet werden. Strom- und Spannungswerte können sich auf Primär- oder Sekundärgrößen beziehen.
Besonders häufig ist eine doppelte Skalierung. Das Messgerät berücksichtigt bereits das eingestellte Strom- oder Spannungswandlerverhältnis, während die SPS denselben Faktor erneut multipliziert. Umgekehrt kann ein unberücksichtigtes Wandlerverhältnis den Wert um den Faktor 100 oder 1.000 zu klein erscheinen lassen.
Polling, Aktualisierungszeit und Datenkonsistenz
Eine falsche Polling-Einstellung erzeugt normalerweise keinen konstanten Skalierungsfehler, kann aber veraltete, springende oder zeitlich versetzte Werte verursachen.
Der Abfragezyklus sollte zur internen Aktualisierungszeit des Messgeräts passen. Wird ein Gerät deutlich schneller abgefragt, als es neue Messwerte berechnet, werden lediglich identische Werte mehrfach gelesen und die Buslast steigt unnötig.
Bei vielen Teilnehmern oder zu kurzen Timeouts können Antworten verloren gehen. Die Steuerung zeigt dann möglicherweise den letzten gültigen Wert weiter an. Deshalb sollte neben dem Messwert immer ein Kommunikations- oder Qualitätsstatus ausgewertet werden.
Mehrere zusammengehörige Register sollten möglichst in einem Telegramm gelesen werden. Das gilt besonders für 32- und 64-Bit-Zählerstände sowie Messwertblöcke mit gemeinsamem Zeitbezug.
Geräteadresse und Kommunikationsparameter kontrollieren
Bei Modbus RTU müssen Master und Teilnehmer dieselben seriellen Kommunikationsparameter verwenden:
- Teilnehmeradresse,
- Baudrate,
- Parität,
- Anzahl der Daten- und Stoppbits.
Antwortet ein Gerät zuverlässig, stimmen diese Parameter meist bereits. Trotzdem können doppelte Teilnehmeradressen oder wechselnde Antworten mehrerer Geräte zu schwer nachvollziehbaren Messwerten führen.
Bei Modbus TCP müssen zusätzlich IP-Adresse, Port, Unit Identifier und gegebenenfalls die Gateway-Zuordnung geprüft werden. Hinter einem TCP/RTU-Gateway bestimmt der Unit Identifier häufig, welcher serielle Teilnehmer angesprochen wird.
Die Geräte-ID darf nicht mit der Registeradresse verwechselt werden. Sie wählt den Teilnehmer aus; die Registeradresse bestimmt den Datenpunkt innerhalb dieses Teilnehmers.
Rohregister mit Referenzsoftware prüfen
Für eine systematische Fehlersuche sollte das Messgerät zunächst unabhängig von der SPS abgefragt werden. Bei Modbus RTU kann dazu ein USB-RS485-Konverter mit geeigneter Modbus-Client-Software verwendet werden.
Die Referenzabfrage sollte mindestens anzeigen:
- Funktionscode,
- Startadresse,
- Anzahl der Register,
- Rohwerte dezimal und hexadezimal,
- interpretierter Datentyp,
- eingestellte Byte- und Word-Reihenfolge.
Als Vergleich eignet sich ein stabiler und leicht nachvollziehbarer Betriebszustand. Eine Netzspannung, Umgebungstemperatur oder ein definierter Analogwert ist meist einfacher zu bewerten als ein schnell veränderlicher Leistungs- oder Zählerwert.
Stimmt der Wert in der Referenzsoftware, liegt der Fehler wahrscheinlich in der SPS-Konfiguration. Ist der Wert bereits dort falsch, werden Registerliste, Geräteparametrierung, Adresse und Datenformat erneut geprüft.
Praxisbeispiel: Energiezähler zeigt falsche Spannung
Ein Energiezähler ist über Modbus RTU mit einer SPS verbunden. Die Kommunikation funktioniert ohne Fehler, die SPS zeigt für die Netzspannung jedoch 17.320 V an. Am Display des Zählers stehen ungefähr 230 V.
Laut Registerliste beginnt der Spannungswert bei Holding Register 40001 und wird als 32-Bit-Float übertragen. Die SPS liest ab Adresse 1 zwei Register und interpretiert sie als UINT32.
Bei der Prüfung werden drei Fehler erkannt:
- Der verwendete Treiber erwartet eine nullbasierte Startadresse. Statt Adresse 1 muss Offset 0 eingetragen werden.
- Der Messwert ist ein IEEE-754-Float und kein vorzeichenloser 32-Bit-Integer.
- Das Gerät überträgt das niederwertige Register zuerst, weshalb ein Word Swap erforderlich ist.
Nach der Korrektur zeigt die SPS 230,4 V an. Ein zusätzlicher Skalierungsfaktor ist nicht erforderlich, weil der Float-Wert bereits in Volt übertragen wird.
Das Beispiel zeigt, dass eine stabile Modbus-Verbindung mehrere gleichzeitig vorhandene Interpretationsfehler nicht ausschließt.
Typische Fehlerbilder schnell zuordnen
| Fehlerbild | Wahrscheinliche Ursache |
|---|---|
| Wert gehört offensichtlich zu einer anderen Messgröße | Registeradresse um ein oder mehrere Register verschoben |
| Gerät antwortet mit Illegal Function | Falscher Funktionscode oder nicht unterstützter Registerbereich |
| Wert ist exakt um Faktor 10, 100 oder 1.000 falsch | Skalierungsfaktor oder Einheit nicht berücksichtigt |
| Negative Werte erscheinen nahe 65.535 | Unsigned statt Signed ausgewertet |
| Float-Wert ist extrem groß, sehr klein oder NaN | Falsche Word- oder Byte-Reihenfolge |
| Wert springt unregelmäßig | Register werden getrennt gelesen, Timeout oder doppelte Geräteadresse |
| Wert bleibt stehen, Kommunikation ist zeitweise gestört | Letzter gültiger Wert wird ohne Qualitätsstatus weiter angezeigt |
| Primärwert ist um das Wandlerverhältnis falsch | Strom- oder Spannungswandlerfaktor fehlt oder wurde doppelt angewendet |
Empfohlener Ablauf bei der Fehlersuche
- Lokalen Gerätewert oder bekannten Referenzwert dokumentieren.
- Exakte Gerätevariante und aktuelle Registerliste prüfen.
- Modbus RTU oder Modbus TCP eindeutig festlegen.
- Teilnehmeradresse beziehungsweise Unit Identifier kontrollieren.
- Funktionscode für Holding oder Input Register prüfen.
- Adresskonvention der verwendeten Software klären.
- Rohregister dezimal und hexadezimal auslesen.
- Anzahl der benötigten 16-Bit-Register kontrollieren.
- Signed, Unsigned, Integer oder Float korrekt auswählen.
- Word Swap und gegebenenfalls Byte Swap testen.
- Skalierungsfaktor, Einheit und Wandlerverhältnis anwenden.
- Polling-Zyklus und Timeout anpassen.
- Messwert mit Referenzsoftware unabhängig von der SPS prüfen.
- Funktionierende Konfiguration vollständig dokumentieren.
In der Dokumentation sollten nicht nur sichtbare Registernummern stehen. Sinnvoll sind Funktionscode, PDU-Offset, Datenlänge, Datentyp, Reihenfolge, Faktor, Einheit und zulässiger Wertebereich.
Welche Produkte eignen sich?
Modbus I/O-Module
Die Kategorie Modbus I/O enthält schmale Hutschienenmodule zur Erfassung und Ausgabe analoger oder digitaler Signale über Modbus RTU.
Zum Sortiment gehören unter anderem:
- DMB 96100 für analoge Normsignale wie 0–10 V und 4–20 mA,
- DMB 96200 mit vier galvanisch getrennten Analogeingängen,
- DMB 96400 mit analogen Ein- und Ausgängen,
- DMB 96500 mit universellem Messeingang für unterschiedliche Industriesignale,
- DMB 96700 für digitale Ein- und Ausgänge,
- DMB 96800 mit vier Relaisausgängen.
Bei der Integration müssen die zum jeweiligen Modul gehörende Bedienungsanleitung und das Modbus-Registerhandbuch verwendet werden. Registerlisten ähnlicher Geräte oder anderer Firmwarestände dürfen nicht ungeprüft übernommen werden.
Modbus RTU Anschlussmodul DMB 96000
Das DMB 96000 verbindet Versorgung und RS-485-Leitungen mit dem In-Rail-Bus. Abschluss- und Polarisationswiderstände können abhängig vom Anlagenaufbau zugeschaltet werden. Das Modul eignet sich für kompakte, erweiterbare Modbus-I/O-Stationen im Schaltschrank.
USB-RS485-Konverter und Programmier-Interface
Ein USB-RS485-Konverter ermöglicht die direkte Verbindung eines Service-PCs mit einem Modbus-RTU-Gerät. Damit können Rohregister unabhängig von SPS und Leitsystem ausgelesen werden.
Diese Vergleichsabfrage ist besonders hilfreich, wenn geklärt werden muss, ob der Fehler im Messgerät, in der Registerinterpretation oder im SPS-Programm liegt.
Weitere Messgeräte für den Schaltschrankbau
In der Kategorie Messgeräte für den Anlagen- und Schaltschrankbau stehen zusätzlich Energiezähler, Digitalanzeigen, Messumformer, Schnittstellenkonverter und Energiemanagement-Komponenten zur Verfügung.
Bei jeder Modbus-Integration müssen Geräteausführung, Kommunikationsschnittstelle, Registerliste und Firmwarestand gemeinsam betrachtet werden.
Fazit: Erst den Rohwert verstehen, dann skalieren
Wenn ein Modbus-Gerät zuverlässig antwortet, aber falsche Zahlen liefert, ist das Messgerät häufig nicht defekt. Meist werden richtige Registerdaten mit einer falschen Adresse, einem ungeeigneten Datentyp oder einer falschen Reihenfolge ausgewertet.
Die wichtigsten Prüfungen sind der passende Funktionscode, die null- oder einsbasierte Adressierung, die Anzahl der Register, Signed oder Unsigned, Integer oder Float sowie die Word- und Byte-Reihenfolge.
Erst danach werden Skalierungsfaktor, Einheit und mögliche Strom- oder Spannungswandlerverhältnisse angewendet. Eine unabhängige Abfrage mit Referenzsoftware und USB-RS485-Konverter trennt Gerätefehler von SPS- und Parametrierfehlern.
Eine vollständige Registerdokumentation verhindert, dass dieselben Fehler bei einem Steuerungstausch, einer Softwareänderung oder einer späteren Anlagenerweiterung erneut auftreten.
Häufige Fragen zu falschen Modbus-Messwerten
Warum antwortet das Gerät, obwohl die Registeradresse falsch ist?
Die angefragte Adresse kann zu einem anderen gültigen Register gehören. Das Gerät liefert deshalb eine formal korrekte Antwort, deren Inhalt jedoch eine andere Bedeutung hat.
Ist Register 40001 immer als Adresse 40001 einzugeben?
Nein. Je nach Software wird 40001, Registernummer 1 oder der nullbasierte Offset 0 erwartet. Die Adresskonvention des verwendeten Treibers muss geprüft werden.
Was ist der Unterschied zwischen Holding und Input Register?
Holding Register werden typischerweise mit Funktionscode 03 gelesen und können teilweise beschrieben werden. Input Register werden mit Funktionscode 04 gelesen und sind normalerweise schreibgeschützt.
Warum wird ein negativer Wert als ungefähr 65.000 angezeigt?
Der Registerinhalt wird wahrscheinlich als vorzeichenloser UINT16 statt als vorzeichenbehafteter INT16 interpretiert.
Wann wird ein Word Swap benötigt?
Ein Word Swap wird bei 32- oder 64-Bit-Werten benötigt, wenn das Gerät die 16-Bit-Register in einer anderen Reihenfolge bereitstellt als der Modbus-Treiber sie zusammensetzt.
Warum ist der Messwert exakt um den Faktor 100 falsch?
Wahrscheinlich fehlt ein Skalierungsfaktor von 0,01 oder er wurde doppelt angewendet. Auch eine Verwechslung von Wh und kWh oder ein falsch berücksichtigtes Wandlerverhältnis ist möglich.
Wie lässt sich feststellen, ob Messgerät oder SPS falsch konfiguriert sind?
Das Messgerät wird mit einem unabhängigen Modbus-Client abgefragt. Ist der Wert dort korrekt, liegt der Fehler wahrscheinlich in der SPS. Ist bereits der Rohwert falsch zugeordnet, müssen Registerliste und Geräteparametrierung geprüft werden.
