# Mit Modbus gegenseitig I/O's zwischen zwei WAGO SPS'en schreiben und lesen



## kussji (19 September 2016)

Hallo zusammen

Bin schon seit einer Weile dran Ausgänge des Slaves über den Master zu setzen. Geht nicht. (Finde auch kein passendes vorgehen im Netz - zu dunkle Sonnenbrille ??).
Ich kann im Slave ein Eingang lesen und diesen auf dem Master wieder ausgeben, das geht. Aber im Master ein Eingang lesen und diesen auf dem Slave ausgeben geht nicht.
Aber mal der Reihe nach was ich gemacht habe.

Ziel: Der Master soll Ein und Ausgänge des Slaves lesen und schreiben können. (Wie gesagt lesen geht).

Umgebung: Verwende eine 750-889 als Master und eine 750-881 als Slave. Master mit I/O 750-1405 + 750-1504. Slave mit I/O 750-402 + 750. Verbindung über Ethernet. Codesys 2.3.

Gemacht: Im Master mit dem "Modbus-Master-Konfigurator" Konfiguration erstellt (siehe Bild unten). Geräte und I/Os mit "scan" gefunden, Konfig. gespeichert, Code generiert. Im "PLC_PRG" den generierten Baustein beschaltet und PLC_PRG.
Im Slave habe ich ein PLC_PRG welches nur eine interne Variable toggeln lässt um zu sehen, ob die SPS "lebt".

*Frage: Muss man am Slave selber wirklich gar keine Modbus-Einstellungen vornehmen???* (Im K-Bus Module normal konfiguriert. Über WBM im Master und Slave ist der Modbus-Port TCP und UDP aktiviert).

Wo liegt meine Lösung Vielen Dank schon mal.

Grüsse kussji


----------



## holgermaik (19 September 2016)

Soll DI00 ein Eingang am Slave sein?
Soll DO00 ein Ausgang am Slave sein?
Dann muss DI00 an In1SL und DO00 an Out1SL

Allerding verstehe ich nicht warum man einen teueren Controller(881) als dummen Slave benutzt.


----------



## kussji (19 September 2016)

Hallo holgermaik
Danke für die Antwort.
DI00 ist ein Eingang am  Master und soll als Ausgang auf den Slave. DO00 ist ein Ausgang am  Master und wird vom Slave gesetzt (dieser Teil funktioniert).

Geht es vielleicht darum nicht, weil der Slave 881 zu "gescheit" ist?



holgermaik schrieb:


> Allerding verstehe ich nicht warum man einen teueren Controller(881) als dummen Slave benutzt.


Weiss nicht was mit dem Geld anfangen - deshalb. Nein im Ernst - hab halt einfach die beiden Controller da. Geht nur drum künftige Projekte mit MODBUS-Master-Slave zu lösen und dies ist ein Versuch.
Gegenfrage - gibt es wirklich keine Anwendung wo ein "intelligenter" Slave, mit eigenem Programm, weitere Anlagenteile unabhängig vom Master steuern kann?

Danke Gruss kussji


----------



## holgermaik (20 September 2016)

> Slave, mit eigenem Programm, weitere Anlagenteile unabhängig vom Master steuern kann?


In dem Fall wäre ein Austausch über Netzwerkvariablen eventuell sinnvoller

Die Funktionen wurden vom Konfigurator eingetragen? Mich irritiert etwas, dass für die Ausgänge ein FC mit Adressen zu Lesen vergeben ist, kann es aber gerade nicht überprüfen.


----------



## kussji (20 September 2016)

Ja die Funktion wurde vom Konfigurator selbst eingetragen, das ist denke ich schon richtig so.
Danke für den Hinweis mit Netzwerkvariablen - kenne ich (noch) nicht. Hab mal kurz gegoogelt - schaue ich mir mal genauer an.

Trotzdem würde mich interessieren, warum mein Vorhaben nur teilweise funktioniert.

Danke


----------



## .:WAGO::0100153:. (20 September 2016)

Hallo kussji,

