Skip to main content

Accès aux bits dans les variables

Important

Implémentez l'accès simultané aux bits par deux tâches uniquement si le processeur peut exécuter l'accès aux bits directement sur la mémoire. Tous les systèmes x86 et x64 ont des commandes pour l'accès aux bits en mémoire. Les systèmes tels que ARM et PPC ne peuvent pas accéder directement aux bits dans la mémoire.

Si deux tâches exécutent simultanément un accès aux bits, même si le processeur ne peut pas effectuer d'accès aux bits directement dans la mémoire, procédez comme suit. Utilisez un sémaphore (SysSemEnter) ou une technique similaire pour empêcher l'accès concurrent aux bits. Cependant, il est préférable d'exécuter l'accès au bit dans une tâche.

Avec l'accès à l'index, des bits individuels peuvent être adressés dans des variables entières. A l'aide d'une variable de structure ou d'une instance de bloc fonction, des bits individuels peuvent être adressés symboliquement.

Index accès aux bits variables entières

Vous pouvez adresser des bits individuels dans des variables entières. Pour ce faire, ajoutez à la variable un point et l'indice du bit adressé. L'indice de bit peut être donné par n'importe quelle constante. L'indexation est basée sur 0.

Syntaxe

<integer variable name> . <index>
<integer data typ> = BYTE | WORD | DWORD | LWORD | SINT | USINT | INT | UINT | DINT | UDINT | LINT | ULINT
Exemple 197. Exemple

Dans le programme, le troisième bit de la variable wA est fixé à la valeur de la variable xB. La constante c_usiENABLE agit comme un index pour accéder au troisième bit de la variable iX.

Accès à l'index

PROGRAM PLC_PRG
VAR
        wA : WORD := 16#FFFF;
        xB : BOOL := 0;
END_VAR

// Index access in an integer variable
wA.2 := xB;

Résultat: wA = 2#1111_1111_1111_1011 = 16#FFFB

Constante comme 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

Résultat: iX = 4



Accès aux bits symboliques dans les variables de structure

Avec le BIT type de données, vous pouvez combiner des bits individuels dans une structure, puis y accéder individuellement. Ensuite, le bit est adressé avec le nom du composant.

Exemple 198. Exemple

Déclaration de type de la structure

TYPE S_CONTROLLER :
STRUCT
        bitOperationEnabled : BIT;
        bitSwitchOnActive : BIT;
        bitEnableOperation : BIT;
        bitError : BIT;
        bitVoltageEnabled : BIT;
        bitQuickStop : BIT;
        bitSwitchOnLocked : BIT;
        bitWarning : BIT;
END_STRUCT
END_TYPE

Déclaration et accès en écriture à un bit

PROGRAM PLC_PRG
VAR
        ControlDriveA : S_CONTROLLER;
END_VAR

// Symbolic bit access to bitEnableOperation
ControlDriveA.bitEnableOperation := TRUE;


Accès aux bits symboliques dans les instances de bloc fonction

Dans les blocs fonctionnels, vous pouvez déclarer des variables pour des bits individuels.

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