Adressierung von Bits in Variablen

Überblick

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.

Syntax

<Variablename>.<Bitindex>

Beispiel

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!

Bitzugriff mit Hilfe einer globalen Konstante

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 *)

Bitzugriff auf BIT-Datentypen

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;