ist auf Ihrem Slave(750-881) noch ein Program implementiert, welches den Zugriff auf die Ausgänge blockiert? Wenn Sie nun ihr Projekt auf dem Controller löschen möchten, dann können Sie zum einen in Codesys unter Projekt->Alles bereinigen oder durch Ethernet-Settings->Dateisystem zurück setzen das Projekt auf Ihren Controller löschen. Danach sollte Sie auf die Ausgänge zugreifen können. Ebenfalls würde ich nicht den Funktionsblock aufrufen, sondern eher die Variablen wie folgt ansprechen:MBCFG_ModbusSlave.In1SL. Da wen Sie den Funktionsbaustein mehrfach in verschiedenen POU's aufrufen, es zu Fehlern kommen kann.Viel Erfolg


----------



## kussji (20 September 2016)

Hallo Wago-Team
Super!
Danke für die Antwort. Habe wie beschrieben Dateisystem zurückgesetzt - dann geht es.
 Heisst das, dass auf dem Slave gar kein Programm laufen darf, selbst wenn es die Ausgäng nicht beschreibt?

@holgermaik: Wenn dem so ist, verstehe ich die Aussage - warum man für den Slave eine teure 881 nimmt. :grin:

Wenn ich zwischen zwei SPS'en (beide mit eigenem Programm) Variablen austauschen möchte, tue ich dies über Netzwerkvariablen wie es holgermaik schon angedeutet hat? Oder wie löst man dies am geschicktesten?

Viele Grüsse
kussji


----------



## holgermaik (20 September 2016)

Habe die Konfiguration mal in Codesys durchgespielt. Der Master sollte i.o. sein. Das Problem liegt in der  Konfiguration im Slave wieder Support schon schrieb.

Mal was anderes. Was willst du eigentlichmachen.
- einen dezentralen I/O Knoten -> dann wäre ein dummer Koppler die beste Wahl
- 2 Gleichwertige SPS die Daten austauschen -> Stichwort Netzwerkvariablen
- 1 Master der Daten vorgibt und mehrer Slave die Steuern -> dann wäre Master Slave Netzwerk richtig, allerding mit Generichen oder PFC Variablen.


----------



## .:WAGO::0100153:. (20 September 2016)

Hallo kussji,

vorab schön, dass Sie jetzt die Ausgänge beschreiben können. Auf dem 750-881 darf schon ein Projekt laufen, nur dürfen Sie dann nicht die Klemmen auf dem K-bus ansprechen, sondern wie holgermaik schon erwähnt hat müssen Sie die Generische Variablen benutzen. Anschließend müssen Sie diese in Ihrem Slave ummappen, um diese auf die Karte weiterzugeben.
Ein sogenannter dummer Slave ist z.B. ein 750-352. Auf diesem ist es nicht möglich ein Programm zu laden und dient nur dem einsammeln von Siganlen.


----------



## kussji (20 September 2016)

Hallo zusammen.

Ich Danke euch, habe in diesem Zusammenhang wieder etwas gelernt. Eine konkrete Verwendung habe ich noch nicht. Aber jetzt kenne ich Möglichkeiten.

Gruss
kussji


----------



## .:WAGO::0100153:. (20 September 2016)

Hallo kussji,

ein Nachtrag von Supportseite. Es ist möglich, dass Sie im Codesys-Projekt auswählen, wer auf die Ausgänge Zugriff haben soll. Wenn Sie in Codesys->Ressourcen->Steuerungskonfiguration->Hardware configuration->K-Bus mit rechte Maustaste "bearbeiten" auswählen und anschließend eine Klemme hinzufügt. Anschließend hat man die Option unter PA-Zuweisung, wer auf diese Klemme zugreifen soll z.B PLC_PRG...Es ist jetzt möglich, dass der Master Ausgänge auf dem Slave setzen kann, obwohl auf dem Slave ein Projekt läuft.


----------



## kussji (20 September 2016)

Hallo Support Team.
Das ist genau das was ich gesucht habe. Obwohl ich im Moment dafür nur eine theoretische Anwendung habe. Ob ich das so in der Praxis mal brauche werde...? Wir werden sehn.

Danke und viele Grüsse
kussji


----------

