[西门子] 【变量指令说明】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
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则