und - oder verschachteln / Priorität

dachpappe
2021-06-23
2021-06-23
  • dachpappe

    dachpappe - 2021-06-23

    Hallo Ihr da draußen.
    ich schreibe viel im ST und nutze CoDeSys 2 + 3 und mir ist unklar wie ich und- & oder-Verknüpfungen verschalchtel. Was hat Priorität oder muß man Klammern setzen ???

    Hier ein Beispiel damit es klarer wird.

        xVar1 := xVarA and xVarB or xVarC and xVarD
        oder so
        xVar2 := ( xVarA and xVarB ) or ( xVarC and xVarD )
    

    Ich hoffe Ihr versteht mich.
    Danke im voraus.

     
  • dachpappe

    dachpappe - 2021-06-23

    Wie wird xVar1 ausgewertet.

    Möglichkeit 1:
    Stumpf von Links nach Rechts
    (Erst xVarA and xVarB, dieses Ergebnis dann mit dem oder von xVarC ...)

    Möglichkeit 2:
    Erst die beiden und-Verknüpfungen und dann das oder.
    (Dann hätte die und-Verknüpfungen Priorität.)

    Möglichkeit 3:
    Erst das oder (xVarB or xVarC) dann die und-Verknüpfungen
    (Dann hätte die oder-Verknüpfungen Priorität.)

    Kann ich auch Klammern setzen um die Priorität klarer zu machen ?

     
  • dkugler - 2021-06-23

    Klammern helfen, wenn man sich unsicher ist und sind auf jedenfall dominant!
    Der Satz aus der HIlfe ist wichtig: "Die Auswertung eines Ausdrucks erfolgt durch Abarbeitung der Operatoren nach bestimmten Bindungsregeln. CODESYS arbeitet den Operator mit der stärksten Bindung zuerst ab. Operatoren mit gleicher Bindungsstärke werden von links nach rechts abgearbeitet." Klammern haben die stärkste Bindung, OR die schwächste. Siehe Tabelle in der Hilfe die icampbell gepostet hat.

     

    Last edit: dkugler 2021-06-23
    • Ingo

      Ingo - 2021-06-23

      Hehe, super veranschaulicht mit dem KOP! 😉
      Aber da verschiedene Leute unterschiedlich denken, noch meine Merkregel.

      In der Mathematik gilt immer Punkt vor Strich. Bei logischen ausdrücken
      gilt "und" vor "oder".


      Doch! Ich würde auch immer Klammern, und manchmal lieber verschachtelte IFs
      oder noch besser, mehrere IF Blöcke hintereinander nutzen. Denn das macht
      den Code schlicht besser lesbar, und man kann auch klarer kommentieren, was
      dieser komplexe Ausdruck überhaupt prüfen soll.

       

Log in to post a comment.