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 Slave-Adresse 1 Byte Funktionscode 1 Byte 03h / 04h Startadresse 2 Bytes 0000h bis FFFFh Anzahl der Register 2 Bytes 1 bis (7Dh) CRC 2 Bytes Response ("M" entspricht der Anzahl der zu lesenden Register) Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 03h / 04h Anzahl Bytes 1 Byte 2 * M Registerwert 2 Bytes CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 83h / 84h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01, 02, 03 oder 04 CRC 2 Bytes 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 Slave-Adresse 1 Byte Funktionscode 1 Byte 06h Registeradresse 2 Bytes 0000h bis FFFFh Registerwert 2 Bytes 0000h bis FFFFh CRC 2 Bytes Response Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 06h Registeradresse 2 Bytes 0000h bis FFFFh Registerwert 2 Bytes 0000h bis FFFFh CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 86h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01, 02, 03 oder 04 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes Response Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 10h Startadresse 2 Bytes 0000h bis FFFFh Anzahl der Register 2 Bytes 0001h bis 007Bh CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 90h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01, 02, 03 oder 04 CRC 2 Bytes 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 17 (11h) Report Server ID Mit diesem Funktionscode kann man die Beschreibung des Typs, der gegenwärtigen Status und andere Informationen des Geräts auslesen. Request Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 11h CRC 2 Bytes Response Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 03h Anzahl Bytes 1 Byte 01h Run Indicator Status 1 Byte 00h = OFF, FFh = ON Zusatzdaten CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 91h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01 oder 04 CRC 2 Bytes Beispiel Nachfolgend ein Beispiel eines Request/Response für ID und Status: 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes Response ("M" entspricht der Anzahl der zu schreibenden Bytes): Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 17h Anzahl Bytes 1 Byte 2 * M Gelesene Register M * 2 Bytes CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 97h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01, 02, 03 oder 04 CRC 2 Bytes 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 8 (08h) Diagnostics Der Modbus-Funktionscode FC08 bietet eine Menge an Tests zum Überprüfen des Kommunikationssystems zwischen Client und Server oder zum Überprüfen verschiedener interner Fehlerzustände innerhalb des Servers. Diese Funktion verwendet einen zwei Byte großen Unterfunktionscode im Request, um den Typen des Tests zu definieren. Der Server wiederholt in einer normalen Response beides, den Funktions- und den Unterfunktionscode. Einige der Diagnosen enthalten Daten des Gerätes im Datenfeld der normalen Antwort. Request: Name Länge Wert Funktionscode 1 Byte 08h Unterfunktionscode 2 Bytes Data N x 2 Bytes Response: Name Länge Wert Funktionscode 1 Byte 08h Unterfunktionscode 2 Bytes Data N x 2 Bytes Fehler: Name Länge Wert Funktionscode 1 Byte 88h Ausnahmecode (siehe Ausnahmecodes) 1 Bytes 01 oder 03 oder 04 FC 8.10 (08h.0Ah) Clear Counters and Diagnostic Register Das Ziel dieser Anfrage ist, alle Zähler und Diagnose-Register zurückzusetzten. Zähler werden auch beim Einschalten der Steuerung zurückgesetzt. Unterfunktion Datenbereich Request Resonse 00h 0Ah 00h 00h Echo der Anfragedaten Beispiel Request Response FC 8.11 (08h.0Bh) Return Bus Message Count Der Datenbereich der Antwort gibt die Anzahl der Nachrichten zurück, welche seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung am Kommunikationssystem erkannt worden sind. Unterfunktion Datenbereich Request Response 00h 0Bh 00h 00h Total Message Count FC 8.12 (08h.0Ch) Return Bus Communication Error Count Der Datenbereich der Antwort gibt die Anzahl der CRC Fehler seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung zurück. Unterfunktion Datenbereich Request Response 00h 0Ch 00h 00h CRC Error Count Beispiel Request Response FC 8.13 (08h.0Dh) Return Bus Exception Error Count Der Datenbereich der Antwort gibt die Anzahl der Modbus Ausnahmen seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung zurück. Unterfunktion Datenbereich Request Response 00h 0Dh 00h 00h Exception Error Count Beispiel Request Response FC 8.14 (08h.0Eh) Return Server Message Count Der Datenbereich der Antwort gibt die Anzahl der an das Gerät gerichteten und Broadcast-Nachrichten zurück, die von der Steuerung verarbeitet wurden. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 0Eh 00h 00h Server Message Count Beispiel Request Response FC 8.15 (08h.0Fh) Return Server No Response Count Der Datenbereich der Antwort gibt die Anzahl der an die Steuerung gerichteten Nachrichten zurück, für die keine Antwort zurückgesendet wurde (weder normale Antwort noch Ausnahme-Antwort). Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 0Fh 00h 00h No Response Count Beispiel Request Response FC 8.16 (08h.10h) Return Server NAK Count Der Datenbereich der Antwort gibt die Anzahl der Nachrichten zurück, für die eine "Negative Acknowledge (NAK)"-Ausnahme-Antwort zurückgesendet wurde. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 10h 00h 00h Server NAK Count Beispiel Request Response FC 8.17 (08h.11h) Return Server Busy Count Der Datenbereich der Antwort gibt die Anzahl der Nachrichten zurück, für die eine " Server Device Busy "-Ausnahme-Antwort zurückgesendet wurde. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 11h 00h 00h Server NAK Count Beispiel Request Response FC 8.18 (08h.12h) Return Bus Character Overrun Count Der Datenbereich der Antwort gibt die Anzahl der an die Steuerung gerichteten Nachrichten zurück, die Aufgrund einem Zeichenüberlauf nicht verarbeitet werden konnten. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Ein Zeichenüberlauf entsteht dadurch, dass Zeichen schneller an der Steuerung ankommen, als sie gespeichert werden können, oder durch den Verlust eines Zeichens aufgrund eines Hardwarefehlers. Unterfunktion Datenbereich Request Response 00h 12h 00h 00h Server Character Overrun Count Beispiel 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: 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 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 Slave-Adresse 1 Byte Funktionscode 1 Byte 2Bh (43d) MEI type 1 Byte 0Dh (13d) Protokolloptionen Bereich 2 bis 5 Byte Adressen- und Datenbereich N Bytes CRC 2 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, die Slave-Id der Steuerung ist "5"). 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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. Die Adresse des Slaves ist "5". 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte Funktionscode 1 Byte 66h Unterfunktionscode 1 Byte 55h oder AAh Länge der Daten 1 Byte 00h Index des zu lesenden Arrays 2 Bytes 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, der Index des zu lesenden Objektes ist 2400h. Die Adresse des Slaves ist "5"h. 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Ausnahmecodes Im Fehlerfall können abhängig vom Funktionscode folgende Ausnahmecodes in der Response enthalten sein: Code Name Beschreibung 01 Illegal Function Funktionscode nicht erkannt/erlaubt 02 Illegal Data Address Register-Adresse nicht gültig oder existiert nicht 03 Illegal Data Value Wert nicht gültig 04 Device Failure nicht behebbarer Fehler Weitere Details entnehmen Sie der Modbus-Spezifikation MODBUS APPLICATION PROTOCOL SPECIFICATION V1.1b3.
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 Slave-Adresse 1 Byte Funktionscode 1 Byte 03h / 04h Startadresse 2 Bytes 0000h bis FFFFh Anzahl der Register 2 Bytes 1 bis (7Dh) CRC 2 Bytes Response ("M" entspricht der Anzahl der zu lesenden Register) Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 03h / 04h Anzahl Bytes 1 Byte 2 * M Registerwert 2 Bytes CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 83h / 84h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01, 02, 03 oder 04 CRC 2 Bytes 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 Slave-Adresse 1 Byte Funktionscode 1 Byte 06h Registeradresse 2 Bytes 0000h bis FFFFh Registerwert 2 Bytes 0000h bis FFFFh CRC 2 Bytes Response Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 06h Registeradresse 2 Bytes 0000h bis FFFFh Registerwert 2 Bytes 0000h bis FFFFh CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 86h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01, 02, 03 oder 04 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes Response Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 10h Startadresse 2 Bytes 0000h bis FFFFh Anzahl der Register 2 Bytes 0001h bis 007Bh CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 90h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01, 02, 03 oder 04 CRC 2 Bytes 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 17 (11h) Report Server ID Mit diesem Funktionscode kann man die Beschreibung des Typs, der gegenwärtigen Status und andere Informationen des Geräts auslesen. Request Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 11h CRC 2 Bytes Response Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 03h Anzahl Bytes 1 Byte 01h Run Indicator Status 1 Byte 00h = OFF, FFh = ON Zusatzdaten CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 91h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01 oder 04 CRC 2 Bytes Beispiel Nachfolgend ein Beispiel eines Request/Response für ID und Status: 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes Response ("M" entspricht der Anzahl der zu schreibenden Bytes): Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 17h Anzahl Bytes 1 Byte 2 * M Gelesene Register M * 2 Bytes CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 97h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01, 02, 03 oder 04 CRC 2 Bytes 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 8 (08h) Diagnostics Der Modbus-Funktionscode FC08 bietet eine Menge an Tests zum Überprüfen des Kommunikationssystems zwischen Client und Server oder zum Überprüfen verschiedener interner Fehlerzustände innerhalb des Servers. Diese Funktion verwendet einen zwei Byte großen Unterfunktionscode im Request, um den Typen des Tests zu definieren. Der Server wiederholt in einer normalen Response beides, den Funktions- und den Unterfunktionscode. Einige der Diagnosen enthalten Daten des Gerätes im Datenfeld der normalen Antwort. Request: Name Länge Wert Funktionscode 1 Byte 08h Unterfunktionscode 2 Bytes Data N x 2 Bytes Response: Name Länge Wert Funktionscode 1 Byte 08h Unterfunktionscode 2 Bytes Data N x 2 Bytes Fehler: Name Länge Wert Funktionscode 1 Byte 88h Ausnahmecode (siehe Ausnahmecodes) 1 Bytes 01 oder 03 oder 04 FC 8.10 (08h.0Ah) Clear Counters and Diagnostic Register Das Ziel dieser Anfrage ist, alle Zähler und Diagnose-Register zurückzusetzten. Zähler werden auch beim Einschalten der Steuerung zurückgesetzt. Unterfunktion Datenbereich Request Resonse 00h 0Ah 00h 00h Echo der Anfragedaten Beispiel Request Response FC 8.11 (08h.0Bh) Return Bus Message Count Der Datenbereich der Antwort gibt die Anzahl der Nachrichten zurück, welche seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung am Kommunikationssystem erkannt worden sind. Unterfunktion Datenbereich Request Response 00h 0Bh 00h 00h Total Message Count FC 8.12 (08h.0Ch) Return Bus Communication Error Count Der Datenbereich der Antwort gibt die Anzahl der CRC Fehler seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung zurück. Unterfunktion Datenbereich Request Response 00h 0Ch 00h 00h CRC Error Count Beispiel Request Response FC 8.13 (08h.0Dh) Return Bus Exception Error Count Der Datenbereich der Antwort gibt die Anzahl der Modbus Ausnahmen seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung zurück. Unterfunktion Datenbereich Request Response 00h 0Dh 00h 00h Exception Error Count Beispiel Request Response FC 8.14 (08h.0Eh) Return Server Message Count Der Datenbereich der Antwort gibt die Anzahl der an das Gerät gerichteten und Broadcast-Nachrichten zurück, die von der Steuerung verarbeitet wurden. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 0Eh 00h 00h Server Message Count Beispiel Request Response FC 8.15 (08h.0Fh) Return Server No Response Count Der Datenbereich der Antwort gibt die Anzahl der an die Steuerung gerichteten Nachrichten zurück, für die keine Antwort zurückgesendet wurde (weder normale Antwort noch Ausnahme-Antwort). Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 0Fh 00h 00h No Response Count Beispiel Request Response FC 8.16 (08h.10h) Return Server NAK Count Der Datenbereich der Antwort gibt die Anzahl der Nachrichten zurück, für die eine "Negative Acknowledge (NAK)"-Ausnahme-Antwort zurückgesendet wurde. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 10h 00h 00h Server NAK Count Beispiel Request Response FC 8.17 (08h.11h) Return Server Busy Count Der Datenbereich der Antwort gibt die Anzahl der Nachrichten zurück, für die eine " Server Device Busy "-Ausnahme-Antwort zurückgesendet wurde. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 11h 00h 00h Server NAK Count Beispiel Request Response FC 8.18 (08h.12h) Return Bus Character Overrun Count Der Datenbereich der Antwort gibt die Anzahl der an die Steuerung gerichteten Nachrichten zurück, die Aufgrund einem Zeichenüberlauf nicht verarbeitet werden konnten. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Ein Zeichenüberlauf entsteht dadurch, dass Zeichen schneller an der Steuerung ankommen, als sie gespeichert werden können, oder durch den Verlust eines Zeichens aufgrund eines Hardwarefehlers. Unterfunktion Datenbereich Request Response 00h 12h 00h 00h Server Character Overrun Count Beispiel 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: 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 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 Slave-Adresse 1 Byte Funktionscode 1 Byte 2Bh (43d) MEI type 1 Byte 0Dh (13d) Protokolloptionen Bereich 2 bis 5 Byte Adressen- und Datenbereich N Bytes CRC 2 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, die Slave-Id der Steuerung ist "5"). 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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. Die Adresse des Slaves ist "5". 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte Funktionscode 1 Byte 66h Unterfunktionscode 1 Byte 55h oder AAh Länge der Daten 1 Byte 00h Index des zu lesenden Arrays 2 Bytes 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, der Index des zu lesenden Objektes ist 2400h. Die Adresse des Slaves ist "5"h. 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Ausnahmecodes Im Fehlerfall können abhängig vom Funktionscode folgende Ausnahmecodes in der Response enthalten sein: Code Name Beschreibung 01 Illegal Function Funktionscode nicht erkannt/erlaubt 02 Illegal Data Address Register-Adresse nicht gültig oder existiert nicht 03 Illegal Data Value Wert nicht gültig 04 Device Failure nicht behebbarer Fehler Weitere Details entnehmen Sie der Modbus-Spezifikation MODBUS APPLICATION PROTOCOL SPECIFICATION V1.1b3.
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 Slave-Adresse 1 Byte Funktionscode 1 Byte 03h / 04h Startadresse 2 Bytes 0000h bis FFFFh Anzahl der Register 2 Bytes 1 bis (7Dh) CRC 2 Bytes Response ("M" entspricht der Anzahl der zu lesenden Register) Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 03h / 04h Anzahl Bytes 1 Byte 2 * M Registerwert 2 Bytes CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 83h / 84h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01, 02, 03 oder 04 CRC 2 Bytes 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 Slave-Adresse 1 Byte Funktionscode 1 Byte 06h Registeradresse 2 Bytes 0000h bis FFFFh Registerwert 2 Bytes 0000h bis FFFFh CRC 2 Bytes Response Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 06h Registeradresse 2 Bytes 0000h bis FFFFh Registerwert 2 Bytes 0000h bis FFFFh CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 86h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01, 02, 03 oder 04 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes Response Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 10h Startadresse 2 Bytes 0000h bis FFFFh Anzahl der Register 2 Bytes 0001h bis 007Bh CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 90h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01, 02, 03 oder 04 CRC 2 Bytes 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 17 (11h) Report Server ID Mit diesem Funktionscode kann man die Beschreibung des Typs, der gegenwärtigen Status und andere Informationen des Geräts auslesen. Request Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 11h CRC 2 Bytes Response Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 03h Anzahl Bytes 1 Byte 01h Run Indicator Status 1 Byte 00h = OFF, FFh = ON Zusatzdaten CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 91h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01 oder 04 CRC 2 Bytes Beispiel Nachfolgend ein Beispiel eines Request/Response für ID und Status: 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes Response ("M" entspricht der Anzahl der zu schreibenden Bytes): Name Länge Wert Slave-Adresse 1 Byte Funktionscode 1 Byte 17h Anzahl Bytes 1 Byte 2 * M Gelesene Register M * 2 Bytes CRC 2 Bytes Fehler Name Länge Wert Slave-Adresse 1 Byte Fehlercode 1 Byte 97h Ausnahmecode (siehe Ausnahmecodes) 1 Byte 01, 02, 03 oder 04 CRC 2 Bytes 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 8 (08h) Diagnostics Der Modbus-Funktionscode FC08 bietet eine Menge an Tests zum Überprüfen des Kommunikationssystems zwischen Client und Server oder zum Überprüfen verschiedener interner Fehlerzustände innerhalb des Servers. Diese Funktion verwendet einen zwei Byte großen Unterfunktionscode im Request, um den Typen des Tests zu definieren. Der Server wiederholt in einer normalen Response beides, den Funktions- und den Unterfunktionscode. Einige der Diagnosen enthalten Daten des Gerätes im Datenfeld der normalen Antwort. Request: Name Länge Wert Funktionscode 1 Byte 08h Unterfunktionscode 2 Bytes Data N x 2 Bytes Response: Name Länge Wert Funktionscode 1 Byte 08h Unterfunktionscode 2 Bytes Data N x 2 Bytes Fehler: Name Länge Wert Funktionscode 1 Byte 88h Ausnahmecode (siehe Ausnahmecodes) 1 Bytes 01 oder 03 oder 04 FC 8.10 (08h.0Ah) Clear Counters and Diagnostic Register Das Ziel dieser Anfrage ist, alle Zähler und Diagnose-Register zurückzusetzten. Zähler werden auch beim Einschalten der Steuerung zurückgesetzt. Unterfunktion Datenbereich Request Resonse 00h 0Ah 00h 00h Echo der Anfragedaten Beispiel Request Response FC 8.11 (08h.0Bh) Return Bus Message Count Der Datenbereich der Antwort gibt die Anzahl der Nachrichten zurück, welche seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung am Kommunikationssystem erkannt worden sind. Unterfunktion Datenbereich Request Response 00h 0Bh 00h 00h Total Message Count FC 8.12 (08h.0Ch) Return Bus Communication Error Count Der Datenbereich der Antwort gibt die Anzahl der CRC Fehler seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung zurück. Unterfunktion Datenbereich Request Response 00h 0Ch 00h 00h CRC Error Count Beispiel Request Response FC 8.13 (08h.0Dh) Return Bus Exception Error Count Der Datenbereich der Antwort gibt die Anzahl der Modbus Ausnahmen seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung zurück. Unterfunktion Datenbereich Request Response 00h 0Dh 00h 00h Exception Error Count Beispiel Request Response FC 8.14 (08h.0Eh) Return Server Message Count Der Datenbereich der Antwort gibt die Anzahl der an das Gerät gerichteten und Broadcast-Nachrichten zurück, die von der Steuerung verarbeitet wurden. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 0Eh 00h 00h Server Message Count Beispiel Request Response FC 8.15 (08h.0Fh) Return Server No Response Count Der Datenbereich der Antwort gibt die Anzahl der an die Steuerung gerichteten Nachrichten zurück, für die keine Antwort zurückgesendet wurde (weder normale Antwort noch Ausnahme-Antwort). Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 0Fh 00h 00h No Response Count Beispiel Request Response FC 8.16 (08h.10h) Return Server NAK Count Der Datenbereich der Antwort gibt die Anzahl der Nachrichten zurück, für die eine "Negative Acknowledge (NAK)"-Ausnahme-Antwort zurückgesendet wurde. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 10h 00h 00h Server NAK Count Beispiel Request Response FC 8.17 (08h.11h) Return Server Busy Count Der Datenbereich der Antwort gibt die Anzahl der Nachrichten zurück, für die eine " Server Device Busy "-Ausnahme-Antwort zurückgesendet wurde. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 11h 00h 00h Server NAK Count Beispiel Request Response FC 8.18 (08h.12h) Return Bus Character Overrun Count Der Datenbereich der Antwort gibt die Anzahl der an die Steuerung gerichteten Nachrichten zurück, die Aufgrund einem Zeichenüberlauf nicht verarbeitet werden konnten. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Ein Zeichenüberlauf entsteht dadurch, dass Zeichen schneller an der Steuerung ankommen, als sie gespeichert werden können, oder durch den Verlust eines Zeichens aufgrund eines Hardwarefehlers. Unterfunktion Datenbereich Request Response 00h 12h 00h 00h Server Character Overrun Count Beispiel Request Response
FC 8.10 (08h.0Ah) Clear Counters and Diagnostic Register Das Ziel dieser Anfrage ist, alle Zähler und Diagnose-Register zurückzusetzten. Zähler werden auch beim Einschalten der Steuerung zurückgesetzt. Unterfunktion Datenbereich Request Resonse 00h 0Ah 00h 00h Echo der Anfragedaten Beispiel Request Response
FC 8.11 (08h.0Bh) Return Bus Message Count Der Datenbereich der Antwort gibt die Anzahl der Nachrichten zurück, welche seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung am Kommunikationssystem erkannt worden sind. Unterfunktion Datenbereich Request Response 00h 0Bh 00h 00h Total Message Count
FC 8.12 (08h.0Ch) Return Bus Communication Error Count Der Datenbereich der Antwort gibt die Anzahl der CRC Fehler seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung zurück. Unterfunktion Datenbereich Request Response 00h 0Ch 00h 00h CRC Error Count Beispiel Request Response
FC 8.13 (08h.0Dh) Return Bus Exception Error Count Der Datenbereich der Antwort gibt die Anzahl der Modbus Ausnahmen seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung zurück. Unterfunktion Datenbereich Request Response 00h 0Dh 00h 00h Exception Error Count Beispiel Request Response
FC 8.14 (08h.0Eh) Return Server Message Count Der Datenbereich der Antwort gibt die Anzahl der an das Gerät gerichteten und Broadcast-Nachrichten zurück, die von der Steuerung verarbeitet wurden. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 0Eh 00h 00h Server Message Count Beispiel Request Response
FC 8.15 (08h.0Fh) Return Server No Response Count Der Datenbereich der Antwort gibt die Anzahl der an die Steuerung gerichteten Nachrichten zurück, für die keine Antwort zurückgesendet wurde (weder normale Antwort noch Ausnahme-Antwort). Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 0Fh 00h 00h No Response Count Beispiel Request Response
FC 8.16 (08h.10h) Return Server NAK Count Der Datenbereich der Antwort gibt die Anzahl der Nachrichten zurück, für die eine "Negative Acknowledge (NAK)"-Ausnahme-Antwort zurückgesendet wurde. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 10h 00h 00h Server NAK Count Beispiel Request Response
FC 8.17 (08h.11h) Return Server Busy Count Der Datenbereich der Antwort gibt die Anzahl der Nachrichten zurück, für die eine " Server Device Busy "-Ausnahme-Antwort zurückgesendet wurde. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Unterfunktion Datenbereich Request Response 00h 11h 00h 00h Server NAK Count Beispiel Request Response
FC 8.18 (08h.12h) Return Bus Character Overrun Count Der Datenbereich der Antwort gibt die Anzahl der an die Steuerung gerichteten Nachrichten zurück, die Aufgrund einem Zeichenüberlauf nicht verarbeitet werden konnten. Gezählt werden die Nachrichten seit dem letzten Neustart, "Clear Counters and Diagnostic Register"-Request oder Einschalten der Steuerung. Ein Zeichenüberlauf entsteht dadurch, dass Zeichen schneller an der Steuerung ankommen, als sie gespeichert werden können, oder durch den Verlust eines Zeichens aufgrund eines Hardwarefehlers. Unterfunktion Datenbereich Request Response 00h 12h 00h 00h Server Character Overrun Count Beispiel 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: 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 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 Slave-Adresse 1 Byte Funktionscode 1 Byte 2Bh (43d) MEI type 1 Byte 0Dh (13d) Protokolloptionen Bereich 2 bis 5 Byte Adressen- und Datenbereich N Bytes CRC 2 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, die Slave-Id der Steuerung ist "5"). 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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
Fehlerreaktion Im Falle eines Fehlers wird die folgende Fehlernachricht gesendet: Name Länge Beispielwert Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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. Die Adresse des Slaves ist "5". 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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
Fehlerreaktion Im Falle eines Fehlers wird die folgende Fehlernachricht gesendet: Name Länge Beispielwert Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte Funktionscode 1 Byte 66h Unterfunktionscode 1 Byte 55h oder AAh Länge der Daten 1 Byte 00h Index des zu lesenden Arrays 2 Bytes 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, der Index des zu lesenden Objektes ist 2400h. Die Adresse des Slaves ist "5"h. 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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
Fehlerreaktion Im Falle eines Fehlers wird die folgende Fehlernachricht gesendet: Name Länge Beispielwert Slave-Adresse 1 Byte 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 CRC 2 Bytes 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 Slave-Adresse 1 Byte 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 CRC 2 Bytes 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
Ausnahmecodes Im Fehlerfall können abhängig vom Funktionscode folgende Ausnahmecodes in der Response enthalten sein: Code Name Beschreibung 01 Illegal Function Funktionscode nicht erkannt/erlaubt 02 Illegal Data Address Register-Adresse nicht gültig oder existiert nicht 03 Illegal Data Value Wert nicht gültig 04 Device Failure nicht behebbarer Fehler Weitere Details entnehmen Sie der Modbus-Spezifikation MODBUS APPLICATION PROTOCOL SPECIFICATION V1.1b3.