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
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 TRUEErgebnis: 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.
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_TYPEDeklaration 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.
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);