中斷機(jī)制是怎樣讓PLC高效運(yùn)行的?
也許你沒(méi)有注意到,當(dāng)你每一次敲擊鍵盤或點(diǎn)擊鼠標(biāo)的時(shí)候,電腦主板上的CPU都會(huì)觸發(fā)一個(gè)中斷來(lái)處理你的請(qǐng)求。中斷(Interrupt),是微型計(jì)算機(jī)能夠處理紛繁復(fù)雜的信號(hào),以“事件”的方式來(lái)執(zhí)行任務(wù)的基礎(chǔ)。工業(yè)現(xiàn)場(chǎng)的PLC其本質(zhì)是單片機(jī)(MCU),同樣具有中斷處理的能力。今天這篇文章,我們就以西門子的S7 系列PLC為例,來(lái)談?wù)凱LC的中斷管理機(jī)制。

說(shuō)了半天,什么是“中斷”呢?(注意,這里有個(gè)概念),所謂中斷(英文名稱:interrupt),是指CPU(PLC)停止當(dāng)前正在執(zhí)行的任務(wù),轉(zhuǎn)而去執(zhí)行其它任務(wù)的過(guò)程。CPU本來(lái)手頭上是有活在干的,由于一個(gè)請(qǐng)求(中斷請(qǐng)求),它放下了手中的活,來(lái)處理這個(gè)請(qǐng)求(中斷處理),這個(gè)過(guò)程,稱為“中斷”。打個(gè)比方,比如當(dāng)我正在跟同事吹呼我多能喝的時(shí)候,我老婆來(lái)電話了。你說(shuō)我接還是不接?(不接的后果你懂得)我肯定乖乖的接起電話“喂,親愛(ài)噠。。。”。
不許笑,這是一個(gè)典型的中斷過(guò)程:當(dāng)中斷請(qǐng)求(老婆來(lái)電話)產(chǎn)生后,CPU先把當(dāng)前運(yùn)行任務(wù)的寄存器的數(shù)據(jù)保存到中斷堆棧中(保存現(xiàn)場(chǎng),我暫停與同事的聊天并記住話題說(shuō)到哪里);然后跳轉(zhuǎn)到中斷處理函數(shù)的入口開(kāi)始執(zhí)行中斷處理函數(shù)(接聽(tīng)電話);處理完畢后,返回到原來(lái)的函數(shù),從堆棧中取出原來(lái)保存的數(shù)據(jù),繼續(xù)執(zhí)行原來(lái)的程序(中斷現(xiàn)場(chǎng)恢復(fù),繼續(xù)原來(lái)的聊天話題)。
簡(jiǎn)單來(lái)說(shuō),中斷過(guò)程包括:中斷請(qǐng)求—保存現(xiàn)場(chǎng)—處理中斷—恢復(fù)現(xiàn)場(chǎng)。其中“保存現(xiàn)場(chǎng)”和“恢復(fù)現(xiàn)場(chǎng)”的工作由操作系統(tǒng)完成,我們只需要集中精力來(lái)完成“中斷處理”的工作就可以了。
在西門子S7 系列PLC中,根據(jù)中斷類型的不同,可以分為:日期時(shí)間中斷(Time-of-date interrupt),延時(shí)中斷(Time-delay-interrupt),循環(huán)中斷(Cyclic interrupt),硬件中斷(Hardware interrupt),異步錯(cuò)誤中斷(Asynchronous error interrupt),同步錯(cuò)誤中斷(Synchronous error interrupt)。下圖是CPU317硬件組態(tài)中顯示的可組態(tài)修改的中斷類型:

我們以日期時(shí)間中斷(Time-of-day interrupt)為例:其“執(zhí)行(Excution)”可以選擇“一次(Once)”,“每分鐘(every minute)”,“每小時(shí)(Hourly)”等等,選好執(zhí)行方式,并勾選前面的“激活(Active)”選項(xiàng),下載到PLC后就可以激活該中斷功能。如下圖:

中斷功能激活后,PLC又是怎樣來(lái)處理該中斷的呢?
S7 的PLC通過(guò)特定的組織塊(Organization Block,OB)來(lái)執(zhí)行“中斷處理”的任務(wù)。比如上圖中的OB 10就是來(lái)處理日期時(shí)間中斷的組織塊。當(dāng)中斷發(fā)生后,操作系統(tǒng)(PLC都有操作系統(tǒng)的,我們用Step7寫(xiě)的程序都是用戶程序)會(huì)調(diào)用OB10并執(zhí)行里面的代碼(用戶程序)。
比如說(shuō),我們想完成一個(gè)“每天晚上7點(diǎn)給爸媽打電話”的任務(wù),你可以在“執(zhí)行(Excution)”中選擇“每天(Daily)”,在“起始時(shí)間(Start time)”里設(shè)定成“2017-2-24 19:00”,如下圖:

然后添加“組織塊OB10”,在里面寫(xiě)“給爸媽打電話”(注意這里是偽代碼哦)。
這樣每天晚上7點(diǎn),就會(huì)觸發(fā)一個(gè)日期時(shí)間中斷(Time-of-day interrupt),然后CPU就會(huì)去執(zhí)行OB10里面的代碼,提示你給爸媽打電話(有空常回家看看,沒(méi)空多打個(gè)電話)。
關(guān)于延時(shí)中斷,循環(huán)中斷等,其執(zhí)行機(jī)制是一樣的(使用方法有所不同,本文著重介紹中斷機(jī)制,方法后續(xù)介紹)。
中斷機(jī)制的使用節(jié)省了PLC的運(yùn)行資源,提高了運(yùn)行的效率。為啥這樣說(shuō)呢?我們知道,無(wú)論是PLC還是單片機(jī),其程序都有一個(gè)入口函數(shù)(主函數(shù)),其中的代碼是從上到下,從左到右順序執(zhí)行的。如果沒(méi)有中斷,我們要想知道某個(gè)事件有沒(méi)有發(fā)生,就只能不斷的去查詢?cè)撌录臓顟B(tài)。這些空循環(huán)的代碼會(huì)耗費(fèi)CPU寶貴的運(yùn)行時(shí)間,降低程序的運(yùn)行效率。有了中斷機(jī)制后,CPU可以集中精力處理別的任務(wù),只需在中斷發(fā)生后,進(jìn)行中斷處理即可,這在很大程度上提高了運(yùn)行的效率。
打個(gè)比方,你想看看這個(gè)月的工資發(fā)了沒(méi)有?如果你每天都去柜臺(tái)查詢的話會(huì)很累是不是?當(dāng)你啟用中斷機(jī)制,開(kāi)通短信通知功能,發(fā)工資后自然就會(huì)收到短信通知(中斷請(qǐng)求)。你一看短信:“您尾號(hào)8888的儲(chǔ)蓄卡12時(shí)7分8秒收到工資12218.6元,賬戶余額12220.6元”。哈哈,好高興呀。過(guò)了一會(huì)兒,又收到一條短信:“您尾號(hào)8888的儲(chǔ)蓄卡12時(shí)10分3秒轉(zhuǎn)賬支出人民幣12000.0到你老婆的賬戶,賬戶余額220.6元”。“額,此處省略一百個(gè)字。。。”。
-
Origin(Pro):學(xué)習(xí)版的窗口限制【數(shù)據(jù)繪圖】 2020-08-07
-
如何卸載Aspen Plus并再重新安裝,這篇文章告訴你! 2020-05-29
-
CAD視口的邊框線看不到也選不中是怎么回事,怎么解決? 2020-06-04
-
教程 | Origin從DSC計(jì)算焓和比熱容 2020-08-31
-
CAD外部參照無(wú)法綁定怎么辦? 2020-06-03
-
CAD中如何將布局連帶視口中的內(nèi)容復(fù)制到另一張圖中? 2020-07-03
