TIA PORTAL(博图)中的Variant类型

已锁定

HwLib(慧兰博)

  • 帖子

    61
  • 精华

    5
  • 被关注

    106

论坛等级:侠士

注册时间:2016-11-25

普通 普通 如何晋级?

TIA PORTAL(博图)中的Variant类型

23648

30

2017-07-05 19:41:15

star star star star

    VARIANT是TIA PORTAL中一种全新的数据类型,仅适用于S7-1200/1500,它被设计用来取代ANY、POINTER类型。VARIANT是一种安全的类型,它不会产生类似于内存访问错误之类的问题。和ANY、POINTER类型一样,VARIANT的意义在于传递参数,也就是作为块的接口,这几种类型的引入极大的提高了PLC编程的灵活性。和ANY、POINTER类型不一样的是它不可以被解析,只能通过系统提供的指令进行操作。

    本质上,Variant和Any及Pointer这三种类型区别并不大,都是属于引用类型,并不占用内存空间,它们访问的是传入参数的地址。也正因为这个原因在DB中是不允许声明Variant类型的变量的。但作为接口参数,在背景DB中允许Variant存在。将背景DB切换为标准访问模式可以发现Variant类型的变量是不占用空间的,它们没有地址偏移,参见下图。

        因此VARIANT一般用于FB/FC接口参数的传递,而它被创建的意义也在于此。VARIANT可以传递除POINTER和ANY以外的任何类型的参数,在使用时首先用指令判断实参的实际类型然后进行读写。

对于SCL编程,TIA Portal提供了四种指令用以判断传入参数的数据类型,如下表所列。

    当我们获得了传入参数的数据,那我们就可以分别调用VariantGet和VariantPut指令去读写该参数的值,下面的变量声明和代码清单演示了这一操作。

    这段代码的功能是先判断变量in3是否属于INT类型,若不是则退出。若是的话,先读出该变量的值并传送到变量Q,再将该变量的值初始化为零。

    由此可见,VARIANT类型在易用性方面较ANY和POINTER类型更强一点。最重要的是,它是安全的,不会发生在运行时指向一个不存在的内存区域的情况。当然在提供安全性的同时,VARIANT类型也牺牲了一定的功能。

通常我们在开发一个带外部参数的FC或FB时都要为其指定相应的数据类型。而常常我们在调用该FC或FB时可能需要传入不同类型的变量。以一个开关选择器模块为例,这个模块有三个数值输入引脚、二个开关信号引脚和一个选择后的输出数值信号引脚,参见下图。

    对于该选择器模块,当我们在调用它时,有时可能传入的变量是整型,有时可能是双整型,而有时可能又是实型。基于这种情况,那我们可能需要分别编写参数类型为整型、双整型、单精度实型和双精度实型的模块来满足不同情况下的调用。而可不可能我们只编写一个模块就能满足不同情况下的调用呢?Variant类型可以满足这样的需求,只要我们将三个输入的数值参数和一个输出的数值参数定义为Variant类型就可以实现。这样我们在调用该模块时将被允许传入整型或双整型等不同类型的变量。

    下面我们以编写一个这样的模块来进一步了解Variant变量的使用。限于篇幅下图贴出了部分代码

    完成模块并调用,并为之分别赋予不同类型的参数。编译并下载到PLC中,可以看到无论是双整型变量还是浮点型变量,该模块都能正确的工作。但缺点也显而易见,就是模块的体积太大了。如前说述,Variant是引用传入参数的地址,因此自身无法做运算,只能将数据移入各种类型的临时变量再做运算。




TIA PORTAL(博图)中的Variant类型 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有8577条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。