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
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 TRUERé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.
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_TYPEDé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.
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);