UMOVE_BLK:不可中断的存储区移动 (S7-1200, S7-1500) 说明 可以使用“不可中断的存储区移动”(Move block uninterruptible) 指令将一个存储区(源范 围)的数据移动到另一个存储区(目标范围)中。该指令不可中断。使用参数 COUNT 可以 指定将移动到目标范围中的元素个数。待移动元素的宽度由源区域中第一个元素的宽度决定。 仅当源范围和目标范围的数据类型相同时,才能执行该指令。 说明 此移动操作不会被操作系统的其它任务打断。这也解释了在执行“不可中断的存储区移动” 指令期间,CPU 中断响应次数增加的原因。 如果满足以下条件,则输出 OUT 的值无效: • 在 IN 参数或 OUT 参数处,可移动更多的数据。 可以使用“不可中断的存储区移动”指令移动Zui多 16 KB 大小的数据。注意:CPU 对此有特 定限制。 说明 ARRAY 的使用 该指令用于从指定索引开始,将定义元素中 n 个元素(n 取决于参数 COUNT 的值)的内容 从源范围复制到目标范围。MOVE_BLK:移动块 (S7-1200, S7-1500) 说明 可以使用“移动块”(Move block) 指令将一个存储区(源范围)的数据移动到另一个存储区 (目标范围)中。使用参数 COUNT 可以指定将移动到目标范围中的元素个数。待移动元素的 宽度由源区域中第一个元素的宽度决定。 仅当源范围和目标范围的数据类型相同时,才能执行该指令。 如果满足以下条件,则输出 OUT 的值无效: • 在 IN 参数或 OUT 参数处,可移动更多的数据。 说明 ARRAY 的使用 该指令用于从指定索引开始,将定义元素中 n 个元素(n 取决于参数 COUNT 的值)的内容 从源范围复制到目标范围。MOVE_BLK_VARIANT:移动块 (S7-1200, S7-1500) 说明 可以使用“块移动”指令将一个存储区(源范围)的数据移动到另一个存储区(目标范围) 中。可以将一个完整的 ARRAY 或 ARRAY 的元素复制到另一个相同数据类型的 ARRAY 中。源 ARRAY 和目标 ARRAY 的大小(元素个数)可能会不同。可以复制一个 ARRAY 内的多个或单 个元素。 要复制的元素数量不得超过所选源范围或目标范围。 如果在创建块时使用该指令,则无需确定该 ARRAY,源和目标将使用 VARIANT 进行传输。下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 SRC Input 2) VARIANT(指向 一个 ARRAY 或一 个 ARRAY 元 素),ARRAY of <数据类型> L(可在块接口 的“Input”、 “InOut”和 “Temp”部分进行 声明。) 待复制的源块 COUNT Input UDINT I、Q、M、D、L 已复制的元素数目 如果参数 SRC 或参数 DEST 中未指定任何 ARRAY,则将参数 COUNT 的值设置为“1”。 SRC_INDEX Input DINT I、Q、M、D、L 定义要复制的第一个元 素: • SRC_INDEX 参数将从 0 开始计算。如果参数 SRC 中指定了 ARRAY, 则参数 SRC_INDEX 中 的整数将指定待复制源 区域中的第一个元素。 而与所声明的 ARRAY 限值无关。 • 如果 SRC 参数中未指 定 ARRAY 或者仅指定 了 ARRAY 的某个元 素,则将 SRC_INDEX 参数的值赋值为“0”。定义了目标存储区的起点。 • DEST_INDEX 参数将从 0 开始计算。如果参数 DEST 中指定了 ARRAY,则参数 DEST_INDEX 中的整数 将指定待复制目标范围 中的第一个元素。而与 所声明的 ARRAY 限值 无关。 • 如果参数 DEST 中未指 定任何 ARRAY,则将参 数 DEST_INDEX 赋值为 “0”。 DEST Output 1) VARIANT L(可在块接口 的“Input”、 “InOut”和 “Temp”部分进行 声明。) 源块中内容将复制到的目 标区域。 函数值 (RET_VAL) INT I、Q、M、D、L 错误信息 1) DEST 参数声明为 Output,因为数据流入变量。但此变量本身在块接口中必须声明为 InOut。 2) 参数 SRC 的数据类型不能为 BOOL 和 BOOL 型 ARRAY。
标准存储区的容量为 64 KB。如果参数 DEST_ARRAY 位于标准存储区中,则根据标准存储区 规则,大于 64 KB 的结构不能进行序列化。 建议将 ARRAY 的下限定义为“0”,这是因为 ARRAY 中的下标对应 POS 参数值。例如, ARRAY[0] = POS 0。下文中的说明与示例均基于此公式。 参数 POS 处操作数中包含有关转换后数据占用的字节数量信息。 如果要发送单个 PLC 数据类型 (UDT)、STRUCT 或 ARRAY of <数据类型 pe>,可以直接调用 指令“TSEND:通过通信连接发送数据”。 说明 比较结构 要比较结构,必须首先对其进行序列化处理。请改用比较表达式。 更多信息,请参见“关系表达式 (页 9956)” 存储区的容量 对齐规则为优化存储区内的简单结构中不包含填充字节。这样,优化存储区中的结构大小将 小于标准存储区中的。结构型和嵌套结构型 ARRAY 包含填充字节。对于包含组合结构(所 需存储空间更高)的存储区而言,该规则并并为通用规则。 S7-1500 系列 CPU: 如果某个块的块属性为“优化块访问”,则 BOOL 数据类型的长度将取决于紧跟其后的数据 类型。即,如果 BOOL 数据类型之后为 BYTE,则长度为 1 个字节。即,如果 BOOL 数据类 型之后为 WORD,则长度为 2 个字节。这样,优化存储区中主要由 BOOL 数据类型组成的结 构大小将大于标准存储区。因此,含少量 BOOL 数据类型的组合型结构在优化存储区内的大 小,要小于该结构在标准存储区内的大小。因此,建议序列化的源数据区从大数据类型开始,以布尔型元素结束。这样,可大幅减少用 于填充的填充位。 说明 对 CPU S7-1200 上的多个结构进行序列化 如果要在缓冲区中对 CPU S7-1200 的多个结构进行序列化并且要与其进行通信(例如,与 控制系统或 CPU S7-1500 通信),则必须检查返回值(POS 参数的下标)是否为偶数。如 果并非偶数,则必须在序列化第二个结构之前将返回值增加 1,因为第一个结构并未填充字 节。 示例: 结构由 1 个 DWORD 和 1 个 BYTE 组成 缓冲区中下一个序列化结构的起始地址为 5。加 +1,使起始地址为偶数。 优化存储区 对固件版本 V4.2 及以上版本的 S7-1200 系列 CPU 和固件版本 V2.0 及以上版本的 S7-1500 系列 CPU,要对较大结构进行序列化,可将存储区声明为优化访问。对于标准存储区,顺序 表示保存不变。“序列化”指令对“Source”变量中的客户数据进行序列化,并将该顺序表示写入“Buffer”变量 中。"Buffer".Field 操作数中下一个未写入的字节下标将保存在 #BufferPos 操作数中。 现在将插入一种分隔表,以更方便地对顺序表示进行取消序列化。“移动字符串”指令将 “arti”字符移动到 #Label 操作数。“序列化”指令将客户数据后的这些字符写入“Buffer”变量 中。“#BufferPos”操作数的值将相应递增。 “序列化”指令对“Source”变量中特定的订货数据(运行时计算得出)的数据进行序列化,并 在将这些数据按照顺序表示方式写入“arti”字符后的“Buffer”变量中。