# Schrittketten in SCL



## Jitter (28 Oktober 2014)

Hallo Forum,

wie sieht eigentlich eine Schrittkette in SCL aus? Was sind pro / con´s?
Ich kenne Schrittketten mit Sprungleiste in AWL oder die variante die ich ich gerade in meiner Firma verwende mit SR (was mir gar nicht gefällt!)

Welche Möglichkeiten gibt es noch eine anschaulich und strukturierte Art Schrittketten zu programmieren??

THX


----------



## Larry Laffer (28 Oktober 2014)

Hallo,
du könntest z.B. mit IF - ELS_IF arbeiten.
Oder mein Favourit SELECT.
Vielleicht schaust du dir zu beiden mal die SCL-Hilfe an und versuchst mal etwas damit umzusetzen ...

Gruß
Larry


----------



## Blockmove (28 Oktober 2014)

Schrittkette = S7-Graph
Übersichtlicher geht es kaum mehr

Wenn es denn SCL sein soll, dann ist - wie auch Larry schreibt - Select eine brauchbare Wahl.
Diese Variante ist auch vergleichbar zu AWL Sprungleiste.

Gruß
Dieter


----------



## Schaefchen (2 November 2014)

Eigentlich hat eine Schrittkette in SCL, ST oder AWL im Betrieb mehr Nach- wie Vorteile meiner Meinung nach! Für mich ist SCL immer noch eine der liebsten Arten des Programm-Erstellens. Aber allein die Übersicht betreffend Fehlersuche oder fehlender Bedingung im Ablauf ist...naja 




Optisch:

If X & Y & not Merker2 then
   Merker := True;
End_If;

If A & B & not Merker3 then
   Merker2 := True;
End_If;
...

z.B.

Wenn ich mir jetzt vorstelle, dass du mehrere Bedingungen (7...8...oder mehr) pro Schritt hast und einige Schritte...:shock::shock::shock:
Dann lieber Graph (zur Not KOP oder FUP mit SR-Gliedern)!

MfG Micha


----------



## vierlagig (2 November 2014)

das alle auf SELECT einschwenken ist dir schon aufgefallen, oder?!


----------



## D-Platoon (3 November 2014)

Also meine Schrittketten in ST/SCL mach ich immer mit der CASE-Anweisung:

```
CASE mi_Step OF   
    0:    (* Init *)
        ob_Busy := FALSE;
        mi_Step := 10;


    10:    (* wait for execution command *)
        IF ib_Start THEN
        ob_Busy := TRUE;
        mi_Step := 1000;
...


END_CASE;
```


----------



## MasterOhh (3 November 2014)

Jupp, CASE ist auch bei mir das Mittel der Wahl wenn ich Schrittketten in ST erstelle. Bei Steuerungen die Enumeratoren erlauben kann man so auch gleich die Schritte benennen.


----------



## SanjaDO (3 November 2014)

Hier eine sehr übersichtliche Methode:


```
#Timer1(IN:=#SM[1],PT:=T#10s);

IF #SM[1] THEN
  IF #Start THEN
  #SM[1]:=0;
  #SM[2]:=1;
  ELSIF #Fehler THEN
  #SM[1]:=0;
  #SM[20]:=1;
  END_IF;
END_IF;

#Timer2(IN:=#SM[2],PT:=T#10s);

IF #SM[2] THEN
  IF #Timer2.Q THEN
    #SM[2]:=0;
    #SM[3]:=1;
  ELSIF #Fehler THEN
    #SM[2]:=0;
    #SM[20]:=1;
  END_IF;
END_IF;

#Timer3(IN:=#SM[3],PT:=T#3s);

IF #SM[3] THEN
  IF #Behaelterdruck <= 2.0 and #Timer3.Q THEN
    #SM[3]:=0;
    #SM[4]:=1;
  ELSIF NOT #Start OR #Fehler THEN
    #SM[3]:=0;
    #SM[20]:=1;
  END_IF;
END_IF;
```

Timer1, Timer2 und Timer3 sind vom Typ TON_TIME oder TON bei alten 300er CPU's
schrittmerker sm[x] ist ein array von typ BOOL


----------



## MasterOhh (3 November 2014)

Schrittmerker sind in FUP noch gut und schön, weil es da anders nur schlecht geht. Aber wenn man schon SCL verwendet sollte man die dort gebotenen Steuerstrukturen verwenden. Und Schrittzähler haben nun mal den Vorteil, das sie immer nur einen einzigen Wert haben können.


----------



## D-Platoon (3 November 2014)

> Hier eine sehr übersichtliche Methode.


Die Übersichtlichkeit lasse ich jetzt mal dahingestellt. Aber wenn man nicht aufpasst ist es durchaus möglich, dass man in zwei Schritten gleichzeitig steckt (z.B. wenn man vergisst irgendwo einen Schritt zurückzusetzen, oder wenn man die Schrittkette zurücksetzt). Das kann bei einem INT als "Schrittmerker" nicht passieren.

Der Vorteil an deiner Lösung ist, dass man den direkt in KOP/FUP adaptieren kann.

Edit: Mist, da war wohl jemand schneller


----------



## SanjaDO (3 November 2014)

Natürlich darf man nichts vergessen (Schritte zurücksetzen)!! Manchmal ist es sogar erforderlich, dass zwei oder mehrere Schritte aktiv sind (z. B. bei Parallelverzweigung).


----------



## D-Platoon (3 November 2014)

> Manchmal ist es sogar erforderlich, dass zwei oder mehrere Schritte aktiv sind (z. B. bei Parallelverzweigung).



Okay, da kommen wir jetzt zu Programmierphlisophieen. Ich persönlich finde das richtig ekelhaft, weil man sich dadurch beim Debuggen unter Umständen einen Wolf suchen kann. Da könnte ich dem Programmierer ins Gesicht springen.
Prarallelverzweigungen halte ich nur für sinnvoll, wenn man in einer Ablaufsprache (AS/Graph) arbeitet. Da sieht man es dann auch auf den ersten Blick.

Bitte nicht persönlich nehmen: Das ist nur meine eigene Meinung!


----------



## SanjaDO (3 November 2014)

Stimmt! Ohne einer vernünftigen Schrittkettendokumentation ist es sehr schwierig!


----------

