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) 说明 可以使用“移动块”(Moveblock) 指令将一个存储区(源范围)的数据移动到另一个存储区 (目标范围)中。使用参数 COUNT可以指定将移动到目标范围中的元素个数。待移动元素的 宽度由源区域中第一个元素的宽度决定。仅当源范围和目标范围的数据类型相才能执行该指令。 如果满足以下条件,则输出 OUT 的值无效: • 在 IN 参数或 OUT参数处,可移动更多的数据。 说明 ARRAY 的使用 该指令用于从指定索引开始,将定义元素中 n 个元素(n 取决于参数 COUNT的值)的内容 从源范围复制到目标范围。MOVE_BLK_VARIANT:移动块 (S7-1200, S7-1500) 说明可以使用“块移动”指令将一个存储区(源范围)的数据移动到另一个存储区(目标范围) 中。可以将一个完整的 ARRAY 或 ARRAY的元素复制到另一个相同数据类型的 ARRAY 中。源 ARRAY 和目标 ARRAY 的大小(元素个数)可能会不同。可以复制一个ARRAY 内的多个或单 个元素。 要复制的元素数量不得超过所选源范围或目标范围。 如果在创建块时使用该指令,则无需确定该ARRAY,源和目标将使用 VARIANT 进行传输。下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 SRC Input2) VARIANT(指向 一个 ARRAY 或一 个 ARRAY 元 素),ARRAY of <数据类型>L(可在块接口 的“Input”、 “InOut”和 “Temp”部分进行 声明。) 待复制的源块 COUNT Input UDINTI、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。
标准存储区的容量为 64KB。如果参数 DEST_ARRAY 位于标准存储区中,则根据标准存储区 规则,大于 64 KB 的结构不能进行序列化。 建议将ARRAY 的下限定义为“0”,这是因为 ARRAY 中的下标对应 POS 参数值。例如, ARRAY[0] = POS0。下文中的说明与示例均基于此公式。 参数 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”变量中。