# Modbus Merker Wago 750 8202



## Passion4Automation (20 Mai 2018)

Hallo,

ich arbeite mich gerade in Modbus rein, die Befehle kommen dabei von IP Symcon.

In einer dafür angelegten globalen Variablen Liste sieht das bei mir so aus:

*Merker1 AT%MX0.0: BOOL;*

Funktioniert auch soweit, hab aber Verständnisprobleme.

Laut Handbuch gehts bei Modbus mit 12288 los, nur wie weiß die Wago das sie wenn 12288 True ist, das auch der AT %MX0.0 auf True gesetzt wird??
Im Handbuch ist das ja ein fest vergebener Bereich für Modbus. Wenn ich jetzt das ganze Programm symbolisch adressiert habe, gibt es dann Probleme mit doppelter Variablenbelegung, oder organisiert sich das Codesys 2.3 selbst zurecht?

Möchte gerne verstehen was ich da mache, deswegen diese Frage.

Vielen Dank.


----------



## Mavorkit (20 Mai 2018)

Hi,

Wir du schon erwähnt hast, gibt es bei den Controllern gewisse fest gelegte Bereiche. Hier kommen in der Reihenfolge erst die Eingänge dran, dann die Ausgänge, dann die Eingänge vom Bus, dann die Ausgänge zum Bus und dann eben die Merker wie verwendet.
Du kannst also über Modus auch direkt auf Eingänge bzw. Rohewerte von analogen Eingangskarten lesend zugreifen. Ein schreibender Zugriff ist nur von einer Quelle möglich. Das heißt wenn der Controller als Koppler betrieben wird kannst du auch alle Ausgänge schalten bzw. Beschreiben.

Die 12288 sieht Recht krumm aus, ist aber in Hex die 3000. Die Bereiche werden von Controller vorgegeben und sind glaube ich bei den PFC etwas größer als bei den Kopplern die auch als Controller benutzt werden können wie z.B. dem 750-880.

Das heißt also die Adresse 12288 entspricht der Adresse des Merkerwortes 0 (oder welches Datenformat du auch wählst - Achtung Auflösung ist in Byte also müssen bei Wörtern 2er Schritte gemacht werden). Wenn der Controller in deinem Fall das Bit 0.0 setzt, wird das in den Speicher bei der Adresse 12288.0 geschrieben. Wenn nun über Modbus auf diese Adresse zugegriffen wird, liest du direkt den Speicher des Controllers.
Der Vor- und auch gleichzeitig Nachteil ist, das im Merkerbereich gelesen und geschrieben werden kann. Es gibt hier keine Kontrolle. Im Ausgangsbereich vom Bus wird z.B. das Schreiben von extern nicht angenommen.
Ist am Controller lediglich eine digitale Eingangskarte, kann mit Adresse 0.0 der erste digitale Eingang gelesen werden. Die Adressen verschieben sich aber bei ändern der Konfiguration. Die berechneten Adressen sind in der Steuerungskonfiguration sichtbar.

Um Adressen Belegung zu überprüfen gibt es im CoDeSys 2.3 unter Projekt, überprüfen, die Funktion überlappende Speicherbereiche. Hier wird doppelter Zugriff erkannt.
Eine automatische Prüfung kann bei Projekt, Optionen, Übersetzungsoptionen, automatisch prüfen von aktiviert werden.

Ich hoffe das beantwortet so weit alle deine Fragen.

Gruß

Mavorkit

Gesendet von meinem SM-G389F mit Tapatalk


----------



## Blockmove (20 Mai 2018)

goifalracer schrieb:


> Hallo,
> 
> ich arbeite mich gerade in Modbus rein, die Befehle kommen dabei von IP Symcon.
> 
> ...



Wenn du von IPS Bit 12288 schreibst, dann wird in der Steuerung der M0.0 geschrieben.
Bei der symbolischen Adressierung verbindest du quasi mit der AT Anweisung die Variable (z.B. Aussenleuchte_Ein) mit M0.0.
Somit zeigt Modbus 12288, M0.0 und die Variable auf die gleiche Speicherstelle.

Es ist meist sinnvoll für IPS eigene Modbus-Variablen zu definieren.
Manchmal ist es sogar sinnvoll zwischen Befehl (Schreiben) und Status (Lesen) zu trennen.

Gruß
Blockmove


----------



## Passion4Automation (20 Mai 2018)

Hi, danke für Eure Mühe



> Das heißt also die Adresse 12288 entspricht der Adresse des Merkerwortes  0 (oder welches Datenformat du auch wählst - Achtung Auflösung ist in  Byte also müssen bei Wörtern 2er Schritte gemacht werden). Wenn der  Controller in deinem Fall das Bit 0.0 setzt, wird das in den Speicher  bei der Adresse 12288.0 geschrieben. Wenn nun über Modbus auf diese  Adresse zugegriffen wird, liest du direkt den Speicher des Controllers.



Das heißt also beim Bitweisen Zugriff zeige ich immer auf z.B. 12288.0 oder 12289.0 usw. und beim Byteweisen Zugriff z.B. 12290. 1,12290. 2, 12290. 13,12290. 4 usw.??
Beim Bitweisen Zugriff verschende ich quasi Speicher?

Ok das wichtigste ist das die Überlappenden Speicherbereiche beim übersetzen angezeigt werden, eingestellt habe ich das schon.

Aber diese Modbusmerker sind ja die gleiche Adressbereiche wie ich sie auch für andere Merker verwenden könnte z.B. (Zentral EIN *AT%MX0.0: BOOL;*) und schon hätte ich die erste Überlappung vom MX0.0.??



