计数器操作 (S7-300,S7-400) IEC 计数器 (S7-300, S7-400) CTU:加计数 (S7-300, S7-400) 说明可以使用“加计数”指令递增 CV 参数的值。如果参数 CU 的信号状态从“0”变为“1”(信号上 升沿),则执行该指令,参数 CV的当前计数器值加“1”。每检测到一个信号上升沿,计 数器值就会递增,直到达到数据类型 INT 的上限。达到上限时,参数 CU的信号状态将不再 影响该指令。 可以通过参数 Q 查询计数状态。参数 Q 的信号状态由参数 PV 决定。如果当前计数器值大于或等于参数 PV 的值,则参数 Q 的信号状态将置位为“1”。在其它任何情况下,参数 Q 的信 号状态均为“0”。也可以为参数 PV指定一个常数。 参数 R 的信号状态变为“1”时,参数 CV 的值将复位为“0”。只要参数 R 的信号状态为“1”,参数 CU的信号状态就不会影响该指令。 说明 只需在程序中的某一位置处使用计数器,即可避免计数错误的风险。每次调用“加计数”指令,都会为其分配一个 IEC 计数器用于存储指令数据。可以按如下方 式声明 IEC 计数器: • 声明类型为CTU 的数据块(例如,“CTU_DB”) • 声明为块中“Static”程序段内 CTU类型的局部变量(例如,#MyCTU_COUNTER) 在程序中插入该指令时,将打开“调用选项”(Call options)对话框,可以指定 IEC 计数器将 存储在自身数据块中(单背景)还是作为局部变量存储在块接口中(多重背景)。如果创建了一个单独的数据块,则该数据块将保存到项目树“程序块 > 系统块”(Program blocks > Systemblocks) 路径中的“程序资源”(Program resources) 文件夹内。有关本主题的更多信息,请参见“另请参见”。
操作系统会在冷启动期间复位“加计数”指令的实例。如果要在暖启动之后初始化该指令的 实例,则需在启动 OB 中将该指令的 R参数设置为“1”时调用这些待初始化的实例。如果“加 计数”指令的实例位于其它块中,则可以通过诸如初始化上级块来复位这些实例。 IEC计数器作为系统数据类型为 IEC_<计数器> 的数据块(共享 DB) 您可以按如下所示将 IEC计数器声明为数据块:.CTU(); IEC 计数器作为块接口的局部变量(多重实例) 您可以按如下所示将 IEC 计数器声明为局部变量:#myLocal_Counter(); 语法 下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 CU Input BOOLI、Q、M、D、L 计数输入 R Input BOOL I、Q、M、D、 L、P 复位输入 PV Input INT I、Q、M、D、L、P 置位输出 Q 的目标值。 Q Output BOOL I、Q、M、D、L 计数器状态 CV Output INTI、Q、M、D、 L、P 当前计数器值有关有效数据类型的更多信息,请参见“另请参见”。 当“Tag_Start”操作数的信号状态从“0”变为“1”时,将执行“加计数”指令,“Tag_CounterValue”操作数的当前计数器值加 1。每检测到一个额外的信号上升沿,计数器值都会递增,直至达到该数据类型的上限 (INT = 32767)。只要当前计数器值大于或等于操作数“Tag_PresetValue”的值,输出“Tag_Status”的信号状态就为“1”。在其它任何情况下,输出“Tag_Status”的信号状态均为“0”。当前计数器值存储在“Tag_CounterValue”操作数中。CTD:减计数 (S7-300, S7-400) 说明 “减计数”指令用于递减 CV参数的值。如果参数 CD 的信号状态从“0”变为“1”(信号上升 沿),则执行该指令,参数 CV 的当前计数器值减1。每检测到一个信号上升沿,计数 器就会递减 1,直到达到指定数据类型 (INT) 的下限为止。达到下限时,参数 CD 的信号状态将不再影响该指令。 可以通过参数 Q 查询计数状态。如果当前计数器值小于或等于“0”,则参数 Q 的信号状态将置位为“1”。在其它任何情况下,参数 Q 的信号状态均为“0”。 当参数 LD 的信号状态变为“1”时,参数 CV 的值会设置为参数PV 的值。只要参数 LD 的信号 状态为“1”,参数 CD 的信号状态就不会影响该指令。 说明只需在程序中的某一位置处使用计数器,即可避免计数错误的风险。每次调用“减计数”指令,都会为其分配一个 IEC计数器用于存储指令数据。可以按如下方 式声明 IEC 计数器: • 声明类型为 CTD 的数据块(例如,“CTD_DB”) •声明为块中“Static”程序段内 CTD 类型的局部变量(例如,#MyCTD_COUNTER)在程序中插入该指令时,将打开“调用选项”(Call options) 对话框,可以指定 IEC 计数器将存储在自身数据块中(单背景)还是作为局部变量存储在块接口中(多重背景)。如果创建 了一个单独的数据块,则该数据块将保存到项目树“程序块> 系统块”(Program blocks > System blocks) 路径中的“程序资源”(Programresources) 文件夹内。有关本主题的更多信息, 请参见“另请参见”。操作系统会在冷启动期间复位“减计数”指令的实例。如果要在暖重启之后初始化该指令的 实例,则需在启动 OB 中将该指令的 LD参数设置为“1”时调用这些待初始化的实例。在这种 情况下,应在参数 PV 中指定参数 CV所需的初始值。如果“减计数”指令的实例位于其它 块中,则可以通过诸如初始化上级块来复位这些实例。 IEC 计数器作为系统数据类型为IEC_<计数器> 的数据块(共享 DB) 您可以按如下所示将 IEC 计数器声明为数据块:.CTD(); IEC计数器作为块接口的局部变量(多重实例) 您可以按如下所示将 IEC 计数器声明为局部变量: #myLocal_Counter();参数 下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 CD Input BOOL I、Q、M、D、L 计数输入 LDInput BOOL I、Q、M、D、 L、P 装载输入 PV Input INT I、Q、M、D、 L、P 使用 LD = 1置位输出 CV的目标值。当“Tag_Start”的信号状态从“0”变为“1”时,将执行“减计数”指令,“Tag_CounterValue”操作数的值减 1。每出现一个信号上升沿,计数值器便减 1,直到达到数据类型的下限 (INT = -32768) 为止。只要当前计数器值小于或等于 0,操作数“Tag_Status”的信号状态就为“1”。在其它任何情况下,输出“Tag_Status”的信号状态均为“0”。当前计数器值存储在“Tag_CounterValue”操作数中。CTUD:加减计数 (S7-300, S7-400) 说明 使用“加减计数”指令递增和递减 CV 参数的计数器值。如果参数 CU的信号状态从“0”变为 “1”(信号上升沿),则参数 CV 的当前计数器值加 1。如果参数 CD 的信号状态从“0”变为“1”(信号上升沿),则参数 CV 的计数器值减 1。如果在一个程序周期内输入 CU 和 CD 都 出现了一个信号上升沿,则参数 CV的当前计数器值保持不变。计数器值达到指定数据类型 INT 的上限值后,停止递增。达到上限后,出现信号上升沿,计数器值也不再递增。达到指定数据类型 (INT) 的下限值时,计数器值不再递减。 当参数 LD 中的信号状态变为“1”时,参数 CV的计数器值会设置为参数 PV 的值。只要参数 LD 的信号状态为“1”,参数 CU 和 CD 的信号状态就不会影响该指令。 当 R参数的信号状态变为“1”时,计数器值将置位为 0。只要 R 参数的信号状态仍为“1”,参数 CU、CD 和 LD信号状态的改变就不会影响“加减计数”指令。 可以在 QU 参数中查询加计数器的状态。如果当前计数器值大于或等于参数 PV 的值,则参数QU 的信号状态将置位为“1”。在其它任何情况下,参数 QU 的信号状态均为“0”。也可以为参 数 PV 指定一个常数。 可以在 QD参数中查询减计数器的状态。如果当前计数器值小于或等于“0”,则参数 QD 的信 号状态将置位为“1”。在其它任何情况下,参数 QD的信号状态均为“0”。 说明 只需在程序中的某一位置处使用计数器,即可避免计数错误的风险。 每次调用“加减计数”指令,都会为其分配一个IEC 计数器用来存储指令数据。可以按如下 方式声明 IEC 计数器: • 声明类型为 CTUD 的数据块(例如,“CTUD_DB”)• 声明为块中“Static”程序段内 CTUD 类型的局部变量(例如,#MyCTUD_COUNTER)在程序中插入该指令时,将打开“调用选项”(Call options) 对话框,可以指定 IEC 计数器将存储在自身数据块中(单背景)还是作为局部变量存储在块接口中(多重背景)。如果创建 了一个单独的数据块,则该数据块将保存到项目树“程序块> 系统块”(Program blocks > System blocks) 路径中的“程序资源”(Programresources) 文件夹内。有关本主题的更多信息, 请参见“另请参见”。操作系统会在冷启动期间复位“加减计数”指令的实例。如果要在暖启动后初始化该指令的 实例,则必须在启动 OB时使用以下参数值调用要初始化的实例: • 用作加计数器时,参数 R 的值必须设置为“1”。 • 用作减计数器时,参数 LD的值必须设置为“1”。在这种情况下,需要在参数 PV 中为 CV 参 数指定所需的初始值。如果“加减计数”指令的实例位于其它块中,则可以通过诸如初始化上级块来复位这些实例。