TIA Portal 指令

移动操作
数据传输与管理

数据传输是 PLC 程序的循环系统。高效管理变量副本、结构序列化和内存块操作。

什么是 TIA Portal 中的移动操作?

移动操作允许将数据从一个内存位置复制到另一个内存位置。它们范围广泛,从简单的变量复制 (MOVE) 到用于通信的整个结构的复杂操作 (Serialize/Deserialize),或者是管理连续数据区域 (MOVE_BLK)。

TIA Portal 提供用于符号访问、通过 Variant 类型进行动态管理以及针对 Array DB 优化的现代指令,同时保留了用于与旧版 S7-300 系统兼容的 Legacy 指令。

基础传输

基本的复制和格式化指令

MOVE — 复制值

MOVE

功能

将输入 IN 的内容复制到输出 OUT。如果数据类型不同,且安全的情况下,可能会发生隐式转换。

适用场景

初始化变量、复制 HMI 设定值或传输计算结果。

专家提示

您可以添加多个输出 (OUT1, OUT2...) 以同时将一个值复制到多个目的地。

在 SCL 中,只需使用赋值语句:destination := source;

适用于几乎所有数据类型 (Bool, Int, Real, Struct, String)。

Serialize / Deserialize

SER

功能

Serialize 将复杂结构转换为顺序字节流 (Array of Byte)。Deserialize 则执行相反操作。

适用场景

准备通过通信协议 (TCP/IP, UDP) 发送的数据或紧凑型存储。

专家提示

使用 POS 参数跟踪目标缓冲区中的填充索引。

对于与不理解西门子 UDT 的第三方系统进行交换至关重要。

确保缓冲区大小足够,以避免运行错误。

SWAP — 交换

SWAP

功能

反转操作数 IN 中的字节顺序 (Endianness)。

适用场景

与使用“小端”格式的设备通信,而 PLC 使用“大端”格式。

专家提示

通常用于 Word 或 DWord 类型。

用于处理来自某些 Modbus 传感器的数据。

可用于重新排列接收到的反向 ASCII 代码。

块移动

大规模和连续内存区域的操作

MOVE_BLK / UMOVE_BLK

MOVE_BLK

功能

将指定数量的元素从源数组复制到目标数组。UMOVE_BLK 是不可中断(原子)版本。

适用场景

缓冲区管理、历史数据归档或复制生产配方。

专家提示

起始索引 (COUNT) 定义要复制的元素数量。

UMOVE_BLK 确保在复制过程中数据不会被报警 OB 修改。

源和目标数据类型必须相同。

MOVE_BLK_VARIANT

功能

MOVE_BLK 的高级版本,支持 Variant 数据类型以实现灵活寻址。

适用场景

开发处理不同大小或类型数组的可重用库块。

专家提示

允许在运行时间确定类型的数组之间进行复制。

使用 CountOfElements 自动化 COUNT 参数。

在 S7-1500 中对于通用编程非常强大。

区域填充

快速初始化内存范围

FILL_BLK / UFILL_BLK

FILL

功能

使用输入 IN 处指定的单个值填充内存区域(数组)。

适用场景

将测量数组重置为零,或使用默认值初始化缓冲区。

专家提示

对于与中断共享的关键区域,UFILL_BLK 更佳。

比使用 FOR 循环初始化大数组性能高得多。

COUNT 指定从指定指针开始填充的元素数量。

Scatter / Gather

位分解与合成

SCATTER / GATHER

功能

SCATTER 将一个字 (Word, DWord...) 分解为单个位到结构或数组中。GATHER 执行相反操作。

适用场景

从诊断字中提取状态位,或从控制位合成控制字。

专家提示

有效地替代了大量的位访问(例如:%X0)。

适用于 S7-1200 和 S7-1500。

确保代码更简洁、更易于维护。

Array DB 访问

在数组型数据块中进行读写

ReadFromArrayDB / WriteToArrayDB

功能

允许在配置为“Array DB”的数据块中读取或写入特定元素。

适用场景

管理需要动态且快速索引的大型数据列表。

专家提示

“L”版本(例如:ReadFromArrayDBL)访问装载内存(Load Memory)以获取不常用的数据。

使用 Array DB 通常比传统的索引访问性能更高。

检查索引是否在范围内,以避免访问错误。

Variant 操作

动态编程工具

VariantGet / VariantPut

功能

VariantGet 将 Variant 变量的值提取到有类型变量中。VariantPut 将有类型值写入 Variant 变量中。

适用场景

处理只有在块调用时才知道确切类型的数据。

专家提示

在提取值之前使用 EQ_Type 检查类型。

创建通用通信函数的基础。

如果 Variant 指向数组,CountOfElements 返回元素数量。

数组边界

动态确定限值

LOWER_BOUND / UPPER_BOUND

功能

返回作为 Variant 参数传递的数组的下限 (LOWER) 或上限 (UPPER)。

适用场景

对大小未知的数组进行循环(例如:Array[*] of MyUDT)。

专家提示

对于编写健壮的 FOR 循环至关重要:FOR i := LOWER_BOUND(...) TO UPPER_BOUND(...) DO

适用于一维和多维数组。

DIM 参数指定所需维度(默认为 1)。

Legacy 指令

与旧版 S7-300/400 系统的兼容性

保留了 BLKMOV、FILL 和 FieldRead/FieldWrite 等指令以实现兼容性。对于新的 S7-1200/1500 项目,请首选 MOVE_BLK、FILL_BLK 和直接符号访问。

复制方法对比

选择正确的传输指令

您需要...推荐指令示例
复制简单变量MOVE设定值 -> 实际值
复制内存区域MOVE_BLKFIFO 缓冲区
初始化数组FILL_BLK故障重置
准备 TCP 消息Serialize结构体 -> 字节流
将字拆分为位SCATTER字诊断 -> 结构体
动态访问VARIANT通用库块

常见问题

MOVE 和 MOVE_BLK 有什么区别?

MOVE 旨在一次复制单个值或完整结构。MOVE_BLK 经过优化,用于复制数组的一部分(一定数量的连续元素)。

为什么要使用 UMOVE_BLK 而不是 MOVE_BLK?

“U”代表不可中断 (Uninterruptible)。此指令确保复制操作不会被报警循环(高优先级 OB)中断,从而确保复制数据的一致性。

何时使用 Serialize 和 Deserialize?

当您需要通过“原始”协议(如 TSEND/TRCV)发送结构化数据或向第三方设备发送数据时,这些指令至关重要。它们以标准化的方式处理字节对齐。

MOVE_BLK 是否支持绝对地址 (P#DB1.DBX0.0...)?

支持,但 TIA Portal 鼓励使用符号访问。对于复杂的绝对寻址,虽然 MOVE_BLK_VARIANT 是推荐的现代解决方案,但仍会使用 BLKMOV (Legacy)。

自动化您的数据传输

描述您的数据操作需求,T-IA Connect 将生成针对您的应用优化的 MOVE 和 Serialize 块。