SA0095: Zuweisung in Bedingung
Ermittelt Zuweisungen in Bedingungen von IF-, CASE- oder REPEAT-Konstrukten.
Begründung: Ein Zuweisung (:=) und ein Vergleich (=) kann leicht verwechselt werden. Eine Zuweisung in einer Bedingung kann daher leicht unabsichtlich erfolgt sein, und wird deswegen gemeldet. Auch der Leser des Codes kann dadurch verwirrt werden.
Wichtigkeit: Hoch
Beispiel 88. Beispiel
PROGRAM PLC_PRG
VAR
iCond1:INT := INT#1;
iCond2:INT := INT#2;
xCond:BOOL := FALSE;
iVar : INT;
END_VARIF INT_TO_BOOL(iCond1 := iCond2) THEN // SA0095
iCond1 := INT#1;
iCond2 := INT#2;
ELSIF (iCond1 := 11) = 11 THEN // SA0095
iCond1 := INT#1;
iCond2 := INT#2;
END_IF
IF xCond := TRUE THEN // SA0095
xCond := FALSE;
END_IF
IF (xCond := FALSE) OR (iCond1 := iCond2) = 12 THEN // SA0095
xCond := FALSE;
iCond1 := INT#1;
iCond2 := INT#2;
END_IF
IF (iVar := iVar + 1) = 120 THEN // SA0095 (can be valid, but is not reparable very well
iVar := 0;
END_IF
WHILE (xCond = TRUE) OR (iCond1 := iCond2) = 12 DO // SA0095
xCond := FALSE;
END_WHILE
//Error: assignment in repeat loop
REPEAT
xCond := FALSE;
UNTIL (xCond = TRUE) OR (iCond1 := iCond2) = 12 // SA0095
END_REPEAT Ausgabe unter Ansicht Meldungen:
SA0095: Zuweisung in Bedingung '...'