0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

支持处理Variant类型的变量的指令说明

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 2023-01-03 16:56 次阅读

TIA V13SP1 开始,S7-1200 V4.0开始,支持以下处理Variant类型的变量的指令,如图1所示。

ed634fb8-88d4-11ed-bfe3-dac502259ad0.png

图1 指令位置

VariantGet、VariantPut

ed799ad4-88d4-11ed-bfe3-dac502259ad0.jpg

图2 VariantGet指令详情

ed8ad114-88d4-11ed-bfe3-dac502259ad0.jpg

图3 VariantPut指令详情

VariantGet

表1 VariantGet指令说明

参数 声明 数据类型 说明
SRC Input Variant 待读取的变量
DST Output 基本数据类型、复杂数据类型 读取的结果

注意:DST不能是复杂数据类型的数组。

说明:

1. VariantGet的SRC是FC/FB的Input/Output/InOut/Temp以及OB的Temp中定义为Variant类型的参数。

2. VariantGet将Variant参数指向的变量读取到DST中,要求Variant参数指向的变量一定要和DST的变量类型相同。

3. 建议读取之前使用IS_NULL判断Variant是否指向NULL。通过Variant判断指令确定指向的变量类型,或者数组类型。

4. 如果双方是相同元素的数组类型,其长度可以不同,读取时只按照双方中元素少的数量读取。

5. 如果双方类型不相同,则不会发生读取。如果激活指令的ENO功能,则ENO=False。

VariantPut

表2 VariantPut指令说明

参数 声明 数据类型 说明
SRC Input 基本数据类型、复杂数据类型 待读取的变量
DST Input Variant 读取的结果

注意:SRC不能是复杂数据类型的数组。

1. VariantPut的DST是FC/FB的Input/Output/InOut/Temp以及OB的Temp中定义为Variant类型的参数。

2. VariantPut将SRC的变量写入到Variant参数指向的变量中,要求Variant参数指向的变量一定要和SRC的变量类型相同。

3. VariantPut无法初始化一个Variant类型变量。所以建议写入之前使用IS_NULL判断Variant是否指向NULL。通过Variant判断指令确定指向的变量类型,或者数组类型。

4. 如果双方是相同元素的数组类型,其长度可以不同,读取时只按照双方中元素少的数量读取。

5. 如果双方类型不相同,则不会发生读取。如果激活指令的ENO功能,则ENO=False。

使用场合:

通常,VariantGet、VariantPut用在不定长度数组,但数组长度有固定上限时,或者有多种数据类型的数组时,都会非常高效。

此外,这两个指令还可以配合DB_ANY_TO_VARIANT与VARIANT_TO_DB_ANY实现更多功能。

使用举例:

编写FC16,根据不同的输入类型,调用不同FC17和FC18,FC17的InOut为“VGP1”,FC18的InOut为“VGP2”,如图4图5所示。

ed9415e4-88d4-11ed-bfe3-dac502259ad0.jpg

图4 参数设置

edaf9b3e-88d4-11ed-bfe3-dac502259ad0.jpg

图5 例子程序

CountOfElements

LAD 操作数 说明
edc8b024-88d4-11ed-bfe3-dac502259ad0.jpg Variant 如果操作数对应的实参为数组或者P#指针格式,该指令返回元素总个数,否则返回0。返回值RET_VAL为UDInt类型。操作数是FC/FB的Input/Output/InOut/Temp以及OB的Temp中定义为Variant类型的参数。

CountOfElements(操作数),操作数是FC/FB的Input/Output/InOut/Temp中定义为Variant类型的参数,如果操作数对应的实参为数组或者P#指针格式,CountOfElements(操作数)为元素总个数。

注意:

1. 如果Variant指向单个变量,则返回0。

2. 如果Variant 指向 Array of Bool,则填充元素包含在计数中。(例如,Array[0..1] of Bool 将返回 8)。

使用方法:

元素个数(UDInt) := CountOfElements(操作数);

使用举例:

编写FC,检查输入的3个Variant变量类型,分别判断实参是否是数组形式,如果是则输出True,不是则输出False,此外如果是数组则输出数组元素个数,不是则输出0,如图6-9所示。

edd71f92-88d4-11ed-bfe3-dac502259ad0.jpg

图6 参数设置

edf18418-88d4-11ed-bfe3-dac502259ad0.jpg

图7 例子程序1

ee182bc2-88d4-11ed-bfe3-dac502259ad0.jpg

图8 例子程序2

ee2fef78-88d4-11ed-bfe3-dac502259ad0.jpg

图9 FC10的调用

