# Wago 750-8100 e-Cockpit Modbus Register Coil Überschneidung



## Bugelfips (21 Januar 2021)

Hallo Leute,

ich fang mit einem Thema an, wo ich keine Lösung finde und mir der Wago Support auch keine Lösung sagen konnte. Ich habe eine Modbus Verbindung mit einem Raspberry Openhab3 aufgebaut. 
Das Funktioniert auch eigentlich sehr super schnell und zuverlässig, hatte noch keine Probleme, aber jetzt habe ich eines.

Nach dem ich bis jetzt nur An/Aus also einzelnen Coils übertragen habe, ich aber jetzt noch zusätzliche Register werte wie z.b. Dimmen übertragen möchte, bekomm ich extreme Probleme auf dem Modbus. 

Wenn ich den Zahlen wert rauf dimme, dann werden teilweise die Lichter eingeschalten. Ich habe darauf das ganze mal einfach gehalten und nur ein 2 Coil werte und ein int wert versucht in dem Modbus zuschreiben. Ich habe darauf über das Modbus Tool herausgefunden, das mir in Adressen was geschrieben wird obwohl nichts konfiguriert ist (siehe Bilder). Wenn ich das int Register herausnehme, dann gibt es ein schönen Adressen verlauf. 

Ich habe schon so gut wie alle Adressen Bereiche ausgewählt, trotzdem werden die Adressen immer nach den 2Coil werten beschrieben.
Ich habe darauf mal einen anderes Modbus Toll verwendet, was auch keine Lösung fand.

Dazu kommt noch, dass mir der int Zahlen wert total falsch dargestellt wird, was ich aber jetzt herausgefunden habe, mit einen andern Modbus Tool passt.
Was sagt Ihr dazu, was kann das für Ursachen haben. Liegt es an falschen Adressenberieche oder an dem Modbus Tool….



Bin ziemlich ratlos gerade


----------



## KLM (21 Januar 2021)

Hast Du schon mal versucht die Bool-Werte in ein Byte zu bündeln und dann nicht mit Coil-FunctionCode abzufragen? In e!C kannst dann z.b. mit bAusgaenge.0 drauf zugreifen, oder per Union, aber dass mag ich grad nicht erklären.


----------



## JSEngineering (21 Januar 2021)

Bitte mal das Handbuch von Wago lesen. Die haben nämlich die Eigenschaft, dass man boolesche Werte sowohl als Coil als auch als HReg auslesen kann.
Mag damit zusammenhängen.


----------



## JSEngineering (21 Januar 2021)

siehe unten...


----------



## Bugelfips (21 Januar 2021)

schon einmal danke für die schnellen Antworten und die Ansätze. Werde das genauer erforschen. Wenn ich das richtig verstanden habe, sind Register Bereiche aus 8bit. Wenn ich jetzt Register 20 auswähle, dann müsste ich das ja mal 8 nehmen um die coil Adresse zu erhalten, oder werden Register in einem separaten Bereich geschrieben. 

Ich bin doch nicht der erste der Zahlen Werte und Bool-Werte in ecockpit konfiguriert. Sollte mich dann nicht ekockpit darauf hinweisen das ich in einem Bereich schreibe was nicht gut gehen kann.


----------



## JSEngineering (21 Januar 2021)

Ergänzung: Laut Handbuch Seite 118 liegen die Zugriffe auf den gleichen Modbus-Adressen, hier kommt es also auf die Funktionscodes an, die genutzt werden.

Anhang anzeigen 52569


----------



## Bugelfips (21 Januar 2021)

JSEngineering schrieb:


> Ergänzung: Laut Handbuch Seite 118 scheint es überhaupt keinen Coil-Zugriff zu geben. Dort sind nur Funktionscodes für Register aufgeführt.
> Also wirst Du nicht umhin kommen, die Bits in Words zusammenzufassen und als HReg zu übertragen.
> 
> Anhang anzeigen 52569




