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:
Zurück
Oben