.

位访问变量

.
.

提示!

仅当处理器可以直接在内存上执行位访问时,才通过两个任务实现并发位访问。所有x86和x64系统都具有用于在内存中进行位访问的命令。诸如ARM和PPC之类的系统无法直接访问内存中的位。

如果两个任务同时执行位访问,即使处理器不能直接在内存中执行位访问,也请按以下步骤进行。使用信号量(SysSemEnter)或类似的技术来防止竞争位访问。但是,最好在任务中执行位访问。

.声明的语法:

<变量名称> : <数据类型> ( := <初始化值> )? ;

<数据类型> = BYTE | WORD | DWORD | LWORD | SINT | USINT | INT | DINT | UDINT | LINT | ULINT
 

.调用的语法:

<变量名称>.<索引>
 

通过位访问,可以在整数变量内以读取或写入权限访问单个位。为此,向变量标识符添加点和索引,以寻址变量中的位。索引从0开始。索引是一个从0开始的正整数。你也可以将索引指定为一个常量。

.

.例如


PROGRAM PLC_PRG
VAR
    wA : WORD := 16#FF;
    xB : BOOL := 0;
END_VAR
wA.2 := xB;
 

在程序中,变量wA的第三位设置为变量xB的值。

wA = 2#1111_1111_1111_1011 = 16#FFFB

.
位访问具有全局常量的变量

你可以使用全局常量作为索引来访问整数变量中的位。

.

.例如:位访问整数变量。

.全局变量列表中的声明:


VAR_GLOBAL CONSTANT
    c_usiENABLE : USINT := 2;
END_VAR
 

常量c_usiENABLE寻址整数变量中的位。

.声明一个POU:


VAR
    iX : INT;
END_VAR
 

.使用位访问调用:


iX.c_usiENABLE :=  TRUE; // 变量iX的第三位设置为TRUE
 
.
使用BIT数据类型进行位访问

使用BIT数据类型,可以将单个位组合成一个结构,然后分别访问它们。然后用组件名称寻址该位。

.

.例如: 访问位数据类型

.结构体声明:


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 
 

.声明POU:


VAR
    ControllerDrive_1 : ControllerData;
END_VAR
 

.位访问:


ControllerDrive1.OperationEnabled := TRUE;