检测有符号变量的移位操作(位移)。如果对位字段数据类型 (Byte
,DWORD
,LWORD
,WORD
) 进行移位操作,则不会报错。
理由:CODESYS 允许对有符号数据类型进行移位操作。不过,这些操作并不常见,可能会引起混淆。IEC 61131-3 标准未对此类操作做出规定。因此,为了提高代码在其他开发系统中的可移植性,应避免使用这些代码。
重要性:中型
示例
PROGRAM PLC_PRG VAR iTemp : INT; dwTemp1 : DWORD; byTemp2 : BYTE; diTemp3 : DINT; siTemp4 : SINT; liTemp5 : LINT; END_VAR //the following lines each will cause an SA0052: iTemp := SHL(iTemp, BYTE#2); diTemp3 := SHR(diTemp3, BYTE#4); siTemp4 := ROL(siTemp4, BYTE#2); liTemp5 := ROR(liTemp5, BYTE#2); //no error SA0052 because DWORD and BYTE are bit field data types: dwTemp1 := SHL(dwTemp1, BYTE#3); byTemp2 := SHR(byTemp2, BYTE#1); ---> SA0052: Unusual shift operation