SR in SCL

Zuviel Werbung?
-> Hier kostenlos registrieren
Ich behaupte die SR Funktion in SCL verstanden zu haben. Um das zu überprüfen lege ich noch mal eine Schüppe drauf. Habe nun eine Beispielanwendung, die zusätzlich eine Ein- und Ausschaltverzögerung beinhaltet. Zur Veranschaulichung in FUP und SCL nach meinem bisherigen Verständnis programmiert.

Würde mich interessieren ob das so korrekt geschrieben/programmiert ist.

Anhang anzeigen 88225
Auflösung: Ist es nicht!

Dein FUP-Code setzt Ausgang_1 erst dann, wenn deine Eingänge gleichzeitig für 3s True sind.
Dein SCL-Code speichert den Zustand Eingang_1 AND Eingang_2 und wenn das True ist, wird drei Sekunden später Ausgang_1 gesetzt. Dabei ist es egal, ob zwischenzeitlich Eingang_2 wieder auf False gesetzt wurde.
Dein SCL-Code würde in FUP so aussehen:
1749651436735.png
 
Code:
// Ausgang setzen
IF ("Eingang 1" OR "Eingang 2") AND ("Eingang 3" AND NOT "not aus")
THEN "Ausgang 1" := TRUE;
 // Ausgang rücksetzen
ELSIF NOT "Eingang 3" OR "not aus"
THEN "Ausgang 1" := FALSE;
END_IF;

Ich bin gespannt auf eure Antworten und offen für Alternativen.
Dein Code funktioniert zwar, aber ist fehleranfällig, weil Du "Eingang 3" und "not aus" doppelt verknüpfeln musst und auch noch invertiert, da schleicht sich schnell ein Fehler ein. Besser wäre:

Code:
IF NOT "Eingang 3" OR "not aus"
THEN "Ausgang 1" := FALSE; // Ausgang rücksetzen
ELSIF ("Eingang 1" OR "Eingang 2")
THEN "Ausgang 1" := TRUE; // Ausgang setzen
END_IF;

also Rücksetzdominant mit IF/ELSIF programmierst Du "andersrum" wie in AWL...
 
Dann sieht das zuletzt genannte Beispiel als IF THEN ELSIF Anweisung also so aus:
SR Funktion mit Zeitgliedern in SCL mit IF THEN ELSIF Anweisung.png

und ohne IF THEN Anweisungen dann so:
SR Funktion mit Zeitgleidern in SCL ohne IF THEN Anweisung.png

Sollte das nicht stimmen korrigiert mich gerne.
Anderenfalls lasse ich das hier so stehen als Abschluss für das Thema.

Ich bedanke mich noch mal ganz herzlich für eure reichliche Unterstützung!
 
Zum Abschluss noch ein kleiner Blick über den Siemens-Tellerrand:
In der Beckhoff-Welt kann man mit den ExST-Zuweisungen Variablen direkt setzen und zurücksetzen:
Code:
#Out S= #SetBedingung;
#Out R= #ResetBedingung;

 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
#Out S= #SetBedingung;
#Out R= #ResetBedingung;
Tatsächlich hatte ich damit aber schon Probleme, dass die Bedingung nicht gesetzt wurde. Beim debuggen mit dem durchtackern im Einzelschrittbetrieb hat es immer funktioniert, nur nicht im kontinuierlichen Ablauf.
Das lag vermutlich daran, dass ich als Setzbedingung einen Rückgabeparameter einer Methode oder Funktion hatte. Ich verwende aktuell die 4024.66 XAE mit einer 4026.15.121 XAR. Ich setze daher bevorzugt das IF-ELSE-Konzept für SR ein.

Die Gefahr bei dem Konzept ist auch, dass es unübersichtlich wird, da man die Zuweisungen im ganzen Programm verteilen kann, und der Code dann schwerer Lesbar ist.
 
Q := (Q OR S) AND NOT R1;

Wer erkennt da denn da direkt ein SR-Glied??? ---
Man kann diese Zauberformel oder z.Bsp. auch die "if"-Version in einen FB verpacken und erhält dadurch eine verständliche und idiotensichere Version für alle Darstellungsarten. Den Status in den statischen Lokaldaten sichern und auf den Out "Q" ausgeben. Leicht weniger idiotensicher mit "Q" als InOut auch als FC realisierbar.

Code:
// #Q := #QS := (#QS AND NOT #R) OR #S;
#RS(R := "R",
    S := "S",
    Q => "Q1");

// #Q := #QS := (#Q OR #S) AND NOT #R;
#SR(S := "S",
    R := "R",
    Q => "Q2");
 
Man kann diese Zauberformel oder z.Bsp. auch die "if"-Version in einen FB verpacken und erhält dadurch eine verständliche und idiotensichere Version für alle Darstellungsarten. Den Status in den statischen Lokaldaten sichern und auf den Out "Q" ausgeben. Leicht weniger idiotensicher mit "Q" als InOut auch als FC realisierbar.

Code:
// #Q := #QS := (#QS AND NOT #R) OR #S;
#RS(R := "R",
    S := "S",
    Q => "Q1");

// #Q := #QS := (#Q OR #S) AND NOT #R;
#SR(S := "S",
    R := "R",
    Q => "Q2");
gibts bei TIA in irgend ner Bibliothek keinen fertigen SR-Baustein mitgeliefert? 🤔
 
Man kann Vieles machen.
Aber jetzt mal unter uns Pastorentöchtern: Das ist eine so simple Aufgabe, dass ich es schon etwas kurios finde, dass man dafür nach einem separaten Baustein fragt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn man so arbeitet, kommt man der JavaScript-Welt sehr nah. Bei JavaScript werden Module von Drittanbietern genutzt, dessen Code sehr kurz und trivial ist. Selbst wenn man die Module nicht direkt nutzt, kann man sich diese Abhängigkeiten durch andere Module ins Projekt holen.
 
Man kann Vieles machen.
Aber jetzt mal unter uns Pastorentöchtern: Das ist eine so simple Aufgabe, dass ich es schon etwas kurios finde, dass man dafür nach einem separaten Baustein fragt.
geht ja nicht wirklich um einen separaten Baustein sondern um ein einfaches setze/rücksetze in SCL so wie früher in AWL oder wie in Codesys
 
Zurück
Oben