Indirizzamento dei bit nelle variabili

Panoramica

Nelle variabili intere, è possibile accedere ai singoli bit. A questo scopo, aggiungere l'indice del bit da indirizzare alla variabile e separarlo con un punto. È possibile assegnare qualsiasi costante all'indice bit. L'indicizzazione è a base 0.

Se il processore non supporta l'accesso diretto ai bit, è possibile utilizzare un semaforo (SysSemEnter) o una tecnica simile per impedire l'accesso ai bit concorrenti. Tuttavia, per evitare l'accesso da parte di due task, si consiglia di eseguire l'accesso ai bit all'interno di un solo task.

Sintassi

<variablename>.<bitindex>

Esempio

a : INT;
b : BOOL;
...
a.2 := b;

Il terzo bit della variabile a verrà impostato sul valore della variabile b, pertanto la variabile a sarà uguale a 3.

Se l'indice è maggiore dell'ampiezza di bit della variabile, viene generato il seguente messaggio:

'Indice '<n>' fuori dall'intervallo valido per variabile '<var>'!'

L'indirizzamento bit è possibile con le variabili dei seguenti tipi di dati:

  • SINT

  • INT

  • DINT

  • USINT

  • UINT

  • UDINT

  • BYTE

  • WORD

  • DWORD

Se il tipo di dati non consente l'accesso bit, viene generato il seguente messaggio:

'Tipo dati non valido '<tipo>' per indicizzazione diretta'.

Non assegnare l'accesso bit a una variabile VAR_IN_OUT.

Accesso bit tramite una costante globale

Se è stata dichiarata una costante globale che definisce l'indice di bit, è possibile utilizzare questa costante per un accesso bit.

Esempio di accesso bit tramite una costante globale e in una variabile:

1. Dichiarazione della costante globale in un elenco di variabili globali

La variabile enable definisce il bit al quale si esegue l'accesso:

VAR_GLOBAL CONSTANT
    enable:int:=2;
END_VAR

2. Accesso bit in una variabile intera

Dichiarazione nel POU:

VAR
    xxx:int;
END_VAR

Accesso bit:

xxx.enable := true; (* -> the third bit in variable xxx will be set TRUE *)

Accesso nei tipi di dati BITBIT

Il tipo di dati BIT è un tipo di dati speciale consentito soltanto nelle strutture. È quindi possibile accedere a ciascun bit singolarmente utilizzando il nome del componente. Per maggiori informazioni, vedere la sezione Accesso bit nelle strutture.

Esempio: accesso nei tipi di dati BITBIT

Dichiarazione della struttura

TYPE ControllerData :
STRUCT
    Status_OperationEnabled : BIT;
    Status_SwitchOnActive : BIT;
    Status_EnableOperation : BIT;
    Status_Error : BIT;
    Status_VoltageEnabled : BIT;
    Status_QuickStop : BIT;
    Status_SwitchOnLocked : BIT;
    Status_Warning : BIT;
END_STRUCT
END_TYPE

Dichiarazione nel POU

VAR
    ControllerDrive1:ControllerData;
END_VAR

Accesso bit

ControllerDrive1.Status_OperationEnabled := TRUE;