Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 7 von 7

Thema: Priorität von Logikoperatoren in SCL

  1. #1
    Registriert seit
    27.07.2011
    Beiträge
    41
    Danke
    17
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo allerseits!

    Gibt es eine Priorität bei den Logikoperatoren im SCL?
    Konkret würde mich interessieren, was bei folgender IF Abfrage "zuerst" geprüft wird.

    Code:
    IF (StateG1 = 1) OR (StateG1 = 5) AND (StateG2 = 3) THEN
        ...
    END_IF;
    Was macht er da zuerst? Abhängig davon kommt ja was anderes raus.

    mfg,
    Frank
    Zitieren Zitieren Priorität von Logikoperatoren in SCL  

  2. #2
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Zitat Zitat von FrankTheTank Beitrag anzeigen
    Hallo allerseits!

    Gibt es eine Priorität bei den Logikoperatoren im SCL?
    Konkret würde mich interessieren, was bei folgender IF Abfrage "zuerst" geprüft wird.
    Es wird nichts zuerst geprüft, bzw es wird der reihe nach abgearbeitet.

    Die AND Bedingung steht für sich.
    Entweder ist diese erfüllt oder die OR bedingung.

    Also nur StateG1 = 5 reicht nicht da die AND Bedingung dann nicht erfüllt ist.

    Die StateG1 = 1 Bedinung reicht aber da OR die AND Bedingung.

    Grundsätzlich kommt NOT vor AND vor XOR vor OR

    mfG René

  3. Folgender Benutzer sagt Danke zu vollmi für den nützlichen Beitrag:

    FrankTheTank (12.09.2011)

  4. #3
    Registriert seit
    30.01.2004
    Ort
    Erfurt
    Beiträge
    961
    Danke
    42
    Erhielt 109 Danke für 87 Beiträge

    Standard

    Die UND-Verknüpfung hat eine höhere Priorität, daher wird von der üblichen Verarbeitung von links nach rechts abgewichen und der mittlere und der rechte Operand werden zuerst verknüpft.
    __
    Mit freundlichem Gruß Peter

    ...Wir sind Alle Zeitreisende. Die überwiegende Mehrzahl schafft allerdings täglich nur einen Tag.... (Jasper Fforde: "In einem andern Buch")

  5. Folgender Benutzer sagt Danke zu PeterEF für den nützlichen Beitrag:

    FrankTheTank (12.09.2011)

  6. #4
    Registriert seit
    27.07.2011
    Beiträge
    41
    Danke
    17
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die raschen Antworten. Wenn ich also will, dass das mittlere und linke Statement zuerst geprüft werden und das Ergebnis dann mit dem rechten Statement verundet wird, dann komm ich um Klammern nicht herum, oder?

    Also sowas:

    Code:
    IF (StateG1 = 1 OR StateG1 = 5) AND StateG2 = 3 THEN
        ...
    END_IF;

  7. #5
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von FrankTheTank Beitrag anzeigen
    Wenn ich also will, dass das mittlere und linke Statement zuerst geprüft werden und das Ergebnis dann mit dem rechten Statement verundet wird, dann komm ich um Klammern nicht herum, oder?
    Oder du stellst es um:
    Code:
    IF StateG2 = 3 AND StateG1 = 1 OR StateG1 = 5 THEN
       ...
    END_IF;
    Aber mit Klammern finde ich es übersichtlicher.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  8. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Zitat Zitat von Paule Beitrag anzeigen
    ... Aber mit Klammern finde ich es übersichtlicher.
    Sehe ich genauso - zumal die Klammern, wenn unnötigerweise gesetzt, auch gar keinen Einfluß auf die Code-Generierung haben ...

  9. #7
    Registriert seit
    23.10.2009
    Beiträge
    391
    Danke
    58
    Erhielt 113 Danke für 87 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Paule Beitrag anzeigen
    Oder du stellst es um:
    Code:
    IF StateG2 = 3 AND StateG1 = 1 OR StateG1 = 5 THEN
       ...
    END_IF;
    Aber mit Klammern finde ich es übersichtlicher.
    Vor allem ist es richtiger, das Umstellen hat nämlich nichts gebracht.
    Gruß
    Erich

  10. Folgender Benutzer sagt Danke zu LargoD für den nützlichen Beitrag:

    Paule (13.09.2011)

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 14.07.2015, 07:14
  2. Priorität der Runtime auf PC
    Von Waelder im Forum HMI
    Antworten: 2
    Letzter Beitrag: 04.03.2009, 17:53
  3. Priorität programmieren
    Von alonely01 im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 07.02.2008, 06:32

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •