Ermittelt Bitzugriffe auf vorzeichenbehaftete Variablen. Die Norm IEC 61131-3 erlaubt allerdings nur Bitzugriffe und Schiebeoperationen (bitshift) auf Bitfelder. Siehe hierzu auch die strikten Regeln SA0147 und SA0148.
Begründung: Vorzeichenbehaftete Datentypen sollten nicht als Bitfelder verwendet werden und umgekehrt. Die Norm IEC 61131-3 sieht solche Zugriffe nicht vor, und daher sollte man diese Regel einhalten wenn man portierbaren Code schreiben will.
Wichtigkeit: Mittel
Ausnahme für Flag-Enumerationen: Wenn eine Enumeration mit Hilfe des Pragmaattributs
{attribute 'flags'}
als Flag deklariert ist, wird für Bitzugriffe mit den Operationen OR
, AND
oder NOT
der Fehler SA0018
nicht ausgegeben.
Beispiel
PROGRAM PLC_PRG VAR iTemp1 : INT; diTemp3 : DINT; uliTemp4 : ULINT; siTemp5 : SINT; usiTemp6 : USINT; byTemp2 : BYTE; END_VAR iTemp1.3 := TRUE; // SA0018 diTemp3.4 := TRUE; // SA0018 uliTemp4.18 := FALSE; // no error because this is an unsigned data type siTemp5.2 := FALSE; // SA0018 usiTemp6.3 := TRUE; // no error because this is an unsigned data type byTemp2.5 := FALSE; // no error because the byte is a bitfield --> SA0018: Unübliche Bitzugriffe