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