一段錯誤程序引起的對S7-200定時器的思考
網友squall001發(fā)帖問:用T37的TON定時器,把他嵌套在FOR循環(huán)里面,但是在循環(huán)斷開后定時器的當前值不會回零,這是怎么回事?
下面是他的源程序:
LD I0.0
FOR VW100, 1, 100
LD SM0.0
TON T37, 35
LD T37
+I 1, VW102
NEXT
為了便于觀察,我把定時器的設定值改為30000,運行和監(jiān)控上述程序。
下面是我看到的現(xiàn)象:
1)接通I0.0的常開觸點,定時器的當前值以100為單位增大,實際的定時時間為30s(30000/100=300ms)。
2)30s后,T37的常開觸點閉合,每個掃描周期VW102的值加100。
3)斷開I0.0的觸點,停止執(zhí)行循環(huán)程序,VW102的值保持不變。接通I0.0的觸點,VW102的值在保持值的基礎上繼續(xù)增大。
4)因為T37的線圈用一直接通的SM0.0的常開觸點控制,T37的線圈不會斷開,它不能復位。
上述現(xiàn)象的解釋如下:
1)作為應用指令,F(xiàn)OR指令的調用條件不滿足時(I0.0為0狀態(tài)),循環(huán)程序不會被執(zhí)行(一次也沒有執(zhí)行),其中的定時器指令也沒有執(zhí)行,因此它的當前值和VW102的值保持不變。
2)作為普通的定時器,T37在它的線圈指令被執(zhí)行時進行定時。循環(huán)條件滿足時,每次掃描要執(zhí)行100次T37的線圈指令,因此T37的定時速度比普通情況要快100倍。
3)30s后,T37的常開觸點閉合,每個掃描周期要執(zhí)行100次“+I”指令,所以每個掃描周期VW102的值加100。
4)任何情況T37的線圈都不會斷電,所以它的當前值不會回零。這個例子提示我們,除了考慮定時器線圈通電工作,一定要考慮定時器復位的條件,否則你的定時器就只能用一次。
顯然定時器線圈指令不應放在循環(huán)程序里,一個掃描周期不應多次執(zhí)行同一個定時器的線圈指令。
下面是S7-200的系統(tǒng)手冊介紹的分辨率對定時器的影響:
對于1 ms分辨率的定時器來說,定時器位和當前值的更新不與掃描周期同步。對于大于1ms的程序掃描周期,定時器位和當前值在一次掃描內刷新多次。
對于10ms分辨率的定時器來說,定時器位和當前值在每個程序掃描周期的開始刷新。定時器位和當前值在整個掃描周期過程中為常數(shù)。在每個掃描周期的開始會將一個掃描累計的時間間隔加到定時器當前值上。
對于分辨率為100 ms的定時器,在執(zhí)行指令時對定時器位和當前值進行更新;因此,確保在每個掃描周期內,程序僅為100毫秒的定時器執(zhí)行一次指令,以便使定時器保持正確計時。
下面是他的源程序:
LD I0.0
FOR VW100, 1, 100
LD SM0.0
TON T37, 35
LD T37
+I 1, VW102
NEXT
為了便于觀察,我把定時器的設定值改為30000,運行和監(jiān)控上述程序。
下面是我看到的現(xiàn)象:
1)接通I0.0的常開觸點,定時器的當前值以100為單位增大,實際的定時時間為30s(30000/100=300ms)。
2)30s后,T37的常開觸點閉合,每個掃描周期VW102的值加100。
3)斷開I0.0的觸點,停止執(zhí)行循環(huán)程序,VW102的值保持不變。接通I0.0的觸點,VW102的值在保持值的基礎上繼續(xù)增大。
4)因為T37的線圈用一直接通的SM0.0的常開觸點控制,T37的線圈不會斷開,它不能復位。
上述現(xiàn)象的解釋如下:
1)作為應用指令,F(xiàn)OR指令的調用條件不滿足時(I0.0為0狀態(tài)),循環(huán)程序不會被執(zhí)行(一次也沒有執(zhí)行),其中的定時器指令也沒有執(zhí)行,因此它的當前值和VW102的值保持不變。
2)作為普通的定時器,T37在它的線圈指令被執(zhí)行時進行定時。循環(huán)條件滿足時,每次掃描要執(zhí)行100次T37的線圈指令,因此T37的定時速度比普通情況要快100倍。
3)30s后,T37的常開觸點閉合,每個掃描周期要執(zhí)行100次“+I”指令,所以每個掃描周期VW102的值加100。
4)任何情況T37的線圈都不會斷電,所以它的當前值不會回零。這個例子提示我們,除了考慮定時器線圈通電工作,一定要考慮定時器復位的條件,否則你的定時器就只能用一次。
顯然定時器線圈指令不應放在循環(huán)程序里,一個掃描周期不應多次執(zhí)行同一個定時器的線圈指令。
下面是S7-200的系統(tǒng)手冊介紹的分辨率對定時器的影響:
對于1 ms分辨率的定時器來說,定時器位和當前值的更新不與掃描周期同步。對于大于1ms的程序掃描周期,定時器位和當前值在一次掃描內刷新多次。
對于10ms分辨率的定時器來說,定時器位和當前值在每個程序掃描周期的開始刷新。定時器位和當前值在整個掃描周期過程中為常數(shù)。在每個掃描周期的開始會將一個掃描累計的時間間隔加到定時器當前值上。
對于分辨率為100 ms的定時器,在執(zhí)行指令時對定時器位和當前值進行更新;因此,確保在每個掃描周期內,程序僅為100毫秒的定時器執(zhí)行一次指令,以便使定時器保持正確計時。
本文標簽:一段錯誤程序引起的對S7-200定時器的思考
* 由于無法獲得聯(lián)系方式等原因,本網使用的文字及圖片的作品報酬未能及時支付,在此深表歉意,請《一段錯誤程序引起的對S7-200定時器的思考》相關權利人與機電之家網取得聯(lián)系。
關于“一段錯誤程序引起的對S7-200定時器的思考”的更多資訊