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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
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.
Ich hoffe Ihr versteht mich.
Danke im voraus.
https://help.codesys.com/webapp/_cds_st_expressions;product=codesys;version=3.5.16.0#auswertung-von-ausdrucken
von die Hilfe, beide Beispiele sind die gleiche.
Aber die mit xVar1 verstehe ich gar nichts.
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 ?
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
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.