计数器操作 (S7-300, S7-400) CTU:加计数 (S7-300, S7-400) 说明 可以使用“加计数”指令递增 CV 输出的值。如果输入 CU 的信号状态从“0”变为“1”(信号上 升沿),则执行该指令,同时输出 CV 的当前计数器值加 1。每检测到一个信号上升沿,计 数器值就会递增,直到达到输出 CV 中所指定数据类型的上限。达到上限时,参数 CU 的信 号状态将不再影响该指令。 可以查询 Q 输出中的计数器状态。输出 Q 的信号状态由参数 PV 决定。如果当前计数器值大 于或等于参数 PV 的值,则将输出 Q 的信号状态置位为“1”。在其它任何情况下,输出 Q 的 信号状态均为“0”。 输入 R 的信号状态变为“1”时,输出 CV 的值将复位为“0”。只要 R 输入的信号状态为“1”,CU 输入的信号状态就不会影响该指令。 说明 只需在程序中的某一位置处使用计数器,即可避免计数错误的风险。 每次调用“加计数”指令,都会为其分配一个 IEC 计数器用于存储指令数据。可以按如下方 式声明 IEC 计数器: • 声明类型为 CTU 的数据块(例如,“CTU_DB”) 将该指令插入程序中时,将自动打开“调用选项”(Call options) 对话框。项目树中所创建的 数据块位于“Program resources”文件夹下的“程序块 > 系统块”(Program blocks > System blocks) 中。有关本主题的更多信息,请参见“另请参见”。 操作系统会在冷启动期间复位“加计数”指令的实例。如果要在暖重启之后初始化该指令的 实例,则需在启动 OB 中将该指令的 R 参数设置为“1”时调用这些待初始化的实例。如果“加 计数”指令的实例位于其它块中,则可以通过诸如初始化上级块来复位这些实例。 执行“加计数”指令之前,需要事先预设一个逻辑运算。该运算可以放置在程序段的中间或 者末尾。
操作系统会在冷启动期间复位“关断延时”指令的实例。如果要在暖启动之后初始化该指令 的实例,则在启动 OB 中调用这些实例,其中 PT 参数将置位为值“0”。如果“关断延时”指 令的实例位于其它块中,则可以通过诸如初始化上级块来复位这些实例。 说明 跳过该指令 如果在程序中未调用该指令(如,由于跳过该指令),则 ET 输出会在超出定时器值后立即 返回一个常数值。 说明 更新指令数据 只有在调用指令时才更新指令数据。访问输出 Q 或 ET 时,不会更新指令数据。 参数 下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 IN Input BOOL I、Q、M、D、L 启动输入 PT Input TIME I、Q、M、D、 L、P 或常数 关断延时的持续时间 PT 参数的值必须为正数。 Q Output BOOL I、Q、M、D、L 超出时间值 PT 时要复位的 输出。 ET Output TIME I、Q、M、D、L 当前定时器的值 可以从“???”下拉列表中选择该指令的数据类型。 有关有效数据类型的更多信息,请参见“另请参见”。当操作数“Tag_Start”的信号状态从“0”变为“1”时,将置位操作数“Tag_Status”。当“Tag_Start” 操作数的信号状态从“1”变为“0”时,PT 参数预设的时间开始计时。只要该时间仍在计时, “Tag_Status”操作数就会保持置位状态。该时间计时完毕后,将复位“Tag_Status”操作数。当 前时间值存储在“Tag_ElapsedTIME”操作数中。当“Tag_Start”操作数的信号状态从“0”变为“1”时,将执行“加计数”指令,同时 “Tag_CounterValue”操作数的当前计数器值加 1。每检测到一个额外的信号上升沿,计数器 值都会递增,直至达到该数据类型的上限 (INT = 32767)。 PV 参数的值作为确定“Tag_Status”输出的限制。只要当前计数器值大于或等于操作数 “Tag_PresetValue”的值,输出“Tag_Status”的信号状态就为“1”。在其它任何情况下,输出 “Tag_Status”的信号状态均为“0”。CTD:减计数 (S7-300, S7-400) 说明 使用“减计数”指令,递减 CV 输出的值。如果输入 CD 的信号状态从“0”变为“1”(信号上升 沿),则执行该指令,同时输出 CV 的当前计数器值减 1。每检测到一个信号上升沿,计数 器值就会递减 1,直到达到指定数据类型的下限为止。达到下限时,输入 CD 的信号状态就 不再影响该指令。 可以查询 Q 输出中的计数器状态。如果当前计数器值小于或等于“0”,则 Q 输出的信号状态 将置位为“1”。在其它任何情况下,输出 Q 的信号状态均为“0”。 当输入 LD 的信号状态变为“1”时,输出 CV 的值会设置为参数 PV 的值。只要 LD 输入的信号 状态为“1”,CD 输入的信号状态就不会影响该指令。 说明 只需在程序中的某一位置处使用计数器,即可避免计数错误的风险。 每次调用“减计数”指令,都会为其分配一个 IEC 计数器用于存储指令数据。可以按如下方 式声明 IEC 计数器: • 声明类型为 CTD 的数据块(例如,“CTD_DB”) 将该指令插入程序中时,将自动打开“调用选项”(Call options) 对话框。项目树中所创建的 数据块位于“Program resources”文件夹下的“程序块 > 系统块”(Program blocks > System blocks) 中。有关本主题的更多信息,请参见“另请参见”。 操作系统会在冷启动期间复位“减计数”指令的实例。如果要在暖重启之后初始化该指令的 实例,则需在启动 OB 中将该指令的 LD 参数设置为“1”时调用这些待初始化的实例。在这种 情况下,应在参数 PV 中指定参数 CV 所需的初始值。 执行“减计数”指令之前,需要事先预设一个逻辑运算。该运算可以放置在程序段的中间或 者末尾。下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 CD Input BOOL I、Q、M、D、L 计数输入 LD Input BOOL I、Q、M、D、 L、P 装载输入 PV Input INT I、Q、M、D、 L、P 或常量 使用 LD = 1 置位输出 CV 的目标值。 Q Output BOOL I、Q、M、D、L 计数器状态 CV Output INT I、Q、M、D、 L、P 当前计数器值 可以从“???”下拉列表中选择该指令的数据类型。 有关有效数据类型的更多信息,请参见“另请参见”。当“Tag_Start”操作数的信号状态从“0”变为“1”时,执行该指令且“Tag_CounterValue”输出的值 减 1。每检测到一个信号上升沿,计数器值都会递减 1,直至达到指定数据类型的下限 (INT = -32768)。 只要当前计数器值小于或等于 0,“Tag_Status”输出的信号状态就为“1”。在其它任何情况下, 输出“Tag_Status”的信号状态均为“0”。CTUD:加减计数 (S7-300, S7-400) 说明 可以使用“加减计数”指令递增和递减 CV 输出的值。如果输入 CU 的信号状态从“0”变为 “1”(信号上升沿),则输出 CV 的当前计数器值加 1。如果输入 CD 的信号状态从“0”变为 “1”(信号上升沿),则输出 CV 的当前计数器值减 1。如果在一个程序周期内输入 CU 和 CD 都出现了一个信号上升沿,则输出 CV 的当前计数器值保持不变。 计数器值可以一直递增,直到其达到输出 CV 处指定数据类型的上限。达到上限后,即使出 现信号上升沿,计数器值也不再递增。达到指定数据类型的下限后,计数器值便不再递减。 当输入 LD 中的信号状态变为“1”时,输出 CV 的计数器值会设置为参数 PV 的值。只要输入 LD 的信号状态仍为“1”,输入 CU 和 CD 的信号状态就不会影响该指令。 输入 R 的信号状态变为“1”时,计数器值将设置为“0”。只要输入 R 的信号状态仍为“1”,输入 CU、CD 和 LD 信号状态的改变就不会影响“加减计数”指令。 可以在输出 QU 中查询加计数器的状态。如果当前计数器值大于或等于参数 PV 的值,则将 输出 QU 的信号状态置位为“1”。在其它任何情况下,输出 QU 的信号状态均为“0”。 可以在 QD 输出中查询减计数器的状态。如果当前计数器值小于或等于“0”,则 QD 输出的信 号状态将置位为“1”。在其它任何情况下,输出 QD 的信号状态均为“0”。 说明 只需在程序中的某一位置处使用计数器,即可避免计数错误的风险。 每次调用“加减计数”指令,都会为其分配一个 IEC 计数器用来存储指令数据。可以按如下 方式声明 IEC 计数器: • 声明类型为 CTUD 的数据块(例如,“CTUD_DB”) 将该指令插入程序中时,将自动打开“调用选项”(Call options) 对话框。项目树中所创建的 数据块位于“Program resources”文件夹下的“程序块 > 系统块”(Program blocks > System blocks) 中。有关本主题的更多信息,请参见“另请参见”。