# For Schleife SCL



## Gucky_av (19 September 2012)

Hallo,
 mein anliegen ist folgendes
 IN SCL schreibe ich in einem FB
 mit PLCM Sim getestet

 FOR i := 1 TO 100 BY 1 DO
    z1:=z1: +1;
 END_FOR;

 Ergebnis Ist
 z1 zählt endlos hoch
 i geht bis auf 100

 meine Eklärung
 FB wird durch OB1 zyklisch aufgerufen--> dadurch wird immer wieder die“ i“ Variable von 0 auf 100 hochgezähltà z1 zählt hoch.
Frage: Stimmt dies ?
Dadurch ist aber die For schleife nicht so zu gebrauchen wie ich das sehe.
Wie löst man die Aufgabe ein Programmteil soll nur X mal durch laufen werden wenn Bedingung erfüllt ist davor, mit einer For schleife ?


----------



## Deltal (19 September 2012)

Wie verhinderst du, dass die Schleife nur einmal aufgerufen wird? Jetzt wird ja jeden Zykluss die Forschleife aufgerufen.

Entweder die Schleife einmal aufrufen (dann z.B. mit einem merker sperren) oder die Z variable beim Schleifenstart auf 0 setzen.


----------



## Matze001 (19 September 2012)

```
FOR i := 1 TO 100 BY 1 DO
    
IF GESUCHT[i] := KÄSEKUCHEN THEN
    POS_KÄSEKUCHEN:=i;
EN_IF;

END_FOR;
```

Vielleicht sollte man soetwas so lösen?

Du hast ja schon dein i als Zählvariable!

Grüße

Marcel


----------



## Ralle (19 September 2012)

Dann doch lieber:


```
IF du_sollst_zaehlen THEN
   FOR i := 1 TO 100 BY 1 DO
      z1:=z1 +1;
   END_FOR;
   du_sollst_zaehlen := False;
END_IF;
```

Um ducht die For-Schleife zu laufen muß man (am besten mit einer Flanke) "du_sollst_zaehlen" auf True setzen.

Aber daran denken, keine Temp-Var dafür verwenden!


----------



## Matze001 (19 September 2012)

Ja ich hab nicht richtig gelesen! 

Ich habe es so verstanden, dass er die Stelle sucht an der er einen Treffer in der Forschleife hat.

Grüße

Marcel


----------



## Gucky_av (19 September 2012)

Danke für die Beiträge,
das was mich erschreckt hat ist das, das die For Schleife immer wieder durchlaufen wird anstatt einmal bei einer Flanke  beim Aufruf. ( Es muss also zusätzlich was geschaffen werden)
Der Beitrag von Ralle sehe ich auch als Lösungsweg. Ich dachte ich liege mit diesem Lösungsweg nicht so günstig


----------



## Tigerente1974 (19 September 2012)

Es kommt ja auch immer darauf an, was Du machen willst. Die Lösung von Marcel liefert z.B. den letzten Treffer, falls es mehrere gibt.

Es kann auch gewünscht sein, dass die Schleife zyklisch nach einem Treffer sucht.

Wenn man die Formulierung 





> ein Programmteil soll nur X mal durch laufen werden wenn Bedingung erfüllt ist


 beachtet, gehört in die Anweisung noch ein Schleifenabbruch mit "EXIT".


----------

