FILL_BLK:填充块 (S7-1500) 说明 可以使用“填充存储区”指令,用 IN 输入的值填充一个存储区域(目标范围)。从输出 OUT 指定的地址开始填充目标范围。可以使用参数 COUNT 指定复制操作的重复次数。执行该指 令时,输入 IN 中的值将移动到目标范围,重复次数由参数 COUNT 的值指定。 仅当源范围和目标范围的数据类型相同时,才能执行该指令。变更元素的Zui大值为 ARRAY 或结构中的元素个数。如果复制的数据超过 OUT 输出中的元素, 则将返回一个意外结果。 说明 ARRAY 的使用 该指令读取源范围中所选元素的内容,并从指定索引开始将该内容向目标范围复制 n 次(n = 取决于参数 COUNT 的值)。 填充结构 与 ARRAY 中的元素相同,也可为结构(STRUCT、PLC 数据类型)中多个元素填充相同的值。 待填充元素的结构中包含元素的元素数据类型必须相同。而且,该结构也可嵌入到其它结构 中。
UFILL_BLK:不可中断的存储区填充 (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-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)。 说明 该指令的可用性 该指令可用于 S7-1500 系列 CPU 固件版本 V2.1 及以上版本。 例如,通过这种方式您可以解析状态字,并使用索引读取和改变单个位的状态。使用 GATHER,可再次将各个位组合为位序列。下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 IN Input BYTE, WORD, DWORD, LWORD I、Q、M、D、L 所解析的位序列 这些值不得位于 的 I/O 区域或工 艺对象的 DB 内。 OUT Output ARRAY[*] of BOOL、STRUCT 或 PLC 数据类型 *:8、16、32 或 64 个元素 I、Q、M、D、L 保存 ARRAY、 STRUCT 或 PLC 数据类型中的各 个位 有关有效数据类型的更多信息,请参见“另请参见”。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:ARRAYof BOOL 的处理方式与 ARRAY of BOOL 类似。 示例 2:在 IN 参数处,将互连一个 ARRAY[0..5] of WORD (sourceArrayWord[2])。参数 COUNT_IN 的值为“3”。在 OUT 参数处,将互连一个 ARRAYof BOOL。参数 IN 和参数 OUT 中两个数组的大小均为 96 位。ARRAY of WORD 将解析为 48 个单个位。 说明 如果目标 ARRAY 的 ARRAY 下限不是“0”,请注意以下几点: 出于性能原因,索引必须始终以 BYTE、WORD 或 DWORD 限值开始。这就意味着索引必须从 ARRAY 的下限处开始计算。通过以下公式进行相应计算: 有效下标 = ARRAY 下限 + n(位序列数量)× 所需位序列位数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 及以上版本。GATHER_BLK:将单个位合并到 ARRAY of <位序列> 的多个元素中 (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 可能更大。下表将通过具体的操作数值对该指令的工作原理进行说明: 参数 操作数 数据类型 IN SourceArrayBool[14] 操作数“SourceArrayBool”的 数据类型为 ARRAY[-2..93] of BOOL。由于起点是第 16 个 元素,因此仅 80 个 BOOL 元 素可再次组合到字中。 COUNT_OUT CounterOutput = 3 UDINT3(要写入 3 个字。这 意味着源 ARRAY 中必须包含 48 个位。) OUT DestinationArrayWord[2] 操作数 “DestinationArrayWord”的数 据类型为 ARRAY[0..5] of WORD。即,包含有 6 个 WORD 的元素。AssignmentAttempt:引用的赋值操作 (S7-1500) 说明 使用“AssignmentAttempt”指令,可对引用变量进行赋值。 支持以下赋值操作: • 尝试将 VARIANT 分配给一个引用 • 尝试将 DB_ANY 分配给一个工艺对象的引用 尝试将 VARIANT 分配给一个引用 引用变量的数据类型在声明时确定,而 VARIANT 变量的数据类型则在运行时确定。引用变 量不允许进行隐式数据转换。因此,为两个变量指定两个数据类型时,可使用赋值尝试指令。 借助赋值操作,会在运行期间进行检查,以确认分配的变量的数据类型是否正确。如果正确, 则执行该指令。如果该指令执行成功,则目标变量中包含一个有效的引用,否则为 NULL。 尝试赋值后,可以检查尝试是否成功,并根据该结果继续处理程序。在 LAD 和 FBD 中,可 以将使能输出“ENO”用于检查操作。如果赋值尝试成功,“ENO”将返回信号状态“1”。只有成 功后才能在程序段中继续执行后续指令。 在 STL 和 SCL 中,可使用指令“IS_NULL”或“NOT_NULL”来检查赋值尝试是否成功等。 以下规则适用于 VARIANT 的赋值尝试。在运行过程中,如果 VARIANT 变量不符合以下规则, 则返回值“NULL”。 • VARIANT 需指向一个优化存储区中的地址。 • VARIANT 不得指向临时存储区中的地址。 • 如需将 VARIANT 指定给一个 ARRAY 引用,则需遵循以下规则: – VARIANT 变量必须指向一个限值与所声明的引用完全相同的 ARRAY。指向 ARRAY [0..9] 的 VARIANT 变量与变量 REF_TO ARRAY[1..10] 不匹配。 – 此外,在固件版本为 V2.5 的 S7-1500 系列 CPU 中,用于生成 VARIANT 变量值的块还 应执行一次编译操作。