Extended_Addressing
Auf die Extended_Addressing-Variable wird in ähnlicher Weise zugegriffen wie auf die HR_Start_Offset-Referenz, außer dass es sich bei der Extended_Addressing-Variable um einen Booleschen Wert handelt.
Für die Modbus-Slave-Adressierung kann, mit Extended_Adressing = FALSE, ein einzelnes Byte (dies ist der Modbus-Standard) oder zwei Bytes konfiguriert werden (Extended_Adressing = TRUE). Die erweiterte Adressierung dient zur Adressierung von mehr als 247 Geräten in einem einzigen Netzwerk. Mit Extended_Adressing = TRUE können Sie maximal 65535 Adressen ansprechen. Im Folgenden wird ein Modbus-Telegramm als Beispiel gezeigt.
Slave-Adresse mit einem Byte (Byte 0)
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
||
|---|---|---|---|---|---|---|---|
|
Anforderung |
Slave- |
Funktionscode |
Anfangsadresse |
Daten |
|||
|
Gültige Antwort |
Slave- |
Funktionscode |
Länge |
Daten... |
|||
|
Fehlermeldung |
Slave- |
0xxx |
Exception- |
||||
Slave-Adresse mit zwei Bytes (Byte 0 und Byte 1)
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
|
|---|---|---|---|---|---|---|---|
|
Anforderung |
Slave-Adresse |
Funktionscode |
Anfangsadresse |
Daten |
|||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode |
Länge |
Daten... |
|||
|
Fehlermeldung |
Slave-Adresse |
0xxx |
Exception- |
||||
Beschreibung der Telegramme
Der Datenverkehr zwischen Master und Slave bzw. zwischen Slave und Master beginnt mit der Slave-Adresse, gefolgt vom Funktionscode. Dann werden die Daten übertragen. Der Aufbau des Datenfeldes ist abhängig vom verwendeten Funktionscode. Am Ende des Telegramms wird die Prüfsumme (CRC) übertragen.
Funktionscodes mit Performanceoptimierung
Bei aktivierter Option zur Performanceoptimierung gibt es Einschränkungen im Mengengerüst der übertragenen Daten. Informationen zu den Einschränkungen finden Sie im Kapitel Funktionscodes.
Funktionscode 1 - Diese Funktion ermöglicht das Lesen einzelner Ausgangsbits
FC 1 - Ausgangsbits lesen
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
|
|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 1 |
Anfangsadresse |
Anzahl Ausgänge |
||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 1 |
Länge 1) |
Ausgangsdaten 3) |
||
|
Fehlermeldung |
Slave-Adresse |
0x81 |
Exceptioncode 2) |
--- |
||
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
|
|---|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 1 |
Anfangsadresse |
Anzahl Ausgänge |
|||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 1 |
Länge 1 |
Ausgangsdaten |
|||
|
Fehlermeldung |
Slave-Adresse |
0x81 |
Exceptioncode 2 |
--- |
|||
Funktionscode 2 - Diese Funktion ermöglicht das Lesen einzelner Eingangsbits
FC 2 - Eingangsbits lesen
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
|
|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 2 |
Anfangsadresse |
Anzahl Eingänge |
||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 2 |
Länge 1 |
Eingangsdaten |
||
|
Fehlermeldung |
Slave-Adresse |
0x82 |
Exceptioncode 2 |
--- |
||
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
|
|---|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 2 |
Anfangsadresse |
Anzahl Eingänge |
|||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 2 |
Länge 1 |
Eingangsdaten |
|||
|
Fehlermeldung |
Slave-Adresse |
0x82 |
Exceptioncode 2 |
--- |
|||
Funktionscode 3 - Diese Funktion ermöglicht das Lesen einzelner Register
FC 3 - Halteregister lesen
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
|
|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 3 |
Anfangsadresse |
Anzahl Register |
||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 3 |
Länge 1 |
Registerdaten |
||
|
Fehlermeldung |
Slave-Adresse |
0x83 |
Exceptioncode 2 |
--- |
||
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
|
|---|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 3 |
Anfangsadresse |
AnzahlRegister |
|||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 3 |
Länge 1 |
Registerdaten |
|||
|
Fehlermeldung |
Slave-Adresse |
0x83 |
Exceptioncode 2 |
--- |
|||
Funktionscode 4 - Diese Funktion ermöglicht das Lesen einzelner Register
FC 4 - Eingangswörter lesen
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
|
|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 4 |
Anfangsadresse |
Anzahl Eingangswörter |
||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 4 |
Länge 1 |
Eingangsdaten |
||
|
Fehlermeldung |
Slave-Adresse |
0x84 |
Exceptioncode 2 |
--- |
||
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
|
|---|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 4 |
Anfangsadresse |
Anzahl Eingangswörter |
|||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 4 |
Länge 1 |
Eingangsdaten |
|||
|
Fehlermeldung |
Slave-Adresse |
0x84 |
Exceptioncode 2 |
--- |
|||
Funktionscode 5 - Mit dieser Funktion kann ein einzelnes Bit gesetzt oder gelöscht werden
FC 5 - Ein Ausgangsbit schreiben
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
|
|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 5 |
Anfangsadresse |
Wert |
||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 5 |
Länge |
Wert |
||
|
Fehlermeldung |
Slave-Adresse |
0x85 |
Exceptioncode 1 |
--- |
||
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
|
|---|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 5 |
Anfangsadresse |
Wert |
|||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 5 |
Länge |
Wert |
|||
|
Fehlermeldung |
Slave-Adresse |
0x85 |
Exceptioncode 1 |
--- |
|||
Funktionscode 6 - Diese Funktion ermöglicht das Schreiben einzelner Register
FC 6 - Halteregister schreiben
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
|
|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 6 |
Adresse |
Register |
||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 6 |
Adresse |
Register |
||
|
Fehlermeldung |
Slave-Adresse |
0x86 |
Exceptioncode 1 |
--- |
||
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
|
|---|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 6 |
Adresse |
Register |
|||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 6 |
Adresse |
Register |
|||
|
Fehlermeldung |
Slave-Adresse |
0x86 |
Exceptioncode 1 |
--- |
|||
Funktionscode 8 - Diese Funktion dient der Überprüfung der Kommunikationsverbindung
FC 8 - Slave-Zustand
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
|
|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 8 |
Diagnosecode |
Testwert |
||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 8 |
Diagnosecode |
Testwert |
||
|
Fehlermeldung |
Slave-Adresse |
0x88 |
Exceptioncode 1 |
--- |
||
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
|
|---|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 8 |
Diagnosecode |
Testwert |
|||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 8 |
Diagnosecode |
Testwert |
|||
|
Fehlermeldung |
Slave-Adresse |
0x88 |
Exceptioncode 1 |
--- |
|||
Funktionscode 11 - Diese Funktion ermöglicht das Lesen von 2 Byte "Status-Word" und ein 2 Byte "Event‑Counter"
FC 11 - Ereigniszähler der Slave-Kommunikation
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
|
|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 11 |
--- |
|||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 11 |
Status |
Ereigniszähler |
||
|
Fehlermeldung |
Slave-Adresse |
0x8B |
Exceptioncode 1 |
--- |
||
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
|
|---|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 11 |
--- |
||||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 11 |
Status |
Ereigniszähler |
|||
|
Fehlermeldung |
Slave-Adresse |
0x8B |
Exceptioncode 1 |
--- |
|||
Funktionscode 15 - Diese Funktion ermöglicht das Schreiben mehrerer Bits
FC 15 - Ein/mehrere Ausgangsbits schreiben
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
Byte 7 |
Byte n |
|
|---|---|---|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 15 |
Anfangsadresse |
Anzahl Ausgangswörter |
Bytezähler 1 |
Wert |
|||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 15 |
Anfangsadresse |
Anzahl Ausgangswörter |
--- |
||||
|
Fehlermeldung |
Slave-Adresse |
0x8F |
Exceptioncode 2 |
--- |
|||||
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
Byte 7 |
Byte 8 |
Byte n |
|
|---|---|---|---|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 15 |
Anfangsadresse |
Anzahl Ausgangswörter |
Bytezähler 1 |
Wert |
||||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 15 |
Anfangsadresse |
Anzahl Ausgangswörter |
--- |
|||||
|
Fehlermeldung |
Slave-Adresse |
0x8F |
Exceptioncode 2 |
--- |
||||||
Funktionscode 16 - Diese Funktion ermöglicht das Schreiben einzelner oder mehrerer Register
FC 16 - Ein/mehrere Halteregister schreiben
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
Byte 7 |
Byte n |
|
|---|---|---|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 16 |
Anfangsadresse |
Anzahl Register |
Bytezähler 1 |
Wert |
|||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 16 |
Anfangsadresse |
Anzahl Register |
--- |
||||
|
Fehlermeldung |
Slave-Adresse |
0x90 |
Exceptioncode 2 |
--- |
|||||
|
Byte 0 |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6 |
Byte 7 |
Byte 8 |
Byte n |
|
|---|---|---|---|---|---|---|---|---|---|---|
|
Anfrage |
Slave-Adresse |
Funktionscode 16 |
Anfangsadresse |
Anzahl Register |
Bytezähler 1 |
Wert |
||||
|
Gültige Antwort |
Slave-Adresse |
Funktionscode 16 |
Anfangsadresse |
Anzahl Register |
--- |
|||||
|
Fehlermeldung |
Slave-Adresse |
0x90 |
Exceptioncode 2 |
--- |
||||||