C5-E Modbus TCP/USB Online-Handbuch

Funktioncode-Beschreibungen

FC 3 (03h) Read Input Registers / FC 4 (04h) Read Holding Registers

Mit diesem Funktionscode können ein 16-Bit-Wert oder mehrere 16-Bit-Werte ausgelesen werden. Die Funktion kann auf die NanoJ-Objekte (siehe NanoJ-Objekte) oder Prozessdatenobjekte (min. 4 Byte Ausrichtung, siehe Prozessdatenobjekte (PDO)) angewendet werden.

Request
Name Länge Wert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0006h
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 03h / 04h
Startadresse 2 Bytes 0000h bis FFFFh
Anzahl der Register 2 Bytes 1 bis (7Dh)
Response ("M" entspricht der Anzahl der zu lesenden Register)
Name Länge Wert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0003h + 2*M
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 03h / 04h
Anzahl Bytes 1 Byte 2 * M
Registerwert 2 Bytes
Fehler
Name Länge Wert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0003h
Unit Identifier 1 Byte 00h
Fehlercode 1 Byte 83h / 84h
Ausnahmecode 1 Byte 01, 02, 03 oder 04

Beispiel

Nachfolgend ein Beispiel eines Lese-Request und Response des Registers 5000 (1388h) und des folgenden Registers (2 Register):

Request
Response

FC 6 (06h) Write Single Register

Mit diesem Funktionscode kann ein einzelner 16-Bit-Wert geschrieben werden. Die Funktion kann auf Prozessdatenobjekte (siehe Prozessdatenobjekte (PDO)) angewendet werden.

Request
Name Länge Wert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0006h
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 06h
Registeradresse 2 Bytes 0000h bis FFFFh
Registerwert 2 Bytes 0000h bis FFFFh
Response
Name Länge Wert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0006h
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 06h
Registeradresse 2 Bytes 0000h bis FFFFh
Registerwert 2 Bytes 0000h bis FFFFh
Fehler
Name Länge Wert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0003h
Unit Identifier 1 Byte 00h
Fehlercode 1 Byte 86h
Ausnahmecode 1 Byte 01, 02, 03 oder 04

Beispiel

Nachfolgend ein Beispiel eines Write-Request und Response in das Register 6000 (1770h) mit dem Wert "0001h":

Request
Response

FC 16 (10h) Write Multiple Registers

Mit diesem Funktionscode können ein einzelner 16-Bit-Wert oder mehrere 16-Bit-Werte geschrieben werden. Die Funktion kann auf NanoJ-Objekte (siehe NanoJ-Objekte) oder Prozessdatenobjekte (siehe Prozessdatenobjekte (PDO)) angewendet werden.

Request ("N" ist die Anzahl der zu schreibenden Register)
Name Länge Wert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0007h + N * 2
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 10h
Startadresse 2 Bytes 0000h bis FFFFh
Anzahl der Register 2 Bytes 0001h bis 007Bh
Anzahl Bytes 1 Byte 2 * N
Registerwert N * 2 Bytes
Response
Name Länge Wert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0006h
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 10h
Startadresse 2 Bytes 0000h bis FFFFh
Anzahl der Register 2 Bytes 0001h bis 007Bh
Fehler
Name Länge Wert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0003h
Unit Identifier 1 Byte 00h
Fehlercode 1 Byte 90h
Ausnahmecode 1 Byte 01, 02, 03 oder 04

Beispiel

Nachfolgend ein Beispiel eines Mehrfach-Schreibens der Werte "0102h" und "0304h" startend ab Registeradresse 6000 (1770h), Anzahl der Register ist 2, Länge der Daten 4:

Request
Response

FC 23 (17h) Read/Write Multiple registers

Mit diesem Funktionscode können ein einzelner 16-Bit-Wert oder mehrere 16-Bit-Werte gleichzeitig gelesen und geschrieben werden. Die Funktion kann auf NanoJ-Objekte (siehe NanoJ-Objekte) oder Prozessdatenobjekte (siehe Prozessdatenobjekte (PDO)) angewendet werden.

