frage zu modbus

OP #8107109
Lesenswert?
• ▲
▼

hallo

kurze Frage zu modbus:

"02 - byte count, Anzahl der zu lesenden oder zu schreibenden Bytes (1 Byte, 2 Stellen)"

Was ist damit gemeint? Scheint ziemlich egal zu sein, ob da eine 1 oder 2 steht - würde mich aber interessieren, wie man es korrekt macht.

Angehängte Dateien:
#8107163
Lesenswert?
• ▲
▼

Das ist Modbus RTU. Die erste Länge ist vom Modbus Protokoll selbst. Die zweite Länge ist dann deye spezifisch, also hat nichts mit Modbus selbst zu tun, sondern ist eine länge die deye intern definiert.

Keine Ahnung ob das verständlich ist, aber so stellt ich es mir vor.

#8107183
Lesenswert?
• ▲
▼

Nick schrieb:

Größe des Registers. WIMRE gibts bei Modbus unterschiedlich breite Register

Modbus kennt genau zwei Datentypen, 16-Bit-Register und 1-Bit-Register. Welcher Datentyp verwendet wird, hängt vom Function Code ab.

Es gibt genau vier Registertypen, zwei davon sind 16 Bit groß, die beiden anderen sind 1 Bit groß.

name Größe r/w
analog input register 16 Bit kann nur gelesen werden
holding register 16 Bit Register kann gelesen und geschrieben werden
discrete inputs 1 Bit kann nur gelsen werden
coil 1 Bit kann gelesen und geschrieben werden

Mit dem "function code" wird festgelegt, welche Operation mit welchem Registertyp ausgeführt wird

code Bedeutung]
1 eine oder mehrere "coils" lesen
2 ein oder mehrer "discrete inputs" lesen
3 ein oder mehrere "holding register" lesen
4 ein oder merere "analog input register" lesen
5 eine "coil" beschreiben
6 ein "holding register" beschreiben
15 mehrere "coils" beschreiben
16 mehrere "holding register" beschreiben

Das RTU-Telegramm "read holding register" ist wie folgt aufgebaut:

1
1 Byte Geräteadresse
2
1 Byte "function code", hier 0x03
3
2 Bytes Nummer des ersten zu lesenden Registers
4
2 Bytes Anzahl der zu lesenden Register
5
2 Bytes CRC

Eine "Anzahl von Bytes" gibt es in diesem Telegramm nicht, die gibt es nur bei der Antwort, die ein Modbusgerät als Folge zurücksendet:

1
1 Byte Geräteadresse
2
1 Byte "function code", hier wieder 0x03
3
1 Byte Anzahl der folgenden Nutzdatenbytes
4
  ... Nutzdatenbytes
5
2 Bytes CRC

Bei der Angabe der Nummer des Registers gibt es mehrere irreführende Konventionen. Im Protokoll (egal ob RTU oder TCP) werden Register im Bereich [0 .. 65535] numeriert.

Aber in der Beschreibung vieler Modbusgeräte wird aus historischen Gründen (Altersstarrsinn?) noch ein vom Registertyp abhängiger Offset dazugerechnet, der in einer Variante auch noch den Eindruck erweckt, es könnte nur 9999 Register jeden Typs geben:

von bis Registertyp
00001 09999 coil
10001 19999 discrete input register
30001 39999 analog input register
40001 49999 holding register

Das ist und war schon immer Humbug, auch die etwas neuere Konvention, die Offsets im Hunderttausenderbereich verwendet, ist wenig besser.

Antwort schreiben

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.