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):
|
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":
|
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:
|
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":
|
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:
- MODBUS APPLICATION PROTOCOL SPECIFICATION V1.1b3, Date: 26.04.2014, Version: 1.1b3
- CiA 309 Draft Standard Proposal - Access from other networks - Part 2: Modbus/TCP mapping V1.3, Date: 30.07.2015, Version: 1.3
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:
Nachfolgend zwei Beispiele zum Lesen eines Objektes:
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
55
h versendet werden. Dieser Code setzt das Auslesen des
Objektverzeichnisses auf das Objekt 0000h zurück. Alle nachfolgenden Objektverzeichnis-Frames
müssen dann den Unterfunktionscode AA
h 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:
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 |
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 |
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
55
h versendet werden. Dieser Code setzt das Auslesen
auf das Objekt mit Subindex 00h zurück. Alle nachfolgenden Requests
müssen dann den Unterfunktionscode AA
h enthalten. Zum
Ende, wenn alle Objekte ausgelesen wurden, wird eine "Error Response"
generiert.
Das Format jedes "Objekt lesen" ist folgendermaßen:
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 |
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 |
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