由图9中可知,Array[0..1] of "UDT_1"是数组,元素个数是2,Array[0..1, 0..2] of Byte是数组,该二维数组元素总个数是2×3=6,P#M100.0 BYTE 2视作数组,元素个数是2。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ENOB
    +关注

    关注

    2

    文章

    14

    浏览量

    13485
  • DST
    DST
    +关注

    关注

    0

    文章

    9

    浏览量

    9680
  • SRC
    SRC
    +关注

    关注

    0

    文章

    60

    浏览量

    17801

原文标题:移动操作 - 变量 指令说明

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    VARIANT变量类型VARTYPE

    VARIANT类型变量的vt值,得以确认: enum VARENUM { VT_EMPTY =0,VT_NULL = 1,VT_I2 = 2,VT_I4 = 3,VT_R4 = 4,VT_R8
    发表于 07-09 04:47

    用户自定义结构数据怎么存储成VARIANT类型

    将用户自定义的C结构数据存储成VARIANT类型,需要时再将VARIANT类型转为用户自定义的结构数据,有十分现实的意义,既然我们不想为这样的结构数据写一个COM包装类。虽然有很多方法
    发表于 08-02 07:08

    怎么将用户自定义的C结构数据存储成VARIANT类型

    将用户自定义的C结构数据存储成VARIANT类型,需要时再将VARIANT类型转为用户自定义的结构数据,有十分现实的意义,既然我们不想为这样的结构数据写一个COM包装类。虽然有很多方法
    发表于 08-02 07:08

    高效的C编程之变量类型

    14.8 变量类型 ARM C编译器支持基本的数据类型:char、short、int、long long、float和double。表14.2说明
    发表于 10-17 16:50 3次下载
    高效的C编程之<b class='flag-5'>变量</b><b class='flag-5'>类型</b>

    PHP八种变量类型的详细资料说明

    本文档的主要内容详细介绍的是PHP八种变量类型的详细资料说明免费下载。
    发表于 03-01 17:20 7次下载
    PHP八种<b class='flag-5'>变量</b><b class='flag-5'>类型</b>的详细资料<b class='flag-5'>说明</b>

    Python的变量类型详细资料说明

    Python 中的变量赋值不需要类型声明。每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。每个变量在使用前都必须赋值,
    发表于 08-24 16:47 3次下载
    Python的<b class='flag-5'>变量</b><b class='flag-5'>类型</b>详细资料<b class='flag-5'>说明</b>

    Python的变量类型详细说明

    变量赋值Python 中的变量赋值不需要类型声明。 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。每个
    发表于 01-15 16:29 1次下载
    Python的<b class='flag-5'>变量</b><b class='flag-5'>类型</b>详细<b class='flag-5'>说明</b>

    S7-1200比较操作-变量指令说明

    SCL指令:TypeOf(操作数),操作数是FC/FB的Input/Output/InOut/Temp中定义为Variant类型的参数,该语句输出是数据类型,在程序中只能用在IF与CA
    的头像 发表于 03-28 11:12 3601次阅读

    Variant类型变量指令说明

    SCL指令:TypeOf(操作数),操作数是FC/FB的Input/Output/InOut/Temp中定义为Variant类型的参数,该语句输出是数据类型,在程序中只能用在IF与CA
    的头像 发表于 03-30 15:13 2233次阅读

    STRUCT和UDT类型变量是什么意思

    STRUCT和UDT类型变量是表示一个完整结构或一个结构元素的结构化变量
    的头像 发表于 08-29 11:09 1710次阅读

    浅析python的变量类型

    python不需要事先声明变量。 python的变量类型是在运行过程中自动决定的,不需要代码声明类型
    的头像 发表于 03-10 10:11 589次阅读
    浅析python的<b class='flag-5'>变量</b><b class='flag-5'>类型</b>

    博途新变量:有关VARIANT的基本信息

    VARIANT 数据类型的参数是一个指针或引用,可指向各种不同数据类型变量VARIANT 指针无法指向实例,因此不能指向多重实例或多重实
    的头像 发表于 06-07 10:49 1602次阅读

    西门子博途:有关VARIANT的基本信息

    VARIANT 数据类型的参数是一个指针或引用,可指向各种不同数据类型变量VARIANT 指针无法指向实例,因此不能指向多重实例或多重实
    的头像 发表于 06-12 10:03 4174次阅读
    西门子博途:有关<b class='flag-5'>VARIANT</b>的基本信息

    西门子博途中的SCL关系表达式

    以从指令框的下拉列表中选择该比较指令的数据类型 VARIANT支持以下数据类型
    的头像 发表于 06-21 09:31 2043次阅读

    介绍一下MOVE_BLK_VARIANT指令在使用中应注意的问题

    块移动指令包括两个:MOVE_BLK和MOVE_BLK_VARIANT,实际项目中都经常被用到。
    的头像 发表于 03-04 10:51 692次阅读
    介绍一下MOVE_BLK_<b class='flag-5'>VARIANT</b><b class='flag-5'>指令</b>在使用中应注意的问题