【計數器】
計數器有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); //重置定時器
- }
復制代碼
|