# WAGO 750-881 Modbus Master Slave



## Sait Fistikci (29 Januar 2017)

Hallo Leute !
Ich habe in CodeSys eine Modbus-Master Slave Kommunikation zwischen zwei 750-881 Steuerungen aufgebaut.
Das Problem liegt darin dass ich nur Ausgänge des Masters setzen kann und keine des Slaves. Aber ich kann mit Slave Eingängen 
Master Ausgänge setzen. Wieso kann ich keine Slave Ausgänge setzen?
Kann mir jemand helfen?
Danke!


----------



## KLM (29 Januar 2017)

Moin,
ich vermute mal Dein Slave ist ein Controller, womit er selbst Schreibrechte auf seine Ausgänge hat. Also entweder die Ausgangsmodule dem Feldbus zuordnen (siehe 2. Registerkarte in der Steuerungskonfiguration des Slave) oder über Merker, die dann in der Slave-Apllikation auf die Ausgänge gemappt werden.


----------



## Sait Fistikci (29 Januar 2017)

Vielen Danke, werde es gleich versuchen


----------



## Player-Ben (3 März 2017)

Hallo,

vielleicht mal eine Grundsätzliche Frage. Wie baut man eine Kommunikation zwischen einem Kontroller und dem Programm (bsp. IPS)auf.
Es ist ja so, dass ich meine Ausgänge und Eingänge im Steuerungskonfigurator hart bezeichnet habe, so dass beim Umbau des Knotens sich zwar die Adressen ändern aber trotzdem noch alles richtig angesteuert wird.
Kann man solch eine Sache auch bei einer Modbus-Verbindung realisieren oder bin ich echt dazu gezwungen, die Ausgänge und Eingänge direkt über die Adressierung anzusteuern bzw. auszulesen.

Gibts andere Empfehlungen zb. Über den Merkerbereich zu gehen?

Stehe gerade etwas von dem Berg….


----------



## KLM (3 März 2017)

Moin, Modbus ist so aufgebaut, das der Master nur durchnummerierte Registeradressen des Slaves ließt und sich dabei darauf verlassen muss, dass in diesen Registern die Werte stehen, die zuvor vereinbart/definiert wurden. Bei WAGO Geräten kannst du den Hardware-Aufbau des Masters aus der Applikation dynamisch zur Laufzeit auslesen (Stichwort WagoLibKBus). Der Master kann mittels spezieller WAGO-Modbus-Register am Slave aber auch dessen Aufbau dynamisch zur Laufzeit auslesen und entsprechend dynamisch darauf reagieren. Es gilt aber, je dynamischer, desto aufwendiger in der Programmerstellung. Für eine konkretere Antwort wäre es hilfreich, wenn Du Dein Anliegen genauer formulieren könntest.
Was ist IPS und welche Schnittstellen bietet es bzw. welche Protokolle unterstützt es?


----------



## Player-Ben (4 März 2017)

Moin,
ich glaube ich habe meine Antwort schon erhalten, es müssen klar definierte Adressen sein wo die Werte drin stehen müssen.
Aber vielleicht gibt es noch eine andere Idee.
Also IPS = IP-Symcon ist eine Software zur Visualisierung und Steuerung verschiedener Systeme mittels verschiedener Protokolle.  Konkreter, ich möchte eine Visu auf einem Tablett haben, welches über Modbus-TCP mit der Wago als Slave (müsste dann doch der Slave sein?) kommuniziert. Die Visu soll Werte setzen und lesen können (Lampen, Temperatur, etc.).
Habe im Handbuch gelesen, dass die Ein- und Ausgänge immer chronologisch, ab einer eindeutigen Adresse anfangen. Somit müsste man einfach beim Umbau des Knotens darauf achten, dass man diese Chronologie nicht verändert. Dann sollte es doch passen…


----------



## KLM (4 März 2017)

