# 750-881 - Ausgänge schreiben via Modbus und/oder via Programm?



## FabHH (17 August 2021)

Hi, ich bin neu hier im Forum - Also erstmal Hallo 

Als ersten Post habe ich gleich eine Frage an euch.

Folgende Situation:
Ich habe eine 750-881, die ich in mein "Smart-Home System" via Modbus eingebunden habe. Ein Raspberry Pi (ioBroker mit Node Red) ist sozusagen das "smarte" Gateway, um die Steuerung später mit anderen Geräten und Diensten zu verbinden.

Ich habe hier einen kleinen Testaufbau und das Ganze funktioniert soweit auch schon ganz gut. Es können Eingänge der Steuerung via Modbus ausgelesen und Ausgänge geschrieben werden. Allerdings mit einer Limitierung.
Ich habe es nur hinbekommen Ausgänge via Modbus zu schreiben, in dem ich die Schreibberechtigungen des betroffenen I/O Moduls von PLC/PLC auf Modbus umgestellt habe. Die Auswirkung davon ist, dass ich das betroffene I/O Modul danach nur noch via Modbus ansteuern kann aber nicht mehr mit der Steuerung/dem Programm.

Jetzt zu meiner Frage:
Weiß jemand von euch, ob es eine Möglichkeit gibt, Ausgänge via Modbus und PLC/Programm schalten zu können?


Vielleicht weiß hier ja jemand eine Antwort. Schon einmal Danke im voraus.


----------



## oliver.tonn (17 August 2021)

Wenn es nicht direkt geht könntest Du eine Variable für Modbus anlegen und den Ausgang dann per ODER-Verknüpfung steuern, also Ausgang TRUE wenn Modbus-Var = TRUE oder SPS-Var = TRUE.


----------



## Frohnius (17 August 2021)

generiere dir am besten über eine modbus-variabel einen hand / automatik modus ...
und abhängig davon dann die sps-variable oder die modbus-variable zum steuern verwenden ....
so kannst du manuell ein und ausschalten ....


----------



## FabHH (17 August 2021)

Vielen Dank für den Tipp @oliver.tonn

auf deinen Hinweis hin habe ich mir nochmal das Dokument "Anwendungshinweis Modbus" von Wago genauer angeschaut.

So wie es aussieht können bei meiner Steuerung nur RETAIN Variablen via Modbus geschrieben werden.
Ich habe eine RETAIN Variable erstellt, es probiert und es funktioniert einwandfrei.

Danke


----------



## JSEngineering (17 August 2021)

Hallo,

Das ist so richtig, Du kannst entweder nur vom Modbus oder nur vom Programm aus die Ausgänge schreiben. Das ist so, damit der Controller weiß, auf wenn er hören soll.

Du kannst Merker und Eingänge ( mußt  Du im Handbuch gucken, ich glaube oberhalb W256 ) vom Modbus beschreiben und Ausgänge lesen. Diese kannst Du dann im Programm nutzen, wie normale Eingänge, Ausgänge und Merker.

Damit kannst Du Dir dann eine Umschaltung bauen, sowas wie “local/remote“, wo Do einmal aus dem Programm steuerst und einmal die Steuerung über den Modbus erfolgt, indem Du dann die Merker oder Eingänge auf die entsprechenden Ausgänge mappst.


----------



## KLM (18 August 2021)

Wie Du selbst schon festgestellt hast und andere schon ergänzt haben, kann nur einer Schreibrechte direkt auf Ausgänge haben, damit eine Eineindeutigkeit für den Controller besteht. Was soll er sonst machen, wenn die Applikation Ein sagt und Modbus Aus.
Du brauchst für Modbus also Zwischenvariablen, die Du dann z.B. ODER verknüpfst mit den Programmvariablen oder Dir eine Hand/Automatik-Funktion einbaust, die zwischen Applikation und Modbus Variablen wechselt.
Bei 88x Controllern sind automatisch alle Merker per Modbus lesbar und beschreibbar, weil Merker Hardware-Adressen (%M) sind, wie auch Eingänge (%I) und Ausgänge (%Q). Das erste Word der Eingänge (%IW0) liegt auf Modbus Registeradresse 0, das erste Ausgangsword (%QW0) auf Register 512 und der erste Merker (%MW0) auf Register 12288. Das jeweils folgende Word liegt dann jeweils um Startadresse +1 in den Modbusregistern.
Variablen kannst Du manuell beim Deklarieren auf Merker mappen (z.B. wMeinErsterMerker AT %MW0 : Word; oder xMeinZweitesBitImZweitenMerker AT %MX1.1 : BOOL. Einfacher und fehlerfrei bei der Adressdefintion geht es über die "Feldbusvariablen" in der Steuerungskonfiguration. Rechtsklick auf Feldbusvariablen > bearbeiten > neue Variable anlegen mit dem grünen Pluszeichen oben rechts > Datentyp und Variablenname definieren > Typ von Voreinstellung "Input" auf "Flag" umstellen. Die jeweilige Merkeradresse und damit indirekt die Modbusadresse wird automatisch gewählt und angezeigt. Im Programm kannst Du diese Variablen dann über die Eingabehilfe als eine Art globale Variablen einbinden.
Merker können als Retain definiert werden, müssen es aber nicht. Auf die Modbus-Funktionalität der Merken hat das keinen Einfluss.


----------



## FabHH (19 August 2021)

Hallo @KLM,

ich habe es eben einmal ausprobiert und eine Feldbusvariable angelegt. Wie du schon geschrieben hast, ist das wahrscheinlich auch die Beste Methode. Danke, dass du dein Wissen mit mir geteilt hast .


----------

