<sup id="x7dny"><rp id="x7dny"><big id="x7dny"></big></rp></sup>
    • <label id="x7dny"><tt id="x7dny"><tfoot id="x7dny"></tfoot></tt></label>
      <dfn id="x7dny"></dfn>
      <small id="x7dny"><rp id="x7dny"><rt id="x7dny"></rt></rp></small>
      加入收藏 在線留言 聯系我們
      關注微信
      手機掃一掃 立刻聯系商家
      全國服務熱線18475208684
      公司新聞
      博圖中的定時器你真的會用嗎?關于西門子PLC編程軟件TIA中使用IEC定時器的陷阱
      發布時間: 2024-05-29 16:05 更新時間: 2024-12-05 08:00

      目錄


      1 概述

      2 編寫測試程序

      3 測試結果

      4 總結

      正文


      1 概述在博圖中,IEC定時器有多種,分別為TP生成脈沖、TON接通延時、TOF關斷延時、TONR時間累加器。編程中,大家Zui常用的是TON接通延時定時器。很長時間以來,無論是網友還是身邊的同事朋友,常常遇到使用定時器時程序沒有按照預期運行,又找不到原因,故而認為是指令或PLC存在BUG。雖然博圖幫助中對定時器的使用講解的非常詳細,但是仍有一些細節沒有清晰的呈現出來。筆者在編程中,也是經常使用定時器,但從未遇到所謂的BUG。因為,在很久以前,筆者就詳讀了幫助,并對幫助中的描述也產生了疑惑,但并沒有放過攔路虎,而是編程進行了各種各樣的探索。下面針對TON接通延時定時器,列舉一些場景,相信對各位會大有幫助。2 編寫測試程序筆者使用TIA V19和PLCSIM V19,建立S7-1500項目,并用PLCSIM Advanced 6.0進行PLC的仿真。

      新建名為TestTimer的FB塊,并在Main中調用,并產生其背景數據塊InstTimerTest。

      圖片

      打開TestTimer塊,在Static區域建立如下靜態變量,注意sSetPT的初值為T#30s。

      圖片

      在代碼編輯區域,編寫如下代碼。

























    • (*    測試IEC定時器TON*)
      //調用定時器,P1IF #sIsCall THEN    #instTimer.TON(IN := #sIsEnable,                   PT := #sSetPT);END_IF;
      //訪問定時器的Q,P2IF #sIsReadQ THEN    IF #instTimer.Q THEN        RESET_TIMER(#instTimer);    END_IF;END_IF;
      //訪問定時器的ET,P3IF #sIsReadET THEN    IF #instTimer.ET >= t#20s THEN        RESET_TIMER(#instTimer);    END_IF;END_IF;
      3 測試結果

      下載程序至仿真PLC并打開InstTimerTest背景數據塊,進行在線監測。以下PLC初始運行的狀態我們定義為初始狀態,以下場景都從初始狀態開始。

      圖片

      (1)場景1初始狀態時,先將sIsReadQ和sIsReadET至少一個置1,再將sIsCall、sIsEnable分別置1,即調用并啟動定時器,程序則按照編寫邏輯運行。

    • 若僅sIsReadQ置1,則定時器計時30s輸出Q,P2中程序復位定時器,定時器重新計時。

    • 若僅sIsReadET置1,則定時器計時20s,P3中程序復位定時器,定時器重新計時。

    • 若sIsReadQ和sIsReadET都置1,則定時器計時20s被P3程序復位后重新計時。

    • 當sIsCall為1,sIsEnable由1變0時,定時器復位。
    • 此場景下,定時器正常工作,可以看到ET值一直在刷新變化,按照程序邏輯正常執行。

      圖片  

      (2)場景2

      初始狀態時,sIsReadQ和sIsReadET都不置1,將sIsCall、sIsEnable分別置1,即調用并啟動定時器,此時ET值沒有刷新變化,一直保持為0。

      圖片  

      大約等待10s后,將sIsReadQ和sIsReadET至少一個置1,可以看到ET立即刷新為10s左右的計時值。

      圖片若等待到30s以后再將sIsReadQ和sIsReadET至少一個置1,那么計時器將重新計時,因為程序中的Q和ET立即刷新,Q輸出且ET大于30s,計時器被P2(3)程序復位了。場景2結論:即使未訪問Q或ET,只要TON被調用并激活,其內部參數也計時了,只不過外部并沒有刷新而已,也就是說P2(3)程序不會執行。一旦Q或ET其中一個被訪問,那么Q和ET會立即被刷新為實際值。(3)場景3

      初始狀態時,先將sIsReadQ和sIsReadET至少一個置1,再將sIsCall、sIsEnable分別置1,即調用并啟動定時器。在ET為5s左右時,復位sIsReadQ和sIsReadET,發現ET不再刷新,停留在為復位sIsReadQ和sIsReadET時的值。

      圖片  

      等待大約10s以后,再將sIsReadQ和sIsReadET至少一個置1,發現ET值為15s左右。

      圖片  

      場景3驗證了場景2得出的結論。(4)場景4初始狀態時,先將sIsReadQ和sIsReadET至少一個置1,再將sIsCall、sIsEnable分別置1,即調用并啟動定時器。在ET為5s左右時,sIsEnable保持為1,將sIsCall復位,發現ET仍然刷新,到達指定時間時,P2(3)會復位定時器。即使將sIsCall再次置1,也不影響定時器的計時,即ET繼續從當前值計時,不會從0開始。

      若在sIsCall被復位期間,sIsEnable也被復位,仍不影響定時器的計時,因為在TON指令未被調用時,IN的狀態不會再隨連接變量的變化而變化,下圖IN仍然為sIsCall復位前的狀態TRUE。只要在sIsCall再次被置1前將sIsEnable置1都不不影響定時器的計時。

      圖片  

      場景4結論:當TON指令的IN檢測到由1變0時,定時器會復位;當IN檢測到由0變1時,定時器開始計時。另外要注意,TON指令未被調用時,IN的狀態不會隨連接變量的變化而變化,IN的狀態會保持在取消調用前的那一刻的狀態,直達TON被重新調用,IN才會更新。


      聯系方式

      • 電  話:13922889745
      • 經理:向小姐
      • 手  機:18475208684
      • 微  信:18475208684