Request ("N" ist die Anzahl der zu lesenden Register):
Name Länge Wert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 000Bh + 2 * N
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 17h
Lesen: Startadresse 2 Bytes 0000h bis FFFFh
Lesen: Anzahl Register 2 Bytes 0001h bis 0079h
Schreiben: Startadresse 2 Bytes 0000h bis FFFFh
Schreiben: Anzahl Register 2 Bytes 0001h bis 0079h
Schreiben: Anzahl Bytes 1 Byte 2 * N
Schreiben: Registerwert N * 2 Bytes
Response ("M" entspricht der Anzahl der zu schreibenden Bytes):
Name Länge Wert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0003h + 2 * M
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 17h
Anzahl Bytes 1 Byte 2 * M
Gelesene Register M * 2 Bytes
Fehler
Name Länge Wert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0003h
Unit Identifier 1 Byte 00h
Fehlercode 1 Byte 97h
Ausnahmecode 1 Byte 01, 02, 03 oder 04

Beispiel

Nachfolgend ein Beispiel für das Lesen von zwei Registern ab Register 5000 (1388h) und für das Schreiben von zwei Registern ab Register 6000 (1770h) mit 4 Bytes und den Daten "0102h" und "0304h":

Request
Response

FC 43 (2Bh) Encapsulated Interface Transport

Diese Funktion ermöglicht einen einfachen Zugriff auf das CANopen-Objektverzeichnis. Weitere Details können in den folgenden Dokumentationen entnommen werden:

  1. MODBUS APPLICATION PROTOCOL SPECIFICATION V1.1b3, Date: 26.04.2014, Version: 1.1b3
  2. CiA 309 Draft Standard Proposal - Access from other networks - Part 2: Modbus/TCP mapping V1.3, Date: 30.07.2015, Version: 1.3
Anmerkung: Für die Nachrichten des Encapsulated Interface-Transport gilt zum Teil eine andere Byte-Reihenfolge, siehe Kapitel Allgemeines.

Definition des Request und Response:

Name Länge Beispiel/Zahlenbereich
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 00NNh
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 2Bh (43d)
MEI type 1 Byte 0Dh (13d)
Protokolloptionen Bereich 2 bis 5 Byte
Adressen- und Datenbereich N Bytes

Protokolloptionen Bereich

Name Länge Beispiel/Zahlenbereich
Protokoll-Kontrolle 1 bis 2 Bytes Siehe Beschreibung
Reserviert 1 Byte Immer 0
(Optional) Zählerbyte 1 Byte
(Optional) Netzwerk ID 1 Byte
(Optional) Encodierte Daten 1 Byte

Protokoll-Kontrolle:

Das Feld "Protokoll-Kontrolle" enthält die Merker, welche für die Kontrolle der Nachrichtenprotokolle benötigt werden. Die Bytes des Feldes "Protokoll Kontrolle" sind folgendermaßen definiert, falls der Merker "Verlängerung" gesetzt wurde (andernfalls entfällt das zweite Byte):

Das höchstwertige Bit (MSB) ist Bit 0 für "Protokoll-Kontrolle" Byte 1, und Bit 8 für "Protokoll Kontrolle" Byte 2. Das niedrigstwertige Bit (LSB) ist Bit 7 für "Protokoll Kontrolle" Byte 1, und Bit 15 für "Protokoll Kontrolle" Byte 2.

Bit Name Beschreibung
0 Merker "Verlängerung" Dieses Bit wird genutzt, wenn das Objektverzeichnis Datenset größer ist, als in ein Modbus-Kommando passen würde. Das Datenset wird dann über mehrere Modbus-Nachrichten gestreckt, jede Nachricht enthält einen Teil des Datensets. "0" = Keine mehrfache Nachrichtentransaktion ("multiple message transaction") oder das Ende der mehrfachen Nachrichtentransaktion. "1" = Teil einer mehrfachen Nachrichtentransaktion.
1 Erweiterte Protokoll-Kontrolle Länge der Protokoll-Kontrolle, der Wert "0" zeigt eine Länge von 1 Byte an, der Wert "1" eine Länge von 2 Byte.
2 Zähler Byte Option Dieses Bit ist auf "1" um anzuzeigen, dass das Feld "counter byte" in dieser Nachricht genutzt wird. Ist dieses Bit auf "0" gesetzt, existiert das Feld "counter byte" nicht in dieser Nachricht.
3 und 4 Reserviert 0
5 Network ID Option Nicht unterstützt, muss "0" sein.
6 Encodierte Datenoption Nicht unterstützt, muss "0" sein.
7 Zugriffsmerker Dieses Bit zeigt die Zugriffsmethode des angeforderten Kommandos an. "0" = lesen, "1" = schreiben.
8 to 15 Reserviert 0

