Hallo Blockmove,
ich würde gerne mitreden können und meine Erfolge bzw. Misserfolge euch mitteilen. Leider finde ich die Zeit nicht dazu.
Danke schon mal für die einfach gehaltene Beschreibung trotzdem sehr informativ.
Fragen habe ich trotzdem, wo werden denn deines Coils, Register empfangen (openhab)?
Ich überwache den Modbus mit einem Modbus Scanner, wenn ich Online gehe werden werte überschieben wo gar nicht definiert sind. vielleicht sollte ich das auch mal mit deiner Methode probieren, sprich Array of Bool.
Guten Morgen,
also "wo" sie empfangen werden, ist immer geräteabhängig.
Denn der Modbus ist immer nur eine Vereinbarung "zwischen" den Geräten.
Du hast einen Schrank mit vielen Schubladen, ich habe einen Schrank mit vielen Schubladen.
Ich definiere jetzt, welche Schubladen bei mir Coils und welche HRegs sind.
Das Gleiche machst Du bei Dir. Du hast aber einen ganz anderen Schrank, als ich....
Meiner ist rund, ich "adressiere" also meine Schubladen mit Radius und Winkel.
Deiner ist viereckig, Du addressierst also in Zeilen und Spalten.
Jetzt wollen wir Daten austauschen. Ich brauche jetzt nicht wissen, wo, in welcher Schublade und mit welcher Adressierung das bei Dir passiert. Ich brauche von Dir nur die Info, in welchen HReg-Schubladen und in welchen Coil-Schubladen welche Dinge liegen. Genauso Du von mir.
Somit können wir uns über "HRegs" und "Coils" unterhalten und jeder weiß, in welche Schublade er das bei sich packen muß...
Der viel beschriebene Versatz um "1" kommt von einer Unzulänglichkeit der Modbus-Mütter&-Väter (Erfindungsverantwortliche, um gendergerecht zu sein

):
[TABLE="class: left grid"]
[TR]
[TH]Coil/Register Numbers[/TH]
[TH]Modbus-Address[/TH]
[TH]Data Addresses[/TH]
[TH]Type
[/TH]
[TH]Table Name [/TH]
[/TR]
[TR]
[TD="class: light, colspan: 1"]1-9999[/TD]
[TD="class: light, colspan: 1"]0-9998[/TD]
[TD="class: light, colspan: 1"]0000 to 270E[/TD]
[TD="class: light, colspan: 1"]Read-Write[/TD]
[TD="class: light, colspan: 1"]Discrete Output Coils
[/TD]
[/TR]
[TR]
[TD="class: dark, colspan: 1"]10001-19999
[/TD]
[TD="class: dark, colspan: 1"]10000-19998[/TD]
[TD="class: dark, colspan: 1"]0000 to 270E[/TD]
[TD="class: dark, colspan: 1"]Read-Only
[/TD]
[TD="class: dark, colspan: 1"]Discrete Input Contacts [/TD]
[/TR]
[TR]
[TD="class: light, colspan: 1"]30001-39999[/TD]
[TD="class: light, colspan: 1"]30000-39998[/TD]
[TD="class: light, colspan: 1"]0000 to 270E[/TD]
[TD="class: light, colspan: 1"]Read-Only[/TD]
[TD="class: light, colspan: 1"]Analog Input Registers [/TD]
[/TR]
[TR]
[TD="class: dark, colspan: 1"]40001-49999[/TD]
[TD="class: dark, colspan: 1"]40000-49998[/TD]
[TD="class: dark, colspan: 1"]0000 to 270E[/TD]
[TD="class: dark, colspan: 1"]Read-Write[/TD]
[TD="class: dark, colspan: 1"]Analog Output Holding Registers [/TD]
[/TR]
[/TABLE]
Wie Du siehst, gibt es eine Modbus-Adresse und eine Coil/Registernummer: Und diese sind um 1 versetzt.
Bitte frag mich nicht, warum man das so gemacht hat: Aber diese beiden Formate werden gerne und regelmäßig bei den Dokumentationsverantworlichen verwechselt.
Auf dem Kabel selber existieren die nicht. Dort existieren die Funktionscodes (die definieren, ob es Coils/Hregs/Iregs/Contacts sind) und die Data Address.
So, um zum Thema zurückzukommen:
Wago hat sich nun entschieden, die Dinge in zwei Schubladen gleichzeitig zu packen.
Bei einem anderen Koppler hatten wir auch gerade das Thema: Du kannst auf zwei Adressbereiche schreiben und einen davon zurücklesen!? Wofür?
Ich hätte mir jetzt vorstellen können: Auf einen schreiben und der Koppler überträgt das in den zweiten Bereich, damit ich das zurücklesen kann, um den Empfang zu verifizieren. So ist es aber nicht... WAGO bekleckert sich bei seiner Modbus-Umsetzung IMHO nicht mit Ruhm und bei der Dokumentation sind sie noch schlechter. Wir sitzen regelmäßig mit zwei Programmierern davor und sind jedes Mal am überlegen, wie das nun gemeint und gemacht ist. - Und das Ganze, obwohl WAGO alles über Modbus macht.
Gruß
Jens