Wie können wir helfen?

Print

Modbus-Adressierung / Standard-Modbus-Datenadresszeichenfolge / Modbus-Funktionscodes

In wenigen Worten

  • 0x01 Spulen lesen: Lesen Sie den Status von Relais oder digitalen Ausgängen.
  • 0x02 Diskrete Eingänge lesen: Lesen Sie digitale Eingangssignale wie Drucktasten
  • 0x03 Halteregister lesen: Lesen von Prozessparametern oder Sollwerten, die in Halteregistern gespeichert sind
  • 0x04 Eingangsregister lesen: Lesen Sie analoge Eingangswerte, z. B. Sensorwerte von einer SPS
  • 0x05 Einzelne Spule schreiben: Den Status eines einzelnen digitalen Ausgangs (EIN/AUS) einstellen, z. B. ein Relais aktivieren
  • 0x0F Mehrere Spulen schreiben: Setzen Sie den Status mehrerer digitaler Ausgänge (EIN/AUS) in einer einzigen Anforderung
  • 0x06 Einzelnes Halteregister schreiben: Einen einzelnen 16-Bit-Wert in ein Halteregister schreiben, z. B. zum Einstellen eines Parameters oder Befehls
  • 0x10 Mehrere Halteregister schreiben: Mehrere 16-Bit-Werte in aufeinanderfolgende Halteregister schreiben, z. B. mehrere Sollwerte gleichzeitig oder Aktualisieren einer Zeichenfolge

0x, 1x, 3x, 4x und FC01, FC02, FCxx,… Ich bin verwirrt!

0x 1x 3x 4x definieren nicht den Modbus-Funktionscode. Sie geben lediglich den Typ des Datenbereichs an: Spulen, diskrete Eingänge, Halteregister,…

Der Funktionscode (FCxx) definiert die Operation, die auf diesen Datenbereich angewendet wird.

Allgemeine logische Zuordnung zwischen 0x, 1x, … und FC01, FC02, …

0x Spulen
Lesen mit FC01
Schreiben mit FC05 oder FC15

1x Diskrete Eingänge
Lesen mit FC02

3x Eingangsregister
Lesen mit FC04

4x Halteregister
Lesen mit FC03
Schreiben mit FC06 oder FC16

Wichtiger Hinweis: In einem Modbus-Frame gibt es niemals 0x, 1x, 3x oder 4x. Der Frame enthält nur den Funktionscode, die Startadresse und die Menge.

Die Präfixe 0x, 1x, 3x und 4x sind eine Dokumentations- und Softwarekonvention, keine Protokollregel.

Details

Spulen = digitale Ausgänge, die einer Spule in einem Relaisschema entsprechen.
Der Modbus-Datentyp ist 0.
Er wird oft als 0x bezeichnet, was die Adressierung erleichtert.
Der Datentyp 0x ist zum Lesen und Schreiben verfügbar.
Zum Lesen wird der Funktionscode 1 (FC01 und 01h in Hexadezimal) verwendet.
Zum Schreiben solcher Daten wird der Funktionscode 5 (FC05 und 05h) verwendet.
Zum Schreiben mehrerer aufeinanderfolgender Daten wird der Funktionscode 15 (0Fh) verwendet.
Dieser Datentyp wird auf verschiedene Weise angegeben:
%M1, 00001, 000001 (für die erste Variable) …
Gemäß der Interpretation des Standards sollte die Notation 0x0000 (bis zu 0xFFFF) in Hexadezimal sein.

Eingangsstatus = digitale Eingänge, die einem Kontakt in einem Relaisschema entsprechen.
Der Modbus-Datentyp ist 1.
Er wird oft als 1x bezeichnet, was die Adressierung erleichtert.
Der Datentyp 1x ist nur zum Lesen verfügbar.
Zum Lesen wird der Funktionscode 2 (FC02 und 02h) verwendet.
Dieser Datentyp wird auf verschiedene Weise notiert:
%i1, 10001, 100001..,
Die Notation sollte 1×0000 (bis zu 1xFFFF) lauten.

Eingangsregister = digitale Eingänge, die einem Register entsprechen (daher der Name), oder ein nicht-binärer Wert (ein 16-Bit-Wort).
Damals war die Auswahl nicht so groß wie heute…
Der Modbus-Datentyp ist 3.
Er wird oft als 3x bezeichnet, was die Adressierung erleichtert.
Der Datentyp 3x ist nur zum Lesen verfügbar.
Zum Lesen wird der Funktionscode 4 (FC04 und 04h) verwendet.
Dieser Datentyp wird auf verschiedene Weise notiert:
%IW1, 30001, 300001..,
Die Notation sollte 3×0000 (bis zu 3xFFFF) lauten.

Holding-Register = digitale Ausgänge, die einem Register entsprechen (daher der Name), oder ein nicht-binärer Wert (ein 16-Bit-Wort).
Der Modbus-Datentyp ist 4.
Er wird oft als 4x bezeichnet, was die Adressierung erleichtert.
Der Datentyp 4x ist zum Lesen und Schreiben verfügbar.
Zum Lesen wird der Funktionscode 3 (FC03 und 03h) verwendet.
Zum Schreiben von Daten dieses Typs wird der Funktionscode 6 (FC06 und 06h) verwendet.
Zum Schreiben mehrerer aufeinanderfolgender Daten wird der Funktionscode 16 (10h) verwendet.
Dieser Datentyp wird auf verschiedene Weise notiert:
%MW1, 40001, 400001..,
Die Notation sollte 4×0000 (bis zu 4xFFFF) lauten.

Häufig kommt es zu Verwechslungen zwischen der Notation (die virtuell ist) und der Adresse.
Durch die Verwendung der Adresse in Hexadezimalform lassen sich die oben beschriebenen unterschiedlichen Notationen vermeiden.
Bei kleinen Anwendungen stellt dies kein Problem dar, da der Dezimalwert der Adresse nicht höher als 9999 ist.
Bei größeren Datenbanken entsteht jedoch Unordnung.

49999 ist beispielsweise das 10000. Wort vom Typ 4. Was passiert, wenn das 10001. Wort verwendet werden soll? Im Allgemeinen wird dies mit 410000 notiert (aber wenn man den Maßstab ändert, ist dies nicht praktikabel), oft wird es mit 50000 geschrieben (aber das ist nicht sehr logisch, da der Typ 4 und nicht 5 ist).
Manche schreiben es auch als 4×9999, dann 4×10000…
Durch die hexadezimale Schreibweise können Sie alle verfügbaren Adressen nutzen und die Notation ist besser lesbar.
Das 10000. Wort ist 4×2710, das nächste wird 4×2711 sein… Die Umrechnung ist mit dem Windows-Rechner oder in der SPS selbst einfach.