• {{item.name}}
{{item.name}}
{{item2.name}}
更多

Variant

star star star star star
0 分
  • 基础理论
发布时间:2024年01月15日
  • 0
  • 14
Variant

Variant类型

Variant类型是一个参数数据类型,只能出现在除FB的静态变量以外的OB/FC/FB接口区。
Variant类型的实参是一个可以指向不同数据类型变量的指针。它可以指向基本数据类型,也可以指向复杂数据类型、UDT等。
Variant 数据类型的操作数不占用背景数据块或工作存储器中的空间,但是将占用 CPU 上的装载存储器的存储空间。
调用某个块时,可以将该块的Variant参数连接任何数据类型的变量。除了传递变量的指针外,还会传递变量的类型信息。该块中可以利用Variant的相关指令,将其识别出并进行处理。
Variant指向的实参,可以是符号寻址,也可以是绝对地址寻址,还可以是形如P#DB1.DBX0.0 BYTE 10这种指针形式的寻址。

在早期版本的TIA博途软件中,只有一些通讯指令使用Variant变量。从TIA V13SP1 开始,S7-1200 V4.0开始,可以在程序块实参定义Variant类型变量,并且还可以通过以下指令处理Variant类型的变量。

1. 判断类指令,该类指令作用是检查Variant类型的实参的实际类型,并不参与直接处理,参见表1。

表1 判断类指令

LADSCL位置
EQ_TypeTypeOf基本指令 -- 比较操作 -- 变量
NE_Type
EQ_ElemTypeTypeOfElements
NE_ElemType
IS_NULL
NOT_NULL
IS_ARRAYIS_ARRAY
CountOfElementsCountOfElements基本指令 -- 移动操作 -- 变量

2. 处理类指令,该类指令可以对Variant类型的实参进行转化,参见表2。

表2 处理类指令

LAD/SCL位置
Deserialize基本指令 -- 移动操作
Serialize
MOVE_BLK_VARIANT
VariantGet基本指令 -- 移动操作 -- 变量
VariantPut

3. 其他指令

DB_ANY_TO_VARIANT与VARIANT_TO_DB_ANY,参见DB_ANY数据类型。

P#指针说明

当Variant类型的实参指向形如P#DB1.DBX0.0 BYTE 10,指令内部将判断该形参为一个10字节的数组。


指针结构

P#DB1.DBX0.0 BYTE 10这种结构起源于S7-300/S7-400的Any指针,S7-1200无法像S7-300/S7-400一样定义以及拆解Any指针,但是在参数类型为Variant时,可以输入这种指针。并且,如前所述,S7-1200将识别其为数组。

P#DB1.DBX0.0 BYTE 10的解释:指向从DB1.DBX0.0开始的10个字节,并且DB1必须是非优化的DB块,并包含有10字节长度的变量。

  • P#DB1.DBX位置可以替换成其他DB块号例如P#DB10.DBX,或者I区:P#I,Q区:P#Q,M区: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。

剩余80%未阅读,请登录查看大全章节内容

  • 评论
更多
  • 分享

    扫码分享

扫码进入移动端

信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。