Step 7 SCL lernen und verstehen

Zuviel Werbung?
-> Hier kostenlos registrieren
aber mal grundsätzlich verlangt SCL viel mehr Disziplien beim sauberen und verständlichen Programmieren.

Bei AWL vermeide ich schon perse zu viele Sprünge, da die händischen Sprungmarken nerven.

SCL verleitet zu IF THEN ELSE Orgien und zu mehrzeiligen AND/OR/KLAMMER-Monstern...

Gruß.
 
Ich hab mich schon oft gefragt warum es in SCL nicht sowas wie eine „setzende“ Zuweisung gibt. Gibts das in anderen Programmiersprachen?
Also zB Tag_1 S= Tag_2 statt dem IF-3-Zeiler.
Die kombinierten Zuweisungen x= funktionieren nach dem Schema:
Tag_1 x= Tag_2; entspricht Tag_1 := Tag_1 x Tag_2; (x: + - * /)

S= würde da schlecht dazu passen. OK, man könnte festlegen, daß S= dem S in AWL entsprechen soll. Das S kann man aber schon deutlich verständlicher als IF..THEN-1-Zeiler schreiben:
IF Tag_2 THEN Tag_1 := TRUE; END_IF;

AWL S + R kann man so in SCL programmieren:
Code:
U B
S A
...
U C
R A


IF B THEN A := TRUE; END_IF;
...
IF C THEN A := FALSE; END_IF;

Harald
 
Das S kann man aber schon deutlich verständlicher als IF..THEN-1-Zeiler schreiben:
IF Tag_2 THEN Tag_1 := TRUE; END_IF;

AWL S + R kann man so in SCL programmieren:
Code:
U B
S A
...
U C
R A


IF B THEN A := TRUE; END_IF;
...
IF C THEN A := FALSE; END_IF;

Harald
Auch wenn manns in eine Zeile schreiben kann, wirds trotzdem nicht weniger zu tippen 😉 aber OK, Strg+C Strg+V habens zum Glück ja im TIA noch nicht abgeschafft 😉
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auch wenn manns in eine Zeile schreiben kann, wirds trotzdem nicht weniger zu tippen 😉 aber OK, Strg+C Strg+V habens zum Glück ja im TIA noch nicht abgeschafft 😉
Ach komm schon, der Einzeiler von Harald überfordert nun auch niemanden. ;-)
 
Die kombinierten Zuweisungen x= funktionieren nach dem Schema:
Tag_1 x= Tag_2; entspricht Tag_1 := Tag_1 x Tag_2; (x: + - * /)

S= würde da schlecht dazu passen. OK, man könnte festlegen, daß S= dem S in AWL entsprechen soll. Das S kann man aber schon deutlich verständlicher als IF..THEN-1-Zeiler schreiben:
IF Tag_2 THEN Tag_1 := TRUE; END_IF;

AWL S + R kann man so in SCL programmieren:
Code:
U B
S A
...
U C
R A


IF B THEN A := TRUE; END_IF;
...
IF C THEN A := FALSE; END_IF;

Harald



sollte doch auch so funktionieren oder?

Code:
a := a OR b;

a := a AND NOT c;


Lesbarkeit mal dahingestellt :D

-chris
 
Zuviel Werbung?
-> Hier kostenlos registrieren
sollte doch auch so funktionieren oder?

Code:
a := a OR b;

a := a AND NOT c;


Lesbarkeit mal dahingestellt :D

-chris
Ja, siehe #16
Gibt es doch als 1-Zeiler:
A := A OR B ;

Zugabe:
Rücksetzen als 1-Zeiler:
A := A AND NOT B ;

Anmerkung: Kann man sinngemäss auch so in AWL programmieren, aber dort sind es dann 3-Zeiler.
Lesbarkeit? Wenn man AND, OR, NOT und := kennt, ist die durchaus gegeben. ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann mir mal jemand diese Funktion erklären?
Code:
1. IF oNIORutsche_eTeilSensor1 = true OR oNIORutsche_eTeilSensor2 = true THEN
    bTeilNIOAbwurfGesehen := true;
