SA0058: Operazione su variabili di enumerazione
Determina le operazioni sulle variabili dell'enumerazione del tipo di dati. Sono ammessi incarichi.
Motivazione: Le enumerazioni non dovrebbero essere utilizzate come valori interi ordinari. In alternativa, è possibile definire un tipo di dati alias o utilizzare un tipo di sottointervallo.
Importanza: Media
Eccezione: se un'enumerazione con l'attributo {attribute 'strict'} è contrassegnato, quindi il compilatore segnala già tale operazione.
Se un'enumerazione dal pragma {attribute 'flags'} viene dichiarato per cui viene utilizzata una bandiera AND-, OR-, NOT- o XOR-Le operazioni non hanno restituito errori.
TYPE My_Enum :
(
red := 1, blue := 2, green := 3, black := 4
);
END_TYPEPROGRAM PLC_PRG
VAR
iTemp1 : INT;
abc : My_Enum;
END_VARiTemp1 := iTemp1 + INT#1; abc := My_Enum.red; // OK iTemp1 := My_Enum.black / My_Enum.blue; // SA0058 iTemp1 := My_Enum.green / My_Enum.red; // SA0058
Uscita in Messaggi vista:
SA0058: Operazioni sulle variabili di enumerazione
{attribute 'flags'} // declaring the enumeration as a "flag"
TYPE Flags :
(
Unknown := 16#00000001,
Stopped := 16#00000002,
Running := 16#00000004
) DWORD;
END_TYPEPROGRAM PLC_PRG
VAR
iTemp1 : INT;
abc : Flags;
batate : BYTE;
dwFlags : DWORD;
dwState : DWORD;
END_VAR// OK for the following
IF (dwFlags AND Flags.Unknown) <> DWORD#0 THEN
dwState := dwState AND Flags.Unknown;
ELSIF (dwFlags OR Flags.Stopped) <> DWORD#0 THEN
dwState := dwState OR Flags.Running;
END_IF