> Es ist meist sinnvoll für IPS eigene Modbus-Variablen zu definieren.
> Manchmal ist es sogar sinnvoll zwischen Befehl (Schreiben) und Status (Lesen) zu trennen.



Für IPS habe ich mir schon eine eigene Globale Var Liste angelegt, ohne Strukturierung verliere ich den Überblick. 

Gruß


----------



## Mavorkit (20 Mai 2018)

goifalracer schrieb:


> Hi, danke für Eure Mühe
> 
> 
> 
> ...


Genau, am besten Bytes übertragen und dann in Bits aufteilen. 
Wie legst du den deine Merker an? Wenn du keinen Modbus Zugriff brauchst brauchst du auch nicht direkt adressieren, das übernimmt dann CoDeSys automatisch. Die direkte Adressierung wird nur bei Modbus Zugriff benötigt.
Die E/As sollten immer namentlich belegt werden und nicht direkt adressiert. Dann Gerät nichts durcheinander bei Hardware Erweiterung. Das geht allerdings nicht bei allen, manchmal muss direkt adressiert werden.

Gruß

Mavorkit

Gesendet von meinem SM-G389F mit Tapatalk


----------



## Blockmove (20 Mai 2018)

Hier im Beitrag 13 findest du eine nette Exceltabelle
https://www.symcon.de/forum/threads/11889-Modbus-Bits-auslesen/page2

Das mit dem Verschenken von Speicherplatz stimmt nicht so ganz.
Die Adressierung unterscheidet sich je nachdem ob du ein Bit oder ein Word liest bzw. schreibst.
Modbus unterscheidet hier zwischen Coil und Register


----------



## Mavorkit (20 Mai 2018)

Das stimmt, jedoch wird immer ein Byte übertragen, auch wenn der FC auf coil steht.
Dürfte normal egal sein, allerdings wenn es um Performance geht evtl. Schon.

Gruß

Mavorkit

Gesendet von meinem SM-G389F mit Tapatalk


----------



## Blockmove (21 Mai 2018)

Mavorkit schrieb:


> Das stimmt, jedoch wird immer ein Byte übertragen, auch wenn der FC auf coil steht.
> Dürfte normal egal sein, allerdings wenn es um Performance geht evtl. Schon



Also Coil oder Word ist bei Modbus auf Wago-Seite nicht so das Thema.
Das Thema Performance liegt eher an der Anzahl der Aufträge.
OPC-Server haben da automatische Optimierungen und fassen Kommunikationsaufträge zusammen und lesen Adressbereiche am Stück aus.
Bei den meisten Homeautomation-Lösungen ist da Handarbeit angesagt.

Gruß
Blockmove


----------



## Passion4Automation (21 Mai 2018)

> Wie legst du den deine Merker an? Wenn du keinen Modbus Zugriff brauchst  brauchst du auch nicht direkt adressieren, das übernimmt dann CoDeSys  automatisch. Die direkte Adressierung wird nur bei Modbus Zugriff  benötigt.
> Die E/As sollten immer namentlich belegt werden und nicht direkt  adressiert. Dann Gerät nichts durcheinander bei Hardware Erweiterung.  Das geht allerdings nicht bei allen, manchmal muss direkt adressiert  werden.



Ich adressiere Hardware symbolisch (Zwecks Hardwareänderungen) und Merker (Variablen) im Code auch, wollte nur wissen ob diese vorgesehenen Modbusmerker bei Wago auch die Merker sind die ich auch im Code fest zuweisen könnte.

OK dann am besten immer Byteweise übergeben, muss erst mal schauen wie ich das löse, habe ich noch nie gemacht, bin noch in den Anfängen bei Modbus.

Danke.


----------



## Mavorkit (21 Mai 2018)

Am einfachsten ist die Bits in einem Byte (wenn es mehr ist auch ein Word) abzulegen, dieses dann per Modbus zu übertragen und auf der anderen Seite wieder Bitweise zugreifen. Das spart etwas Arbeit bei der Modbus Kommunikation.

Es ist natürlich auch kein Problem jedes Bit einzeln zu übertragen. Ich wollte lediglich darauf hinweisen, da dies in den WAGO Schulungen auch gemacht wird.

Gruß

Mavorkit

Gesendet von meinem SM-G389F mit Tapatalk


----------



## Passion4Automation (22 Mai 2018)

Ich habe mich jetzt nochmal ins Handbuch eingelesen und in die verlinkten Threads aus dem Symcon Forum. Durchs probieren werde ich das schon lernen.
Was ich mich allerdings noch frage ist folgendes:
Ich habe gelesen das es bei Modbus vorkommt das Adressen zweimal vorkommen, und zwar habe ich in der verlinkten Excel Tabelle gesehen das hier Wörter Byteadressiert werden und Doppelwörter mit 2 Byteweise adressiert werden. Ein Wort hat aber für mich 2 Byte und ein Doppelort 4 Byte. Hängt das mit der Einstellung von IPS zusammen, also ob ich als Coil anspreche oder als Register aus IPS anspreche??

Besten Dank


----------



## Mavorkit (23 Mai 2018)

Da liegst du richtig. Ein Byte hat logischerweise ein Byte ^^, ein Word benötigt zwei Byte und ein Doppelwort demnach vier.
Wenn z.B. eine Real Variable übertragen werden soll werden hier zwei Byte benötigt (gleicher Speicher wie Word). Hier werden Fehler aber über die Adressüberprüfung entdeckt.

Gruß

Mavorkit

Gesendet von meinem SM-G389F mit Tapatalk


----------

