常海
摘 要:將面向?qū)ο蟪绦蛟O(shè)計(jì)方法應(yīng)用于PLC程序設(shè)計(jì)中,可以大大提高編程效率和可維護(hù)性。文章給出了一個(gè)在STEP7軟件中實(shí)現(xiàn)類的抽象與封裝的簡(jiǎn)單示例。
關(guān)鍵詞:PLC;面向?qū)ο?;程序設(shè)計(jì)
在PLC的編程設(shè)計(jì)中,如果外圍設(shè)備很多,則PLC程序設(shè)計(jì)將面臨編程效率低、程序維修困難等問題。把“面向?qū)ο蟆钡某绦蛟O(shè)計(jì)方法引進(jìn)PLC程序設(shè)計(jì),可以提高代碼的使用效率,減小程序出錯(cuò)的可能性。因而提高PLC程序的編程效率和程序的可維護(hù)性。
1 傳統(tǒng)PLC程序設(shè)計(jì)
現(xiàn)代工業(yè)生產(chǎn)的控制系統(tǒng)經(jīng)常要涉及到多個(gè)外部設(shè)備,設(shè)備的動(dòng)作往往有嚴(yán)格的時(shí)序要求。長(zhǎng)久以來,多使用“面向過程”的程序設(shè)計(jì)方法。以過程為中心構(gòu)造應(yīng)用程序,數(shù)據(jù)和數(shù)據(jù)處理過程代碼是相互獨(dú)立的,可重用代碼少,且代碼量大時(shí),維護(hù)數(shù)據(jù)和代碼相當(dāng)困難。其缺點(diǎn)有:割裂被控對(duì)象在PLC程序與現(xiàn)實(shí)中的聯(lián)系,內(nèi)部邏輯與被控對(duì)象不明確,程序的后期維護(hù)困難;程序的內(nèi)部邏輯關(guān)系非常復(fù)雜,控制流程不明確,容易出錯(cuò);輸入與輸出都缺乏整體性,程序員往往孤立考慮各輸入點(diǎn)或輸出點(diǎn)的邏輯和控制。
2 面向?qū)ο蟮某绦蛟O(shè)計(jì)概念
面向?qū)ο蟪绦蛟O(shè)計(jì)方法OOP(object-orientedprogram)直接以現(xiàn)實(shí)世界中的事物為中心來思考問題,按照事物的本質(zhì)特征把它們抽象為對(duì)象,作為構(gòu)建軟件系統(tǒng)的基礎(chǔ)。程序與現(xiàn)實(shí)世界之間具有極強(qiáng)的對(duì)應(yīng)關(guān)系,大大降低了軟件開發(fā)的難度。
⑴類。類是對(duì)所有具有相同屬性的事物的抽象概念,相當(dāng)于模具;而對(duì)象是類中的一個(gè)實(shí)體,相當(dāng)于是用模具制造出來的一個(gè)產(chǎn)品。同一類設(shè)備的控制方法、信號(hào)反饋、故障檢測(cè)等操作相同或相似,如水泵電機(jī)、油泵電機(jī)和驅(qū)動(dòng)電機(jī)等,可以抽象為一個(gè)電機(jī)類,編寫其通用性模塊。
⑵封裝。封裝將數(shù)據(jù)與操作數(shù)據(jù)的源代碼有機(jī)結(jié)合成類。封裝將對(duì)象的屬性和方法形成一個(gè)不可分割的整體;只保留有限的對(duì)外接口,并盡可能隱藏內(nèi)部的具體細(xì)節(jié)。封裝在對(duì)象與外界之間建立了一道屏障,使外界只能通過對(duì)象所提供的接口與對(duì)象發(fā)生聯(lián)系,而不能直接修改對(duì)象的屬性值。比如驅(qū)動(dòng)電機(jī)在PLC程序中可能不僅要“啟動(dòng)”與“停止”,還需要監(jiān)測(cè)電機(jī)電流、軸溫等。擁有多個(gè)驅(qū)動(dòng)電機(jī)的設(shè)備,可將這些特性抽象,封裝在一個(gè)類里。這就可以大大簡(jiǎn)化整個(gè)系統(tǒng)PLC程序的結(jié)構(gòu),提高編程和維護(hù)的效率。
3 面向?qū)ο蟪绦蛟O(shè)計(jì)方法的特點(diǎn)和設(shè)計(jì)原則
3.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法的特點(diǎn)
⑴以“對(duì)象”或“數(shù)據(jù)”為中心,對(duì)象接收了消息就發(fā)生動(dòng)作。對(duì)象自然對(duì)應(yīng)領(lǐng)域的模塊性,可被用作組件去構(gòu)成更復(fù)雜的應(yīng)用。對(duì)象封裝的是某一實(shí)際需求的成分,改變某一對(duì)象對(duì)整個(gè)系統(tǒng)幾乎沒有影響;⑵類與類以層次結(jié)構(gòu)組織。屬于某個(gè)類的對(duì)象除了具有該類的特性外,還繼承其更高層次所有全部性質(zhì);⑶由于類的模塊性與繼承性,可在原有對(duì)象的數(shù)據(jù)類型和功能的基礎(chǔ)上通過重用、擴(kuò)展和細(xì)化設(shè)計(jì)新的應(yīng)用程序,達(dá)到事半功倍的效果;⑷程序開發(fā)容易。系統(tǒng)中控制方法和功能相同或相似的設(shè)備很多時(shí),這一特點(diǎn)尤為突出;⑸程序調(diào)試方便。只要把系統(tǒng)調(diào)試的可能性柔性地編到類的通用模塊中,便可應(yīng)對(duì)同類設(shè)備所有預(yù)料的突發(fā)問題。只須修改一個(gè)通用模塊,或者僅僅是修改幾個(gè)參數(shù),也可應(yīng)對(duì)沒有預(yù)料到的問題;⑹系統(tǒng)維護(hù)和功能擴(kuò)展方便。對(duì)象的存在使程序的可讀性大大增強(qiáng),數(shù)據(jù)的封裝使得在對(duì)系統(tǒng)進(jìn)行維護(hù)和功能擴(kuò)展時(shí),不需知道設(shè)備的具體情況,只要知道設(shè)備的輸人輸出的接口即可。
3.2 設(shè)計(jì)原則
面向?qū)ο蟪绦蛟O(shè)計(jì)的基本原則如下:⑴對(duì)象設(shè)計(jì)。把設(shè)備分類,抽象和封裝公共的屬性,賦予其現(xiàn)實(shí)的意義。⑵控制流程的設(shè)計(jì)。編寫處理邏輯關(guān)系與工藝流程的控制程序,形成功能模塊,通過接口來調(diào)用被控設(shè)備。既能使工藝流程清晰,又使被控對(duì)象明確,從而提高了程序的可維護(hù)性。
4 基于STEP7軟件的示例
STEP7軟件具備模塊化的編程方法,可將自動(dòng)化任務(wù)分解為能夠反映某種過程工藝、功能或可以反復(fù)使用的更小的任務(wù)塊(FC或FB),主程序循環(huán)塊OB1通過調(diào)用這些塊來完成整個(gè)自動(dòng)化任務(wù)。對(duì)應(yīng)面向?qū)ο蟪绦蛟O(shè)計(jì)方法中類的抽象和封裝,主程序調(diào)用不同的類進(jìn)行實(shí)例化,編寫控制程序。
在某工程項(xiàng)目中,使用西門子S7-300PLC控制三臺(tái)同1型號(hào)變頻器。輸人變量有:變頻器啟動(dòng)ST,變頻器停止SP,變頻器輸出電流I1,變頻器所驅(qū)動(dòng)電機(jī)的軸溫T1。輸出變量有:變頻器啟動(dòng)輸出Q,經(jīng)過數(shù)值變換后的變頻器電流I2,經(jīng)過數(shù)值變換后的電機(jī)軸溫T2。按照OOP方法的要求,針對(duì)控制對(duì)象與變量,使用STEP7軟件函數(shù)功能塊抽象出變頻器對(duì)象FC1,實(shí)現(xiàn)如下功能:(1)使用ST和SP接口變量控制輸出變量Q。(2)使用I_BCD函數(shù)實(shí)現(xiàn)I NT型變量(輸入電流) 轉(zhuǎn)換為BCD型變量(內(nèi)部程序使用)。在主程序OB1的梯形圖中放人三個(gè)被控變頻器的FC1,將外部變量(輸入:ST,SP,I1,T1。輸出:Q,I2,T2)分別與FC1定義的變量對(duì)應(yīng)起來進(jìn)行控制.
5 結(jié)論
基于OOP的程序設(shè)計(jì)方法的應(yīng)用使PLC程序的實(shí)現(xiàn)更加容易,更加可靠,也為程序的調(diào)試和后續(xù)的維護(hù)及功能的擴(kuò)展提供了廣闊的空間。它在PLC程序設(shè)計(jì)中的應(yīng)用可以使它的設(shè)計(jì)向著工業(yè)化的設(shè)計(jì)方向發(fā)展,使大型PLC程序在集體合作設(shè)計(jì)時(shí)分工更加明確,性能更加可靠。
[參考文獻(xiàn)]
[1]西門子公司.S7-300 PLC STEP BY STEP[M].北京:北京航空航天大學(xué)出版社,2004.
[2]沈被娜,等.計(jì)算機(jī)軟件技術(shù)基礎(chǔ)[M].北京:清華大學(xué)出版社,2000.