Adressen- und Datenbereich

Der Adressen- und Datenbereich ist in der folgenden Tabelle definiert:

Name Bytegröße und Bytereihenfolge Beispiel / Bereich
Node-ID 1 Byte 01h bis 7Fh
Index 1 Byte, high 0000h bis FFFFh
1 Byte, low
Subindex 1 Byte 00h bis FFh
Startadresse 1 Byte, high 0000h bis FFFFh
1 Byte, low
Anzahl der Datenwerte 1 Byte, high 0000h bis 00FDh
1 Byte, low
Schreib-/Lesedaten n Byte Die Daten sind codiert wie in Kapitel Allgemeines beschrieben.

Beispiel:

Um das Objekt 6042h:00h auszulesen (16 Bit-Wert), muss folgende Nachricht vom Master verschickt werden (alle Werte sind in hexadezimaler Notation).

Request
Response

Als zusätzliches Beispiel nachfolgend eine Sequenz an Modbus-Nachrichten vom Master zum Slave, um den Motor im "Velocity" Modus sich drehen zu lassen:

Setze 6060 = "02h" (velocity mode)
Request
Response
Setze 2031 = 03E8h" (1000 mA)
Request
Response
Setze 6040 = "00h"
Request
Response
Setze 6040 = "80h"
Request
Response
Setze 6040 = "06h"
Request
Response
Setze 6040 = "07h"
Request
Response
Setze 6040 = "0Fh"
Request
Response

Nachfolgend zwei Beispiele zum Lesen eines Objektes:

Lese 6041h:00h
Request
Response
Lese 6061h:00h
Request
Response

Fehlerreaktion

Im Falle eines Fehlers wird die folgende Fehlernachricht gesendet:

Name Länge Beispielwert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 000Bh
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 2Bh +80h (171d = 43d + 128d) (zeigt Fehler an)
Modbus exception code 1 Byte FFh ("extended exception")
Extended exception Länge 2 Bytes 6
MEI type 1 Byte 0Dh
Exception code 1 Byte CEh
Fehlercode 4 Bytes CANopen-Fehlercode, siehe nachfolgende Tabelle
CANopen-Fehlercode Beschreibung
FFFF0000h Abort no error
FFFF1003h Service wird nicht unterstützt
FFFF1004h Lücke im Counter-Byte des Felds Protokoll-Kontrolle
FFFF0003h Unbekanntes oder nicht valides Kommando
FFFF0008h Zugriff auf das Objekt wird nicht unterstützt
FFFF000Eh Allgemeiner Fehler im Parameter
FFFF0011h Länge des Parameters falsch
FFFF0012h Länge des Parameters zu groß
FFFF0013h Länge des Parameters zu klein
FFFF0015h Parameter-Daten außerhalb des gültigen Wertebereichs (für Write-Kommandos)
FFFF0016h Parameter-Daten überschreiten den gültigen Wertebereich (für Write-Kommandos)
FFFF0017h Parameter-Daten unterschreiten den gültigen Wertebereich (für Write-Kommandos)
FFFF0018h Maximale eingegebene Werte kleiner als minimale Werte
FFFF0019h Allgemeiner Fehler
FFFF001Eh Angefordertes Objekt ist zu groß für einzelne Nachricht
FFFF1004h Ungültige Sequenz der Nachrichten (z. B. wenn der Wert des Counter-Bytes entsprechend dem vorherigen Request oder Response nicht stimmt)

Im Falle, dass das nicht unterstützte Kontrolloptions-Bit gesetzt ist, wird folgende Fehlernachricht gesendet:

