CTD:减计数 (S7-1200, S7-1500) 说明 “减计数”指令用于递减 CV 参数的值。如果参数 CD 的信号状态从“0”变为“1”(信号上升 沿),则执行该指令,同时参数 CV 的当前计数器值减 1。每检测到一个信号上升沿,计数 器值就会递减 1,直到达到指定数据类型的下限为止。达到下限时,参数 CD 的信号状态将 不再影响该指令。 可以通过参数 Q 查询计数状态。如果当前计数器值小于或等于“0”,则参数 Q 的信号状态将 置位为“1”。在其它任何情况下,参数 Q 的信号状态均为“0”。也可以为参数 PV 指定一个常数。 当参数 LD 的信号状态变为“1”时,参数 CV 的值会设置为参数 PV 的值。只要参数 LD 的信号 状态为“1”,参数 CD 的信号状态就不会影响该指令。 说明 只需在程序中的某一位置处使用计数器,即可避免计数错误的风险。 IEC 计数器作为系统数据类型为 IEC_<计数器> 的数据块(共享 DB) 您可以按如下所示将 IEC 计数器声明为数据块:.CTU(); IEC 计数器作为块接口的局部变量(多重实例) 您可以按如下所示将 IEC 计数器声明为局部变量: #myLocal_Counter(); 有关在结构(多重实例)中调用 IEC 计数器的信息,请参见“调用 IEC 计数器 ” 当“Tag_Start”操作数的信号状态从“0”变为“1”时,将执行“加计数”指令,同时 “Tag_CounterValue”操作数的当前计数器值加 1。每检测到一个额外的信号上升沿,计数器 值都会递增,直至达到所指定数据类型的上限值 (INT = 32767)。 只要当前计数器值大于或等于操作数“Tag_PresetValue”的值,输出“Tag_Status”的信号状态 就为“1”。在其它任何情况下,输出“Tag_Status”的信号状态均为“0”。当前计数器值存储在 “Tag_CounterValue”操作数中。
每次调用“减计数”指令,都会为其分配一个 IEC 计数器用于存储指令数据。IEC 计数器是 一种具有以下某种数据类型的结构: S7-1200 系列 CPU 系统数据类型 IEC_的数据块(共 享 DB) 局部变量 • IEC_SCOUNTER / IEC_USCOUNTER • IEC_COUNTER / IEC_UCOUNTER • IEC_DCOUNTER / IEC_UDCOUNTER • CTD_SINT / CTD_USINT • CTD_INT / CTD_UINT • CTD_DINT / CTD_UDINT S7-1500 系列 CPU: 系统数据类型 IEC_的数据块(共 享 DB) 局部变量 • IEC_SCOUNTER / IEC_USCOUNTER • IEC_COUNTER / IEC_UCOUNTER • IEC_DCOUNTER / IEC_UDCOUNTER • IEC_LCOUNTER / IEC_ULCOUNTER • CTD_SINT / CTD_USINT • CTD_INT / CTD_UINT • CTD_DINT / CTD_UDINT • CTD_LINT / CTD_ULINT 可以按如下方式声明 IEC 计数器: • 声明为一个系统数据类型为 IEC_的背景数据块(例如, “MyIEC_COUNTER_DB”) • 声明为程序块“Static”中数据类型为 CTD_<数据类型> 的局部变量(例如, #MyIEC_COUNTER_Instance) 如果在单独的数据块中设置 IEC 计数器(单背景),则将默认使用“优化的块访 问”(optimized block access) 创建背景数据块,并将各个变量定义为具有保持性。 如果在函数块中使用“优化的块访问”(optimized block access) 设置 IEC 计数器作为本地变量 (多重背景),则其在块接口中定义为具有保持性。 IEC 计数器作为系统数据类型为 IEC_<计数器> 的数据块(共享 DB)IEC 计数器作为块接口的局部变量(多重实例) 您可以按如下所示将 IEC 计数器声明为局部变量: #myLocal_Counter(); 有关在结构(多重实例)中调用 IEC 计数器的信息,请参见“调用 IEC 计数器 ”当“Tag_Start”操作数的信号状态从“0”变为“1”时,执行该指令且“Tag_CounterValue”操作数的 值减 1。每检测到一个额外的上升沿,计数器值都会递减,直至达到指定数据类型的下限 (-128)。 只要当前计数器值小于或等于 0,操作数“Tag_Status”的信号状态就为“1”。在其它任何情况 下,输出“Tag_Status”的信号状态均为“0”。当前计数器值存储在“Tag_CounterValue”操作数 中。CTUD:加减计数 (S7-1200, S7-1500) 说明 使用“加减计数”指令递增和递减 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”。也可以为参 数 PV 指定一个常数。 可以在 QD 参数中查询减计数器的状态。如果当前计数器值小于或等于“0”,则参数 QD 的信 号状态将置位为“1”。在其它任何情况下,参数 QD 的信号状态均为“0”。 说明 只需在程序中的某一位置处使用计数器,即可避免计数错误的风险。 每次调用“加减计数”指令,都会为其分配一个 IEC 计数器用来存储指令数据。IEC 计数器 是一种具有以下某种数据类型的结构:S7-1200 系列 CPU 系统数据类型 IEC_的数据块(共 享 DB) 局部变量 • IEC_SCOUNTER / IEC_USCOUNTER • IEC_COUNTER / IEC_UCOUNTER • IEC_DCOUNTER / IEC_UDCOUNTER • CTUD_SINT / CTUD_USINT • CTUD_INT / CTUD_UINT • CTUD_DINT / CTUD_UDINT S7-1500 系列 CPU: 系统数据类型 IEC_的数据块(共 享 DB) 局部变量 • IEC_SCOUNTER / IEC_USCOUNTER • IEC_COUNTER / IEC_UCOUNTER • IEC_DCOUNTER / IEC_UDCOUNTER • IEC_LCOUNTER / IEC_ULCOUNTER • CTUD_SINT / CTUD_USINT • CTUD_INT / CTUD_UINT • CTUD_DINT / CTUD_UDINT • CTUD_LINT / CTUD_ULINT 可以按如下方式声明 IEC 计数器: • 声明为一个系统数据类型为 IEC_的背景数据块(例如, “MyIEC_COUNTER_DB”) • 声明为程序块的“Static”中数据类型为 CTUD_<数据类型> 的局部变量(例如, #MyCTUD_COUNTER_Instance) 如果在单独的数据块中设置 IEC 计数器(单背景),则将默认使用“优化的块访 问”(optimized block access) 创建背景数据块,并将各个变量定义为具有保持性。 如果在函数块中使用“优化的块访问”(optimized block access) 设置 IEC 计数器作为本地变量 (多重背景),则其在块接口中定义为具有保持性。 IEC 计数器作为系统数据类型为 IEC_<计数器> 的数据块(共享 DB) 您可以按如下所示将 IEC 计数器声明为数据块:.CTUD(); IEC 计数器作为块接口的局部变量(多重实例) 您可以按如下所示将 IEC 计数器声明为局部变量: #myLocal_Counter();如果“Tag_Start1”操作数的信号状态出现上升沿,当前计数器的值加 1 并存储在 “Tag_CounterValue”操作数中。如果“Tag_Start2”操作数的信号状态出现信号上升沿,则计数 器值减 1 并存储在“Tag_CounterValue”操作数中。参数 CU 出现信号上升沿时计数器的值将 递增,直至达到指定数据类型 (INT) 的上限。如果 CD 参数出现上升沿,计数器值将递减,直 至达到指定数据类型 (INT) 的下限。只要当前计数器值大于或等于操作数“Tag_PresetValue”的值,操作数“Tag_CU_Status”的信号 状态就为“1”。在其它任何情况下,输出“Tag_CU_Status”的信号状态均为“0”。 只要当前计数器值小于或等于 0,操作数“Tag_CD_Status”的信号状态就为“1”。在其它任何 情况下,输出“Tag_CD_Status”的信号状态均为“0”。