In ganzzahligen Variablen ist der Zugriff auf einzelne Bits möglich. Zu diesem Zweck wird der Index an das zu adressierende Bits angehängt und mit einem Punkt abgetrennt. Dem Bit-Index kann eine beliebige Konstante zugewiesen werden. Die Indizierung ist 0-basiert.
Wenn Ihr Prozesor keine Unterstützung für den direkten Bitzugriff bietet, können Sie auf ein Semaphor (SysSemEnter) oder ein vergleichbares Verfahren zurückgreifen, um einen konkurrierenden Bitzugriff zu vermeiden. Um dem gleichzeitigen Zugriff durch zwei Tasks vorzubeugen, hat es sich jedoch bewährt, den Bitzugriff in nur einer Task auszuführen.
a : INT;
b : BOOL;
...
a.2 := b;
Das dritte Bit der Variablen a
wird auf den Wert der Variablen b
gesetzt. Das bedeutet, dass die Variable a
dem Wert 3 entspricht.
Ist der Index größer als die Bit-Breite der Variablen, so wird folgender Fehler ausgegeben:
'Index '<n>' Außerhalb des gültigen Bereichs für Variable '<var>'!'
Die Bitadressierung ist mit Variablen des folgenden Datentyps möglich:
SINT
INT
DINT
USINT
UINT
UDINT
BYTE
WORD
DWORD
Ist der Datentyp nicht zulässig, so wird folgende Fehlermeldung ausgegeben:
'Unzulässiger Datentyp '<Typ>' für direkte Indizierung'.
Ein Bit-Zugriff darf nicht einer VAR_IN_OUT
-Variablen zugewiesen werden!
Wenn eine globale Konstante deklariert wird, die den Bitindex definiert, kann diese Konstante für den Bitzugriff verwendet werden.
Beispiele für den Bitzugriff über eine globale Konstante
1. Deklaration einer globalen Konstanten in einer globalen Variablenliste
Die Variable enable
legt fest, auf welches Bit zugegriffen werden soll:
VAR_GLOBAL CONSTANT
enable:int:=2;
END_VAR
2. Bitzugriff auf eine ganzzahlige Variable
Deklaration in einem POU:
VAR
xxx:int;
END_VAR
Bitzugriff:
xxx.enable := true; (* -> the third bit in variable xxx will be set TRUE *)
Der BIT-Datentyp ist ein besonderer Datentyp, der nur in Strukturen erlaubt ist. Sie können dann auf jedes Bit einzeln über den Komponentennamen zugreifen. Weitere Informationen hierzu finden Sie unter Bit-Zugriff in Strukturen.
Beispiel: Bit-Zugriff auf BIT-Datentypen
Deklaration der Struktur
TYPE ControllerData :
STRUCT
Status_OperationEnabled : BIT;
Status_SwitchOnActive : BIT;
Status_EnableOperation : BIT;
Status_Error : BIT;
Status_VoltageEnabled : BIT;
Status_QuickStop : BIT;
Status_SwitchOnLocked : BIT;
Status_Warning : BIT;
END_STRUCT
END_TYPE
Deklaration in einem POU
VAR
ControllerDrive1:ControllerData;
END_VAR
Bitzugriff
ControllerDrive1.Status_OperationEnabled := TRUE;