END_IF;

2. IF sc_auto_taste = 1 OR oMasch_eTastRundTFertigM = true OR oDebug_Rund_Abbarbeit = true THEN
    oDebug_Rund_Abbarbeit := false;
    bLeerfahrtRundtischAktiv := true;
    sc_auto_taste := 0;
elsIF sc_auto_taste = 5 THEN
    bLeerfahrtLinearAktiv := true;
    sc_auto_taste := 0;        
END_IF;

2.
wird dann
Wenn Bedingung aus Zeile Then
ODebug... = 0
bLeerfahrt= 1
?
oder wie?
 
Kann mir mal jemand diese Funktion erklären?
Code:
1. IF oNIORutsche_eTeilSensor1 = true OR oNIORutsche_eTeilSensor2 = true THEN
    bTeilNIOAbwurfGesehen := true;
END_IF;

2. IF sc_auto_taste = 1 OR oMasch_eTastRundTFertigM = true OR oDebug_Rund_Abbarbeit = true THEN
    oDebug_Rund_Abbarbeit := false;
    bLeerfahrtRundtischAktiv := true;
    sc_auto_taste := 0;
elsIF sc_auto_taste = 5 THEN
    bLeerfahrtLinearAktiv := true;
    sc_auto_taste := 0;       
END_IF;

2.
wird dann
Wenn Bedingung aus Zeile Then
ODebug... = 0
bLeerfahrt= 1
?
oder wie?
ja klar
wenn bei 2. die IF Bedingung erfüllt ist, dann werden die Variablen so gesetzt wie geschrieben:
oDebug... = false
bLeerfahrt... = true
sc_auto.. = 0
und das elsif wird nicht mehr beachtet...
 
Code:
IF oNIORutsche_eTeilSensor1 = true OR oNIORutsche_eTeilSensor2 = true THEN
    bTeilNIOAbwurfGesehen := true;
END_IF;
ich würde das so schreiben:

Code:
IF
    oNIORutsche_eTeilSensor1  // Kommentar 1
    OR oNIORutsche_eTeilSensor2  // Kommentar 2
THEN
    bTeilNIOAbwurfGesehen := true;
END_IF;

Ja, das "verbraucht" mehr Zeilen, aber: man kann die IF-Abfrage sauber kommentieren und ich persönlich finde es übersichtlicher.

VG

MFreiberger
 
ich würde das so schreiben:

Code:
IF
    oNIORutsche_eTeilSensor1  // Kommentar 1
    OR oNIORutsche_eTeilSensor2  // Kommentar 2
THEN
    bTeilNIOAbwurfGesehen := true;
END_IF;

Ja, das "verbraucht" mehr Zeilen, aber: man kann die IF-Abfrage sauber kommentieren und ich persönlich finde es übersichtlicher.
Handhabe ich genauso, weil man dann z.B. das OR... auch ggf. einfach(er) auskommentieren kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich würde das so schreiben:

Code:
IF
    oNIORutsche_eTeilSensor1  // Kommentar 1
    OR oNIORutsche_eTeilSensor2  // Kommentar 2
THEN
    bTeilNIOAbwurfGesehen := true;
END_IF;

Ja, das "verbraucht" mehr Zeilen, aber: man kann die IF-Abfrage sauber kommentieren und ich persönlich finde es übersichtlicher.

VG

MFreiberger
Und als weitere Feinheit:

Code:
IF
       oNIORutsche_eTeilSensor1  // Kommentar 1
    OR oNIORutsche_eTeilSensor2  // Kommentar 2
THEN
    bTeilNIOAbwurfGesehen := true;
END_IF;

das OR frei stehen lassen und die Variablen bündig anordnen... Bringt viel Übersichtlichkeit ein.
 
Zurück
Oben