Numaralandırma veri tipindeki değişkenler üzerindeki işlemleri algılar Atamalara izin verilir.
Gerekçe: Numaralandırmalar sıradan tamsayı değerleri olarak kullanılmamalıdır. Ayrıca bir takma ad veri türü tanımlayabilir veya bir alt aralık türü kullanabilirsiniz.
Önemliymiş: Orta
İstisna: Bir numaralandırma pragma {attribute 'strict'} ile etiketlenmişse, derleyici bu tür bir işlemi zaten bildirir.
Bir numaralandırma {attribute 'flags'} pragması tarafından bir bayrak olarak bildirilirse, AND, OR, NOT veya oder XOR işlemleri için bir hata verilmez.
Örnek
TYPE My_Enum : ( red := 1, blue := 2, green := 3, black := 4 ); END_TYPE PROGRAM PLC_PRG VAR iTemp1 : INT; abc : My_Enum; END_VAR iTemp1 := iTemp1 + INT#1; abc := My_Enum.red; // OK iTemp1 := My_Enum.black / My_Enum.blue; // SA0058 iTemp1 := My_Enum.green / My_Enum.red; // SA0058 --> SA0058: Operations on enumeration variables
Pragma {attribute 'flags'} ile örnek
{attribute 'flags'} // declaring the enumeration as a "flag"
TYPE Flags :
(
Unknown := 16#00000001,
Stopped := 16#00000002,
Running := 16#00000004
) DWORD;
END_TYPE
PROGRAM 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
Ayrıca bakınız