Hi Michael!
Ich starte mal beim technischen Aufbau, vergiss dazu vorerst mal Modbus und alles andere
. Der Connect selber hat ja zwei Netzwerkschnittstellen A / B. Diese sind Beide vom Betriebssystem verwaltet - Quasi ein Rechner mit zwei eingebauten Netzwerkkarten. Jede "Netzwerkkarte" bekommt eine eigene IP-Adresse aus verschiedenen Netzen - (also A=192.168.
0.1/24 und B=192.168.
1.1/24). Dementsprechend ist jede Netzwerkkarte in einem eigenen Netzwerk, das Betriebssystem (also RevPi) ist in "beiden" Netzwerken. Er kann also Teilnehmer im Adressbereich A und im Adressbereich B erreichen und kann von allen Teilnehmern im Netz A auf Schnittstelle A und von allen Teilnehmern im Netz B auf Schnittstelle B erreicht werden.
Ein Fehler wäre es, wenn man den Schnittstellen jeweils eine Adresse aus dem selben Netzwerk geben würde! Also z.B. A=192.168.
0.1/24 und B=192.168.
0.2/24 [NICHT GUT].
INFO: Man könnte den Connect natürlich auch als Bridge benutzen. Dann könnte man, wie man es von manchen Industrieteilnehmern kennt, sein Netzwerk durchschleifen. Also die Leitung kommt z.B. vom Switch, geht direkt an Port A (RevPi) und dann geht ein weiteres Kabel vom Port B (RevPi) an ein weiteres Device. Bei der Konfiguration wären alle Teilnehmer im selben IP-Netz und auf dem RevPi müsste eine Bridge über beide Ports erstellt werden. Dann hätte der RevPi auch nur noch EINE (!) IP Adresse auf der virtuellen Netzwerkkarte, welche an die Bridge geht - Das nur mal der Vollständigkeit halber
Also von der Seite aus, siehst du alles genau so, wie es ist. Das Betriebssystem und dessen Speicher sind "von beiden Netzen geteilt". Aber natürlich auch das Prozessabbild in piCtory
Wenn du also in piCtory ein Modbus-Master einrichtest, der Daten mit einem Slave in Netz A austauscht, schreibt dieser die Daten dann ja in das Prozessabbild. In den Speicherbereich des Modbus-Masters. Wenn du nun zusätzlich noch einen Modbus-Slave (TCP) in piCtory einbaust und den z.B. an die IP der Schnittstelle B bindest, kann ein Modbus Master aus dem Netz B auf diesen zugreifen und Daten lesen und schreiben. Dabei aber natürlich auch nur in dem Speicherbereich des Modbus Slaves im Prozessabbild!
Der Komponente, die diese IOs aus den beiden Speicherbereichen zusammenfügt ist dein Steuerungsprogramm. Das würde ich "natürlich" in Python schreiben um direkten Zugriff auf die IOs des Modbus Master und Modbus Slave zu bekommen.
Kleines Gedankenspiel:
Der Slave hat die IOs "anlage_an" und "fuellmenge", der Master "band_starten", "klappe_auf", "waage".
Mein Python Programm würde nun zyklisch mit meine Funktion im .cycleloop(funktion) prüfen ob der IO "anlage_an" = True ist.
Wenn der Master aus Netz B diesen setzt, würde meine Programm "band_starten" und "klappe_auf" auf True setzen (Das wäre ja auf dem Slave in Netz A).
Dann würde ich immer vergleichen "waage" >= "fuellmenge" und wenn das True ist
"klappe_auf" auf False setzen und nach einer Nachlaufzeit "band_starten" auf False setzen...
So kann der Master aus Netz B nicht den Slave aus Netz A direkt steuern, was ich ja auch gar nicht will, aber über das Steuerugsprogramm auf dem RevPi kann ich die Werte eben "zusammenbringen".
Bleibt man nun in der Python-Welt und ist nicht darauf angewiesen Modbus im Netz B zu verwenden, könnte man das "beeinflussen" der Steuerung auch komplett mit Python machen. Dann würde man statt einem Modbus-Slave in piCtory ein "normeles" virtuelles Device auf dem RevPi erstellen. Das Steuerungsprogramm würde dann die IOs "anlage_an" und "fuellmenge" mit Python .replace_io(...) erstellen und genau wie oben beschrieben verarbeiten. Im Netz B hätten wir nun z.B. eine Visualisierung in Python geschrieben, die mit RevPiNetIODriver("ip-revpi-netz-b") auf den RevPi zugreift (RevPiPyLoad muss installiert und konfiguriert sein). Und wenn jemand auf der Visualisierung die Füllmenge einstellt, wird der wert direkt in das virtuelle Device geschrieben, wenn jemand den Button "start2 drückt, wird der IO "anlage_an" auf True gesetzt. Alles über das Netzwerk B.
RevPiPyLoad empfehle ich eh zu installieren, weil es dein Python Programm ausführt und überwacht. Du kannst dann auch mit dem grafischen Tool "RevPiPyControl" über das Netzwerk auf den RevPi zugreifen und die IOs checken, alles als GUI.
Gruß, Sven