@PN/DP Das ist für mich der Kommentar des Jahres!!!IF-Schwuchtelei (danke an @PN/DP wegen des schönes Wortes)

Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
@PN/DP Das ist für mich der Kommentar des Jahres!!!IF-Schwuchtelei (danke an @PN/DP wegen des schönes Wortes)
Weil es nicht jedem einfach so in den Sinn kommt das wenn er eine einfache Abfrage erstellt dann dies nochmal optimieren kann.wenn ich so etwas sehe, frage ich mich: Warum?
Das ist dann aber auch nur, weil die Programmierer heutzutage sehr oft hochsprachenverseucht sind (, und nicht mehr die Grundlagen der EDV = einfache Logikschaltungen beherrschen).Weil es nicht jedem einfach so in den Sinn kommt das wenn er eine einfache Abfrage erstellt dann dies nochmal optimieren kann.
Wer weiß was in wessen alten Programmen so an sinnfreiem Code existent ist.
Ich denke, das wenn man so versucht zu lernen, spezielle Tipps und Tricks einfach nicht vorhanden sind. Wie soll man denn darauf kommen es in einer Zeile zu schreiben wenn es einem nie gesagt wird oder es nicht da steht? Selbst Siemens-eigene Bausteine sind teilweise mit IF-THEN-Orgien gefüllt.Auf meinem Weg mir selbstständig die S7 PLC Programmierung beizubringen
Hast Recht. Gedankenfehler. Das ist ja nur in den IF-Anweisungen so, aber durch die ELSE-Abzweigung wird es ja initialisiert.Wieso?? Die Zuweisungen werden bei jedem Programmdurchlauf bei jedem möglichen Verknüpfungsergebnis ausgeführt - auch bei FALSE. In der normalen "richtigen" Programmversion von Peter Wahlen als auch in der IF-Schwuchtelei.
Hallo!Hallo Noebsi,
wenn ich so etwas sehe, frage ich mich: Warum?
Code://Schrankensteuerung Einfahrt IF IS1_E AND R_E <> TRUE AND TASTER THEN // bezieht sich das <> nur auf R_E oder auf (IS1_E und R_E), was ist gemeint/gewollt? SCHRANKE_E := TRUE; ELSE SCHRANKE_E := FALSE; END_IF; //Schrankensteuerung Ausfahrt IF IS1_A AND DB2.TICKET[N].Bezahlt = TRUE THEN SCHRANKE_A := TRUE; ELSE SCHRANKE_A := FALSE; END_IF;
warum nicht so:
Code://Schrankensteuerung Einfahrt SCHRANKE_E := IS1_E AND NOT(R_E) AND TASTER; // Je nach dem, was gewollt ist, nur diese SCHRANKE_E := NOT(IS1_E AND R_E) AND TASTER; // oder diese Zeile verwenden! //Schrankensteuerung Ausfahrt SCHRANKE_A := IS1_A AND DB2.TICKET[N].Bezahlt;
Hallo nochmal!Hallo Noebsi,
wenn ich so etwas sehe, frage ich mich: Warum?
Code://Schrankensteuerung Einfahrt IF IS1_E AND R_E <> TRUE AND TASTER THEN // bezieht sich das <> nur auf R_E oder auf (IS1_E und R_E), was ist gemeint/gewollt? SCHRANKE_E := TRUE; ELSE SCHRANKE_E := FALSE; END_IF; //Schrankensteuerung Ausfahrt IF IS1_A AND DB2.TICKET[N].Bezahlt = TRUE THEN SCHRANKE_A := TRUE; ELSE SCHRANKE_A := FALSE; END_IF;
warum nicht so:
Code://Schrankensteuerung Einfahrt SCHRANKE_E := IS1_E AND NOT(R_E) AND TASTER; // Je nach dem, was gewollt ist, nur diese SCHRANKE_E := NOT(IS1_E AND R_E) AND TASTER; // oder diese Zeile verwenden! //Schrankensteuerung Ausfahrt SCHRANKE_A := IS1_A AND DB2.TICKET[N].Bezahlt;
IF IS1_E AND R_E <> TRUE AND TASTER THEN //Wenn Einfahren will
SCHRANKE_E := TRUE;
sPassed_In := TRUE;
ELSIF IS1_E AND IS2_E AND sPassed_In THEN //Wenn noch unter Schranken steht
SCHRANKE_E := TRUE;
SCHRANKE_E := IS1_E AND R_E <> TRUE AND TASTER;
SCHRANKE_E := IS1_E AND IS2_E AND sPassed_In;
SCHRANKE_E := IS1_E AND R_E <> TRUE AND TASTER; bedeutet ==> IS1_E AND NOT R_E AND TASTER
// (IS1_E=TRUE) UND (R_E=FALSE) UND (TASTER=TRUE) besser so ==> IS1_E AND NOT R_E AND TASTER
// oder
// (IS1_E=FALSE) UND (R_E=FALSE) UND (TASTER=TRUE) besser so ==> NOT IS1_E AND NOT R_E AND TASTER
// oder so ==> NOT(IS1_E OR R_E) AND TASTER
Gut, eine IF-ELSE Verzweigung mit den Zuweisungen zu ersetzen kann ich mir wie gesagt einfach vorstellen.Vorsicht!
Eine IF Then Else Abfrage kannst du durch eine Zuweisung ersetzen, weil eine IF Then Else Abfrage im Prinzip das selbe macht.
Jetzt hast du jedoch If Then ElseIf Abfrage, das ist etwas anderes!
Versuche am besten in Logischen Gatten (wie bei FUP) zu denken. Dann sind logische Verknüpfungen leichter zu verstehen.
Welche Zustände willst du hier eigentlich abfragen? Stichwort Operatorenrangfolge
Code:SCHRANKE_E := IS1_E AND R_E <> TRUE AND TASTER; bedeutet ==> IS1_E AND NOT R_E AND TASTER // (IS1_E=TRUE) UND (R_E=FALSE) UND (TASTER=TRUE) besser so ==> IS1_E AND NOT R_E AND TASTER // oder // (IS1_E=FALSE) UND (R_E=FALSE) UND (TASTER=TRUE) besser so ==> NOT IS1_E AND NOT R_E AND TASTER // oder so ==> NOT(IS1_E OR R_E) AND TASTER
Achso, okay dann war das ein Missverständnis, macht nichts.Hallo Noebsi,
dann werden deine Signale so abgefragt, wie du möchtest. Ich wusste nicht, ob du die Operatorenrangfolge beachtest hast.
Ich habe dazu leider auf die Schnelle nur bei den 1200/1500 gefunden:
dort der Abschnitt: 17.1.6 Operatoren und OperatorenrangfolgeSIOS
support.industry.siemens.com
Ich hatte auch nur einen Hinweis zu der Vereinfachung von IF Then Else zu einer Verknüpfung aufgezeigt. Falls das zu einer Verwirrung geführt hat, bitte ich um Entschuldigung.
Die zweite Anweisung überschreibt immer die Zuweisung der ersten Anweisung, egal welche Ergebnisse die beiden Anweisungen haben. Die erste Anweisung ist daher völlig überflüssig.Code:SCHRANKE_E := IS1_E AND R_E <> TRUE AND TASTER; SCHRANKE_E := IS1_E AND IS2_E AND sPassed_In;
Würde hier nicht die zweite Anweisung die erste überschreiben, falls die erste TRUE ist, aber die danach FALSE?
Code://Schrankensteuerung Einfahrt SCHRANKE_E := IS1_E AND NOT(R_E) AND TASTER; // Je nach dem, was gewollt ist, nur diese SCHRANKE_E := NOT(IS1_E AND R_E) AND TASTER; // oder diese Zeile verwenden!
IF Bedingung = TRUE THEN
BoolVariable := TRUE;
ELSE
BoolVariable := FALSE;
END_IF;
//sowas schreibt man viel besser einfach so:
BoolVariable := Bedingung;
Oh sorry, nicht dass sich jemand diskrimiert fühlt. Ich meinte "IF-Schwurbelei", das Wort war mir da aber leider nicht eingefallen. Tut mir leid.In der normalen "richtigen" Programmversion von Peter Wahlen als auch in der IF-Schwuchtelei.
Gott sei dank, du bist ja doch ein anständiger Kerl.Oh sorry, nicht dass sich jemand diskrimiert fühlt. Ich meinte "IF-Schwurbelei", das Wort war mir da aber leider nicht eingefallen. Tut mir leid.
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen