-> Hier kostenlos registrieren
Hallo zusammen,
mich interessiert eure Meinung, wann es sinnvoll wäre SCL einzusetzen. Bei der folgenden Aufgabe stellten wir fest (http://www.sps-forum.de/programmierstrategien/69608-ablaufkette-und-schiebefunktion.html), das die Lösung fehlerhaft bzw nicht vollständig ist.
Da sich die Codes in den Lösungen in den Netzwerken nahezu wiederholen, dachte ich an etwas abgespecktes und das es auch eine schöne Aufgabe ist um SCL zu lernen.
Hier meine Lösung:
Kritik und Anregungen, wie man es besser machen könnte, ist erwünscht. Macht hier ein SCL-Code Sinn oder kann man es mit AWL eleganter lösen?
Viele grüße Evo
mich interessiert eure Meinung, wann es sinnvoll wäre SCL einzusetzen. Bei der folgenden Aufgabe stellten wir fest (http://www.sps-forum.de/programmierstrategien/69608-ablaufkette-und-schiebefunktion.html), das die Lösung fehlerhaft bzw nicht vollständig ist.
Da sich die Codes in den Lösungen in den Netzwerken nahezu wiederholen, dachte ich an etwas abgespecktes und das es auch eine schöne Aufgabe ist um SCL zu lernen.
Hier meine Lösung:
Code:
FUNCTION_BLOCK FB101
VAR
b : INT := 1;
a : WORD;
END_VAR
VAR_INPUT
//Eingangsparameter
IN:WORD;
STOP : BOOL;
END_VAR
VAR_OUTPUT
//Ausgangsparameter
OUT : WORD;
END_VAR
// Anweisungsteil
// Berechnet IN mit b.
// Beispiel: 0000 1000 UND 0000 1000 = 0000 1000 --> Ausgang soll nach der IF-Anweisung geschaltet werden
// Beispiel: 0000 1000 UND 0000 0111 = 0000 0000 --> Ausgang soll nach der IF-Anweisung nicht geschaltet werden
// Das Ergebnis wird für die IF Anweisung gebraucht um so festzustellen, das in der richtigen Reihenfolge geschaltet wird
a := IN AND INT_TO_WORD(b);
IF INT_TO_WORD(b) = a THEN
OUT := IN OR OUT;
b := WORD_TO_INT(SHL (IN := INT_TO_WORD(b), N := 1));
END_IF;
IF STOP THEN
OUT := 0;
b := 1;
END_IF;
END_FUNCTION_BLOCK
Kritik und Anregungen, wie man es besser machen könnte, ist erwünscht. Macht hier ein SCL-Code Sinn oder kann man es mit AWL eleganter lösen?
Viele grüße Evo