# For Schleif Strukturierter Text



## bluebird277 (28 Januar 2010)

Hallo zusammen,
arbeite mich gerade in ST ein und frage mich warum die folgende Schleife bis 101 zählt und dann der Anweisungsteil nie gestoppt wird. Der Zähler läuft dauernd hoch und stoppt nie.

FOR i:= 1 TO 100 BY 2  DO
achsposition:=achsposition+1;

END_FOR

wie kann ich einen anweisungsteil exakt 100 mal durchführen und dann die Schleife stoppen bis manuell der Wert i auf 0 gesetzt wird.

Danke für eure Hilfe


----------



## vierlagig (28 Januar 2010)

bluebird277 schrieb:


> und frage mich warum die folgende Schleife bis 101 zählt



danke, you made my day!

also ... erster durchlauf i = 1 ... zweiter durchlauf i = 3 ... dritter durchlauf i = 5 ... neunundvierzigster durchlauf i = 99 ... fuffzigster durchlauf i = ??? richtig, 101


um auf hundert zu kommen empfehle ich die schrittweite 1 und einen geraden startwert, sowas abgefahrenes wie 0 zum beispiel


```
*
FOR i := 0 TO 99 BY 1 DO
[...]
END_FOR
```


----------



## bluebird277 (28 Januar 2010)

hallo vierlagig,

danke für deine schnelle antwort habe es jetzt wie von dir empfohlen gemacht


FOR i:= 0 TO 99  BY 1 DO
achsposition:=achsposition+1;
END_FOR

er zählt aber trotzdem immer weiter. Kann ich den nicht sagen dass er innerhalb einer For Schleife ein Ventil ansteuern soll wie z.B

If start then

FOR i:= 0 TO 99  BY 1 DO
If Grundstellung then
Ventil:=True;
elsif Arbeitsstellung then
Ventil:=False;
end_if

END_FOR

end_if


----------



## vierlagig (28 Januar 2010)

ja, natürlich, er zählt jetzt in jedem zyklus 100 weiter, nett, ne? 

die frage ist, was willst du tun? so richtig verstehe ich deinen ansatz nämlich nicht ...

aber so zu spielen: bau mal ne if achsenposition < 1000 for die schleife...


----------



## bluebird277 (28 Januar 2010)

ok was will ich tun gute Frage  Ich versuche es mal zu erklären
Habe eine Case Schrittkette in der Schrittkette wird eine Feder vereinzelt. 

Für einen kompletten werkstückträger brauche ich 6 Federn. Aber jede Feder an einer anderen NC Position. Sprich Schrittkette Start Position anfahren Feder vereinzeln. Beim nächsten Start neue Achsposition anfahren Feder vereinzeln usw.
Die Positionen habe ich in einem Array von 0-14 Abgespeichert. Da der Ablauf in der Schrittkette aber immer gleich ist ändert sich nur die Achsposition.

Somit möchte ich also bei jedem Schrittketten Start die nächste Achsposition im Array anfahren. 

Ich möchte also das mit eine For Schleife machen.

Sonst müsste ich so ne Lange Schrittkette schreiben und das bei Insgesamt bis zu 15 verschiedenen werkstücken alle mi tunterschiedlichen Achspositionen.

Hoffe es war verständlich für dich


----------



## trinitaucher (28 Januar 2010)

bluebird277 schrieb:


> Hallo zusammen,
> arbeite mich gerade in ST ein und frage mich warum die folgende Schleife bis 101 zählt und dann der Anweisungsteil nie gestoppt wird. Der Zähler läuft dauernd hoch und stoppt nie.
> 
> FOR i:= 1 TO 100 BY 2  DO
> ...


Abgesehen vom kleinen Logikfehler, den vierlagig schon korrigiert hat, macht die Anweidung mit FOR hier keinen Sinn. Die FOR-Schleife wird jeden Zyklus ausgeführt und hat zru Folge, dass jeden Zyklus der Wert für "achsposition" um 100 inkrementiert. Du hättest genauso gut schreiben können

```
achsposition:=achsposition+100;
```
Die SPS arbeitet doch schon zyklisch. Innerhalb der FOR-Schleife kannst du eh keinen Zustand einer Boolschen Eingangsvariable abfragen, da dessen Zustand sich während der Schleife nicht ändert.
Eigentlich nutzt man FORs nur um Arrays o.ä. in einem SPS-Zyklus durchzurattern.


----------



## trinitaucher (28 Januar 2010)

bluebird277 schrieb:


> Die Positionen habe ich in einem Array von 0-14 Abgespeichert. Da der Ablauf in der Schrittkette aber immer gleich ist ändert sich nur die Achsposition.
> 
> Somit möchte ich also bei jedem Schrittketten Start die nächste Achsposition im Array anfahren.


Einfach am Ende der Schrittkette:

```
achsposition := achsposition+1;
```
ggf. nach dem letzten Schritt zurücksetzen.



bluebird277 schrieb:


> Ich möchte also das mit eine For Schleife machen.


Macht hierfür keinen Sinn


----------



## bluebird277 (28 Januar 2010)

Hallo,

vielen dank für eure Hilfe hat mir sehr geholfen


----------

