Marten P. schrieb:
Das mit dem Offset lass ich mal weg, das verwirrt ja nur.
Das Problem bei Modbus ist dessen Geschichte, und die Tatsache, daß es zweieinhalb konträre Methoden gibt, Register zu numerieren.
Im eigentlichen Protokoll, das über die Schnittstelle geht (egal ob Modbus/RTU oder Modbus/TCP) werden Register mit einem 16-Bit-Wert adressiert, der den kompletten Zahlenraum von 0 bist 65535 umfasst.
Eine sehr oft anzutreffende ältere Methode vermischt Registerarten und Adressen und verwendet willkürliche "Offsets":
00001 bis 09999 sind "coils" (Bitein- und Ausgänge)
10001 bis 19999 sind "discrete inputs" (Biteingänge)
30001 bis 39999 sind "input register" (Analogeingänge, 16-Bit-Wert)
40001 bis 49999 sind "holding register" (Analogein- und Ausgänge, 16-Bit-Wert)
Damit sind nur 9999 Register jedes Typs ansprechbar.
Tatsächlich werden in allen Fällen die Adressen 0 bis 9998 auf den Bus gegeben.
Eine andere Variante erweitert das um eine Zehnerpotenz:
0xxxxx sind "coils" (Bitein- und Ausgänge)
1xxxxx sind "discrete inputs" (Biteingänge)
3xxxxx sind "input register" (Analogeingänge, 16-Bit-Wert)
4xxxxx sind "holding register" (Analogein- und Ausgänge, 16-Bit-Wert)
Auch hier beginnt die Zählung bei 1.
In allen Fällen ist das Protokoll immer das gleiche und adressiert Register bei 0 beginnend, unabhängig von deren Typ.
Man muss also, wenn man eine Modbusbeschreibung eines Gerätes sieht, immer genau prüfen, welche "Codierung" die Registernummern/Adressen verwenden.
Und daher ist es wichtig, daß man, wenn man ein Modbusgerät selbst beschreibt, man genau erwähnt, welche "Codierung" man nutzt.