说明
VARIANT 数据类型的参数是一个指针或引用,可指向各种不同数据类型的变量。VARIANT 指针无法指向实例,因此不能指向多重实例或多重实例的 ARRAY。VARIANT 指针可以是基本数据类型(例如,INT 或 REAL)的对象。还可以是 STRING、DTL、STRUCT 类型的 ARRAY、UDT、UDT 类型的 ARRAY。VARIANT 指针可以识别结构,并指向各个结构元素。VARIANT 数据类型的操作数不占用背景数据块或工作存储器中的空间。但是,将占用 CPU 上的存储空间。
VARIANT 类型的变量不是一个对象,而是对另一个对象的引用。在函数的块接口中的 VAR_IN、VAR_IN_OUT 和 VAR_TEMP 部分中,VARIANT 类型的单个元素只能声明为形参。因此,不能在数据块或函数块的块接口静态部分中声明,例如,因为各元素的大小未知。所引用对象的大小可以更改。
使用 VARIANT 数据类型时,可为各种数据类型创建通用的标准函数块 (FB) 或函数 (FC)。为此,可使用所有编程语言中的各种指令。在程序创建过程中,可指定该块可处理数据类型。在此,可使用 VARIANT 数据类型对各种变量进行互连。之后,再根据这些变量在块中的数据类型进行响应。调用某个块时,可以将该块的参数连接到任何数据类型的变量。调用某个块时,除了传递变量的指针外,还会传递变量的类型信息。块代码随后可以根据运行期间传递的变量类型来执行。
例如,如果函数的块参数为 VARIANT 数据类型,那么整数数据类型的变量可以在程序中的一个点处传递,而 PLC 数据类型的变量可以在程序中的另一个点处传递。借助 VARIANT 指令,函数随后可以正确响应这种情况,而不会出错。
说明 如果一个数据块最初的数据类型为用户自定义的数据类型 (UDT),那么只能指向完整的数据块。 |
说明 访问 I/O 只有 S7-1500 模块的 CPU 才能直接读写 I/O 输出或输出中的信号。(<操作数>:P) |
长度(字节) | 表示法 | 格式 | 输入值示例 |
---|---|---|---|
0 | 符号 | 操作数 | "TagResult" |
数据块名称.操作数名称.元素 | "Data_TIA_Portal".StructVariable.FirstComponent | ||
绝对 | 操作数 | %MW10 | |
数据块编号.操作数 类型长度 | P#DB10.DBX10.0 INT 12 1) | ||
NULL 指针 | NULL |
数据类型的编码
如果通过 P# 使用绝对寻址,则允许使用以下数据类型:
BOOL
BYTE
CHAR
WORD
INT
DWORD
DINT
REAL
TIME
S5TIME
DATE
TOD
DT
示例
以下示例说明了 VARIANT 使用 STL 指令“MOVE:移动值”的工作原理:
STL | 说明 |
---|---|
CALL MOVE | // 调用指令。 |
value_type := VARIANT | // 参数 IN 和 OUT 的数据类型 |
IN := "Data_TIA_Portal".StructVariable.FirstComponent | // 从“Data_TIA_Portal”数据块移动操作数“FirstComponent”中的数据。 |
OUT := "MotorDB".StructResult.TagResult | // 从“MotorDB”数据块传送到“TagResult”操作数中。 |
VARIANT 指令的应用方式
简介
在下一章中,您将了解可用于 VARIANT 指令的应用选项。
对 VARIANT 指向的变量的数据类型求值
在下表中,您将看到可使用哪些指令来对 VARIANT 指向的变量的数据类型求值:
函数 | 指令 | 说明 |
---|---|---|
确定数据类型 |
TypeOf():检查 VARIANT 变量的数据类型 (该指令仅适用于 SCL,且只能与 IF 或 CASE 指令一起使用。) |
可使用该指令将 VARIANT 变量指向的数据类型与任何其它变量的数据类型进行比较。也可以与 PLC 数据类型作比较。 |
TypeOfElements():扫描 VARIANT 变量 ARRAY 元素的数据类型 (该指令仅适用于 SCL,且只能与 IF 或 CASE 指令一起使用。) |
可使用该指令将 VARIANT 变量指向的数据类型与任何其它变量的数据类型进行比较。也可以与 PLC 数据类型作比较。如果 VARIANT 变量的数据类型为 ARRAY,则将比较 ARRAY 元素的数据类型。 | |
EQ_Type:比较数据类型与变量数据类型是否“相等” NE_Type:比较数据类型与变量数据类型是否“不相等” |
可使用该指令将 VARIANT 变量指向的数据类型与任何其它变量的数据类型进行比较。也可以与 PLC 数据类型作比较。 | |
EQ_ElemType:比较 ARRAY 元素数据类型与变量数据类型是否“相等” NE_ElemType:比较 ARRAY 元素数据类型与变量数据类型是否“不相等” |
可使用该指令将 VARIANT 变量指向的数据类型与任何其它变量的数据类型进行比较。也可以与 PLC 数据类型作比较。如果 VARIANT 变量的数据类型为 ARRAY,则将比较 ARRAY 元素的数据类型。 | |
对 ARRAY 元素求值 | IS_ARRAY:检查 ARRAY | 可使用该指令检查 VARIANT 变量指向的数据类型是否为 ARRAY。 |
CountOfElements:获取 ARRAY 元素个数 | 可使用该指令读出该变量中 VARIANT 变量指向了多少个 ARRAY 元素。 |
可以在信息系统的“基本指令 > 对应编程语言”(Basic instructions > Respective programming language) 下找到有关各种指令的其它信息。
读取 VARIANT 指向的数据
为了能够使用数据,您必须在一个中间步骤中将该数据移到变量中,因为无法直接处理该数据。
指令 | 说明 | 示例 | 结果 | |
---|---|---|---|---|
VARIANT 指向 | 目标数据类型 | |||
VariantGet:读取 VARIANT 变量值 | 可使用该指令将单个变量的值移到另一个变量中。这两个变量的数据类型必须匹配。 | UDT_1 | UDT_1 | 已执行该指令。 |
REAL | REAL | |||
DINT | DWORD | 该指令未执行。 |
将数据分配给 VARIANT 变量
无法使用该指令来初始化 VARIANT 变量。因此,在将数据返回到变量时必须已经初始化 VARIANT 变量。请勿使用未初始化的临时 VARIANT 变量。
指令 | 说明 | 示例 | 结果 | |
---|---|---|---|---|
源数据类型 | VARIANT 指向: | |||
VariantPut:写入 VARIANT 变量值 | 可使用该指令将单个变量的值移到另一个变量中。这两个变量的数据类型必须匹配。 | UDT_1 | UDT_1 | 已执行该指令。 |
REAL | REAL | |||
DINT | DWORD | 将不执行该指令,因为数据类型不同。 |
处理动态 ARRAY 结构
对 ARRAY 元素求值 |
TypeOfElements():扫描 VARIANT 变量 ARRAY 元素的数据类型 (该指令仅适用于 SCL,且只能与 IF 或 CASE 指令一起使用。) |
可使用该指令将 VARIANT 变量指向的数据类型与任何其它变量的数据类型进行比较。也可以与 PLC 数据类型作比较。如果 VARIANT 变量的数据类型为 ARRAY,则将比较 ARRAY 元素的数据类型。 |
IS_ARRAY:检查 ARRAY | 可使用该指令检查 VARIANT 变量指向的数据类型是否为 ARRAY。 | |
CountOfElements:获取 ARRAY 元素个数 | 可使用该指令读出该变量中 VARIANT 变量指向了多少个 ARRAY 元素。 | |
MOVE_BLK_VARIANT:块移动 | 可使用该指令移动动态和类型安全(集成类型测试)ARRAY。可以为源和目标 ARRAY 自由选择限值。ARRAY 元素的数据类型必须匹配。 |
说明 MOVE、MOVE_BLK 和 MOVE_BLK_VARIANT 之间的区别 可使用“MOVE”指令来复制完整的结构。 可使用“MOVE_BLK”指令来移动具有已知数据类型的 ARRAY 的部分。 仅在您想要移动其数据类型仅在程序运行时期间已知的 ARRAY 的部分时,才需要使用 MOVE_BLK_VARIANT 指令。 |
审核编辑:汤梓红
-
plc
+关注
关注
5008文章
13149浏览量
461985 -
cpu
+关注
关注
68文章
10824浏览量
211109 -
变量
+关注
关注
0文章
613浏览量
28328 -
数据类型
+关注
关注
0文章
236浏览量
13608 -
S7-1500
+关注
关注
3文章
300浏览量
6338
原文标题:博途新变量: 有关 VARIANT 的基本信息
文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论