西門子PLC延時中斷組織塊的應(yīng)用
發(fā)布于2022-11-24 14:10
54
2
標(biāo)簽:西門子PLC
PLC的普通定時器的工作與掃描工作方式有關(guān),其定時精度較差。在接通延時定時器的輸入信號的上升沿和定時器輸出位的上升沿,分別調(diào)用SFC1讀取CPU中的日期和時間,用IEC功能FC8從其中提取實時時間(TIME_OF_DAY)。設(shè)置時間預(yù)置值分別為5s和50s,掃描循環(huán)時間為10ms。作者做了多次實驗,發(fā)現(xiàn)定時器的定時誤差為1~9ms。
如果需要高精度的延時,應(yīng)使用延時中斷 OB。用 SFC 32“SRT_DINT”啟動延時中斷,延遲時間為1~60000ms,精度為1ms。延時時間到時觸發(fā)中斷,調(diào)用SFC32指定的OB。CPU316 及以下的 CPU 只能使用 OB20,暖啟動或冷啟動將清除延時中斷 OB的啟動事件。
1.硬件組態(tài)
用新建項目向?qū)梢粋€名為“OB20例程”的項目(見隨書光盤中的同名例程),CPU模塊的型號為CPU 315-2DP。打開硬件組態(tài)工具HW Config,將硬件目錄中名為“DI4xNAMUR,Ex”的4點DI模塊插入4號槽,自動分配的DI模塊的字節(jié)地址為0。雙擊該模塊,打開它的屬性對話框(見圖4-47)。用復(fù)選框啟用硬件中斷,設(shè)置I0.0產(chǎn)生上升沿中斷。在5號槽插入一塊16點DO模塊。
2.程序設(shè)計
在10.0的上升沿觸發(fā)硬件中斷,CPU調(diào)用OB40,在OB40中調(diào)用SFC32“SRT_DINT”啟動延時中斷(見圖4-51),延時時間為10s。從LD12開始的8B臨時局部變量是調(diào)用OB40的日期時間值,用MOVE指令將其中的后4個字節(jié)LD16保存到MD20。
圖4-51 OB40中的程序
10s后延時時間到,CPU調(diào)用SFC 32指定的OB20。在OB20中用MOVE指令保存調(diào)用OB20的日期時間值的后4個字節(jié)(見圖4-52)。同時將Q4.0置位,并通過PQB4立即輸出。
圖4-52 OB20中的程序
可以用I0.2將Q4.0復(fù)位(見圖4-53)。在OB1中調(diào)用SFC34“QRY_DINT”來查詢延時中斷的狀態(tài)字STATUS,查詢的結(jié)果用MW8保存,其低字節(jié)為MB9。OB_NR的實參是延時中斷 OB的編號,RET_VAL為SFC 執(zhí)行時的錯誤代碼,為0時無錯誤。
圖4-53 OB1中的程序
在延時過程中,可以在10.1的上升沿調(diào)用SFC33“CAN_DINT”來取消延時中斷過程。
3.仿真實驗
打開仿真軟件PLCSIM,將程序和組態(tài)信息下載到仿真PLC。切換到RUN-P模式時,M9.4馬上變?yōu)?狀態(tài),表示OB20已經(jīng)下載到了CPU中。
執(zhí)行PLCSIM的菜單命令“Execute”→“TriggerErrorOB”→“Hardware Interrupt (OB40-OB47)…”(見圖4-49),在“Hardware Interrupt OB(40-47)”對話框中,輸入DI模塊的起始字節(jié)地址0和模塊內(nèi)的位地址0。單擊“Apply”按鈕,I0.0產(chǎn)生硬件中斷,CPU調(diào)用OB40,M9.2變?yōu)?狀態(tài),表示正在執(zhí)行SFC32啟動的時間延時。
在SIMATIC管理器中生成變量表(見圖4-54),單擊工具欄上的劍按鈕,啟動監(jiān)控功能。MD20是在OB40中讀取的BCD格式的時間值(25分9秒643毫秒),最后1位為星期的代碼,5表示星期4。
圖4-54 變量表
10s的延時時間到時,CPU調(diào)用OB20,M9.2變?yōu)?狀態(tài),表示延時結(jié)束。OB20中的程序?qū)4.0置位為1狀態(tài)(見圖4-52),并且用MOVE指令立即寫入D0模塊。可以用10.2復(fù)位Q4.0(見圖4-53)。在OB20中保存在MD24的實時時間值為25分19秒643毫秒,與OB40中保存在MD20的時間值相減,可知定時精度是相當(dāng)高的。
在延時過程中用仿真軟件將I0.1 置位為1,M9.2變?yōu)?狀態(tài),表示0B20的延時被取消,定時時間到不會調(diào)用0B20。