PLC編程中構(gòu)造定時(shí)器的幾種方法
2007/4/13 9:03:00
在現(xiàn)代工業(yè)現(xiàn)場控制中,PLC作為控制系統(tǒng)的重要組成部分,起著不可替代的作用?,F(xiàn)代PLC的功能不僅局限于簡單的邏輯運(yùn)算,而且具備了定時(shí)、計(jì)數(shù)、數(shù)值計(jì)算、中斷處理、網(wǎng)絡(luò)配置等多種強(qiáng)大的功能,使之應(yīng)用于工業(yè)現(xiàn)場時(shí)更能發(fā)揮其作用。作為PLC重要功能之一的定時(shí),在PLC程序中,可以進(jìn)行時(shí)序構(gòu)造、等待響應(yīng)、人為制造中斷、產(chǎn)生時(shí)間脈沖等多種應(yīng)用,是PLC編程中不可或缺的重要手段。在PLC編程中構(gòu)造定時(shí)器常用的方法是使用PLC內(nèi)部的計(jì)時(shí)器資源,另外還可以利用其掃描周期和周期性的中斷來構(gòu)造定時(shí)器,下面將以上三種方法進(jìn)行介紹。 一. 計(jì)時(shí)器定時(shí) 這種方式是應(yīng)用最普遍也是最便捷的方式,廣泛地應(yīng)用于PLC程序之中。各種廠家及型號(hào)的PLC,在其軟件內(nèi)部都提供有限的計(jì)時(shí)器資源。當(dāng)條件滿足時(shí),計(jì)時(shí)器啟動(dòng),根據(jù)計(jì)時(shí)器的類型及所定時(shí)間的長度執(zhí)行。以SIEMENS公司的S7-400系列PLC為例,其提供的計(jì)時(shí)器(TIMER)資源類型有:S_ODT(導(dǎo)通延時(shí))、S_ODTS(導(dǎo)通同步延時(shí))、S_OFFDTS(關(guān)斷同步延時(shí))、S_PULSE(脈沖延時(shí))、S_PEXT(擴(kuò)展脈沖延時(shí))等五種。各種計(jì)時(shí)器都有自己不同的通斷特性,例如S_ODT(導(dǎo)通延時(shí))的通斷特性如圖1所示。這五種計(jì)時(shí)器資源可以單獨(dú) 使用,也可以任意組合,滿足各種工程需要。這種計(jì)時(shí)器方式最大的特點(diǎn)是方法簡單、易于操作,但其也有一定的局限性,主要表現(xiàn)在占用過多的系統(tǒng)資源,并且各種PLC對(duì)計(jì)時(shí)器個(gè)數(shù)有一定限制,以S7-400系列PLC來說,允許系統(tǒng)使用的計(jì)時(shí)器為512個(gè)。所以在一些大型的項(xiàng)目中,會(huì)出現(xiàn)不夠用的情況;即使夠用,也會(huì)因?yàn)檎加眠^多資源而使掃描周期變長,對(duì)于精度要求比較高的系統(tǒng),會(huì)有一定影響。 二. 掃描周期累加編程定時(shí) 所周知,PLC執(zhí)行程序的工作方式就是掃描,而CPU對(duì)所有程序的一個(gè)遍歷所經(jīng)過的時(shí)間就是一個(gè)掃描周期。對(duì)于PLC來說,每個(gè)掃描周期會(huì)因?yàn)槌绦蜷L度、程序中信號(hào)和中斷的不同而不同。雖然這樣,但掃描周期畢竟還是和CPU內(nèi)部時(shí)鐘保持一定的統(tǒng)一性,是內(nèi)部時(shí)鐘外在的一種時(shí)間反應(yīng)?,F(xiàn)代工業(yè)越來越智能化的今天,掃描周期不再只是一項(xiàng)內(nèi)部指標(biāo),更多的PLC已經(jīng)將其作為一項(xiàng)基本的參數(shù),提供給用戶使用。所以我們可以建立一種構(gòu)造定時(shí)的思路:將掃描周期累加起來,如果達(dá)到我們需要定時(shí)的長度,就產(chǎn)生中斷,執(zhí)行我們需要的步驟。 還是以S7-400系列PLC為例,在軟件編制過程中,OB1(Program Cycle Organization Block)是一個(gè)基本的程序模塊,它是CPU掃描的主程序,其它程序被它調(diào)用。OB1有一個(gè)模塊內(nèi)的變量表,變量表中有一個(gè)臨時(shí)變量(temp)為:OB1_PREV_CYCLE,它里面所放的數(shù)據(jù)為前一次掃描周期的毫秒(ms)數(shù),是整型(Integer)數(shù)據(jù)。因?yàn)槭桥R時(shí)變量,所以每個(gè)掃描周期內(nèi)存放的數(shù)據(jù)都在變化。因?yàn)镺B1的變量表中沒有靜態(tài)變量類型,所以不能直接在OB1中直接進(jìn)行累加,我們可以借助一個(gè)具有靜態(tài)變量的FB(Function Block)程序模塊來編制累加程序,在OB1中調(diào)用FB,并通過接口將OB_PREV_CYCLE做為IN參數(shù)輸入給FB,其OB1程序執(zhí)行如圖2。在FB中,如果以100ms為一個(gè)單位,從接口中讀取OB1提供的前一個(gè)掃描周期的數(shù)值參數(shù)OB1_PREV_CYCLE,將其 賦值給FB自身的IN參數(shù),并進(jìn)行累加,再通過一些中間量的轉(zhuǎn)換、計(jì)算,輸出以100ms為一個(gè)單位的單位個(gè)數(shù)做為OUT接口,供其它程序使用。其程序流程圖及I/O參數(shù)如圖3所示。為了方便其它程序更多地調(diào)用此項(xiàng)功能,以及實(shí)現(xiàn)多種延時(shí)方式(如ON延時(shí)、OFF延時(shí)、PULSE延時(shí)等),可以再做一些FC(Function)。選擇ON延時(shí)為例,用戶使能后,將FB輸出接口中的參數(shù)值保存起來做為初值,在后續(xù)的掃描過程中,將當(dāng)前值與初值相減計(jì)算出差值,最后將用戶設(shè)置的定時(shí)數(shù)與差值進(jìn)行比較,滿足條件即可執(zhí)行用戶命令。如果仍以100msec為定時(shí)單位,其程序流程圖如圖4所示。 在使用中,用戶可以直接調(diào)用FC塊,填入相應(yīng)的參數(shù)。FC的I/O接口參數(shù) 表1 FC的I/O接口參數(shù) 如表1所示(如果用戶需要使用OFF延時(shí),或者PULSE延時(shí),用戶可以根據(jù)要求自行編制相應(yīng)程序,這里只給出ON延時(shí)示例)。 這一種實(shí)現(xiàn)定時(shí)功能的方式,沒有直接的功能可以用,需要用戶自行編程實(shí)現(xiàn)。雖然較上一種方式復(fù)雜,但對(duì)于一個(gè)大的工程來說,理論上可以無限次的調(diào)用,并且由于程序并不復(fù)雜,不會(huì)占用系統(tǒng)過多資源,使系統(tǒng)的掃描更加迅速。 三.周期中斷累加定時(shí) 中斷是指CPU在執(zhí)行掃描程序時(shí),滿足了某種條件或發(fā)生了某種事件,而暫停掃描的順序,執(zhí)行該條件或事件的相關(guān)程序的一個(gè)過程。在PLC中,中斷的類型多種多樣,有用戶為程序執(zhí)行設(shè)置的中斷,有CPU為響應(yīng)外部輸入輸出設(shè)備產(chǎn)生的中斷,有系統(tǒng)運(yùn)行到達(dá)某一時(shí)刻點(diǎn)產(chǎn)生的中斷,也有系統(tǒng)周期性的中斷等等。對(duì)于PLC中時(shí)間周期性的中斷,就可以利用其時(shí)間的周期性來制造定時(shí)功能。 同樣,以S7-400系列PLC為例,系統(tǒng)為用戶提供了從OB30到OB38等9種時(shí)間周期中斷,這些周期中斷OB塊不受掃描周期的約束和影響,只按照各自 同樣,以S7-400系列PLC為例,系統(tǒng)為用戶提供了從OB30到OB38等9種時(shí)間周期中斷,這些周期中斷OB塊不受掃描周期的約束和影響,只按照各自 的周期時(shí)間屬性和優(yōu)先級(jí),每一個(gè)周期掃描并執(zhí)行一遍其內(nèi)部的程序,其各自的中斷間隔時(shí)間和優(yōu)先級(jí)見表2。為了方便編程,用戶可以取10ms、100ms、1s為時(shí)間單位,使用OB38、OB35、OB32。這種定時(shí)的構(gòu)造方法的主要思想是,構(gòu)造一個(gè)FB塊在OB塊中調(diào)用,利用時(shí)間周期中斷OB塊的周期執(zhí)行性,每一個(gè)周期進(jìn)行一次累加,累加值做為接口提供給構(gòu)造ON延時(shí)、OFF延時(shí)或者PULSE延時(shí)的FC塊使用。OB塊的執(zhí)行過程如圖5所示。 周期中斷FB塊的主要編程思想是:通過與OB塊的參數(shù)接口讀取OB_Number參數(shù)做為Flag,并對(duì)Flag做相應(yīng)的判斷(Flag=32?or Flag=35?or Flag=38?),如果條件滿足,則在相應(yīng)的條件下做累加運(yùn)算,并通過自己的背景數(shù)據(jù)塊輸出Counter_1s、Counter_100ms、Counter_10ms等參數(shù),供FC塊使用。FB塊分別在OB32、OB35、OB38中調(diào)用,接受它們提供的參數(shù)。FB塊的流程圖如圖6所示。 還有另一種方法是:FB只在OB38中調(diào)用,根據(jù)10ms、100ms、1s存在十進(jìn)制倍數(shù)的關(guān)系,在FB中添加編程,對(duì)Counter_10ms進(jìn)行除以10后取整或除以100取整,得到Counter_100ms和Counter_1s。 FC塊的構(gòu)造同上種方法基本一樣,接受了三個(gè)累加值之后,根據(jù)用戶需要編程實(shí)現(xiàn)選擇使用哪一種時(shí)間等級(jí),其后步驟與上種方法相同,這里不再復(fù)述,也不給出流程圖了。 這種實(shí)現(xiàn)定時(shí)功能的方法具有上一種方法的全部優(yōu)點(diǎn),并且較上一種方法更容易實(shí)現(xiàn),編程更為簡單,不用累加后取整。但并不是所有的PLC都提供周期中斷供用戶使用,這跟各廠家產(chǎn)品有關(guān),一般情況下只有一些工程上使用的具有復(fù)雜控制功能的PLC會(huì)提供,而一些小型PLC供用戶使用的資源相對(duì)較少,不提供此項(xiàng)功能,因此這種方法使用上有一定的局限性。 四.總結(jié) 以上介紹了在PLC中實(shí)現(xiàn)定時(shí)功能的三種方法,用戶可以根據(jù)實(shí)際情況,具體、靈活地選擇應(yīng)用。以上的流程圖中也只給出了主要編程思路的框架,用戶可以根據(jù)自己的需要添加程序。PLC中實(shí)現(xiàn)定時(shí)的方法很多,用戶可以根據(jù)產(chǎn)品所提供的功能,多角度分析看待問題,使其資源得到充分的利用。 參考文獻(xiàn) 《PLC原理及應(yīng)用》、《SIEMENS S7-300/400編程手冊》 《SIEMENS S7-300/400用戶手冊》
提交
查看更多評(píng)論