| 提示!
仅当处理器可以直接在内存上执行位访问时,才通过两个任务实现并发位访问。所有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数据类型,可以将单个位组合成一个结构,然后分别访问它们。然后用组件名称寻址该位。
.例如: 访问位数据类型
.结构体声明:
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;