SCATTER_BLK:将ARRAY of <位序列> 中的元素解析为单个位 (S7-1500) 说明 “将位序列 ARRAY的元素解析为单个位”指令用于将 BYTE、WORD、DWORD 或 LWORD 数 据类型的 ARRAY分解为单个位,并保存在元素类型仅为布尔型的 ARRAY of BOOL、匿名 STRUCT 或 PLC 数据类型中。在COUNT_IN 参数中,可指定待解析源 ARRAY 中的元素数目。 IN 参数中源 ARRAY 的元素数量可能多于 COUNT_IN参数中的指定数量。要保存所解析位序 列的各个位,ARRAY of BOOL、匿名 STRUCT 或 PLC数据类型中必须包含足够的元素数量。但 这可能会增加目标存储区空间。 说明 多维 ARRAY of BOOL 如果 ARRAY是一个多维 ARRAY of BOOL,维度的填充位未明确声明且不可访问,但仍 会进行计数。 示例1:ARRAY[1..10,0..4,1..2] of BOOL 的处理方式与 ARRAY[1..10,0..4,1..8] ofBOOL 或 ARRAY[0..399] of BOOL 类似。 示例 2:在 IN 参数处,将互连一个 ARRAY[0..5] ofWORD (sourceArrayWord[2])。参数 COUNT_IN 的值为“3”。在 OUT 参数处,将互连一个ARRAY[0..1,0..5,0..7] of BOOL (destinationArrayBool[0,0,0])。参数 IN和参数 OUT 中两个数组的大小均为 96 位。ARRAY of WORD 将解析为 48 个单个位。 说明 如果目标 ARRAY 的ARRAY 下限不是“0”,请注意以下几点: 出于性能方面的原因,索引必须始终以 BYTE、WORD、DWORD 或 LWORD限制开始。这就 意味着索引必须从 ARRAY 的下限处开始计算。通过以下公式进行相应计算: 有效下标 = ARRAY 下限 +n(位序列数量)× 所需位序列位数 对于 ARRAY[-2..45] of BOOL 和位序列 WORD,计算如下所示: • 有效索引(-2) = -2 + 0 × 16 • 有效索引 (14) = -2 + 1 × 16 • 有效索引 (30) = -2 + 2 ×16 相关示例,请参见如下内容。 说明 该指令的可用性 该指令可用于 S7-1500 系列 CPU 固件版本 V2.1 及以上版本。例如,通过这种方式您可以解析状态字,并使用索引读取和改变单个位的状态。使用 GATHER,可将各个位组合为位序列。
如果满足下列条件之一,使能输出 ENO 将返回信号状态“0”: • 源 ARRAY 中的元素数量少于COUNT_IN 参数中的指定数量。 • 目标 ARRAY 的索引不以 BYTE、WORD、DWORD 或 LWORD限制开始。在这种情况中,将 不向 ARRAY of BOOL 中写入任何结果。 • ARRAY[*] of BOOL、STRUCT 或PLC 数据类型未提供所需的元素数量。此时,将尽可能多 地解析位序列并写入 ARRAY of BOOL、匿名 STRUCT 或 PLC数据类型中。其余位序列将 不考虑在内。 说明 S7-1200-CPU:使能输出 ENO = 0 使能输出 ENO的信号状态为“0”时,不会将任何数据写入输出参数 OUT 中。下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 INInput 以下类型 ARRAY[*] 的元 素 - BYTE - WORD - DWORD - LWORD I、Q、M、D、L所解析的 ARRAY of <位序列> 这些值不得位于 的 I/O 区域或工 艺对象的 DB 内。 COUNT_INInput USINT, UINT, UDINT, ULINT I、Q、M、D、L 对待解析源 ARRAY 中的元素 数量进行计数。该值不得位于的 I/O 区域或工艺对 象的数据库内。 OUT Output 以下类型 ARRAY[*] 的元 素 - BOOL -STRUCT - PLC 数据类型 I、Q、M、D、L 保存 ARRAY、 STRUCT 或 PLC 数据类型中的各 个位可以从指令框的“???”下拉列表中选择所需位序列。有关有效数据类型的更多信息,请参见“另请参见”。下表将通过具体的操作数值对该指令的工作原理进行说明: 参数 操作数 数据类型 INSourceArrayWord[2] ARRAY[0..5] of WORD(可以 解析 96 位。) COUNT_INCounterInput = 3 UDINT3(将解析 3 个字或 48 位。这意味着目标 ARRAY 中 至少需包含 48 个位。)OUT DestinationArrayBool[0] 操作数 “DestinationArrayBool”的数 据类型为ARRAY[0..95] of BOOL。这表示它可以提供 96 个 BOOL 元素。 从分配给操作数#DestinationArrayBool 各元素的第 1 个元素开始,将操作数 #SourceArrayWord 的第 3、第 4和第 5 个 WORD 解析为单个的位 (48)。下表将通过具体的操作数值对该指令的工作原理进行说明: 参数 操作数 数据类型 INSourceArrayWord[2] ARRAY[0..5] of WORD(可以 解析 96 位。) COUNT_INCounterInput = 3 UDINT3(将解析 3 个字或 48 位。这意味着目标 ARRAY 中 至少需包含 48 个位。)OUT DestinationArrayBool[14] 操作数 “DestinationArrayBool”的数 据类型为ARRAY[-2..93] of BOOL。这表示它可以提供 96 个 BOOL 元素。 从分配给操作数#DestinationArrayBool 的各元素的第 16 个元素开始,将操作数 #SourceArrayWord 的第 3、第4 和第 5 个字解析为单个位 (48)。其余 32 位不写入。GATHER:将各个位组合为位序列 (S7-1500) 说明指令“将各个位组合为位序列”用于将仅包含布尔型元素的 ARRAY of BOOL、匿名 STRUCT 或 PLC数据类型中的各个位组合为一个位序列。位序列保存在数据类型为 BYTE、WORD、 DWORD 或 LWORD 的变量中。 说明 多维ARRAY of BOOL 使用“将各个位组合为位序列”指令时,不支持多维 ARRAY of BOOL。 说明ARRAY、STRUCT 或 PLC 数据类型的长度 ARRAY、STRUCT 或 PLC数据类型中包含的元素数目必须恰好等于位序列指定的数量。 例如,如果数据类型为 BYTE,则 ARRAY、匿名 STRUCT 或 PLC数据类型中必须恰好包含 8 个 元素(WORD = 16、DWORD = 32、LWORD = 64)。 说明 该指令的可用性该指令可用于 S7-1500 系列 CPU 固件版本 V2.1 及以上版本。 如果 ARRAY、匿名 STRUCT 或 PLC数据类型中 BOOL 元素的数量少于或多于该位序列指定的 数量,则使能输出 ENO 将返回信号状态“0”。且之后不传送 BOOL元素。如果可用的 元素数少于所需数量,ENO 也将返回“0”。下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 INInput ARRAY[*] of BOOL、STRUCT 或 PLC 数据类型 *:8、16、32 或 64 个元素I、Q、M、D、L ARRAY、 STRUCT 或 PLC 数据类型,这些 数据类型中的各 个位将组合为一 个位序列。 这些值不得位于的 I/O 区域或工 艺对象的 DB 内。 OUT Output BYTE、WORD、 DWORD、 LWORD I、Q、M、D、L组合后的位序 列,保存在一个 变量中 可以从指令框的“???”下拉列表中选择所需位序列。有关有效数据类型的更多信息,请参见“另请参见”。GATHER_BLK:将单个位合并到 ARRAY of <位序列>的多个元素中 (S7-1500) 说明 指令“将各个位组合为 ARRAY of <位序列>的多个元素”用于将仅包含布尔型元素的 ARRAY of BOOL、匿名 STRUCT 或 PLC 数据类型中的各个位组合为 ARRAYof <位序列> 中的一个或 多个元素。您可以在 COUNT_OUT 参数中指定要写入的目标 ARRAY元素数量。在此步中,还 可隐式指定 ARRAY of BOOL、匿名 STRUCT 或 PLC 数据类型中所需的元素数量。OUT参数中 目标 ARRAY 的元素数量可能多于 COUNT_OUT 参数中的指定数量。要保存待组合的各个位, ARRAY of<位序列> 中必须包含足够的元素数目。但目标 ARRAY 可能更大。 说明 多维 ARRAY of BOOL 如果ARRAY 是一个多维 ARRAY of BOOL,维度的填充位未明确声明且不可访问,但仍 会进行计数。 示例1:ARRAY[1..10,0..4,1..2] of BOOL 的处理方式与 ARRAY[1..10,0..4,1..8] ofBOOL 或 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,计算如下所示。