|
|
【計(jì)數(shù)器】
計(jì)數(shù)器有3種狀態(tài),分別是停止(C_STA_STOP)、運(yùn)行(C_STA_RUN)、計(jì)數(shù)到達(dá)(C_STA_OK)。
16位通用加計(jì)數(shù)器有2種方法。
第1種方法,加計(jì)數(shù):CTU(要使用的計(jì)數(shù)器,信號(hào)源,計(jì)數(shù)目標(biāo)值)。
例如使用計(jì)數(shù)器C0對(duì)X0的上升沿,進(jìn)行加計(jì)數(shù),到達(dá)10次時(shí),Y0輸出1s后重新開始計(jì)數(shù)。
- IF (CTU(C0,X0,10)==C_STA_OK) //若計(jì)數(shù)器C0,捕捉到X0上升沿10次
- {
- TON(T50,100); //啟動(dòng)1s定時(shí)器
- SET(Y0); //輸出Y0
- } ELSE {
- RST(Y0); //清除Y0
- }
- IF (TGetSta(T50)==T_STA_OK) //若1s時(shí)間到
- {
- RST(Y0); //清除Y0
- TRST(T50); //重置定時(shí)器
- C16RST(C0); //重置計(jì)數(shù)器
- }
復(fù)制代碼
第2種方法,減計(jì)數(shù):CTD(要使用的計(jì)數(shù)器,信號(hào)源,計(jì)數(shù)目標(biāo)值)。
例如使用計(jì)數(shù)器C1對(duì)X1的下降沿,進(jìn)行減計(jì)數(shù),到達(dá)10次時(shí),Y1輸出2s后重新開始計(jì)數(shù)。
- IF (CTD(C1,NOT(X1),10)==C_STA_OK) //若計(jì)數(shù)器C1,捕捉到X0下降沿10次
- {
- TON(T50,200); //啟動(dòng)2s定時(shí)器
- SET(Y1); //輸出Y1
- } ELSE {
- RST(Y1); //清除Y1
- }
- IF (TGetSta(T50)==T_STA_OK) //若計(jì)時(shí)時(shí)間到
- {
- RST(Y1); //清除Y1
- TRST(T50); //重置定時(shí)器
- C16RST(C1); //重置計(jì)數(shù)器
- }
復(fù)制代碼
32位通用計(jì)數(shù)器有1種方法。CTUD(計(jì)數(shù)器,加計(jì)數(shù)信號(hào)源,減計(jì)數(shù)信號(hào)源,計(jì)數(shù)目標(biāo)值)。
例如使用計(jì)數(shù)器C200,X0作為加計(jì)數(shù)信號(hào)源,X1作為減計(jì)數(shù)信號(hào)源,當(dāng)數(shù)值到達(dá)200時(shí),Y0輸出2s,然后重新計(jì)數(shù)。
由于32位通用計(jì)數(shù)器在計(jì)數(shù)完成后,仍會(huì)受到加減操作的影響,導(dǎo)致狀態(tài)變更,因此引入輔助繼電器,避免Y0的輸出波動(dòng)。
- IF (M0==0) //若M0為0
- {
- IF (CTUD(C200,X0,X1,200)==C_STA_OK) //若計(jì)數(shù)器C200,在X0和X1的計(jì)數(shù)信號(hào)下,達(dá)到200次
- {
- TON(T50,200); //啟動(dòng)2s定時(shí)器
- SET(Y0); //輸出Y0
- SET(M0); //置位M0
- } ELSE {
- RST(Y0); //清除Y0
- }
- }
- IF (TGetSta(T50)==T_STA_OK) //若定時(shí)時(shí)間到
- {
- RST(Y0); //清除Y0
- C32RST(C200); //重置計(jì)數(shù)器
- RST(M0); //清除M0
- TRST(T50); //重置定時(shí)器
- }
復(fù)制代碼
|
|