Accesso ai bit nelle variabili
Importante
Implementare l'accesso simultaneo ai bit da parte di due attività solo se il processore può eseguire l'accesso ai bit direttamente sulla memoria. Tutti i sistemi x86 e x64 hanno comandi per l'accesso ai bit in memoria. Sistemi come ARM e PPC non possono accedere ai bit direttamente nella memoria.
Se due attività eseguono l'accesso ai bit contemporaneamente, anche se il processore non può eseguire l'accesso ai bit direttamente nella memoria, procedere come segue. Usa un semaforo (SysSemEnter
) o una tecnica simile per impedire l'accesso ai bit concorrenti. Tuttavia, è meglio eseguire l'accesso al bit all'interno di un'attività.
Con l'accesso all'indice, i singoli bit possono essere indirizzati in variabili intere. Utilizzando una variabile di struttura o un'istanza di blocco funzione è possibile indirizzare simbolicamente singoli bit.
Accesso all'indice a variabili intere bit
È possibile indirizzare singoli bit in variabili intere. A tale scopo, aggiungere alla variabile un punto e l'indice del bit indirizzato. L'indice di bit può essere dato da qualsiasi costante. L'indicizzazione è basata su 0.
Sintassi
<integer variable name> . <index> <integer data typ> = BYTE | WORD | DWORD | LWORD | SINT | USINT | INT | UINT | DINT | UDINT | LINT | ULINT
Nel programma, il terzo bit della variabile wA
è impostato sul valore di variabile xB
. La costante c_usiENABLE
funge da indice per accedere al terzo bit della variabile iX
.
Accesso all'indice
PROGRAM PLC_PRG VAR wA : WORD := 16#FFFF; xB : BOOL := 0; END_VAR // Index access in an integer variable wA.2 := xB;
Risultato: wA = 2#1111_1111_1111_1011 = 16#FFFB
Costante come indice
// 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
Risultato: iX = 4
Accesso simbolico ai bit nelle variabili di struttura
Con il BIT
tipo di dati, è possibile combinare singoli bit in una struttura e quindi accedervi individualmente. Quindi il bit viene indirizzato con il nome del componente.
Tipo di dichiarazione della struttura
TYPE S_CONTROLLER : STRUCT bitOperationEnabled : BIT; bitSwitchOnActive : BIT; bitEnableOperation : BIT; bitError : BIT; bitVoltageEnabled : BIT; bitQuickStop : BIT; bitSwitchOnLocked : BIT; bitWarning : BIT; END_STRUCT END_TYPE
Dichiarazione e accesso in scrittura a un bit
PROGRAM PLC_PRG VAR ControlDriveA : S_CONTROLLER; END_VAR // Symbolic bit access to bitEnableOperation ControlDriveA.bitEnableOperation := TRUE;
Accesso simbolico ai bit nelle istanze dei blocchi funzione
Nei blocchi funzione è possibile dichiarare variabili per singoli bit.
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);