Name Länge Beispielwert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0008/0009h
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 2Bh +80h (171d = 43d + 128d) (zeigt Fehler an)
Modbus exception code 1 Byte FFh ("extended exception")
Extended exception length 2 Bytes 2 + Länge von "Supported protocol control"
MEI type 1 Byte 0Dh
Exception code 1 Byte AEh
Supported protocol control 1 oder 2 Bytes Siehe nachfolgende Tabelle
Bit Name Beschreibung
0 Merker "Verlängerung" Dieses Bit wird genutzt, wenn das Objektverzeichnis Datenset größer ist, als in ein Modbus-Kommando passen würde. Das Datenset wird dann über mehrere Modbus-Nachrichten gestreckt, jede Nachricht enthält einen Teil des Datensets. "0" = Keine mehrfache Nachrichtentransaktion ("multiple message transaction") oder das Ende der mehrfachen Nachrichtentransaktion. "1" = Teil einer mehrfachen Nachrichtentransaktion.
1 Erweiterte Protokoll-Kontrolle Länge der Protokoll-Kontrolle, der Wert "0" zeigt eine Länge von 1 Byte an, der Wert "1" eine Länge von 2 Byte.
2 Zähler Byte Option Dieses Bit ist auf "1" um anzuzeigen, dass das Feld "counter byte" in dieser Nachricht genutzt wird. Ist dieses Bit auf "0" gesetzt, existiert das Feld "counter byte" nicht in dieser Nachricht.
3 und 4 Reserviert 0
5 Network ID Option Nicht unterstützt, muss "0" sein.
6 Encodierte Datenoption Nicht unterstützt, muss "0" sein.
7 Zugriffsmerker Dieses Bit zeigt die Zugriffsmethode des angeforderten Kommandos an. "0" = lesen, "1" = schreiben.
8 to 15 Reserviert 0

Das nachfolgende Beispiel zeigt einen Fehler im Falle eines fehlerhaften Request. Der Request liest das 6061h:00 mit der Länge von 2 Byte, das Objekt ist aber nur 1 Byte groß:

Request
Response

FC 101 (65h) Read complete object dictionary

Dieser Funktionscode wird zum Auslesen des gesamten Objektverzeichnisses verwendet.

Um das Auslesen des Objektverzeichnisses zu starten oder neu zu starten, muss der Unterfunktionscode 55h versendet werden. Dieser Code setzt das Auslesen des Objektverzeichnisses auf das Objekt 0000h zurück. Alle nachfolgenden Objektverzeichnis-Frames müssen dann den Unterfunktionscode AAh enthalten. Zum Ende, wenn alle Objekte ausgelesen wurden, wird eine "Error Response" generiert mit dem Abort-Code "No data available".

Das Format jedes "Objekt lesen" ist folgendermaßen:

Request:
Name Länge Wert / Bemerkung
Slave-Adresse 1 Byte
Funktionscode 1 Byte 65h
Unterfunktionscode 1 Byte 55h oder AAh
Länge der Daten 1 Byte 00h
CRC 2 Bytes
Response:
Name Länge Wert / Bemerkung
Slave-Adresse 1 Byte 65h
Funktionscode 1 Byte
Unterfunktionscode 1 Byte
Länge der Daten 1 Byte
n mal "Objektverzeichnis-Frame" 1 - 252 Bytes
CRC 2 Bytes
Ein Objektverzeichnis-Frame besteht aus den folgenden Bytes:
Name Wert / Bemerkung
Index Low Byte 1 Byte
Index High Byte 1 Byte
Subindex 1 Byte
Anzahl der Bytes 1 Byte Anzahl m der validen Daten im Datenfeld
Daten Byte m-1 Byte

Beispiel

Alle folgenden Zahlenwerte sind in Hexadezimal notiert.

Start des Auslesens des Objektverzeichnisses mit dem Request:

Die Response ist:

Den nächsten Teil des Objektverzeichnisses auslesen mit dem Request:

Die Response ist:

Wiederholen des Auslesens des Objektverzeichnisses mit dem vorherigen Request, bis die Response ein Fehler ist:

Fehlerreaktion

Im Falle eines Fehlers wird die folgende Fehlernachricht gesendet:

Name Länge Beispielwert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 000Bh
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 2Bh +80h (171d = 43d + 128d) (zeigt Fehler an)
Modbus exception code 1 Byte FFh ("extended exception")
Extended exception Länge 2 Bytes 6
MEI type 1 Byte 0Dh
Exception code 1 Byte CEh
Fehlercode 4 Bytes CANopen-Fehlercode, siehe nachfolgende Tabelle
CANopen-Fehlercode Beschreibung
FFFF0000h Abort no error
FFFF1003h Service wird nicht unterstützt
FFFF1004h Lücke im Counter-Byte des Felds Protokoll-Kontrolle
FFFF0003h Unbekanntes oder nicht valides Kommando
FFFF0008h Zugriff auf das Objekt wird nicht unterstützt
FFFF000Eh Allgemeiner Fehler im Parameter
FFFF0011h Länge des Parameters falsch
FFFF0012h Länge des Parameters zu groß
FFFF0013h Länge des Parameters zu klein
FFFF0015h Parameter-Daten außerhalb des gültigen Wertebereichs (für Write-Kommandos)
FFFF0016h Parameter-Daten überschreiten den gültigen Wertebereich (für Write-Kommandos)
FFFF0017h Parameter-Daten unterschreiten den gültigen Wertebereich (für Write-Kommandos)
FFFF0018h Maximale eingegebene Werte kleiner als minimale Werte
FFFF0019h Allgemeiner Fehler
FFFF001Eh Angefordertes Objekt ist zu groß für einzelne Nachricht
FFFF1004h Ungültige Sequenz der Nachrichten (z. B. wenn der Wert des Counter-Bytes entsprechend dem vorherigen Request oder Response nicht stimmt)

