Modbus Merker Wago 750 8202

Beiträge
431
Reaktionspunkte
18
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
Zuletzt bearbeitet:
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?

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
 
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ß
 
Zuletzt bearbeitet:
Hi, danke für Eure Mühe



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.??



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

Gruß
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
 
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
 
Zuletzt bearbeitet:
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Zurück
Oben