Ja, die Hardware-Adressen im Prozessabbild und damit auch die Modbus-Registeradressen ergeben sich automatisch nach einem immer gleichen festen Regelwerk. Wenn sich pyhsikalisch am Knoten etwas verschiebt kannst Du recht einfach auf die neuen Adressen schließen. Das Problem, Du müsstest jede im Programm verwendete Adrese anpassen, was schnell recht Aufwendig wird. Es ist daher einfacher in der Steuerungskonfiguration oder dem Modbus Master Konfigurator Variablennamen für jeden Kanal zu definieren und diese Variablen namen im Programm zu verwenden. Wenn sich dann etwas physikalisch verschiebt, brauchst Du nur in der Steuerungskonfiguration oder dem MB Master Konfigurator eine Klemme manuell einschieben. Die Adressen verschieben sich dann zwar, aber die Variablennamen bleiben gleich und referenzieren einfach auf die neuen Adressen, womit im Programm keine Änderungen vorgenommen werden müssen.
Das gleiche funktioniert mit der Java-basierten CODESYS 2 und der HTML5 Visu von e!COCKPIT, da Du hier ja auch Variablen verknüpfst. Das setzt aber natürlich einen Controller voraus. Wenn Du jetzt mit einer anderen Visu-Software und einem Koppler arbeiten willst, musst Du natürlich den Knotenaufbau kennen oder dynamisch auslesen. 
Zur Querkommunikation zum PC wird dann häufig Modbus TCP eingesetzt. Aber auch 3S hat eine gute aber teure Lösung. Wenn Du fertige und universelle Software für Applikationserstellung und Visu einsetzt, kann Dir das aber egal sein, da das automatisch im Hintergrund läuft. Es gibt hier einige gute Lösungen am Markt, alle mit Vor- und Nachteilen. Neu ist auch das WAGO building, was eine zentrale Verwaltung über die Cloud bietet. Schaut recht interessant aus, aber gearbeitet habe ich damit bisher noch nicht. Aber auch hier gilt, fertige Software mit automatischer Erkennung der Hardware und ohne das man sich über die Adressierung Gedanken machen muss.

Edit: BTW, wenn Du mit einem Koppler arbeitest und die Applikation auf einem PC in der "Ferne", dann kannst Du bei Netzwerkausfall nicht mal mehr Dein Licht einschalten  Ich würde daher immer einen Controller einsetzen. Und mit der WebVisuApp oder e!COCKPIT ist die Visualisierung ja auch schnell auf dem Tablet oder Smartphone.


----------



## Player-Ben (4 März 2017)

Die Konfiguration der Variablennamen im Steuerungskonfigurator habe ich lokal für den einen Kontroller gemacht, um genau diese Problematik bei physikalischer Veränderung des Knotens nicht zu haben.

Aber leider geht dieses in der Software nicht, dort kann man nur mit den standartmäßigen Modbus-Funktionen auf ausgewählte Adressen zugreifen.
Werde dann wohl auf die definierten Adressen zugreifen um die Ein- und Ausgänge auszulesen.

Erstmal danke für die guten Informationen, eine Sache habe ich aber noch.
Meine Anlage steuert mein Eigenheim, wenn dort das Netzwerk versagt, gibt es immer noch Schalter

Und genau hierzu eine Frage, die Lampen werden mit Taster ein- und ausgeschaltet, wenn ich jetzt über den Modbus diese Lampen schalten möchte, definiere ich mir dann PFC-Variablen um mit diesen dann die Ausgänge zu schalten oder schaltet man direkt die Ausgänge. Wobei dann das Problem ist, dass ggf keine Änderung stattfinden, weil im Prozessbild vom Kontroller eine andere Zuweisung existiert.


----------



## holgermaik (4 März 2017)

Hallo Ben.
Der Zugriff auf feste Adressen ist immer dann gefährlich,  wenn der Knoten verändert wird. Aus diesem Grund würde ich immer von  einem Registermapping abraten.

Meine Empfehlung ist, die Eingänge  symbolisch im Controller zu lesen und in einen definierten  Speicherbereich zu kopieren. Durch das symbolische Lesen kann sich der  Knotenaufbau und damit die Adressen ruhig verschieben. 
Mit deinem  Visu Programm greifst du jetzt entweder auf die Speicherkopie deiner  Eingänge zu oder liest z.B. mit Modbusfunktion &H3 deine Variablen  aus. (hängt von der Visu ab, welche Funktionen unterstützt. werden.)
Für die Ausgänge in umgekehrter Reihenfolge.

Die  eigendliche Funktionalität und Steuerung gehört in den Controller und  nicht in die Visu. Somit kannst du auch bei Kommunikationsstörungen zu  deiner Visu das Licht noch anmachen.

Holger


----------



## Player-Ben (6 März 2017)

holgermaik schrieb:


> ...die Eingänge  symbolisch im Controller zu lesen und in einen definierten  Speicherbereich zu kopieren. Durch das symbolische Lesen kann sich der  Knotenaufbau und damit die Adressen ruhig verschieben.
> Mit deinem  Visu Programm greifst du jetzt entweder auf die Speicherkopie deiner  Eingänge zu oder liest z.B. mit Modbusfunktion &H3 deine Variablen  aus. (hängt von der Visu ab, welche Funktionen unterstützt. werden.



Hi Holger,
kligt erstmal Interessant, auch wenn ich es nicht wirklich verstanden habe.

Vorstellen würde ich es mir so:
Erster pyhsikalisch Eingang besitzt die Bezeichnung "Eingang_eins"
Dessen Status lese ich dann aus und kopiere in den PFC-Variable-Bereich der dann auch eine Adresse besitzt, worauf die Visu mit der Funktion "Read-Coils" zugreift.


----------