Im Falle, dass das nicht unterstützte Kontrolloptions-Bit gesetzt ist, wird folgende Fehlernachricht gesendet:

Name Länge Beispielwert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0008/0009h
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 2Bh +80h (171d = 43d + 128d) (zeigt Fehler an)
Modbus exception code 1 Byte FFh ("extended exception")
Extended exception length 2 Bytes 2 + Länge von "Supported protocol control"
MEI type 1 Byte 0Dh
Exception code 1 Byte AEh
Supported protocol control 1 oder 2 Bytes Siehe nachfolgende Tabelle
Bit Name Beschreibung
0 Merker "Verlängerung" Dieses Bit wird genutzt, wenn das Objektverzeichnis Datenset größer ist, als in ein Modbus-Kommando passen würde. Das Datenset wird dann über mehrere Modbus-Nachrichten gestreckt, jede Nachricht enthält einen Teil des Datensets. "0" = Keine mehrfache Nachrichtentransaktion ("multiple message transaction") oder das Ende der mehrfachen Nachrichtentransaktion. "1" = Teil einer mehrfachen Nachrichtentransaktion.
1 Erweiterte Protokoll-Kontrolle Länge der Protokoll-Kontrolle, der Wert "0" zeigt eine Länge von 1 Byte an, der Wert "1" eine Länge von 2 Byte.
2 Zähler Byte Option Dieses Bit ist auf "1" um anzuzeigen, dass das Feld "counter byte" in dieser Nachricht genutzt wird. Ist dieses Bit auf "0" gesetzt, existiert das Feld "counter byte" nicht in dieser Nachricht.
3 und 4 Reserviert 0
5 Network ID Option Nicht unterstützt, muss "0" sein.
6 Encodierte Datenoption Nicht unterstützt, muss "0" sein.
7 Zugriffsmerker Dieses Bit zeigt die Zugriffsmethode des angeforderten Kommandos an. "0" = lesen, "1" = schreiben.
8 to 15 Reserviert 0

Das nachfolgende Beispiel zeigt einen Fehler im Falle eines fehlerhaften Request. Der Request liest das 6061h:00 mit der Länge von 2 Byte, das Objekt ist aber nur 1 Byte groß:

Request
Response

FC 102 (66h) Read complete array or record

Dieser Funktionscode wird zum Auslesen eines gesamten Arrays oder Records vom Objektverzeichnis verwendet.

Um das Auslesen des Arrays zu starten oder neu zu starten, muss der Unterfunktionscode 55h versendet werden. Dieser Code setzt das Auslesen auf das Objekt mit Subindex 00h zurück. Alle nachfolgenden Requests müssen dann den Unterfunktionscode AAh enthalten. Zum Ende, wenn alle Objekte ausgelesen wurden, wird eine "Error Response" generiert.

Das Format jedes "Objekt lesen" ist folgendermaßen:

Request:
Name Länge Wert / Bemerkung
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0007h
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 66h
Unterfunktionscode 1 Byte 55h oder AAh
Länge der Daten 1 Byte 00h
Index des zu lesenden Arrays 2 Bytes
Response:
Name Länge Wert / Bemerkung
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0004h+n
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte
Unterfunktionscode 1 Byte
Länge der Daten 1 Byte
n mal Objektverzeichnis-Frame 1 - 252 Bytes
Ein Objektverzeichnis-Frame besteht aus den folgenden Bytes:
Name Wert / Bemerkung
Index Low Byte 1 Byte
Index High Byte 1 Byte
Subindex 1 Byte
Anzahl der Bytes 1 Byte Anzahl m der validen Daten im Datenfeld
Daten Byte m-1 Byte

Beispiel

