Modbus-Funktions- und Ausnahmecodes

Öffentliche Modbus-Funktions- und Ausnahmecodes nachschlagen oder eine Ausnahmeantwort wie 83 02 eingeben, um die fehlgeschlagene Anfrage und deren Ursache zu erkennen.

Modbus und serielle Verbindungen Aktualisiert Kostenlos, ohne Anmeldung

Was liegt Ihnen vor?

Beispiele

Ein Funktionscode (16 oder 0x10), eine empfangene Ausnahmeantwort oder Wörter aus einem deutschen oder englischen Namen

Funktion 16 (0x10)

Mehrere Register schreiben

Funktionscode
0x10
Zugriff
Zusammenhängende Halteregister schreiben · 16-Bit-Wörter
Anfragegrenze
1 bis 123 zusammenhängende Register
Übertragung
Anwendungsprotokoll
Funktionscode in der Ausnahmeantwort
0x90
Hexadezimal gelesen: 0x16
Register mit Maske schreiben

Ein öffentlicher Funktionscode beweist nicht, dass ein Gerät ihn unterstützt. Prüfen Sie seine Registertabelle.

So wird es berechnet

Exception response function code = request function code + 0x80

Funktion 16 (0x10) ist Mehrere Register schreiben. Ihre Ausnahmeantwort beginnt mit 0x90.

Tipp: Keine Antwort ist keine Ausnahme. Prüfen Sie Verkabelung, Unit-ID, Baudrate, Parität und Abschluss, bevor Sie die Registertabelle untersuchen.

Modbus-Ausnahmeantwort lesen

Kann ein Modbus-Gerät eine Anfrage nicht ausführen, antwortet es mit einer Ausnahme: dem Funktionscode mit gesetztem höchstwertigem Bit (Code plus 0x80), gefolgt von einem ein Byte langen Ausnahmecode. 83 02 bedeutet, dass eine Anfrage „Read Holding Registers“ (0x03) mit Ausnahme 02, „Illegal Data Address“, fehlgeschlagen ist. Geben Sie die Antwortbytes oben ein, um sie zu dekodieren.

Das Funktionsbyte

Funktionscode der Antwort = Funktionscode der Anfrage + 0x80

Eine normale Antwort wiederholt den Funktionscode der Anfrage. Bei einer Ausnahme wird das höchstwertige Bit gesetzt: Aus 0x03 wird 0x83, aus 0x10 wird 0x90. Ziehen Sie 0x80 ab, um die fehlgeschlagene Anfrage zu ermitteln.

Der Ausnahmecode

01 Funktion · 02 Adresse · 03 Wert · 04 Gerätefehler

01 Illegal Function: Das Gerät unterstützt die Anfrage nicht. 02 Illegal Data Address: Die Adresse oder der angefragte Bereich liegt außerhalb der vorhandenen Adressen. 03 Illegal Data Value: Ein Wert in der Anfrage ist unzulässig. 04 Server Device Failure: Das Gerät ist bei der Ausführung gescheitert. Dies sind die Ausnahmenamen der Modbus-Spezifikation.

Funktionscodes in Dezimal- und Hexadezimalschreibweise

FC16 = 16 dezimal = 0x10

Handbücher verwenden beide Schreibweisen. Das Feld oben liest eine Zahl ohne Präfix als Dezimalzahl, wenn sie einen Funktionscode bezeichnet: 16 bedeutet „Write Multiple Registers“. Daneben wird auch die mögliche hexadezimale Lesart angezeigt; geben Sie ausdrücklich 0x16 für die Hexadezimalzahl ein.

Keine Antwort ist keine Ausnahme. Eine Zeitüberschreitung kann auf Verkabelung, Unit-ID, Baudrate, Parität, Abschluss oder ein wegen fehlerhafter CRC verworfenes Telegramm hinweisen. Nur ein Gerät, das das Telegramm verstanden hat, kann eine Ausnahme senden.

Beispiele für Modbus-Ausnahmecodes

Antwort 83 02 von einem Zähler

Ziehen Sie 0x80 von 0x83 ab: Das ergibt 0x03, „Read Holding Registers“. Ausnahme 02, „Illegal Data Address“, bedeutet, dass das Gerät die angefragten Register nicht bereitstellt. Häufig liegt die Ursache bei einer um eins verschobenen Adresse aus einer Referenz wie 40001 oder bei einer Anfrage über das Ende eines Blocks hinaus. Beim ersten Fall hilft der Modbus-Adresskonverter.

Ausnahme 0x02 Unzulässige Datenadresse Im Rechner öffnen

Antwort 90 03 nach einem Schreibzugriff

0x90 − 0x80 = 0x10, „Write Multiple Registers“, und 03 steht für „Illegal Data Value“. Das Gerät hat das Telegramm empfangen, aber einen Wert darin abgelehnt: etwa einen Sollwert außerhalb des zulässigen Bereichs, eine Registeranzahl, die nicht zur Byteanzahl passt, oder einen Schreibzugriff auf einen schreibgeschützten Block.

Ausnahme 0x03 Unzulässiger Datenwert Im Rechner öffnen

