UMOVE_BLK:不可中断的存储区移动 (S7-1200, S7-1500) 说明可以使用“不可中断的存储区移动”(Move block uninterruptible) 指令将一个存储区(源范围)的数据移动到另一个存储区(目标范围)中。该指令不可中断。使用参数 COUNT 可以指定将移动到目标范围中的元素个数。待移动元素的宽度由源区域中第一个元素的宽度决定。仅当源范围和目标范围的数据类型相才能执行该指令。 说明此移动操作不会被操作系统的其它任务打断。这也解释了在执行“不可中断的存储区移动” 指令期间,CPU 中断响应次数增加的原因。如果满足以下条件,则输出 OUT 的值无效: • 在 IN 参数或 OUT 参数处,可移动更多的数据。可以使用“不可中断的存储区移动”指令移动Zui多 16 KB 大小的数据。注意:CPU 对此有特 定限制。 说明 ARRAY 的使用该指令用于从指定索引开始,将定义元素中 n 个元素(n 取决于参数 COUNT 的值)的内容 从源范围复制到目标范围。
FILL_BLK:填充块(S7-1200, S7-1500) 说明 可以使用“填充存储区”指令,用 IN 输入的值填充一个存储区域(目标范围)。从输出 OUT指定的地址开始填充目标范围。可以使用参数 COUNT 指定复制操作的重复次数。执行该指 令时,输入 IN中的值将移动到目标范围,重复次数由参数 COUNT 的值指定。仅当源范围和目标范围的数据类型相才能执行该指令。变更元素的Zui大值为 ARRAY 或结构中的元素个数。如果复制的数据超过 OUT输出中的元素, 则将返回一个意外结果。 说明 ARRAY 的使用该指令读取源范围中所选元素的内容,并从指定索引开始将该内容向目标范围复制 n 次(n = 取决于参数 COUNT 的值)。 填充结构与 ARRAY 中的元素相同,也可为结构(STRUCT、PLC 数据类型)中多个元素填充相同的值。待填充元素的结构中包含元素的元素数据类型必须相同。该结构也可嵌入到其它结构 中。下表列出了该指令的参数: 参数 声明 数据类型存储区 说明 S7-1200 S7-1500 IN Input 二进制数、整 数、浮点数、 定时器、 TOD、DATE、 CHAR、WCHAR 二进制数、整 数、浮点数、定 时器、DATE、 CHAR、 WCHAR、 TOD、LTOD I、Q、M、 D、L、P用于填充目标 范围的元素 COUNT Input USINT、 UINT、UDINT USINT、UINT、 UDINT、ULINTI、Q、M、 D、L、P 移动操作的重 复次数 OUT Output 二进制数、整 数、浮点数、 定时器、 TOD、DATE、CHAR、 WCHAR 二进制数、整 数、浮点数、定 时器、DATE、 CHAR、 WCHAR、 TOD、LTOD D、L目标范围中填 充的起始地址 有关有效数据类型的更多信息,请参见“另请参见”。UFILL_BLK:不可中断的存储区填充(S7-1200, S7-1500) 说明 可以使用“不可中断的存储区填充”(Fill block uninterruptible)指令,用 IN 输入的值填充一 个存储区域(目标范围)。该指令不可中断。从输出 OUT 指定的地址开始填充目标范围。可 以使用参数COUNT 指定复制操作的重复次数。执行该指令时,输入 IN 中的值将移动到目标 范围,重复次数由参数 COUNT 的值指定。仅当源范围和目标范围的数据类型相才能执行该指令。 说明此移动操作不会被操作系统的其它任务打断。这也解释了在执行“不可中断的存储区填充” 指令期间,CPU 报警响应次数增加的原因。变更元素的Zui大值为 ARRAY 或结构中的元素个数。如果复制的数据超过 OUT 输出中的元素, 则将返回一个意外结果。 说明ARRAY 的使用 该指令读取源范围中所选元素的内容,并从指定索引开始将该内容向目标范围复制 n 次(n = 取决于参数 COUNT的值)。 可以使用“不可中断的存储区填充”指令移动Zui多 16 KB 大小的数据。注意:CPU 对此有特 定限制。 填充结构 与ARRAY 中的元素相同,也可为结构(STRUCT、PLC 数据类型)中多个元素填充相同的值。待填充元素的结构中包含元素的元素数据类型必须相同。该结构也可嵌入到其它结构 中。该指令从操作数从第一个元素开始,将#FillValue 的值复制到 #TargetArea 输出变量中三次。 此移动操作不会被操作系统的其它任务打断。 该结构的使用示例以下示例说明了填充结构时该指令的工作原理: 可使用以下元素创建一个全局数据块:SCATTER:将位序列解析为单个位 (S7-1200,S7-1500) 说明 指令“将位序列解析为单个位”用于将数据类型为 BYTE、WORD、DWORD 或 LWORD 的变量解析为单个位,并保存在 ARRAY of BOOL、匿名 STRUCT 或仅包含有布尔型元素的 PLC 数 据类型中。 说明 多维ARRAY of BOOL 使用“将位序列解析为单个位”指令时,不支持多维 ARRAY of BOOL。 说明ARRAY、STRUCT 或 PLC 数据类型的长度 ARRAY、匿名 STRUCT 或 PLC数据类型中包含的元素数目必须恰好等于位序列指定的数量。 例如,如果数据类型为 BYTE,则 ARRAY、STRUCT 或 PLC数据类型中必须恰好包含 8 个元素 (WORD = 16、DWORD = 32、LWORD = 64)。 说明 该指令的可用性该指令可用于固件版本为 V4.2 及以上版本的 S7-1200 系列 CPU 和固件版本为 V2.1 及以上 版本的 S7-1500系列 CPU。 例如,通过这种方式您可以解析状态字,并使用索引读取和改变单个位的状态。使用 GATHER,可将各个位组合为位序列。如果满足下列条件之一,使能输出 ENO 将返回信号状态“0”: • 使能输入 EN 的信号状态为“0”。 • ARRAY、STRUCT或 PLC 数据类型中包含的 BOOL 元素数目不足。操作数“DestinationArray”的 数据类型为ARRAY[0..15] of BOOL。其中包含 16 个元 素,与待解析 WORD 的 长度相同。 数据类型为 WORD的操作数 #SourceWord 解析为单个位 (16),并将其分配给操作数 #DestinationArray的各个元素。操作数“DestinationUDT”为 PLC 数据类型 (UDT),其中包 含 16 个元素,与待解析 WORD的长度相同。 数据类型为 WORD 的操作数 #SourceWord 解析为单个位 (16),并将其分配给操作数#DestinationArray 的各个元素。例如,通过这种方式您可以解析状态字,并使用索引读取和改变单个位的状态。使用GATHER,可将各个位组合为位序列。 如果满足下列条件之一,使能输出 ENO 将返回信号状态“0”: • 使能输入 EN的信号状态为“0”。 • 源 ARRAY 中的元素数量少于 COUNT_IN 参数中的指定数量。 • 目标 ARRAY 的索引不以BYTE、WORD、DWORD 或 LWORD 限制开始。在这种情况中,将 不向 ARRAY of BOOL 中写入任何结果。 •ARRAY[*] of BOOL、STRUCT 或 PLC 数据类型未提供所需的元素数量。 –S7-1500-CPU:此时,将尽可能多地解析位序列并写入 ARRAY of BOOL、匿名 STRUCT 或 PLC数据类型中。其余位序列将不考虑在内。 – S7-1200-CPU:不含复制过程。 说明 S7-1200-CPU:使能输出 ENO =0 使能输出 ENO 的信号状态为“0”时,不会将任何数据写入输出参数 OUT 中。GATHER:将各个位组合为位序列(S7-1200, S7-1500) 说明 指令“将各个位组合为位序列”用于将仅包含布尔型元素的 ARRAY of BOOL、匿名STRUCT 或 PLC 数据类型中的各个位组合为一个位序列。位序列保存在数据类型为 BYTE、WORD、 DWORD 或 LWORD的变量中。 说明 多维 ARRAY of BOOL 使用“将各个位组合为位序列”指令时,不支持多维 ARRAY ofBOOL。ARRAY、STRUCT 或 PLC 数据类型的长度 ARRAY、STRUCT 或 PLC数据类型中包含的元素数目必须恰好等于位序列指定的数量。 例如,如果数据类型为 BYTE,则 ARRAY、匿名 STRUCT 或 PLC数据类型中必须恰好包含 8 个 元素(WORD = 16、DWORD = 32、LWORD = 64)。 说明 该指令的可用性该指令可用于固件版本为 V4.2 及以上版本的 S7-1200 系列 CPU 和固件版本为 V2.1 及以上 版本的 S7-1500系列 CPU。 如果满足下列条件之一,使能输出 ENO 将返回信号状态“0”: • 使能输入 EN 的信号状态为“0”。 •ARRAY、匿名 STRUCT 或 PLC 数据类型 (UDT)中 BOOL 元素的数量少于或多于位序列所指定的数量。此时,系统不传送 BOOL 元素。 • 可用的元素数少于所需的位数量。GATHER_BLK:将单个位合并到 ARRAY of<位序列> 的多个元素中 (S7-1200, S7-1500) 说明 指令“将各个位组合为 ARRAY of<位序列> 的多个元素”用于将仅包含布尔型元素的 ARRAY of BOOL、匿名 STRUCT 或 PLC数据类型中的各个位组合为 ARRAY of <位序列> 中的一个或 多个元素。您可以在 COUNT_OUT参数中指定要写入的目标 ARRAY 元素数量。在此步中,还 可隐式指定 ARRAY of BOOL、匿名 STRUCT 或 PLC数据类型中所需的元素数量。OUT 参数中 目标 ARRAY 的元素数量可能多于 COUNT_OUT参数中的指定数量。要保存待组合的各个位, ARRAY of <位序列> 中必须包含足够的元素数目。但目标 ARRAY可能更大。 说明 多维 ARRAY of BOOL 如果 ARRAY 是一个多维 ARRAY ofBOOL,维度的填充位未明确声明且不可访问,但仍 会进行计数。 示例 1:ARRAY[1..10,0..4,1..2] ofBOOL 的处理方式与 ARRAY[1..10,0..4,1..8] of BOOL 或 ARRAY[0..399] of BOOL类似。 示例 2:在 OUT 参数处,将互连一个 ARRAY[0..5] of WORD(sourceArrayWord[2])。参数 COUNT_IN 的值为“3”。在 IN 参数处,将互连一个ARRAY[0..1,0..5,0..7] of BOOL (destinationArrayBool[0,0,0])。参数 IN和参数 OUT 中两个数组的大小均为 96 位。48 个单 个位将组合为 ARRAY of BOOL。 说明 如果源 ARRAY 的ARRAY 下限不是“0”,请注意以下几点: 出于性能方面的原因,索引必须始终以 BYTE、WORD、DWORD 或 LWORD限制开始。这就 意味着索引必须从 ARRAY 的下限处开始计算。通过以下公式进行相应计算: 有效下标 = ARRAY 下限 +n(位序列数量)× 所需位序列位数 对于 ARRAY[-2..45] of BOOL 和位序列 WORD,计算如下所示。