Funktion While-Schleife (in Step7)

Hier kommt alles rein was mit Programmieren zu tun hat ( HTML, Java, Perl etc. )
Antworten
Frank12NR
Null-Leiter
Beiträge: 321
Registriert: Dienstag 6. Februar 2007, 22:55

Funktion While-Schleife (in Step7)

Beitrag von Frank12NR »

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
Benutzeravatar
Oberwelle
Beiträge: 8770
Registriert: Montag 4. April 2005, 17:54

Beitrag von Oberwelle »

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 kann über die Richtigkeit / Vollständigkeit meiner Angaben keine Gewähr übernehmen. Immer alle Vorschriften beachten !
Frank12NR
Null-Leiter
Beiträge: 321
Registriert: Dienstag 6. Februar 2007, 22:55

Beitrag von Frank12NR »

Hi Oberwelle,
danke, aber mit AWL hat mein Problem nichts zu tun ;)

Die Frage oben bezieht sich auf eine allgemeine While-Schleife, wie sie in ziemlich vielen Programmiersprachen möglich ist. Das konkrete Step7-Problem kommt dann im Anschluss.

Gruß,
Frank
Benutzeravatar
MoaddiB
Beiträge: 303
Registriert: Mittwoch 27. Juni 2012, 23:00
Wohnort: Langerwehe
Kontaktdaten:

Beitrag von MoaddiB »

Hallo Frank,
Schaue dir im Zweifelsfall einmal eine Pascal-Befehlsliste an.
Ich bin selbst noch nicht so weit dir da zu helfen,
die Befehle sollten aber alle an Pascal angelehnt sein
Bapho
Null-Leiter
Beiträge: 49
Registriert: Mittwoch 28. August 2013, 13:39

Beitrag von Bapho »

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
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.
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.
StreckerStefen
Null-Leiter
Beiträge: 3
Registriert: Donnerstag 25. September 2014, 17:17

Beitrag von StreckerStefen »

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.
vieleicht kann ich da als Informatiker weiterhelfen.
while bla=1 do blubb=3
heisst übersetzt:
solange bla 1 ist setzte blubb auf 3
Funkenschlosser
Null-Leiter
Beiträge: 360
Registriert: Samstag 24. Juni 2006, 10:02

Beitrag von Funkenschlosser »

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
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.

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
der Alphabetische

Beitrag von der Alphabetische »

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 hier ist glaube ich deutlich "hinrissiger" (?) als das im Beitrag obendrüber.

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.
Bapho
Null-Leiter
Beiträge: 49
Registriert: Mittwoch 28. August 2013, 13:39

Beitrag von Bapho »

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

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.
Antworten