从tia v13sp1 开始,s7-1200 v4.0开始,支持以下处理variant类型的变量的指令,如图1所示。
图1 指令位置
variantget、variantput
图2 variantget指令详情
图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所示。
图4 参数设置
图5 例子程序
countofelements
lad 操作数 说明
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所示。
图6 参数设置
图7 例子程序1
图8 例子程序2
图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。
温度传感器MF53-1构成的电子温度显示电路
固态变压器的容量怎么计算
存储器将在年底面临产能过剩危机
2023中国移动全球合作伙伴大会即将开启
吉利汽车涉足区块链等领域
支持处理Variant类型的变量的指令说明
智能交通系统的功能
浅谈BTB连接器的电气/机械/环境性能测试
关于亚马逊在做芯片方面的强大实力
“ECM+MEMS”巨头歌尔股份也有“Audio+Video”梦
stm32移植ucos iii教程
世界几大知名IT公司名字来由解析
电缆桥架一定要接地吗?什么情况桥架可以不用接地?
USB 3.0的5Gbps带宽改进用户体验
推荐4款高质量、低价格的Xilinx A7 FPGA开发板,小白大神都在用!
MLCC的结构及生产工艺流程介绍
智能合约的技术运作原理解析
小米创维PPTV忙降价 彩电厂商4月忙促销
云存储管理可以带来哪一些好处
英特尔在openEuler社区的贡献及未来规划