在整数变量中,可以访问个别位。为此,需将要寻址的位的索引添加到变量中,并以点分隔。您可以向位索引提供任何常量。索引基于 0。
如果您的处理器不支持直接位访问,可以使用信号量 (SysSemEnter) 或类似的方法来防止位访问竞争。但为了避免两个任务同时访问,建议仅在一个任务内执行位访问。
a : INT;
b : BOOL;
...
a.2 := b;
变量 a
的第三位将被设置为变量的值 b
,因此可变 a
将等于 3
如果索引大于变量的位宽度,则会生成以下消息:
'Index '<n>' outside the valid range for variable '<var>'!'
可以对以下数据类型的变量执行位寻址:
SINT
INT
DINT
USINT
UINT
UDINT
BYTE
WORD
DWORD
如果数据类型不允许访问位,则会生成以下消息:
'Invalid data type '<type>' for direct indexing'.
不能向 VAR_IN_OUT
变量分配位访问权。
如果已声明定义位索引的全局常量,则可使用此常量实现位访问。
通过全局常量实现的位访问和变量中的位访问的示例:
1. 在全局变量列表中声明全局常量
变量 enable
定义所访问的位:
VAR_GLOBAL CONSTANT
enable:int:=2;
END_VAR
2. 整数变量中的位访问
在 POU 中声明:
VAR
xxx:int;
END_VAR
位访问:
xxx.enable := true; (* -> the third bit in variable xxx will be set 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
ControllerDrive1:ControllerData;
END_VAR
位访问
ControllerDrive1.Status_OperationEnabled := 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);