Variant 类型是一种参数数据类型,通常只出现在 OB/FC/FB 接口区,除了 FB 的静态变量之外。Variant 类型的实参可以是一个可以指向不同数据类型变量的指针,包括基本数据类型和复杂数据类型、UDT 等。
Variant 数据类型提供了一种多功能的数据选项,它不会在背景数据块或工作存储器中占用空间,但会在 CPU 的装载存储器中占用存储空间。当调用一个块时,可以使用 Variant 参数与任何数据类型的变量相连接。这不仅传递了变量的指针,还传递了变量的类型信息,使得块识别并相应地处理这些数据。程序块可以使用 Variant 的相关指令来识别并处理这些参数。
需要注意的是,Variant 类型的数据在处理过程中可能会出现数据类型转换的问题,因此在使用时需要谨慎。
总的来说,Variant 类型是一种灵活的数据类型,可以在不同的数据类型之间进行转换,但在使用时需要考虑到数据类型的兼容性和转换可能带来的问题。
Variant指向的实参,可以是符号寻址,也可以是juedui地址寻址,还可以是形如P#DB1.DBX0.0 BYTE 10这种指针形式的寻址。
在早期版本的 TIA Portal 软件中,只有一些通讯指令使用 Variant 变量。然而,从 TIA V13SP1 和 S7-1200 V4.0 开始,可以在程序块的实参中定义 Variant 类型变量,并且可以通过以下指令处理 Variant 类型的变量:
1. 判断类指令
这类指令主要用于检查 Variant 类型实参的实际类型,但并不直接处理变量。这种指令非常有用,因为它可以帮助程序块识别 Variant 参数的实际数据类型,以便进行相应的处理。Variant 类型的变量可以根据其实际的数据类型进行不同的处理操作。具体可以参考相关文档或用户手册中关于判断类指令的内容。参见表1。
表1 判断类指令
2. 处理类指令
该类指令可以对Variant类型的实参进行转化,参见表2。
表2 处理类指令
3. 其他指令
DB_ANY_TO_VARIANT与VARIANT_TO_DB_ANY,参见DB_ANY数据类型。
P#指针说明
当Variant类型的实参指向形如P#DB1.DBX0.0 BYTE 10,指令内部将判断该形参为一个10字节的数组。
指针结构
S7-300/S7-400中的 Any 指针结构指的是 P#DB1.DBX0.0 BYTE 10 这种形式的指针。与 S7-300/S7-400 不同,S7-1200无法像前者那样定义和拆解 Any 指针。然而,在参数类型为 Variant 时,可以输入这种指针形式,并且 S7-1200 将其识别为数组。
P#DB1.DBX0.0 BYTE 10的解释:P#DB1.DBX0.0 BYTE 10 是一种指针表达式,用于指定从 DB1 数据块的 DBX0 开始的 10 个字节的数据。在使用这种指针时,DB1 必须是未经优化的 DB 块,并且该块中必须包含长度为 10 字节的变量。
这种指针结构可以修改为指向其他 DB 块,例如 P#DB10.DBX,或者指向 I 区、Q 区、M 区的指针,分别是 P#I、P#Q、P#M。
在指针表达式中,0.0 表示起始地址,例如 1.0、100.0 等,且小数点后必须是 0。
BYTE 后面跟随的数据类型可以是 Bool、Byte、Word、DWord、Int、DInt、Real、Char、Date、TOD 或 Time。
最后的数字 10 表示指针指向的数据类型实例的数量。对于 Bool 类型,数量必须是 1 或 8 的倍数。
P#指针举例,P#I0.0 Bool 8,P#Q0.0 Word 20,P#M100.0 Int 50。