子程序中的定時器
劉玉蓉
發(fā)布于2014-11-18 17:35
12
0
標(biāo)簽:
為什么在子程序里的一個30s的定時器在監(jiān)控時走到10s或者20s就自動清零然后繼續(xù)從零開始走?條件一直都滿足,真是奇哉怪也!
佳答案
轉(zhuǎn)帖:
1、定時器在子程序中的表現(xiàn):
在條件調(diào)用子程序的主程序中,當(dāng)停止子程序調(diào)用時,如果定時器已經(jīng)激活正在計時,停止調(diào)用這個子程序會造成定時器的失控。不管此時定時器前面的激活條件如何變化,定時器(1ms、10ms 時基的)會一直走到大值,定時器輸出也會在達到設(shè)定值時接通;(100ms 時基的定時器會在上述情況下停止計時,但在邏輯上處于失控狀態(tài))。
如果用 SM0.0 調(diào)用子程序;或者在控制邏輯的時序上做到能夠保證定時功能完整執(zhí)行,定時器會正常運行。使用條件調(diào)用含有定時器的子程序時,一定要注意時序邏輯,以免造成程序運行錯誤。
2、使用子程序時,為何動作只能執(zhí)行一次,或者某些狀態(tài)不能結(jié)束?
如果發(fā)生動作不能重復(fù)執(zhí)行,或者狀態(tài)不能結(jié)束(像鎖死了一樣),而這些功能都與子程序有關(guān)時,請檢查是否有條件調(diào)用子程序。調(diào)用子程序的條件在上述動作執(zhí)行后,或者進入某個狀態(tài)后不再有效,無法再次“激活”,而脫離上述狀態(tài)或復(fù)位的指令正好在子程序內(nèi),必然造成上述的現(xiàn)象。