Alle folgenden Zahlenwerte sind in Hexadezimal notiert, der Index des zu lesenden Objektes ist 2400h.

Start des Auslesens des Arrays mit dem Request:

Die Response ist:

Fehlerreaktion

Im Falle eines Fehlers wird die folgende Fehlernachricht gesendet:

Name Länge Beispielwert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 000Bh
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 2Bh +80h (171d = 43d + 128d) (zeigt Fehler an)
Modbus exception code 1 Byte FFh ("extended exception")
Extended exception Länge 2 Bytes 6
MEI type 1 Byte 0Dh
Exception code 1 Byte CEh
Fehlercode 4 Bytes CANopen-Fehlercode, siehe nachfolgende Tabelle
CANopen-Fehlercode Beschreibung
FFFF0000h Abort no error
FFFF1003h Service wird nicht unterstützt
FFFF1004h Lücke im Counter-Byte des Felds Protokoll-Kontrolle
FFFF0003h Unbekanntes oder nicht valides Kommando
FFFF0008h Zugriff auf das Objekt wird nicht unterstützt
FFFF000Eh Allgemeiner Fehler im Parameter
FFFF0011h Länge des Parameters falsch
FFFF0012h Länge des Parameters zu groß
FFFF0013h Länge des Parameters zu klein
FFFF0015h Parameter-Daten außerhalb des gültigen Wertebereichs (für Write-Kommandos)
FFFF0016h Parameter-Daten überschreiten den gültigen Wertebereich (für Write-Kommandos)
FFFF0017h Parameter-Daten unterschreiten den gültigen Wertebereich (für Write-Kommandos)
FFFF0018h Maximale eingegebene Werte kleiner als minimale Werte
FFFF0019h Allgemeiner Fehler
FFFF001Eh Angefordertes Objekt ist zu groß für einzelne Nachricht
FFFF1004h Ungültige Sequenz der Nachrichten (z. B. wenn der Wert des Counter-Bytes entsprechend dem vorherigen Request oder Response nicht stimmt)

Im Falle, dass das nicht unterstützte Kontrolloptions-Bit gesetzt ist, wird folgende Fehlernachricht gesendet:

Name Länge Beispielwert
Transaction Identifier 2 Bytes 0000h
Protocol Identifier 2 Bytes 0000h
Länge 2 Bytes 0008/0009h
Unit Identifier 1 Byte 00h
Funktionscode 1 Byte 2Bh +80h (171d = 43d + 128d) (zeigt Fehler an)
Modbus exception code 1 Byte FFh ("extended exception")
Extended exception length 2 Bytes 2 + Länge von "Supported protocol control"
MEI type 1 Byte 0Dh
Exception code 1 Byte AEh
Supported protocol control 1 oder 2 Bytes Siehe nachfolgende Tabelle
Bit Name Beschreibung
0 Merker "Verlängerung" Dieses Bit wird genutzt, wenn das Objektverzeichnis Datenset größer ist, als in ein Modbus-Kommando passen würde. Das Datenset wird dann über mehrere Modbus-Nachrichten gestreckt, jede Nachricht enthält einen Teil des Datensets. "0" = Keine mehrfache Nachrichtentransaktion ("multiple message transaction") oder das Ende der mehrfachen Nachrichtentransaktion. "1" = Teil einer mehrfachen Nachrichtentransaktion.
1 Erweiterte Protokoll-Kontrolle Länge der Protokoll-Kontrolle, der Wert "0" zeigt eine Länge von 1 Byte an, der Wert "1" eine Länge von 2 Byte.
2 Zähler Byte Option Dieses Bit ist auf "1" um anzuzeigen, dass das Feld "counter byte" in dieser Nachricht genutzt wird. Ist dieses Bit auf "0" gesetzt, existiert das Feld "counter byte" nicht in dieser Nachricht.
3 und 4 Reserviert 0
5 Network ID Option Nicht unterstützt, muss "0" sein.
6 Encodierte Datenoption Nicht unterstützt, muss "0" sein.
7 Zugriffsmerker Dieses Bit zeigt die Zugriffsmethode des angeforderten Kommandos an. "0" = lesen, "1" = schreiben.
8 to 15 Reserviert 0

Das nachfolgende Beispiel zeigt einen Fehler im Falle eines fehlerhaften Request. Der Request liest das 6061h:00 mit der Länge von 2 Byte, das Objekt ist aber nur 1 Byte groß:

Request
Response
▶   next

Contents