西門子S7-1200PLC的IEC格式的定時器屬于功能塊。在插入定時器指令時,要求創建一個16字節的IEC_Timer數據類型的DB結構(即背景數據塊),來保存有關的數據。在功能塊中,可以事先創建一個IEC_Timer數據類型的靜態變量(多重背景),然后將它指定給定時器指令。
CPU沒有給任何特定的定時器指令分配專門的資源。每個定時器使用DB結構和一個連續運行的內部CPU定時器(我的理解是一個硬件定時器)來執行定時。
在定時器指令的輸入IN的上升沿啟動定時器時,連續運行的內部CPU定時器的值將被復制到為該定時器指令分配的DB結構的元素START(起始值)中。
該起始值在定時器繼續運行期間將保持不變,以后將在每次更新定時器時使用。以下條件時將會執行定時器更新:
1)執行定時器指令(TP、TON、TOF 或 TONR);
2)定時器結構的元素ELAPSED(經過的時間)或位輸出Q作為其它指令的參數,該指令被執行。
更新定時器時,將從內部CPU定時器的當前值中減去上述起始值,得到經過的時間ELAPSED。再將ELAPSED與預設值PT進行比較,以確定定時器的位輸出Q的狀態。然后更新該定時器的DB結構的元素ELAPSED和Q。達到預設值PT后,定時器不會繼續累加經過的時間ELAPSED。
STEP 7 Basic的V11版與V10.5版相比,增加了類似于S7-300/400的定時器線圈指令。
從上述的定時器內部的定時機制可知,在使用定時器時,其定時精度與CPU的掃描周期有很大的關系。在CPU兩次更新定時器之間,定時器的輸入、輸出參數保持不變。
為了驗證上述結論,在FB1中調用定時器指令TP,在OB1中用I0.1作為調用條件,調用FB1。用監視表格監視定時器的輸出Q和經過的時間ET,用輸入IN的上升沿啟動定時器后,如果I0.1為0狀態,沒有調用FB1和執行定時器指令,定時器的輸出Q和經過的時間ET保持不變。只有在調用FB1,執行定時器指令時,ET的值才會變化。