每次调用“加减计数”指令,都会为其分配一个 IEC 计数器用来存储指令数据。可以按如下 方式声明 IEC计数器: • 声明类型为 CTUD 的数据块(例如,“CTUD_DB”) • 声明为块中“Static”程序段内 CTUD类型的局部变量(例如,#MyCTUD_COUNTER) 在程序中插入该指令时,将打开“调用选项”(Call options)对话框,可以在其中指定 IEC 计 数器将存储在自身数据块中(单个背景)还是作为局部变量存储在块接口中(多重背景)。如果创建了一个单独的数据块,则该数据块将保存到项目树“程序块 > 系统块”(Program blocks > Systemblocks) 路径中的“程序资源”(Program resources) 文件夹内。有关本主题的 更多信息,请参见“另请参见”。操作系统会在冷启动期间复位“加减计数”指令的实例。如果要在暖启动后初始化该指令的 实例,则必须在启动 OB时使用以下参数值调用要初始化的实例: • 用作加计数器时,参数 R 的值必须设置为“1”。 • 用作减计数器时,参数 LD的值必须设置为“1”。在这种情况下,需要在参数 PV 中为 CV 参 数指定所需的初始值。如果“加减计数”指令的实例位于其它块中,则可以通过诸如初始化上级块来复位这些实例。 参数 下表列出了“加减计数”指令的参数: 参数声明 数据类型 存储区 说明 CU Input BOOL I、Q、M、D、L 加计数输入 CD Input BOOLI、Q、M、D、L 减计数输入 R Input BOOL I、Q、M、D、 L、P 复位输入 LD Input BOOLI、Q、M、D、 L、P 装载输入 PV Input INT I、Q、M、D、 L、P 或常数 置位输出 QU 中的值。/当 LD =1 时,置位输出 CV 中 的值。置位输出 QU 中的 值。/当 LD = 1 时,置位输 出 CV 中的值。 QU OutputBOOL I、Q、M、D、L 加计数器的状态。
数学函数(S7-300, S7-400) MIN:获取Zui小值 (S7-300, S7-400) 说明 可以使用“获取Zui小值”指令,比较输入IN1、IN2 和 IN3 的值,并将Zui小的值写入输出 OUT 中。只有当所有输入的变量均为同一种数据类型时,才能执行该指令。如果满足以下某个条件,则参数 OUT 的值无效: • 指定操作数的数据类型不同。 • 浮点数的值无效。 参数下表列出了“获取Zui小值”指令的参数: 参数 声明 数据类型 存储区 说明 IN1 Input 整数、浮点数 I、Q、M、D、 L、P第一个输入值 IN2 Input 整数、浮点数 I、Q、M、D、 L、P 第二个输入值 IN3 Input 整数、浮点数I、Q、M、D、 L、P 第三个输入值 OUT Output 整数、浮点数 I、Q、M、D、 L、P 结果可以从“???”下拉列表中选择参数 INn 和 OUT 的数据类型。 说明 参数分配 在输入参数中,只允许使用数据类型INT、DINT 和 REAL,IEC 检查禁用时也同样如此。 如果使用 WORD 或 DWORD数据类型的输入参数,则指令将返回未知结果。 函数的输入参数 (Input)、输出参数 (Output) 和输入/输出参数(InOut) 不得连接到指 令的输入和输出参数。如果需要,使用临时变量 (Temp) 作为缓冲。MAX:获取Zui大值 (S7-300,S7-400) 说明 可以使用“获取Zui大值”指令,比较输入 IN1、IN2 和 IN3 的值,并将Zui大的值写入输出 OUT中。只有当所有输入的变量均为同一种数据类型时,才能执行该指令。 如果满足以下某个条件,则输出 OUT 的值无效: •指定操作数的数据类型不同。 • 某个操作数的值无效。下表列出了“获取Zui大值”指令的参数: 参数 声明 数据类型 存储区 说明 IN1Input 整数、浮点数 I、Q、M、D、 L、P 第一个输入值 IN2 Input 整数、浮点数 I、Q、M、D、 L、P第二个输入值 IN3 Input 整数、浮点数 I、Q、M、D、 L、P 第三个输入值 OUT Output 整数、浮点数I、Q、M、D、 L、P 结果 可以从“???”下拉列表中选择参数 INn 和 OUT 的数据类型。 说明 参数分配在输入参数中,只允许使用数据类型 INT、DINT 和 REAL,IEC 检查禁用时也同样如此。 如果使用 WORD 或DWORD 数据类型的输入参数,则指令将返回未知结果。 函数的输入参数 (Input)、输出参数 (Output)和输入/输出参数 (InOut) 不得连接到指 令的输入和输出参数。如果需要,使用临时变量 (Temp)作为缓冲。LIMIT:设置限值 (S7-300, S7-400) 说明 可以使用“设置限值”指令,将输入 IN 的值限制在输入 MN与 MX 的值范围之间。如果输入 IN 的值满足条件 MN <= IN <= MX,则复制到 OUT输出中。如果不满足该条件且输入值 IN 低 于下限 MN,则将输出 OUT 设置为输入 MN 的值。如果超出上限 MX,则将输出OUT 设置 为输入 MX 的值。 只有当所有输入的变量均为同一种数据类型时,才能执行该指令。 如果满足以下某个条件,则输出 OUT的值无效: • 指定的变量不具有相同的数据类型。 • 某个操作数的值无效。 • MN 参数的值大于 MX参数的值。可以从“???”下拉列表中选择参数 MN、IN、MX 和 OUT 的数据类型。 说明 参数分配在输入参数中,只允许使用数据类型 INT、DINT 和 REAL,IEC 检查禁用时也同样如此。 如果使用 WORD 或DWORD 数据类型的输入参数,则指令将返回未知结果。 函数的输入参数 (Input)、输出参数 (Output)和输入/输出参数 (InOut) 不得连接到指 令的输入和输出参数。如果需要,使用临时变量 (Temp) 作为缓冲。移动操作(S7-300, S7-400) BLKMOV:块移动 (S7-300, S7-400) 说明可以使用“块移动”指令将一个存储区(源区域)的数据移动到另一个存储区(目标区域) 中。移动操作沿地址升序方向执行。可使用 ANY指针定义源区域和目标区域。 说明 在该指令中,只能使用适用于 S7-300/400 系列 CPU 的数据类型。下图说明了移动操作的原理:源数据和目标数据一致 请确保在执行“块移动”指令的过程中,源数据保持不变,否则无法保证目标数据的一致性。可中断性 如果源区域所在的数据块不仅仅只位于装载存储器中,则嵌套深度无限制。 如果从一个与运行系统无关的 DB 中进行复制时发生BLKMOV 中断,则 BLKMOV 操 作将无法继续嵌套。 存储区 可以使用“块移动”指令移动以下存储区的数据: • 数据块区域 •位存储区 • 过程映像输入 • 过程映像输出 • 与运行系统无关的数据块移动操作的通用规则源区域和目标区域不得重叠。如果源和目标区域长度不同,则只能移动较小长度的区域。如果源区域小于目标区域,则将整个源区域的数据都写入到目标区域中。而目标区域的其余 字节则保持不变。如果目标区域小于源区域,将写满整个目标区域。而忽略源区域的剩余字节。 如果复制 BOOL 数据类型的区域,则此区域的指定长度必须能被8 整除,否则无法执行该指 令。 说明 如果实际的源或目标区域小于 SRCBLK 或 DSTBLK参数所指定的源或目标区域,则响应取决 于 CPU 型号: • 以下情况适用于 S7-300 CPU: 不进行数据传输。错误代码W#16#837F 将在参数 RET_VAL 中输出。在用户程序中必须 评估该错误代码。 • 以下情况适用于 S7-400 V4CPU(V4、V4 H-CPU 和 V4.5. H CPU): 不进行数据传输。错误代码 W#16#8122 或 W#16#8323将在参数 RET_VAL 中输出。在 用户程序中必须评估该错误代码。 • 其它所有 S7-400-CPU: 进行数据传输。错误代码W#16#8122 或 W#16#8323 将在参数 RET_VAL 中输出。在用 户程序中必须评估该错误代码。 移动字符串的规则还可以使用“块移动”指令移动 STRING 数据类型的源区域和目标区域。如果只有源区域为 STRING数据类型,则仅移动字符串中实际包含的字符。有关实际长度和Zui大长度信息不会 写入目标区域中。如果源和目标区域都是 STRING数据类型,则将目标区域中字符串的当前 长度设置为实际移动的字符数。如果要移动字符串实际长度和Zui大长度的信息,则需要以字节为单位将相关区域指定给 SRCBLK 和 DSTBLK参数。也可使用“Serialize”/“Deserialize”指令。 移动与运行系统无关数据块的规则源区域也可位于与运行系统无关的装载存储器的数据块中。系统使用关键字 UNLINKED,指 示与运行系统无关的数据块。如果使用“块移动”指令将与运行系统无关的数据块复制到工作存储器并加载数据块(例如,通过编程设备),则该指令将延时数毫秒后才执行。这将导致 OB 周期延长,从而可能 触发周期监视。