



注意

只有当处理器能直接在内存上执行位访问时,两个任务才能同时执行位访问。所有 x86 和 x64 系统都有内存位访问命令。ARM 和 PPC 等系统无法直接访问内存中的位。
如果两个任务同时执行位访问,即使处理器不能直接在内存中执行位访问,也要按以下步骤进行。使用信号灯 (SysSemEnter
) 或类似技术来防止竞争位访问。不过,最好在任务中执行位访问。
通过索引访问,可以在整数变量中寻址单个位。通过使用结构变量或功能块实例,可以对单个位进行符号寻址。
访问比特整数变量的索引
您可以对整数变量中的单个位进行寻址。为此,请在变量后添加一个点和寻址位的索引。位指数可以由任何常数给出。索引以 0 为基础。
语法
<integer variable name> . <index> <integer data type> = BYTE | WORD | DWORD | LWORD | SINT | USINT | INT | UINT | DINT | UDINT | LINT | ULINT
示例
在程序中,变量wA
的第三位被设置为变量xB
的值。常数c_usiENABLE
是访问变量iX
第三位的索引。
索引访问
PROGRAM PLC_PRG VAR wA : WORD := 16#FFFF; xB : BOOL := 0; END_VAR // Index access in an integer variable wA.2 := xB;
结果 wA = 2#1111_1111_1111_1011 = 16#FFFB
常数作为指数
// 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
结果 iX = 4
结构变量中的符号位访问
通过BIT
数据类型,您可以将单个比特组合成一个结构,然后单独访问它们。然后用元件名称对位。
示例
结构类型声明:
TYPE S_CONTROLLER : STRUCT bitOperationEnabled : BIT; bitSwitchOnActive : BIT; bitEnableOperation : BIT; bitError : BIT; bitVoltageEnabled : BIT; bitQuickStop : BIT; bitSwitchOnLocked : BIT; bitWarning : BIT; END_STRUCT END_TYPE
位的声明和写入权限:
PROGRAM PLC_PRG VAR ControlDriveA : S_CONTROLLER; END_VAR // Symbolic bit access to bitEnableOperation ControlDriveA.bitEnableOperation := TRUE;
功能块实例中的符号位访问
在功能块中,可以为单个位声明变量。
示例
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);