Best practices - Sequenzen in SCL

DCDCDC

Level-3
Beiträge
1.784
Reaktionspunkte
369
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich bin gerade dabei einen Standard festzulegen, mit Graphketten kenne ich mich gut aus, aber mit Ketten in SCL bin ich nicht so bewandert.

Was sind eure best practices? Habt ihr einen FC den ihr in jedem Case aufruft mit Aktion und Transition? Wie realisiert ihr parallele Schritte? Wie realisiert ihr verschiedene Betriebsarten (Auto/HnT/Tippen)? Wie realisiert ihr eine Kette für die Grundstellungsfahrt (Ich möchte diese nur ausführen solange der Button gedrückt wird, ansonsten reset)?

Danke!
 
Mein "best practice" ist immer ein FB.
Hier habe ich je nach Gusto die Variante mit dem CASE oder aber genauso auch die Variante mit den einzelnen Schritt-"Merkern" (also Bools, die auch Variablen des FB sind).
Der komplette Ablauf inkl. der Zuweisungen auf Ausgänge (o.ä.) ist dann in dem FB umgesetzt.
Da ich dies meißtens Aggregate (oder Funktionsgruppen) bezogen aufziehe ist die Grundstellungsfahrt immer ein Teilzweig der Schrittkette - in jedem Ablauf steckt ja der Teil mit der Grundstellungsfahrt sowieso irgendwie mit drin. Diese fahre ich allerdings bis geschafft und nicht solange die Taste dafür gedrückt ist - das kann man natürlich auch machen, ist aber umständlicher und für mich war es nie sinnvoll.
Die Betriebsart macht wieder ein eigener Baustein und die Info der Betriebsart ist immer eine Eingangsbedingung in jeden Ablauf-Baustein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
FB mache ich natürlich auch, meine Betriebsarten hab ich schon, meine Subsysteme sind alle entkapselt mit eigenen Sequenzen und den passenden UDTs um diese zu feuern. Grundstellungsfahrt ist ja auch immer eine Philosophie, überlege nur wie ich es im CASE abgebildet bekomme, dass sobald die Taste weg ich wieder im Init lande.. ist halt Mehraufwand im Vergleich zum Graphen (Graph geht nicht da 1200er Steuerung(en))

Wenn ich das jetzt noch weiterdenke ist die Frage, wie realisiere ich Interlock, Zeitüberwachung, etc etc.. das wäre es wohl sinnvoll einen FC zu schreiben der das alles abbilden kann?

Möchte es halt so sauber und universell realisieren wie es möglich ist.
 
Wir benutzen für unsere SCL (und ST) Schrittketten einen FB.
Der FB verwaltet die Schrittkette und ermöglicht einige zusätzliche Funktionen.
Unter anderem sind dort diese Funktionen implementiert:
- Springe zu Init Schritt
- Betriebsarten: Hand, Auto, Tippbetrieb
- In Schritt Warten
- Watchdog Timer für Schritt
- Zero Operation (wie in Graph7)
- Aktuelle Zeit in Schritt, Aktuelle Zeit Schritt aktiv
- Schritt Bezeichnung, mit Historie (wie lang war in welchem Schritt...)
- N, L, D, P, Set, Reset ähnlich wie in Graph7


Ganz grob gesagt funktioniert das so:
- Die aktuelle Schrittnummer kommt aus einem Output, des Schrittketten FBs (oNr)
- Die gewünschte, nächste Nummer (in Weiterschaltbedingung) geht in einen Input des FBs (iNextNr)
- Der FB macht die Logik ;)
z.B.
Code:
CASE #Sk1.oNr OF
    0:
        (*Deklaration*)
        #Sk1.iBezeichnung := 'Init Schritt';
        (*Funktion*)
        (*WSB*)
        #Sk1.iNextNr := 10;
        
     10:
        (*Deklaration*)
        #Sk1.iBezeichnung := 'Ein Schritt';
        #Sk1.iWatchdogTime := t#20s;
        (*Funktion*)
        "Datenbaustein_1".EinAktor.Hoch:=true;
        (*WSB*)
        IF "Datenbaustein_1".EinAktor.IstOben THEN
            #Sk1.iNextNr := 20;
        END_IF;
        
...
 
Zurück
Oben