Page 1 of 1

Kommunikation zwischen AS-Netzwerken/Schrittketten in ST

Posted: 26 Feb 2019, 10:09
by codecarbonara
Hallo!

Ein Anliegen bzgl. der "Best Practice" zur Verwendung von Schrittketten in ST.
Ich habe zwei redundante Anlagen, mit wechselndem Betrieb. Hierfür habe ich einen Anlagen-FB erstellt indem die Betriebszustände als Schrittkette formuliert sind.
Beide Anlagen benutzen diesen FB, welcher im Hauptprogramm nacheinander (zuerst für Anlage 1, dann für 2) aufgerufen wird. Für die Kommunikation zwischen den Anlagen gibt es Schnittstellen, welche die Betriebszustände gegenseitig abfragen/austauschen.

Wie programmiert man generell mit verschiedenen Anlagen(teilen) bzw. Schrittketten?
Wie kann man eine saubere Kommunikation zwischen Anlagen(teilen) bzw. Schrittketten herstellen? Wie ist das üblich?
Man kann ja prüfen, ob ein Schritt aktiv ist. Kann man das auch aus anderen Bausteinen/Schrittketten heraus abfragen?

Besten Dank im Voraus.
Falls eine vollständige Erklärung der Sachverhalte zu umfassend ist, reichen auch ein paar "Denkanstöße" ;-)

Viele Grüße

Re: Kommunikation zwischen AS-Netzwerken/Schrittketten in ST

Posted: 26 Feb 2019, 16:48
by Walter
Hallo,

danke für Deine Anfrage!
Grundsätzlich kann man den Status "welcher Schritt in welchem FB gerade aktiv ist" zwischen zwei FBs via globaler Variable übergeben. Diese ist dann auch im jeweils anderen FB lesbar.
Man könnte auch beide Schrittketten mit ihren FBs in unterschiedliche Tasks (mit unterschiedlicher Zykluszeit oder Priorität) legen, falls erforderlich.
Ich fürchte, man kann nicht generell "eine optimale Variante" wie mit Schrittketten programmiert werden soll, nennen. Meiner Erfahrung nach sollte es "eine Haupt Schrittkette" geben, welche dann (falls erforderlich/in anderen FBs) Unterschrittketten aufruft.

lg
Walter

Re: Kommunikation zwischen AS-Netzwerken/Schrittketten in ST

Posted: 27 Feb 2019, 10:46
by codecarbonara
Hallo Walter,

vielen Dank für Deine Antwort!

Das hilft mir schon weiter. Das Übergeben an globale Variablen macht Sinn und werde ich auch so machen. Wo ich mir noch etwas unschlüssig bin, ist die generelle Handhabung von den IO-Variablen.

Derzeit schreibe ich aus meinen Schrittketten-FBs direkt auf die globalen IO-Variablen und lese auch direkt daraus. Dazu werden die Schrittketten-FBs von einem Programm aufgerufen, welches in so einem "{IO} Task" läuft.
Wäre es da ggf. sinnvoll die Ein- und Ausgänge der Schrittketten-FBs zunächst in globale Variablen zu schreiben und dann separat in einem Programm mit anderem Task die IO-Variablen zu setzen?
Ich habe nämlich auch ein Programm zum Datalogging laufen. Dieses läuft gerade über den gleichen IO Task. Das hatte ich zuerst in einem anderen, langsameren Task, jedoch können ja nicht zwei verschiedene Tasks auf die IOs zugreifen.

Wie macht man das üblicherweise?


Viele Grüße

Re: Kommunikation zwischen AS-Netzwerken/Schrittketten in ST

Posted: 28 Feb 2019, 09:19
by Walter
Hallo,


zunächst muss man bei mehreren FBs und globalen Variablen aufpassen, dass immer exakt definiert ist, wer (welcher FB) auf welche globale Variable schreiben darf. Ich würde es strikt vermeiden, von mehreren Stellen auf die gleiche Variable zu schreiben. Je nach Umsetzung der IO-Anbindung könnte es passieren, dass die IOs "einen Zyklus zu spät" geschrieben werden, wenn diese zuerst auf globale Variablen und dann erst durch einen anderen Programmtyp auf die IOs kommen.
Bitte beachte auch, dass du evtl. "kurze Spikes" durch das Programm an den IOs übersehen kannst, wenn der IO Task langsamer ist als der, der die Programmlogik ausführt.


lg
Walter

Re: Kommunikation zwischen AS-Netzwerken/Schrittketten in ST

Posted: 01 Mar 2019, 22:39
by codecarbonara
Danke für die Antwort!

Also würde man Ein- und Ausgangsvariablen über Merker im Programm verarbeiten und dann in einem IO Task die Merker mit den IO Variablen abgleichen?

Viele Grüße

Re: Kommunikation zwischen AS-Netzwerken/Schrittketten in ST

Posted: 04 Mar 2019, 09:27
by Walter
Hallo,

Merker sind aus meiner Sicht nicht nötig. Stattdessen würde ich einen Teil des Namens der globalen Variable so benennen, dass man daraus erkennt, welcher Funktionsplan da reinschreiben darf. Das ist wichtig für die Wartbarbeit des Programmcodes und sobald ein Projekt eine gewisse Größe erreicht.

lg
Walter