Skip to main content

Bitzugriff in Variablen

Wichtig

Implementeren Sie gleichzeitige Bitzugriffe durch zwei Tasks nur, wenn der Prozessor Bitzugriffe direkt auf dem Speicher ausführen kann. Die x86- und x64-Systeme haben Befehle für den Bitzugriff im Speicher. Systeme wie beispielsweise ARM und PPC können Bitzugriffe nicht direkt auf dem Speicher ausführen.

Wenn gleichzeitige Bitzugriffe durch zwei Tasks ausgeführt werden, obwohl der Prozessor Bitzugriff nicht direkt auf dem Speicher ausführen kann, gehen Sie wie folgt vor: Verwenden ein Semaphor (SysSemEnter) oder eine vergleichbare Technik, um einen konkurrierenden Bitzugriff zu verhindern. Am Besten ist es aber, die Bitzugriffe innerhalb einer Task auszuführen.

Mit einem Indexzugriff können einzelne Bits in ganzzahligen Variablen adressiert werden. Mit Hilfe einer Strukturvariablen oder einer Funktionsbaustein-Instanz können einzelne Bits symbolisch adressieret werden.

Indexzugriff auf Bits in ganzzahligen Variablen

Sie können in ganzzahligen Variablen einzelne Bits adressieren. Dazu hängen Sie an die Variable mit einem Punkt abgetrennt den Index des zu adressierenden Bits an. Der Bitindex kann durch eine beliebige Konstante angegeben werden. Die Indizierung ist 0-basiert.

Syntax

<integer variable name> . <index>
<integer data typ> = BYTE | WORD | DWORD | LWORD | SINT | USINT | INT | UINT | DINT | UDINT | LINT | ULINT
Beispiel 197. Beispiel

Im Programm wird das dritte Bit der Variablen wA auf den Wert der Variablen xB gesetzt. Die Konstante c_usiENABLE fungiert als Index, um auf das dritte Bit der Variablen iX zuzugreifen.

Indexzugriff

PROGRAM PLC_PRG
VAR
        wA : WORD := 16#FFFF;
        xB : BOOL := 0;
END_VAR

// Index access in an integer variable
wA.2 := xB;

Ergebnis: wA = 2#1111_1111_1111_1011 = 16#FFFB

Konstante als Index

// GVL declaration
VAR_GLOBAL CONSTANT
        gc_usiENABLE : USINT := 2;
END_VAR

PROGRAM PLC_PRG
VAR
        iX : INT := 0;
END_VAR

// Constant as index
iX.gc_usiENABLE :=  TRUE;       // Third bit in iX is set TRUE

Ergebnis: iX = 4



Symbolischer Bitzugriff in Strukturvariablen

Mit dem Datentyp BIT können Sie einzelne Bits mit einem Namen bezeichnen und zu einer Struktur zusammenfassen. Das Bit wird dann mit dem Komponentennamen adressiert.

Beispiel 198. Beispiel

Typdeklaration der Struktur

TYPE S_CONTROLLER :
STRUCT
        bitOperationEnabled : BIT;
        bitSwitchOnActive : BIT;
        bitEnableOperation : BIT;
        bitError : BIT;
        bitVoltageEnabled : BIT;
        bitQuickStop : BIT;
        bitSwitchOnLocked : BIT;
        bitWarning : BIT;
END_STRUCT
END_TYPE

Deklaration und Schreibzugriff auf ein Bit

PROGRAM PLC_PRG
VAR
        ControlDriveA : S_CONTROLLER;
END_VAR

// Symbolic bit access to bitEnableOperation
ControlDriveA.bitEnableOperation := TRUE;


Symbolischer Bitzugriff in Funktionsbaustein-Instanzen

In Funktionsbausteinen können Sie Variablen für einzelne Bits deklarieren.

Beispiel 199. Beispiel
FUNCTION_BLOCK FB_Controller
VAR_INPUT
        bitSwitchOnActive : BIT;
        bitEnableOperation : BIT;
        bitVoltageEnabled : BIT;
        bitQuickStop : BIT;
        bitSwitchOnLocked : BIT;
END_VAR
VAR_OUTPUT
        bitOperationEnabled : BIT;
        bitError : BIT;
        bitWarning : BIT;
END_VAR
VAR
END_VAR
;

PROGRAM PLC_PRG
VAR
        fbController : FB_Controller;
END_VAR
// Symbolic bit access to bitSwitchOnActive
fbController(bitSwitchOnActive := TRUE);