Skip to main content

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
Esempio 197. Esempio

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.

Esempio 198. Esempio

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.

Esempio 199. Esempio
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);