VARIANT(S7-1200, S7-1500)有关 VARIANT 的基本信息 (S7-1200, S7-1500) 说明 VARIANT数据类型的参数是一个指针或引用,可指向各种不同数据类型的变量。VARIANT 指 针无法指向实例,不能指向多重实例或多重实例的ARRAY。VARIANT 指针可以是基本数 据类型(例如,INT 或 REAL)的对象。还可以是 STRING、DTL、STRUCT类型的 ARRAY、 UDT、UDT 类型的 ARRAY。VARIANT 指针可以识别结构,并指向各个结构元素。VARIANT 数据类型的操作数不占用背景数据块或工作存储器中的空间。将占用 CPU 上的存储空间。示例:在程序循环中以迭代方式编辑不同的轴类型(S7-1500) 示例 以下示例显示了如何在 FOR 循环中以迭代方式编辑不同的轴类型。除了“SpeedAxis”类型之外,还可以在循环中处理派生轴类型,例如:“PositioningAxis”或“SynchronousAxis”轴类型。 1.创建一个全局数据块并声明一个“DB_ANY”数据类型的 ARRAY。任何工艺对象都可以在运行时 传递给DB_ANY。例如,可通过将特定的工艺对象分配给 ARRAY 元素来初始化启动 OB 中的 全局数据块。 2. 在 SCL块中,声明“REF_TO TO_SpeedAxis”数据类型的引用。“SpeedAxis”类型的轴以及派生轴 可以在运行时传递给引用。3. 在 FOR 循环中,检查“DB_Axis”中的每个工艺对象,以确定其是否与声明的引用匹配。为 此使用赋值尝试。如果赋值尝试成功,则读取并写入轴参数。“FB LineData”调用“FCStationData”并在被“REF("ReceiveData")”调用时将引用传递到 接收数据块。通过取消对所传递的接收数据块的引用,该 FC 可读出站号并将其写入临时变量 “stationNo”。将接收数据块中的生产数据复制到全局 DB“Station”中的相应 ARRAY 元素中。 通过 "refProductionData"输出将此 ARRAY 元素作为引用返回到调用 "FB LineData"。 随后它可以通过 取消引用直接访问所传递的 ARRAY元素,从而更新整条生产线的单元计数器。
VARIANT类型的变量不是一个对象,而是对另一个对象的引用。在函数的块接口中的 VAR_IN、VAR_IN_OUT 和 VAR_TEMP部分中,VARIANT 类型的单个元素只能声明为形参。不能在数据块或函数块的块接口静态部分中声明,例如,因为各元素的大小未知。所引 用对象的大小可以更改。 使用 VARIANT数据类型时,可为各种数据类型创建通用的标准函数块 (FB) 或函数 (FC)。为此,可使用所有编程语言中的各种指令。在程序创建过程中,可指定该块可处理数据类型。在此, 可使用 VARIANT数据类型对各种变量进行互连。之后,再根据这些变量在块中的数据类型进行响应。调用某个块时,可以将该块的参数连接到任何数据类型的变量。调用某个块时,除了传递变量的指针外,还会传递变量的类型信息。块代码随后可以根据运行期间传递的变 量类型来执行。 例如,如果函数的块参数为VARIANT 数据类型,那么整数数据类型的变量可以在程序中的 一个点处传递,而 PLC数据类型的变量可以在程序中的另一个点处传递。借助 VARIANT 指令, 函数随后可以正确响应这种情况,而不会出错。 说明如果一个数据块Zui初的数据类型为用户自定义的数据类型 (UDT),那么只能指向完整的数据 块。 说明 访问 I/O 只有 S7-1500模块的 CPU 才能直接读写 I/O 输出或输出中的信号。指针在比较过程中的应用 (S7-1200, S7-1500)S7-1200/1500 CPU 中的指针用例(与 S7-300/400 相比) 下表简要列出了 S7-300/400 系列CPU(ANY 指针)与 S7-1200/1500 系列 CPU 中指针的各 种应用及解决方案。在大多数应用中,S7-1200/1500 系列 CPU 无需使用指针。取而代之的是更为简单的语言资 源。在程序运行时期间只需确定数据类型时,才建议使用 VARIANT 数据类型进行间接寻址。 ANY 指针的用途 在 TIA Portal中应用时的建议 (S7-1200/ S7-1500) 使用指令“BLKMOV:块移动”,在程序中移 动任意源和目标数据类型的数据。 在PLC 数据类型中变量定义。使用指令 “Serialize”和“Deserialize”,移动变量。 初始化 ARRAY 结构使用指令“FILL_BLK:填充块”,初始化或填 充 ARRAY 结构。 移动 ARRAY 元素使用指令“MOVE_BLK:块移动”,将一个 ARRAY 结构中的多个元素内容移到另一个 ARRAY 结构中。使用结构化数据,优化存储器和性能 使用块接口中的 InOut 部分优化存储器和性 能。确定结构或数据块的长度 使用 ARRAY并读取其长度:使用指令 “CountofElements:获取 ARRAY 元素个 数”。该指令只能与数据类型 VARIANT 结合使用。 间接寻址 使用 VARIANT 指针,可对仅在运行过程中已 知的数据类型进行间接寻址。使用数据类型DB_ANY,可对数据块进行间接访问。
VARIANT 指令 (S7-1200,S7-1500) VARIANT 指令 TIA Portal 中提供了以下用于处理 VARIANT 的指令: 基本指令 类别 指令说明 比较器运算 EQ_Type 比较数据类型与变量数据类型是否“相等” NE_Type 比较数据类型与变量数据类型是否“不相等”EQ_ElemType 比较 ARRAY 元素数据类型与变量数据类型是否“相等” NE_ElemType 比较 ARRAY元素数据类型与变量数据类型是否“不相等” IS_NULL EQUALS ZERO 指针查询 NOT_NULL UNEQUALSZERO 指针查询 IS_ARRAY 检查 ARRAY TypeOf 检查 VARIANT 变量的数据类型 TypeOfElements 检查 VARIANT 变量的元素数据类型类别 指令 说明 移动操作 MOVE_BLK_VA RIANT 块移动VariantGet 读取 VARIANT 变量值 VariantPut 写入 VARIANT 变量值 CountOfElements 获取 ARRAY 元素个数 转换操作 VARIANT_TO_D B_ANY 将 VARIANT 转换为 DB_ANYDB_ANY_TO_V ARIANT 将 DB_ANY 转换为 VARIANT 说明 MOVE、MOVE_BLK 和MOVE_BLK_VARIANT 之间的区别 • 可使用“MOVE”指令来复制完整的结构。 •可使用“MOVE_BLK”指令来移动具有已知数据类型的 ARRAY 的部分。 • 仅在您想要移动其数据类型仅在程序运行时期间已知的ARRAY 的部分时,才需要使用 MOVE_BLK_VARIANT 指令。 可以在信息系统的“基本指令 >对应编程语言”(Basic instructions > Respective programming language)下找到有关各种指令的其它信息。 也可以在“扩展指令”(Extended instructions) 下找到同样用于处理 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 programminglanguage) 下找到有关各种指令的其它信息。