Was ist Funktion 16?

Dezimal bezeichnet Funktion 16 „Write Multiple Registers“ und wird als 0x10 übertragen. Hexadezimal bezeichnet 0x16 dagegen „Mask Write Register“, also eine andere Anfrage. Wenn ein Handbuch „FC16“ schreibt, ist der Dezimalwert gemeint.

Funktion 16 (0x10) Mehrere Register schreiben Im Rechner öffnen

Modbus-Funktionscodes und ihre Ausnahmeantworten

Gängige öffentliche Funktionscodes in Dezimal- und Hexadezimalschreibweise und das erste Byte, das ein Gerät bei fehlgeschlagener Anfrage zurückgibt.

FunktionNameHexAntwortbyte
1Spulen lesen0x010x81
2Diskrete Eingänge lesen0x020x82
3Halteregister lesen0x030x83
4Eingangsregister lesen0x040x84
5Einzelne Spule schreiben0x050x85
6Einzelnes Register schreiben0x060x86
15Mehrere Spulen schreiben0x0F0x8F
16Mehrere Register schreiben0x100x90
22Register mit Maske schreiben0x160x96
23Mehrere Register lesen und schreiben0x170x97
43Gekapselte Schnittstellenübertragung0x2B0xAB

Diese Tabelle als CSV herunterladen

Referenztabellen

Öffentliche Funktionscodes

In V1.1b3 definierte öffentliche Funktionen. Ein gelisteter Funktionscode beweist nicht, dass ein bestimmtes Gerät ihn implementiert.

CodeFunktionDatenzugriffAnfragegrenze des ProtokollsHinweis zur Übertragung
0x01Spulen lesenSpulen lesen · Bits1 bis 2.000 zusammenhängende SpulenAnwendungsprotokoll
0x02Diskrete Eingänge lesenDiskrete Eingänge lesen · Bits1 bis 2.000 zusammenhängende EingängeAnwendungsprotokoll
0x03Halteregister lesenHalteregister lesen · 16-Bit-Wörter1 bis 125 zusammenhängende RegisterAnwendungsprotokoll
0x04Eingangsregister lesenEingangsregister lesen · 16-Bit-Wörter1 bis 125 zusammenhängende RegisterAnwendungsprotokoll
0x05Einzelne Spule schreibenEine Spule schreiben · BitGenau eine SpuleAnwendungsprotokoll
0x06Einzelnes Register schreibenEin Halteregister schreiben · 16-Bit-WortGenau ein RegisterAnwendungsprotokoll
0x07Ausnahmestatus lesenAcht implementationsspezifische Statusausgänge lesenKeine AnfragedatenNur serielle Leitung
0x08DiagnoseKommunikationsdiagnose je UnterfunktionAbhängig von der UnterfunktionNur serielle Leitung
0x0BKommunikationsereigniszähler lesenKommunikationsstatus und Ereignisanzahl lesenKeine AnfragedatenNur serielle Leitung
0x0CKommunikationsereignisprotokoll lesenKommunikationsstatus, Zähler und Ereignisbytes lesenKeine AnfragedatenNur serielle Leitung
0x0FMehrere Spulen schreibenZusammenhängende Spulen schreiben · Bits1 bis 1.968 zusammenhängende SpulenAnwendungsprotokoll
0x10Mehrere Register schreibenZusammenhängende Halteregister schreiben · 16-Bit-Wörter1 bis 123 zusammenhängende RegisterAnwendungsprotokoll
0x11Server-ID meldenGerätespezifische Kennung und Betriebsstatus lesenKeine AnfragedatenNur serielle Leitung
0x14Dateiregister lesenEine oder mehrere Dateiregistergruppen lesen7 bis 245 AnfragebytesAnwendungsprotokoll
0x15Dateiregister schreibenEine oder mehrere Dateiregistergruppen schreiben9 bis 251 AnfragebytesAnwendungsprotokoll
0x16Register mit Maske schreibenBits in einem Halteregister ändernGenau ein RegisterAnwendungsprotokoll
0x17Mehrere Register lesen und schreibenHalteregister schreiben, anschließend Halteregister lesen1 bis 125 lesen; 1 bis 121 Register schreibenAnwendungsprotokoll
0x18FIFO-Warteschlange lesenFIFO-Anzahl und Wertregister lesenZurückgegebene FIFO-Anzahl höchstens 31Anwendungsprotokoll
0x2BGekapselte SchnittstellenübertragungEine MEI-definierte Schnittstelle aufrufenVeröffentlichte MEI-Typen 0x0D und 0x0EAnwendungsprotokoll

Quelle: MODBUS Application Protocol Specification, V1.1b3

Primäre Datenobjekte

Die vier primären Modbus-Datentabellen. Die Zuordnung zum Gerätespeicher und eine mögliche Überlagerung der Tabellen hängen von der Implementierung ab.

