设为首页
收藏本站
PLC技术网
开启辅助访问
切换到宽版
登录
注册哦
只需一步,快速开始
微信扫码登录
门户
Portal
论坛
BBS
导读
Guide
排行榜
Ranklist
搜索
搜索
本版
文章
帖子
用户
PLC论坛-全力打造可编程控制器专业技术论坛
»
论坛
›
工控技术交流区
›
『国外:三菱/西门子/欧姆龙/松下』
›
【变量指令说明】SIMATIC S7-1200的移动操作 ...
返回列表
发新帖
[西门子]
【变量指令说明】SIMATIC S7-1200的移动操作
[复制链接]
38551
|
0
|
2024-11-27 08:10:34
|
显示全部楼层
|
阅读模式
从TIAV13SP1开始,S7-1200 V4.0开始,支持以下处理Variant类型的变量的指令,如图1所示。
图1:指令位置
VariantGet、VariantPut
图2:VariantGet指令详情
图3:VariantPut指令详情
VariantGet
表1:VariantGet指令说明
注意:DST不能是复杂数据类型的数组。
说明:
VariantGet指令用于从 FC/FB 的输入/输出/输入输出/临时变量以及 OB 的临时变量中读取 Variant 类型的参数。
该指令将 Variant 参数指向的变量数据复制到 DST 指定的变量中。为了正确读取数据,Variant 参数指向的变量类型必须与 DST 变量的类型相匹配。
在执行读取操作之前,建议使用IS_NULL 指令来检查 Variant 是否指向 NULL 值。通过 Variant 判断指令,可以确定 Variant 指向的变量类型或数组类型。
如果两个数组类型相同,但长度不同,VariantGet指令会只读取双方元素数量较少的那个数组的长度。如果两个数组类型不同,则不会执行读取操作。如果启用指令的 ENO 功能,则 ENO 将会设置为 False。
表2:VariantPut指令说明
注意:SRC不能是复杂数据类型的数组。
VariantPut指令用于将 SRC 变量的数据写入到 Variant 参数指向的变量中。该 Variant 参数必须与 SRC 变量的类型相匹配。
在执行写入操作之前,建议使用 IS_NULL 指令来检查 Variant 是否指向 NULL 值。通过 Variant 判断指令,可以确定 Variant 指向的变量类型或数组类型。
如果两个数组类型相同,但长度不同,VariantPut将只写入双方元素数量较少的那个数组的数据。如果两个数组类型不同,则不会执行写入操作。如果启用指令的 ENO 功能,则 ENO 将设置为 False。
需要注意的是,VariantPut指令无法初始化一个 Variant 类型的变量。因此,在执行 VariantPut 之前,需要确保 Variant 参数指向的变量已经被正确地初始化或赋值。
总的来说,在使用VariantPut 指令时,需要确保 Variant 参数指向的变量与 SRC 变量的类型相匹配,并遵循上述的其他注意事项。
使用场合
VariantGet和 VariantPut 通常在处理不定长度数组,但数组长度有固定上限,或者有多种数据类型的数组时,会非常高效。这是因为这两个指令可以直接处理 Variant 类型的参数,而无需进行额外的类型转换或数据匹配,从而提高了处理效率。
此外,由于Variant 类型的灵活性,这两个指令可以根据实际的数据类型进行相应的处理,从而避免了因数据类型不匹配而导致的错误或性能下降。
因此,在需要处理多种数据类型或不定长度的数组时,使用 VariantGet 和 VariantPut 可以提高程序的效率和准确性。
此外,这两个指令还可以配合DB_ANY_TO_VARIANT实现更多功能。
使用举例:
创建FC16 函数块,其功能是根据传入的不同输入类型,分别调用 FC17 和 FC18 函数块。其中,FC17 的输入/输出参数标记为 "VGP1",而 FC18 的输入/输出参数标记为 "VGP2"。具体的调用逻辑和参数配置如图4和图5所示。
图4:参数设置
图5:例子程序
CountOfElements
·如果操作数在FC/FB的Input/Output/InOut/Temp中定义为 Variant类型的参数,并且对应的实参是数组或P#指针格式,那么使用 CountOfElements(操作数) 将返回元素的总个数。
·注意:
·如果Variant指向单个变量,则返回0。
·如果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。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
注册哦
x
回复
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册哦
本版积分规则
发表回复
回帖后跳转到最后一页
zqs1688
回复楼主
返回列表
『国外:三菱/西门子/欧姆龙/松下』
『国产:台达/汇川/信捷产品交流区』