# Schritt für Schritt Abfrage



## SORB (10 Februar 2009)

Hallo, 

Ich suche rat zu einem Schritt für Schritt Ablauf.
Programmiert wird mit Codesys

Die Idee ist, ein "dummer" Ablauf, am liebsten in AS.


Die Funktionsblöcke setzen mittels einer ST Merker, welche in einer KOP programmierung verwendet werden, um Ausgänge anzusteuern.

(* X1*)
 IF LIFT.SFCCurrentStep='Step1' THEN
  X1:=TRUE;
 ELSE
  X1:=FALSE;
 END_IF;

Das alles soll der Übersichtlichkeit dienen.

Meine Frage ist nun, ob jemand zb eine Eingangs-/Ausgangsfunktion, welche den Sprung zum nächsten Step erlaubt?
Oder eine noch simplere Lösung?

Danke und Grüsse


----------



## Larry Laffer (11 Februar 2009)

Hallo,
da gibt es mehrere Möglichkeiten (wie immer).

Auf Basis von IF..THEN z.B. :
	
	



```
IF Schritt_1 and eine_Weiterschaltbedingung then
   Schritt_1 := false ;
   Schritt_2 := true ;
   etwas_machen := 1213 ;
ELSIF Schritt_2 and andere_Weiterschaltbedingung then
   Schritt_2:= false ;
   Schritt_3 := true ;
   etwas_machen := 4711 ;
ELSIF Schritt_3 and weitere_Weiterschaltbedingung then
   Schritt_3:= false ;
   Schritt_1 := true ;
   etwas_machen := 0815 ;
END_IF ;
```
sehr schön geht das aber auch mit einer Zählvariablen für die Schrittkette und in der Umsetzung dann mit einem CASE-Kontrukt ... aber du wolltest ja etwas auf Merker-Basis ...

Gruß
LL


----------



## trinitaucher (11 Februar 2009)

Oder mit CASE-Anweisung

```
CASE iSchritt OF
1: IF bWeiterschaltbedingung1 THEN
        ...
        iSchritt := 2;
    END_IF
2: IF bWeiterschaltbedingung2 THEN
        ....
        iSchritt := ....;
    END_IF
...
END_CASE
```


----------



## SORB (11 Februar 2009)

Hallo

Danke für die schnelle Antwort..
Nur leider bringt mich das nicht weiter.
Denn der Schritt soll gewechselt werden, wenn dieser beendet ist, OHNE eine weitere variabel. 
habe etwas in dierser art bis vor kurzem hald nie gebraucht, dachte mir aber immer das dies einfach sein muss.. wohl geirrt

grüsse


----------



## Garog (15 Februar 2009)

ich weiß nicht ob ich dein problem so ganz verstanden habe. die problembeschreibung ist irgendwie etwas "zerhackt" 


```
IF LIFT.SFCCurrentStep='1' THEN
X1:=TRUE;
Step:=1
 IF "das was passieren sollte" THEN
      Step:=2;
   END_IF;
ELSE
X1:=FALSE;
Step:=3
 IF "das was passieren sollte" THEN
      Step:=4;
   END_IF;
END_IF;
```

so hast du in deinem Step immer stehen wo du dich gerade befindest und kannst diesen als weiterschaltbedingung nehmen.

beschreibe doch bitte mal genauer was du meinst


----------



## zotos (15 Februar 2009)

Larry Laffer schrieb:


> ... aber du wolltest ja etwas auf Merker-Basis ...



Ich denke er will die Schrittkette in AS Programmieren und weder zu einer Merkerschrittkette noch zu einer Case greifen.

Aber wo das Problem denn nun ich habe ich echt nicht verstanden. Also lieber Fragesteller bitte erklär nochmal was Du machen willst.

---
Ich bin mir gerade echt nicht sicher ob das zu der Frage Passt aber ich hab ja auch nicht den Eindruck Dich verstanden zu haben.

1) Du könntest Ja einfach IEC Schritte verwenden und anstatt Deiner ST Anweisung einfach eine Boolvariable Nichtspeichernd beschalten.

2) Anstelle von: 


> IF LIFT.SFCCurrentStep='Step1' THEN
> X1:=TRUE;
> ELSE
> X1:=FALSE;
> END_IF;


würde ja auch 
	
	



```
X1:=  LIFT.SFCCurrentStep = 'Step1';
```
funktionieren.


----------



## SORB (15 Februar 2009)

halliii hallooo liebe mitschwitzer..

naja,hab das problem jetzt gelöst..leidernicht so wie ich es vorhatte..
auf jedenfall gibts jetzt ne schrittkette und die bedingung für das weiterlaufen, ist in einer KOP drin, also ein NEXTSTEP_?? BOOL wird gebraucht..
und definiert ist immernoch in AS wie schon gehabt..

Grüsse


----------



## Larry Laffer (15 Februar 2009)

... ich bin aus deinen Angaben jetzt auch nicht viel schlauer geworden - ich reihe mich da also bei *Zotos* mit ein.
Auf jeden Fall braucht eine Schrittkette IMMER eine Weiterschalt-Bedingung - sonst ist es nämlich eher eine Durchlauf-Kette. Die Weiterschaltbedingung wäre dann erfüllt, wenn dein Schritt (wie auch immer) abgearbeitet ist - also z.B. ein Endschalter angefahren wurde.

Gruß
LL


----------



## Garog (18 Februar 2009)

SORB würdest du deinen funktionierenden Programmcode mal posten, so dass man die Lösung des unbekannten Rätsels hat ?! 

Danke


----------

