



HINWEIS

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