SA0052: Unübliche Schiebeoperation

Funktion

Ermittelt Schiebeoperationen (Bit-Shift) auf vorzeichenbehaftete Variablen. Die Norm IEC 61131-3 erlaubt allerdings nur Schiebeoperationen auf Bitfelder. Sehen Sie hierzu auch die strikte Regel SA0147: Unübliche Schiebeoperation - strikt.

Begründung

TwinCAT erlaubt Schiebeoperationen auf vorzeichenbehafteten Datentypen. Diese Operationen sind aber unüblich und können verwirrend sein. Die Norm IEC-61131-3 sieht solche Operationen nicht vor, daher sollten Sie sie vermeiden.

Ausnahme

Im Falle von Schiebeoperationen auf Bitfeld-Datentypen (Byte, DWORD, LWORD, WORD) wird kein Fehler SA0052 ausgegeben.

Wichtigkeit

Mittel

Beispiele:

PROGRAM MAIN
VAR
    nINT   : INT;
    nDINT  : DINT;
    nULINT : ULINT;
    nSINT  : SINT;
    nUSINT : USINT;
    nLINT  : LINT;
 
    nDWORD : DWORD;
    nBYTE  : BYTE;
END_VAR
nINT   := SHL(nINT, BYTE#2);     // => SA0052 
nDINT  := SHR(nDINT, BYTE#4);    // => SA0052
nULINT := ROL(nULINT, BYTE#1);   // no error because this is an unsigned data type
nSINT  := ROL(nSINT, BYTE#2);    // => SA0052
nUSINT := ROR(nUSINT, BYTE#3);   // no error because this is an unsigned data type
nLINT  := ROR(nLINT, BYTE#2);    // => SA0052
 
nDWORD := SHL(nDWORD, BYTE#3);   // no error because DWORD is a bit field data type
nBYTE  := SHR(nBYTE, BYTE#1);    // no error because BYTE is a bit field data type