Funktionscodes werden dezimal (FC 16) und hex (0x10) geschrieben, beides bedeutet dasselbe. Die Codes 65–72 und 100–110 sind Herstellern für eigene Funktionen überlassen.
01 Coils lesen (Read Coils)
0x01 · Coils (0x)
Liest 1 bis 2000 Ausgangsbits (Coils). Die Anfrage enthält Startadresse und Anzahl, die Antwort eine Byteanzahl und die Bits zu je 8 pro Byte, die erste Adresse im niedrigsten Bit.
Coils sind Relaisausgänge oder schaltbare Merker. Viele Zähler und Wechselrichter haben gar keine Coils und legen Statusbits in Holding-Register. Antwortet 01 mit Exception 01, suchen Sie das Register, das das Bit enthält.
02 diskrete Eingänge lesen (Read Discrete Inputs)
0x02 · Diskrete Eingänge (1x)
Liest 1 bis 2000 schreibgeschützte Eingangsbits (diskrete Eingänge), gepackt zu je 8 pro Byte wie Coils.
Typisch für digitale Eingänge von I/O-Modulen und SPS. Zähler und Wechselrichter nutzen sie selten, sie melden Zustände in Registern.
03 Holding-Register lesen (Read Holding Registers)
0x03 · Holding-Register (4x)
Liest 1 bis 125 aufeinanderfolgende 16-Bit-Holding-Register. Die Anfrage enthält Startadresse und Anzahl, die Antwort eine Byteanzahl und zwei Bytes pro Register, höherwertiges Byte zuerst.
Die mit Abstand meistgenutzte Funktion. Die meisten Zähler, Wechselrichter und Umrichter legen alles in Holding-Register, auch schreibgeschützte Messwerte. Exception 02 bedeutet meist eine um eins verschobene Adresse oder ein Lesen über eine Lücke in der Registerkarte.
04 Input-Register lesen (Read Input Registers)
0x04 · Input-Register (3x)
Liest 1 bis 125 schreibgeschützte 16-Bit-Input-Register. Die Frames sehen genau aus wie bei Funktion 03.
Manche Geräte legen Messwerte in Input-Register und Einstellungen in Holding-Register. Liefert 03 Exception 02 oder nur Nullen, versuchen Sie 04 an derselben Adresse, und umgekehrt.
05 einzelne Coil schreiben (Write Single Coil)
0x05 · Coils (0x)
Schaltet eine Coil. Der Wert ist FF 00 für EIN und 00 00 für AUS, alles andere ist ungültig. Die Antwort ist eine exakte Kopie der Anfrage.
00 01 für EIN zu senden ist ein häufiger Fehler und endet mit Exception 03. Manche Geräte nutzen eine Coil für einmalige Aktionen, etwa das Zurücksetzen von Energiezählern.
06 einzelnes Register schreiben (Write Single Register)
0x06 · Holding-Register (4x)
Schreibt einen 16-Bit-Wert in ein Holding-Register. Die Antwort ist eine exakte Kopie der Anfrage.
Ungeeignet für 32-Bit-Werte, weil die beiden Hälften zu verschiedenen Zeitpunkten geschrieben würden. Manche Geräte akzeptieren 06 nur für bestimmte Register und verlangen sonst 16.
07 Exception-Status lesen (Read Exception Status)
0x07 · nur serielle Leitung
Liest acht Statusbits, deren Bedeutung jedes Gerät selbst festlegt.
Heute selten genutzt. Ob das Gerät sie überhaupt unterstützt, steht im Handbuch.
08 Diagnose (Diagnostics)
0x08 · nur serielle Leitung
Diagnose, ausgewählt über eine Unterfunktion. Unterfunktion 0000 schickt die Daten direkt zurück (Schleife), andere lesen oder löschen die Buszähler.
Unterfunktion 0000 ist ein schneller Leitungstest, ohne ein Register anzufassen, sofern das Gerät sie unterstützt.
11 Ereigniszähler lesen (Get Comm Event Counter)
0x0B · nur serielle Leitung
Liefert ein Statuswort und einen Zähler erfolgreich verarbeiteter Nachrichten.
Zweimaliges Lesen des Zählers zeigt, ob das Gerät Ihre Anfragen überhaupt empfängt und verarbeitet.
12 Ereignisprotokoll lesen (Get Comm Event Log)
0x0C · nur serielle Leitung
Liefert ein Statuswort, Ereignis- und Nachrichtenzähler und die letzten 64 Kommunikationsereignisse.
Von wenigen Geräten unterstützt. Vor allem bei sporadischen Fehlern nützlich.
15 mehrere Coils schreiben (Write Multiple Coils)
0x0F · Coils (0x)
Schreibt 1 bis 1968 aufeinanderfolgende Coils. Die Werte sind zu je 8 pro Byte gepackt wie bei Funktion 01, die Antwort wiederholt Startadresse und Anzahl.
Die Byteanzahl muss zur Anzahl passen: 10 Coils brauchen 2 Bytes. Eine Abweichung endet mit Exception 03.
16 mehrere Register schreiben (Write Multiple Registers)
0x10 · Holding-Register (4x)
Schreibt 1 bis 123 aufeinanderfolgende Holding-Register. Die Anfrage enthält Startadresse, Anzahl, Byteanzahl und Werte, die Antwort wiederholt Startadresse und Anzahl.
Der richtige Weg für 32-Bit-Werte wie Floats, weil sich beide Hälften gleichzeitig ändern. Manche Geräte lehnen 16 für ein einzelnes Register ab und wollen 06, andere lehnen 06 ab.
17 Server-ID melden (Report Server ID)
0x11 · nur serielle Leitung
Liefert einen herstellerspezifischen Identifikationsblock und eine Run/Stop-Anzeige.
Der Inhalt unterscheidet sich je nach Hersteller. Funktion 43/14 ist der strukturierte Ersatz.
20 Dateieintrag lesen (Read File Record)
0x14
Liest Dateieinträge: nummerierte Registergruppen, adressiert über Datei- und Eintragsnummer.
Manche Geräte stellen so Logs oder Konfigurationsbereiche bereit. In der Praxis selten.
21 Dateieintrag schreiben (Write File Record)
0x15
Schreibt Dateieinträge: nummerierte Registergruppen, adressiert über Datei- und Eintragsnummer.
In der Praxis selten. Den Aufbau der Dateien beschreibt das Gerätehandbuch.
22 Register maskiert schreiben (Mask Write Register)
0x16 · Holding-Register (4x)
Ändert einzelne Bits eines Holding-Registers: Ergebnis = (Inhalt AND and_mask) OR (or_mask AND NOT and_mask).
Setzt ein Bit eines Steuerworts, ohne es vorher zu lesen. Viele Geräte unterstützen sie nicht; dann mit 03 lesen, das Bit ändern und mit 06 zurückschreiben.
23 mehrere Register lesen und schreiben (Read/Write Multiple Registers)
0x17 · Holding-Register (4x)
Schreibt und liest Register in einer Transaktion, das Schreiben erfolgt zuerst. Bis zu 121 Register werden geschrieben und bis zu 125 gelesen.
Vor allem von SPS unterstützt. Antwortet ein Gerät mit Exception 01, verwenden Sie 16 und 03 nacheinander.
24 FIFO-Warteschlange lesen (Read FIFO Queue)
0x18
Liest bis zu 31 Register aus einer FIFO-Warteschlange, davor ihre Anzahl.
Selten unterstützt.
43 gekapselte Schnittstelle (Encapsulated Interface Transport)
0x2B
Ein Container für Unterprotokolle, ausgewählt über den MEI-Typ. MEI-Typ 0E, Geräteidentifikation lesen, liefert Textobjekte wie Herstellername, Produktcode und Firmwareversion.
Praktisch, um ohne Handbuch herauszufinden, was am Bus hängt. Die Unterstützung ist optional, viele einfache Geräte antworten mit Exception 01.