S7 SCL und globale Daten

Astyanax

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Erstmal ein Hallo an alle,
dies ist mein erster Beitrag in diesem Forum, ich hoffe ich mache mich nicht gleich unbeliebt.

Ich will ein Zustandsautomaten für eine Waschmaschine realisieren. Jetzt habe ich einige Teile (Drehen, Pumpen, Zulauf) Ausgelagert in FCs. Erstmal ist mir nicht ganz klar wie ich Variablen austauschen kann (globale DB und dann immer beispielsweise DBx.var1 := true ??).
Nächstes Problem ist, dass ich z.b. in der FC für die Drehung timer laufen lasse. Also die FC drehen wird aufgerufen mit Parameter für Richtung und Geschwindigkeit. Dann soll eine vordefinierte Zeit gedreht werden, anschließend wird der Motor gestoppt und ich will erneut die FC mit einer anderen Drehrichtung aufrufen. Nur wie kann ich abfragen, ob der vorherige Timer schon abgelaufen ist? Ich wollte das mit Rückgabewerten machen. Also die Funktion liefert ein true zurück, wenn der Motor wieder steht und anschließend kann ich die Funktion erneut aufrufen (bzw. einen Zustandswechsel auslösen). Könnte man das eleganter machen?

Hoffe ihr versteht mich. Danke schonmal...

Gruß
Philipp
 
Also es gibt wie immer viele Möglichkeiten.
Du kannst natürlich globale DB nutzen.
Du kannst in FC und FB IN- Out- und INOUT-Parameter definieren. Wenn die FC/FB dann aufgerufen werden kannst du an diese Parameter deine zu übergebenden Variablen antragen. So kann dann auch ein FC mehrere Outputs haben, u.a. auch eine Bool, daß der Timer abgelaufen ist.
Du kannst deine zu übergebenden Daten auch zu Strukturen oder als UDT zusammenfassen und diese dann zur Definition als IN/OUT/INOUT nutzen. Wenn du diese Strukturen bzw. UDT dann auch in deinen Globalen DB definierst, brauchst du nicht mehr allzu viele IN/OUT-Parameter in den FC/FB definieren sondern nutzt z.Bsp. eine UDT im globalen DB und je eine UDT in den FC. Die UDT-Var des globalen UDT kannst du dann an Den FC als z.Bsp. INOUT antragen und so alle deine Variablen in den FC hinein und aus ihm herausbekommen. Vorteil, in dem FC/FB gelten weiterhin die im UDT angelegten Variabennamen. Lies dir da mal in der Step7-Hilfe genauer durch, kannst dann auch hier weiterfragen.

PS: Wenn du Timer nutzt, ist es sinnvoll FB zu nutzen (die haben durch ihren Instanz-DB sowas wie lokale statische Variablen) und darin aus der IEC-Library von Step7 die Timer TON/TOFF als Statische Variablen zu deklarieren und zu nutzen. Diese Timer nehmen einen Zeitwert in ms entgegen. Willst du einen FB mehrmals benutzen ist das einfach möglich, indem man jeder FB-Instanz einen eigenen Instanz-DB zuordnet. In diesem Falle ist es eh nicht gut, normale S5-Timer zu nutzen, da diese nur einmal aufgerufen werden dürfen!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... ich kann dem Beitrag von Ralle (vor Allem dem, was ab "PS:" steht) nur zustimmen.
Wenn man SCL an den Start bringt um damit Abläufe zu erstellen, so ist es m.E. eher sinnvoll mit FB's und damit den verbundenen "eigenen" Variablen zu arbeiten. Das ist z.B. für den Einsatz von Timern ganz sinnvoll (SFB3 .. 5), aber auch für alle ablaufrelevanten Daten ...

Gruß
LL
 
Zurück
Oben