ach ok, habe dieses Diagramm nicht so wörtlich genommen. Weshalb gibt es dann die Auswahl coil??:-(


----------



## JSEngineering (21 Januar 2021)

Bugelfips schrieb:


> Wenn ich das richtig verstanden habe, sind Register Bereiche aus 8bit.



16 Bit... HReg = Word


----------



## JSEngineering (21 Januar 2021)

Bugelfips schrieb:


> ach ok, habe dieses Diagramm nicht so wörtlich genommen. Weshalb gibt es dann die Auswahl coil??:-(



siehe oben... habe den weißen Bereich nicht gesehen


----------



## Bugelfips (21 Januar 2021)

sorry was meinst du mit weißen Bereich


----------



## JSEngineering (21 Januar 2021)

Bugelfips schrieb:


> sorry was meinst du mit weißen Bereich


ganz rechte Spalte... hab nur die direkte Beschriftung neben den farblichen Kästen gelesen.

Je mehr ich mir diese Grafik ansehe, desto mehr glaube ich, daß es wieder mal so ist, daß WAGO hier den Coil-Bereich mit in den HReg-Bereich gelegt hat.
Das bedeutet, daß die ersten Wörter sowohl als HReg als auch als Coil beschrieben werden können.

Ich würde jetzt mal vermuten wollen, daß bei Modubus-IN die ersten 2047 Worte (HRegs) ebenso über Coils (Bits) beschrieben werden können.
Danach hast Du 29952 HRegs, für reinen Wort-Zugriff.


----------



## Bugelfips (22 Januar 2021)

da bin ich voll bei dir, so hab ich das auch verstanden, dann sollte es  doch aber kein problem darstellen wenn  ich von 0 - 2047 theoretisch  coil ung HReg beschreibe. Wenn ich auf nummer sicher gehe (siehe Bild)  also coil Adresse 32001 und 32002 und int in Register 1.

Die Wago darstellung ist verwirent dargestellt oder ich kapiert es nicht ganz.
PFC-Out Register berreich = 0 bis 31999
PFC-OUT Coil berreich = 0 bis 32767 = also reiner coil berreich 31999 bis 32767

Wie man sieht ohne erfolg :sad::sad::sad::sad::sad:


----------



## JSEngineering (22 Januar 2021)

Da die Coils ja Bits sind, gehe ich davon aus, daß 16 Coils = 1 HReg-Adresse bilden.

Deshalb schrieb ich, daß vermutlich die ersten 2047 HRegs gleichzeitig Coils sind.
Also ab HReg 2048, solltest Du einen reinen puren HReg-Zugriff haben.

Wir quälen uns auch jedes Mal, speziell bei den Kopplern, mit der Darstellung von WAGO herum... das ist suboptimal von denen gelöst.

Ich würde jetzt versuchen, die Coils 0..x zu beschreiben.
Analogwerte dann ab HReg 2048 aufwärts.


----------



## Bugelfips (22 Januar 2021)

gesagt getan,  ich habe das ganze mal probiert und na ja kann keine Besserung feststellen, ich sag mal so ich teste es ja momentan im Kleinen (wie auf den Bildern zu sehen) soll heißen das es zwei Coil Werte und ein Register wert ist.

Kann es sein das ecockpit eine coil Definierung in ein Register schreibt  (so wie du auch schon gesagt hast) und die restlichen Register auf true setzt?? Wie auf dem Bild zu sehen ist, werden immer nach dem definierten Coil Adresse vier Werte auf true gesetzt.

Versteh die Logik dahinter nicht, vor allem das dieses Phänomen nur auftritt wenn ich ein Register mit Implementiere.


----------



## JSEngineering (22 Januar 2021)

Keine Ahnung... vielleicht solltest Du am Montag einfach mal mit WAGO telefonieren... und dann schreibst Du hier mal, was des Rätsels Lösung ist...


----------



## Bugelfips (22 Januar 2021)

Ich glaub da komme ich nicht drumrum. Das macht mich noch fertig😄 Ist bestimmt total logisch 🤦*♂️


----------



## Passion4Automation (29 Januar 2021)

Also ich habe zwar mit eCockpit sehr wenig Erfahrung, aber bei CS 2.3 ist es bei Modbus auch so, dass man z.B. die Adresse 12288 also Coil ansprechen kann und auch als Register.
Wenn die beiden gleichzeitig angesprochen werden, kommt nix gescheites dabei raus.
Das ist jedesmal ne Qual mit dem Modbus.
Ich mache es immer so, ich fange mit Coil an, also reserviere ich mir z.B. 1000 Stück  und danach kommt nur noch Word und Dword, ich reserviere mir quasi immer so viele das es sicher reicht.
Dann muss ich nichts zwischen rein packen was definitiv irgandwann zu überschneidungen führt.

Bestes Beispiel: Die Lichter schalten in Abhängigkeit von Raumtemperatur


----------



## Bugelfips (2 Februar 2021)

Hallo Leute, sorry für die späte Rückmeldung,

  es gibt auf jedenfalls Neuigkeiten….
  Ich hatte Kontakt mit dem Wago Support, ich Zitiere einfach mal die Aussage vom Wago 
  [FONT=&quot] [/FONT]
  "[FONT=&quot]wenn ich es richtig verstehe erhalten Sie jetzt auch auf verwendeten Modbus Datenpunkten falsche Werte.
Falls Sie noch keine aktuelle Firmware verwenden, könnten Sie eine Aktualisierung versuchen.

Generell könnten Sie auch die Bibliothek WagoAppPlcModbus verwenden.[/FONT] " (Wago Support)[FONT=&quot][/FONT]
  [FONT=&quot] [/FONT]
  [FONT=&quot]Ich habe die Aktualisierung jetzt aus zeitlichen Gründen noch nicht probiert, aber ich habe gestern netterweise von jemand eine Programmierung erhalten, wo der oben genannte WagoAppPlcModbus Baustein Anwendung findet. Wie Ihr Wisst bin ich Anfänger, wo täglich dazulernt. Mir war nicht bewusst, dass in eCockpit der Mobus auch so ausgeführt werden kann. Das erleichtert vieles, da viel durch copy and paste geschrieben werden kann.[/FONT]
  [FONT=&quot] [/FONT]
  [FONT=&quot]Ich werde das ganze Mal probieren, bin aber ganz zuversichtlich das es funktioniert.[/FONT]

  [FONT=&quot]Werde berichten, wenn ich genaueres weiß.[/FONT]
  [FONT=&quot] [/FONT]

  [FONT=&quot]Danke Leute, für die Unterstützungen…[/FONT]


----------



## Blockmove (6 Februar 2021)

So ich durfte mich nun auch mit dem Thema rumschlagen.
Erstmal danke an JSEngineering für die gute Erklärung / Vorarbeit.
Der Wago Modbus-Konfigurator ist schon etwas gewöhnungsbedürftig.
Um Überschneidungen zu vermeiden habe ich mich an die 2048 zwischen Discrete Inputs - Inputregistern und Coils - Holdingregistern gehalten.
Also:

Discrete Input (Eingang) Ab Coil 0 (Read Only)
Inputregister (Eingang) ab Register 2048 (Read Only)
Coil (Ausgang) ab Coil 32768 (Read / Write)
Holdingregister (Ausgang) ab Register 34048 (Read / Write)


Bei vielen Mastern hat man einen Adressversatz von 1. Also Register 34048 wird mit 34049 im Master angesprochen.
Aber das hat man bei Modbus öfter.

Was mir auch noch aufgefallen ist:
Ich hatte die Ein- und Ausgänge als Array of Bool definiert.
Übergibt man diese Variable im Nodbus-Konfigurator, dann wird ein Array of Byte daraus.
Also hab ich die Ein- und Ausgänge einzeln angelegt. Damit funktioniert es.
Aber das Thema Bit / Byte hat man bei Codesys auch an anderer Stelle.

Also Wago würde hier wirklich gut daran tun, wenn sie die Doku bei den PFCs ergänzen würden.
Eine Grafik mit den Adressen ist schon sehr mau. Das geht deutlich besser.

Gruß
Blockmove


----------



## Bugelfips (9 Februar 2021)

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.


----------



## Blockmove (9 Februar 2021)

@Bugelfips

Ich hab bei mir ioBroker laufen. Mit openhab bin ich nie so recht warmgeworden.
Auf der Wago habe ich den "normalen" Modbuskonfigurator verwendet, also nicht den Modbus-FB.
Array of Bool funktioniert beim Modbuskonfigurator nicht richtig. Ich hab die Bool-Variabeln für Discrete Input und Coil einzeln angelegt.

Coil funktioniert mit ioBroker nicht richtig. Hier bin ich halt auf Holding-Register ausgewichen.

Gruß
Blockmove


----------



## JSEngineering (9 Februar 2021)

Bugelfips schrieb:


> Hallo Blockmove,
> 
> ich würde gerne mitreden können und meine Erfolge bzw. Misserfolge euch mitteilen. Leider finde ich die Zeit nicht dazu.
> 
> ...



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 ):


Coil/Register NumbersModbus-AddressData AddressesType
Table Name 	1-99990-99980000 to 270ERead-WriteDiscrete Output Coils 	
10001-19999
10000-199980000 to 270ERead-Only                       
Discrete Input Contacts 	30001-3999930000-399980000 to 270ERead-OnlyAnalog Input Registers 	40001-4999940000-499980000 to 270ERead-WriteAnalog Output Holding Registers	 	

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


----------

