Skip to main content

运算符:__VARINFO

运算符是 IEC 61131-3 标准的扩展。

运算符产生有关变量的信息。您可以将信息作为数据结构保存在数据类型的变量中 __SYSTEM.VAR_INFO.

声明中的语法

<name of the info variable> : __SYSTEM.VAR_INFO; // Data structure for info variable

调用语法

<name of the info variable> := __VARINFO( <variable name> ); // Call of the operator
153. 例子
FUNCTION_BLOCK FB_Velocity
VAR_INPUT
        rVelocity: REAL := 1.2;
END_VAR
VAR_OUTPUT
END_VAR
VAR
        infoVelocity: __SYSTEM.VAR_INFO; //Info of Velocity
END_VAR

infoVelocity := __VARINFO(rVelocity); // Gets the info of Velocity locally
PROGRAM PLC_PRG
VAR
        iCounter : INT := 0; // Counts the calls
        infoCounter : __SYSTEM.VAR_INFO; //Info of Counter
        arrA : ARRAY [1..2, 1..2, 1..2] OF INT := [0, 1, 2, 3, 4, 5, 6, 7]; // Stores the A data
        infoA : __SYSTEM.VAR_INFO; //Info of A
        fbVel : FB_Velocity;
END_VAR

iCounter := iCounter + 1;
infoCounter := __VARINFO(iCounter);
infoA := __VARINFO(arrA);
fbVel();

iCounterarrA 变量在应用程序代码中被识别。变量信息保存在 infoCounterinfoA 变量。此外, FB_Velocity 功能块被实例化。



数据类型:__SYSTEM.VAR_INFO

名称

数据类型

初始化

描述

ByteAddress

DWORD

0

变量地址

例子: 16#072E35EC

注意:对于变量的位访问 <variable name>.<bit index>,给出包含该位的变量的地址。

ByteOffset

DWORD

0

变量地址的偏移量(以字节为单位)

例子: 13936 字节

注意:如果变量是全局的,那么偏移量是相对于区域的开始的。如果变量是函数或方法中的局部变量,则偏移量是相对于当前堆栈帧的。如果变量是功能块中的局部变量,则偏移量是相对于功能块实例的。

Area

DINT

0

存储区号 Area 在运行时系统中

例子: -1

表示该变量在内存中不是全局的,而是相对于一个实例或堆栈上的

注意:内存区域取决于设备。

BitNr

INT

0

位数(以字节为单位)

例子: 16#00FF 字节

注意:如果变量是 不是 整数数据类型,然后: BitNr = -1 = 16#FFFF

BitSize

INT

0

变量的内存大小(以位为单位)

例子: 16

BitAddress

UDINT

0

变量的位地址

要求:变量位于输入内存区 I, 输出内存区域 Q, 或标记存储区 M.否则该值未定义。

TypeClass

TYPE_CLASS

TYPE_BOOL

变量的数据类型类

例子: TYPE_INT, TYPE_ARRAY

注意:对于用户定义的数据类型或功能块实例, TYPE_USERDEF 作为数据类型类输出。

TypeName

STRING(79)

''

变量的日期类型名称为 STRING(79)

注意:对于用户定义的数据类型,输出功能块名称或 DUT 名称。

例子: 'INT', 'ARRAY'

NumElements

UDINT

0

数组元素的数量

要求:变量具有数据类型 ARRAY.

例子: 8

BaseTypeClass

TYPE_CLASS

TYPE_BOOL

数组元素的基本数据类型

要求:变量具有数据类型 ARRAY.

例子: TYPE_INT 为了 arrA : ARRAY [1..2,1..2,1..2] OF INT;

ElemBitSize

UDINT

0

数组元素的内存大小(以位为单位)

要求:变量具有数据类型 ARRAY.

例子: 16arrA : ARRAY [1..2,1..2,1..2] OF INT;

MemoryArea

MEMORY_AREA

MEM_MEMORY

关于内存区域的信息

  • MEM_GLOBAL: 全局内存区域

    示例:在 Area 0

  • MEM_LOCAL: 本地内存区域

    Area -1

  • MEM_MEMORY:标记存储区 %M

    示例:在 16#10Area 1

  • MEM_INPUT: 输入存储区 %I

    示例:在 16#04Area 2

  • MEM_OUTPUT:输出存储区 %Q

    示例:在 16#08Area 3

  • MEM_RETAIN: 保留内存区域

    示例:在 16#20Area 0

例子: MEM_GLOBAL

注意:内存区域配置取决于设备。

Symbol

STRING(39)

''

变量名称为 STRING(39)

例子: 'iCounter', 'arrA'

Comment

STRING(79)

''

变量声明的注释

例子: 'Counts the calls' 或者 'Stores the A data'