Funktion While-Schleife (in Step7)
-
- Null-Leiter
- Beiträge: 321
- Registriert: Dienstag 6. Februar 2007, 22:55
Funktion While-Schleife (in Step7)
Hallo zusammen,
ich bin gerade am Anfang einer Unterrichtsreihe über SCL in Step 7. Da sich SCL recht stark an andere Programmiersprachen annähert, habe ich, bevor ich groß mit meinem eigentlichen Problem (dann im SPS-Forum) aushole, erstmal eine Vorab-Frage um Missverständnisse meinerseits auszuschließen:
Stimmt das so:
Eine while-Schleife der Form "While Eingang=1 Do Ausgang=1" bewirkt, dass der Ausgang 1 ist, so lange der Eingang 1 ist. Wird der Eingang danach zu 0, wird auch der Ausgang zu 0.
Falls es nicht stimmt wäre es nett, wenn mir jemand meinen Fehler aufzeigen könnte.
Danke und Gruß,
Frank
ich bin gerade am Anfang einer Unterrichtsreihe über SCL in Step 7. Da sich SCL recht stark an andere Programmiersprachen annähert, habe ich, bevor ich groß mit meinem eigentlichen Problem (dann im SPS-Forum) aushole, erstmal eine Vorab-Frage um Missverständnisse meinerseits auszuschließen:
Stimmt das so:
Eine while-Schleife der Form "While Eingang=1 Do Ausgang=1" bewirkt, dass der Ausgang 1 ist, so lange der Eingang 1 ist. Wird der Eingang danach zu 0, wird auch der Ausgang zu 0.
Falls es nicht stimmt wäre es nett, wenn mir jemand meinen Fehler aufzeigen könnte.
Danke und Gruß,
Frank
- Oberwelle
- Beiträge: 8770
- Registriert: Montag 4. April 2005, 17:54
Moin Frank,
ich kenne die Siemens Befehle nicht,
bei Bosch hätte es so ausgesehen:
U E0.0
= A0.0
bewirkt das der Ausgang wie der Eingang gesetzt wird, insofern der Abschnitt auch durchlaufen wird..
U E0.0
S A0.0
bewirkt das der Ausgang gesetzt wird, bist der Befehl zum rücksetzten kommt ( R A0.0 )
Grüße OW
ich kenne die Siemens Befehle nicht,
bei Bosch hätte es so ausgesehen:
U E0.0
= A0.0
bewirkt das der Ausgang wie der Eingang gesetzt wird, insofern der Abschnitt auch durchlaufen wird..
U E0.0
S A0.0
bewirkt das der Ausgang gesetzt wird, bist der Befehl zum rücksetzten kommt ( R A0.0 )
Grüße OW
.
Ich kann über die Richtigkeit / Vollständigkeit meiner Angaben keine Gewähr übernehmen. Immer alle Vorschriften beachten !
Ich kann über die Richtigkeit / Vollständigkeit meiner Angaben keine Gewähr übernehmen. Immer alle Vorschriften beachten !
-
- Null-Leiter
- Beiträge: 321
- Registriert: Dienstag 6. Februar 2007, 22:55
- MoaddiB
- Beiträge: 303
- Registriert: Mittwoch 27. Juni 2012, 23:00
- Wohnort: Langerwehe
- Kontaktdaten:
-
- Null-Leiter
- Beiträge: 49
- Registriert: Mittwoch 28. August 2013, 13:39
Stimmt genau. Am Ende muß aber ein End_While hin, allerdings steigt dir dann die SPS mit Fehler Zyklusüberwachung aus, da die Schleife solange durchlaufen wird, wie Eingang = 1.Frank12NR hat geschrieben:Hallo zusammen,
ich bin gerade am Anfang einer Unterrichtsreihe über SCL in Step 7. Da sich SCL recht stark an andere Programmiersprachen annähert, habe ich, bevor ich groß mit meinem eigentlichen Problem (dann im SPS-Forum) aushole, erstmal eine Vorab-Frage um Missverständnisse meinerseits auszuschließen:
Stimmt das so:
Eine while-Schleife der Form "While Eingang=1 Do Ausgang=1" bewirkt, dass der Ausgang 1 ist, so lange der Eingang 1 ist. Wird der Eingang danach zu 0, wird auch der Ausgang zu 0.
Falls es nicht stimmt wäre es nett, wenn mir jemand meinen Fehler aufzeigen könnte.
Danke und Gruß,
Frank
In der S7 Welt brauch man weit weniger Schleifen als sonst, da die Bausteine meist zyklisch aufgerufen werden, somit ist das auch immer bissle heikel.
Nüchtern betrachtet war es besoffen besser.
-
- Null-Leiter
- Beiträge: 3
- Registriert: Donnerstag 25. September 2014, 17:17
vieleicht kann ich da als Informatiker weiterhelfen.Frank12NR hat geschrieben: Eine while-Schleife der Form "While Eingang=1 Do Ausgang=1" bewirkt, dass der Ausgang 1 ist, so lange der Eingang 1 ist. Wird der Eingang danach zu 0, wird auch der Ausgang zu 0.
while bla=1 do blubb=3
heisst übersetzt:
solange bla 1 ist setzte blubb auf 3
-
- Null-Leiter
- Beiträge: 360
- Registriert: Samstag 24. Juni 2006, 10:02
Was wiederum (mit Verlaub) "hinrissig" ist, denn es läuft auf eine Endlosschleife hinaus. Eine "sinnvolle" Schleife muss im Rumpf die Abbruchbedingung beeinflussen können, sonst ist das ganze Quatsch, außer Du willst das System bewusst reaktionsunfähig machen.StreckerStefen hat geschrieben:vieleicht kann ich da als Informatiker weiterhelfen.
while bla=1 do blubb=3
heisst übersetzt:
solange bla 1 ist setzte blubb auf 3
Sinnvoll wäre z.B.
Setze x auf 1
Solange x < 100
: x auf Drucker ausgeben
: x um 2 erhöhen
Ende
So ein Programm würde beispielsweise alle ungeraden Zahlen bis 100 ausdrucken. Nur weil x innerhalb des Schleifenrumpfes verändert wird, kann sich der Aussagewert der Abbruchbedingung (x < 100) über der Zeit ändern. Könnte er das nicht, hätte man eine Endlosschleife...
Funky
Das hier ist glaube ich deutlich "hinrissiger" (?) als das im Beitrag obendrüber.Funkenschlosser hat geschrieben:Was wiederum (mit Verlaub) "hinrissig" ist, denn es läuft auf eine Endlosschleife hinaus. Eine "sinnvolle" Schleife muss im Rumpf die Abbruchbedingung beeinflussen können, sonst ist das ganze Quatsch, außer Du willst das System bewusst reaktionsunfähig machen.
Das was StreckerStefen geschrieben hat ergibt sehr wohl Sinn, z.B. wenn der Wert von bla von einem externen Signal beeinflusst wird. Oder wenn es auf dem System mehrere parallel ablaufende Threads gibt, die den Wert von bla beeinflussen können.
-
- Null-Leiter
- Beiträge: 49
- Registriert: Mittwoch 28. August 2013, 13:39
Die Frage ist immer wozu die Schleife dient bzw. was ich womit programmieren will.
In der SPS muß man mit solchen Sachen höllig aufpassen, besser ist da eine for Schleife mit einer festgelegten Anzahl an Durchläufen. Die SPS läuft ja eh immer in einer Dauerschleife, da würde es dann auch ein
machen.
Solange die zwei Bedingungen gegeben sind wird der Ausgang true, ansonsten ist er false.
Wenn ich zbsp. von c# auf eine SPS zugreifen möchte und mir das selber stricken will muß ich die SPS dauerhaft pollen, dh. ich muß zu der SPS eine Verbindung aufbauen und dann immer wieder lesen, in einem separaten Thread ist das kein Problem und dann läuft da halt die Schleife solange ich eine Verbindung auf die SPS habe.
In der SPS muß man mit solchen Sachen höllig aufpassen, besser ist da eine for Schleife mit einer festgelegten Anzahl an Durchläufen. Die SPS läuft ja eh immer in einer Dauerschleife, da würde es dann auch ein
Code: Alles auswählen
Ausgang1=: (Zahl = 1) AND Eingang1;
machen.
Solange die zwei Bedingungen gegeben sind wird der Ausgang true, ansonsten ist er false.
Wenn ich zbsp. von c# auf eine SPS zugreifen möchte und mir das selber stricken will muß ich die SPS dauerhaft pollen, dh. ich muß zu der SPS eine Verbindung aufbauen und dann immer wieder lesen, in einem separaten Thread ist das kein Problem und dann läuft da halt die Schleife solange ich eine Verbindung auf die SPS habe.
Nüchtern betrachtet war es besoffen besser.