西門子s7-1200plc的iec格式的定時(shí)器屬于功能塊。在插入定時(shí)器指令時(shí),要求創(chuàng)建一個(gè)16字節(jié)的iec_timer數(shù)據(jù)類型的db結(jié)構(gòu)(即背景數(shù)據(jù)塊),來保存有關(guān)的數(shù)據(jù)。在功能塊中,可以事先創(chuàng)建一個(gè)iec_timer數(shù)據(jù)類型的靜態(tài)變量(多重背景),然后將它指定給定時(shí)器指令。
cpu沒有給任何特定的定時(shí)器指令分配專門的資源。每個(gè)定時(shí)器使用db結(jié)構(gòu)和一個(gè)連續(xù)運(yùn)行的內(nèi)部cpu定時(shí)器(我的理解是一個(gè)硬件定時(shí)器)來執(zhí)行定時(shí)。
在定時(shí)器指令的輸入in的上升沿啟動(dòng)定時(shí)器時(shí),連續(xù)運(yùn)行的內(nèi)部cpu定時(shí)器的值將被復(fù)制到為該定時(shí)器指令分配的db結(jié)構(gòu)的元素start(起始值)中。
該起始值在定時(shí)器繼續(xù)運(yùn)行期間將保持不變,以后將在每次更新定時(shí)器時(shí)使用。以下條件時(shí)將會(huì)執(zhí)行定時(shí)器更新:
1)執(zhí)行定時(shí)器指令(tp、ton、tof 或 tonr);
2)定時(shí)器結(jié)構(gòu)的元素elapsed(經(jīng)過的時(shí)間)或位輸出q作為其它指令的參數(shù),該指令被執(zhí)行。
更新定時(shí)器時(shí),將從內(nèi)部cpu定時(shí)器的當(dāng)前值中減去上述起始值,得到經(jīng)過的時(shí)間elapsed。再將elapsed與預(yù)設(shè)值pt進(jìn)行比較,以確定定時(shí)器的位輸出q的狀態(tài)。然后更新該定時(shí)器的db結(jié)構(gòu)的元素elapsed和q。達(dá)到預(yù)設(shè)值pt后,定時(shí)器不會(huì)繼續(xù)累加經(jīng)過的時(shí)間elapsed。
step 7 basic的v11版與v10.5版相比,增加了類似于s7-300/400的定時(shí)器線圈指令。
從上述的定時(shí)器內(nèi)部的定時(shí)機(jī)制可知,在使用定時(shí)器時(shí),其定時(shí)精度與cpu的掃描周期有很大的關(guān)系。在cpu兩次更新定時(shí)器之間,定時(shí)器的輸入、輸出參數(shù)保持不變。
為了驗(yàn)證上述結(jié)論,在fb1中調(diào)用定時(shí)器指令tp,在ob1中用i0.1作為調(diào)用條件,調(diào)用fb1。用監(jiān)視表格監(jiān)視定時(shí)器的輸出q和經(jīng)過的時(shí)間et,用輸入in的上升沿啟動(dòng)定時(shí)器后,如果i0.1為0狀態(tài),沒有調(diào)用fb1和執(zhí)行定時(shí)器指令,定時(shí)器的輸出q和經(jīng)過的時(shí)間et保持不變。只有在調(diào)用fb1,執(zhí)行定時(shí)器指令時(shí),et的值才會(huì)變化。