ObjektElementProtokollzugriffWichtige öffentliche Funktionen
SpulenEin BitLesen und Schreiben0x01 lesen · 0x05/0x0F schreiben
Diskrete EingängeEin BitNur lesen0x02 lesen
Eingangsregister16-Bit-WortNur lesen0x04 lesen
Halteregister16-Bit-WortLesen und Schreiben0x03 lesen · 0x06/0x10/0x16/0x17 schreiben

Quelle: MODBUS Application Protocol Specification, V1.1b3

Ausnahmecodes

Codes in einer Modbus-Ausnahmeantwort. Eine Zeitüberschreitung oder ein wegen CRC- oder Paritätsfehler verworfenes Telegramm ist selbst keine solche Ausnahmeantwort.

CodeAusnahmeBedeutung im Protokoll
0x01Unzulässige FunktionDie angefragte Funktion ist für diesen Server oder seinen aktuellen Zustand nicht zulässig.
0x02Unzulässige DatenadresseStartadresse, angefragter Bereich oder deren Kombination sind für den Server nicht zulässig.
0x03Unzulässiger DatenwertDie Struktur der Anfragedaten enthält einen Wert, den der Server nicht akzeptieren kann; dies beschreibt nicht den in einem Register gespeicherten Anwendungswert.
0x04Server-GerätefehlerBei der Ausführung der angefragten Aktion ist ein nicht behebbarer Fehler aufgetreten.
0x05BestätigungDer Server hat eine spezielle Programmieranfrage angenommen, benötigt aber mehr Zeit, um sie abzuschließen.
0x06Servergerät beschäftigtDer Server ist mit einem länger dauernden Programmierbefehl beschäftigt; der Client kann es später erneut versuchen.
0x08SpeicherparitätsfehlerEine Konsistenzprüfung von Dateiregistern ist bei Funktion 0x14 oder 0x15 mit Referenztyp 0x06 fehlgeschlagen.
0x0AGateway-Pfad nicht verfügbarEin Gateway konnte keinen internen Weg von seinem Eingangsport zum angefragten Ausgang zuweisen.
0x0BGateway-Zielgerät antwortet nichtDas Gateway hat vom Zielgerät keine Antwort erhalten.

Quelle: MODBUS Application Protocol Specification, V1.1b3

Fragen zu Modbus-Ausnahmecodes

Was bedeutet Modbus-Ausnahme 02?

„Illegal Data Address“: Das Gerät stellt die angefragte Adresse nicht bereit oder Adresse plus Registeranzahl überschreiten den verfügbaren Bereich. Prüfen Sie Adresskonvention und Leselänge.

Was bedeutet Modbus-Ausnahme 01?

„Illegal Function“: Das Gerät unterstützt den Funktionscode nicht oder in seinem aktuellen Zustand nicht. Viele Zähler unterstützen nur wenige Funktionen, häufig 03, 04 und 16.

Warum erhalte ich eine Zeitüberschreitung statt einer Ausnahme?

Das Gerät hat die Anfrage nicht verstanden: falsche Unit-ID, Baudrate oder Parität, vertauschte A- und B-Leitungen, fehlender Abschluss oder CRC-Fehler. Nur ein Gerät, das das Telegramm korrekt gelesen hat, antwortet mit einer Ausnahme. Der RS-485-Abschluss- und Bias-Prüfer behandelt die Verkabelung.

Was bedeuten die Ausnahmen 0A und 0B?

Das sind Gateway-Ausnahmen. 0A, „Gateway Path Unavailable“, bedeutet, dass das Gateway die Anfrage nicht weiterleiten konnte. 0B, „Gateway Target Device Failed to Respond“, bedeutet, dass das Gerät dahinter nicht antwortete. Beide weisen auf den Weg hinter dem Gateway einschließlich der seriellen Verbindung hin.

Grenzen dieses Ergebnisses

  • Ein öffentlicher Funktionscode beweist nicht, dass ihn ein bestimmter Server implementiert. Prüfen Sie die aktuelle Registertabelle und Firmware-Dokumentation des Geräts.
  • Der Funktionscode allein legt weder Registerbedeutung, Skalierung, Vorzeichen, Byte- und Wortreihenfolge, Adresskonvention noch die Sicherheit eines Schreibzugriffs fest.
  • Funktionen, die nur für serielle Leitungen gelten, sind keine allgemeinen Modbus-TCP-Dienste. Ein Gateway kann zusätzliche Einschränkungen haben.
  • Keine Antwort ist von einer Ausnahmeantwort zu unterscheiden. Verkabelung, Timing, Unit-ID, CRC, Parität, Routing und Geräteverfügbarkeit müssen weiterhin geprüft werden.

Kontinuierlich messen

Ein ZMB liest und schreibt Modbus-RTU-Geräte vor Ort und sendet die Daten über das drahtlose Mesh-Netz an das Gateway. So lässt sich ein Zähler ohne Datenleitung zurück zum Schaltschrank integrieren.

Verwandte Leitfäden

Quellen

  1. MODBUS Application Protocol Specification V1.1b3 (öffnet in einem neuen Tab) (PDF) Modbus Organization, 2012-04-26
  2. Specifications and Implementation Guides (öffnet in einem neuen Tab) Modbus Organization, accessed 2026-09-14