计数器
计数器有3种状态,分别是停止(C_STA_STOP)、运行(C_STA_RUN)、计数到达(C_STA_OK)。
16位通用加计数器有2种方法。
第1种方法,加计数:CTU(要使用的计数器,信号源,计数目标值)。
例如使用计数器C0对X0的上升沿,进行加计数,到达10次时,Y0输出1s后重新开始计数。
- IF (CTU(C0,X0,10)==C_STA_OK) //若计数器C0,捕捉到X0上升沿10次
- {
- TON(T50,100); //启动1s定时器
- SET(Y0); //输出Y0
- } ELSE {
- RST(Y0); //清除Y0
- }
- IF (TGetSta(T50)==T_STA_OK) //若1s时间到
- {
- RST(Y0); //清除Y0
- TRST(T50); //重置定时器
- C16RST(C0); //重置计数器
- }
复制代码
第2种方法,减计数:CTD(要使用的计数器,信号源,计数目标值)。
例如使用计数器C1对X1的下降沿,进行减计数,到达10次时,Y1输出2s后重新开始计数。
- IF (CTD(C1,NOT(X1),10)==C_STA_OK) //若计数器C1,捕捉到X0下降沿10次
- {
- TON(T50,200); //启动2s定时器
- SET(Y1); //输出Y1
- } ELSE {
- RST(Y1); //清除Y1
- }
- IF (TGetSta(T50)==T_STA_OK) //若计时时间到
- {
- RST(Y1); //清除Y1
- TRST(T50); //重置定时器
- C16RST(C1); //重置计数器
- }
复制代码
32位通用计数器有1种方法。CTUD(计数器,加计数信号源,减计数信号源,计数目标值)。
例如使用计数器C200,X0作为加计数信号源,X1作为减计数信号源,当数值到达200时,Y0输出2s,然后重新计数。
由于32位通用计数器在计数完成后,仍会受到加减操作的影响,导致状态变更,因此引入辅助继电器,避免Y0的输出波动。
- IF (M0==0) //若M0为0
- {
- IF (CTUD(C200,X0,X1,200)==C_STA_OK) //若计数器C200,在X0和X1的计数信号下,达到200次
- {
- TON(T50,200); //启动2s定时器
- SET(Y0); //输出Y0
- SET(M0); //置位M0
- } ELSE {
- RST(Y0); //清除Y0
- }
- }
- IF (TGetSta(T50)==T_STA_OK) //若定时时间到
- {
- RST(Y0); //清除Y0
- C32RST(C200); //重置计数器
- RST(M0); //清除M0
- TRST(T50); //重置定时器
- }
复制代码
|