OOP思想和UML分析技術(shù)在帶式輸送機控制程序開發(fā)中的應(yīng)用
[摘 要] 本文根據(jù)控制系統(tǒng)設(shè)計者的經(jīng)驗,從設(shè)計者的視角出發(fā),講述了控制系統(tǒng)的研發(fā)思想。在PLC程序設(shè)計領(lǐng)域,創(chuàng)新性的引入了微型機程序設(shè)計領(lǐng)域的OOP思想,通過分層設(shè)計、OOP分析、UML建模等手段成功的實現(xiàn)了高標(biāo)準(zhǔn)的開發(fā)目標(biāo)。具有很好的應(yīng)用推廣前景,也為同行業(yè)設(shè)計者帶來啟示。該系統(tǒng)的開發(fā)目標(biāo)是:易維護、易移植、架構(gòu)靈活、概念統(tǒng)一、功能強大、可復(fù)用的皮帶輸送機連鎖控制軟件。另外本系統(tǒng)也成功的實現(xiàn)了移植。
[關(guān)鍵詞] 帶式輸送機控制系統(tǒng) 面向?qū)ο缶幊趟枷?OOP UML 分層設(shè)計
KEYWORDS: Industrial Control, program design thinking, PLC program, OOP,UML.
原料場直供部分控制程序的開發(fā)采用了結(jié)構(gòu)化分層設(shè)計,應(yīng)用了面向?qū)ο缶幊蹋∣OP)思想和UML模型分析技術(shù),成功實現(xiàn)了較高標(biāo)準(zhǔn)的設(shè)計目標(biāo)。
OOP是微型機程序設(shè)計領(lǐng)域的優(yōu)秀的成熟的編程思想,在PLC程序設(shè)計中應(yīng)用還是很少。在程序設(shè)計方面與微型機比較,PLC程序設(shè)計市場小且基本上控制程序都是定制的,不可復(fù)用的、開發(fā)工具落后(相對當(dāng)前微型機的主流開發(fā)工具),其次是編程資源少,應(yīng)用范圍小。OOP編程思想應(yīng)用到PLC程序設(shè)計是一個新思路,雖然成功的實例不多(依據(jù)網(wǎng)上百度、雅虎、Google搜索),但是極具推廣價值。
一,高標(biāo)準(zhǔn)的設(shè)計目標(biāo)
設(shè)計目標(biāo)就是:易維護、易移植、架構(gòu)靈活、各視圖中的概念統(tǒng)一、功能強大的、可復(fù)用的皮帶輸送機連鎖控制軟件。
A、可復(fù)用:局限性小、適用性強、便于應(yīng)用推廣。所以考慮的情況就要盡可能的全面。功能塊有自定義參數(shù),可適應(yīng)一定彈性的需求變化。
B、魯棒性好:功能塊內(nèi)部設(shè)計了自診斷子系統(tǒng),保證了安全性和系統(tǒng)健壯性。上位機組態(tài)設(shè)計了系統(tǒng)通訊監(jiān)控畫面,實時監(jiān)控下位機的DP網(wǎng)絡(luò)通訊結(jié)點。關(guān)鍵的現(xiàn)場連鎖點信號,全部采用閉點接入。
C、架構(gòu)靈活:可以適應(yīng)不同的皮帶機運輸結(jié)構(gòu)要求。采用“積木”式設(shè)計,可以“搭建”控制程序,構(gòu)建一個皮帶機運輸控制程序非常簡單。只要畫出皮帶機的運輸拓?fù)浣Y(jié)構(gòu),依據(jù)該投影即可搭建控制程序。
D、易于維護:依據(jù)“高內(nèi)聚,松耦合”和“概念統(tǒng)一”原則。模塊化開發(fā),將控制邏輯全部集成到功能塊內(nèi)部。即使修改設(shè)備控制邏輯,也不會產(chǎn)生牽一發(fā)而動全身的弊端。設(shè)計概念統(tǒng)一是一個優(yōu)良設(shè)計的標(biāo)準(zhǔn)。如果模型不斷出現(xiàn)“特例”的情況,就會破壞“概念統(tǒng)一”,使系統(tǒng)難以維護。
E、人機界面友好:一個系統(tǒng)從用戶角度來看,如果不能實現(xiàn)友好的人機接口(HMI),一切都是“白費”。用戶更關(guān)心他自己的視圖。所以用戶視圖中的系統(tǒng)“概念統(tǒng)一”同樣重要。界面易于操作、系統(tǒng)功能強大,也是重要的設(shè)計目標(biāo)。
F、軟件功能要求:(分為基本功能和高級功能)
F1,基本功能:
手動模式、自動模式;延時逆起順停、變換料線、斷線上游立即停車、料線互斥、保護報警、停機報警、預(yù)警鈴聲、趨勢記錄等。報警設(shè)置有超流量、跑偏、打滑、撕裂、溜槽堵塞。
一個系統(tǒng)從用戶角度來說,更關(guān)心使用概念統(tǒng)一、易于操作、功能強大。而且可以實現(xiàn)更高級的操作,為企業(yè)保護生產(chǎn)設(shè)備和節(jié)約生產(chǎn)成本。
F2,高級功能:
F2.1,無擾動變線:料線變換是最常規(guī)的工藝動作。有時只需要在下游變動一兩個設(shè)備,也要把全部公共線設(shè)備停車。大多情況公共線部分占全料線的70%強甚至90%。長的料線啟動一次就是近20分鐘。公共線部分有許多大型皮帶機都是3電機拖動,帶軟起動器,啟動困難、耗電量巨大、有啟停間隔時間要求、頻繁啟停還有損設(shè)備壽命。無擾動變線解決了這一問題,這種原料場料線控制方式,其他料場未見。
F2.2,動態(tài)下游鎖:一般情況下,料線中斷時是從斷點處的上游設(shè)備,間隔一個PLC掃描周期,依次停止。如果該料線的設(shè)備很多,且PLC掃描周期很長(因外部通訊周期的影響),惡果就是很長時間才能全線停車。最上游的設(shè)備可能會有20多秒才停止,造成積料。有自動動態(tài)下游鎖,可避免這一問題。斷線時,全部上游設(shè)備,間隔一個PLC掃描周期,同時停止。這是最短的反映時間(沒有任何延時是不可能的,至少一個PLC掃描周期)。這種動態(tài)連鎖是最優(yōu)的,我們成功的實現(xiàn)了。
F2.3,斷線再續(xù):料線中斷時,一般料場的控制是,料線中斷點處上游立即全部停止,下游是依次延時停車,且沒有其他可選方式。再啟動該料線,就得全線停車后,再次全部啟動,浪費很大。實際中往往有一點小事情影響馬上解決,停掉的設(shè)備又馬上重新啟動。斷線再續(xù),不必停止下游的全部設(shè)備,處理完故障后只要將停掉一段上游設(shè)備自動啟動,即可恢復(fù)如初。對于上游段一兩個設(shè)備停車造成全線停止,斷線再續(xù)功能有極大的好處,保護設(shè)備、節(jié)約資金。
F2.4料線模式自適應(yīng):料線控制分為主動料線和被動料線。主動料線是通過HMI實現(xiàn)料線的人為選取、連鎖切換。它的弊端是必須靠程序員思考復(fù)雜的連鎖互斥關(guān)系,引起設(shè)計的復(fù)雜度提高(有多少條料線,就得編寫多少連鎖互斥關(guān)系)。復(fù)雜度增加可控性降低,程序員信心下降(這是料場內(nèi)部控制程序的最大弊端)。料線模式自適應(yīng)是,如果現(xiàn)場設(shè)備啟動情況恰好是某一條料線,他就自動顯示該料線,并按該料線模式執(zhí)行控制和連鎖,無論有多少種料線組合模式,它全部自適應(yīng)。不必專門設(shè)計料線控制部分,這正是OOP帶來的好處。因為對象的屬性和對象對它自身的一組操作是封裝在一起的,做為整體處理。就是說對象自身知道什么時候,該做什么事情。
F2.5,可選料線中斷時下游不停車或順序延時停車:一般原料場料線中斷處下游延時順序停車,不可避免。提供下游不停車選項,為用戶快速確定斷點設(shè)備,提供便利;為斷線再續(xù)功能提供服務(wù)。用戶可以靈活的掌握、操控性強。
F2.6,可選多條上游皮帶對一條下游皮帶連鎖:多條皮帶對一條皮帶的連鎖,可以提供操作的靈活性。
F2.7,可選直供部分與料場內(nèi)部順序連鎖:料場內(nèi)部直接控制外部料線,在用戶角度看來,形成了一條感覺上的“整體料線”。
F2.8,可選為料場內(nèi)部發(fā)送模擬連鎖信號:當(dāng)料場內(nèi)部需要一個外部連鎖信號才能試車時,外部控制程序可以通過通訊發(fā)送一個模擬信號給場內(nèi)程序。一旦場外設(shè)備真正啟動自動切換到實時信號傳送,不必認(rèn)為切換,非常人性化的設(shè)計。
二,UML分析和建模
皮帶輸送機運輸原料的工作過程,就像水流在河道里的運動一樣,項目因此得名RIVER(河流)。河流有3種模式,順序(一條河流的不同段)、分支(一條河流分為幾個支流)、匯聚(幾個支線河流匯集到一條干線河流)。這和料流的運行模式類似。
本來面向?qū)ο缶幊蘋OP是微型機程序設(shè)計領(lǐng)域的思想,它的實現(xiàn)需要編程工具的支持。分類、繼承、多態(tài)和成熟的設(shè)計模式是它的最大特點,UML語言是它的分析建模工具,且通過UML建模工具可以由UML圖形直接生成框架代碼。
首先利用面向?qū)ο缶幊蹋∣OP)的思想,把原料場的設(shè)備分為3個類:皮帶機類、兩位分料器類、三位分料器類。
以下是使用Microsoft Visio制圖,具體UML靜態(tài)類圖如下:



在類構(gòu)建時,首先建立了皮帶機基類(帶啟動、停止接口遺留到繼承類中實現(xiàn)多態(tài))、電動機基類、軟啟動基類然后通過繼承綁定實現(xiàn)具體類組合。他們的具體組合,可以通過功能塊自定義參數(shù)設(shè)置。
每種類又綁定了具體的結(jié)構(gòu)化數(shù)據(jù)類型,供類操作使用。結(jié)構(gòu)化數(shù)據(jù)類型變量便于實現(xiàn)編程視圖的概念統(tǒng)一,和以后做各種趨勢(而功能塊內(nèi)部變量是在堆棧里的,不能直接做趨勢記錄的)。這樣設(shè)計好處是概念統(tǒng)一,可以實現(xiàn)強大的功能,因為功能塊內(nèi)部的所有操作可以通過外部變量觸發(fā)。
再使用Visio繪制, UML類活動狀態(tài)圖如下:
通用狀態(tài)圖描述了每個設(shè)備都有的活動狀態(tài)行為。它是狀態(tài)轉(zhuǎn)換、自診斷、合理性檢查的依據(jù)。通過編程實現(xiàn)上圖,系統(tǒng)增強了健壯性。

兩位分料器活動狀態(tài)圖,具體描述了該設(shè)備的狀態(tài)轉(zhuǎn)換過程和約束條件。
以該圖作為依據(jù),開發(fā)了兩位式分料器的合理性檢查、狀態(tài)轉(zhuǎn)換控制程序。
通過采用UML建模分析技術(shù),程序架構(gòu)更容易把握,加快了系統(tǒng)開發(fā)的速度,增強了開發(fā)者的自信。即使后來加入各種功能,我們同樣自信系統(tǒng)的健壯性,這依賴于優(yōu)良的架構(gòu)設(shè)計。系統(tǒng)功能強大的同時,代碼可控、結(jié)構(gòu)清晰,而且避免了項目需求的膨脹導(dǎo)致系統(tǒng)編碼的混亂和崩潰。哪怕是到達(dá)最后完成時期,可以自信的說程序都在掌控之中。
采用OOP技術(shù)分析,且編寫時功能塊高度內(nèi)聚,因此不會出現(xiàn)程序修改時的“牽一發(fā)而動全身”的惡果。這樣成功實現(xiàn)了易于維護修改的設(shè)計要求。
整個程序的主體就是3大功能塊,即皮帶機塊、兩位分料器塊、三位分料器塊。料線控制邏輯高度內(nèi)聚在每個設(shè)備功能塊內(nèi)部,也使得移植該程序非常容易。只要按照現(xiàn)場實際皮帶機的運輸拓?fù)浣Y(jié)構(gòu)順序搭建,三大功能塊構(gòu)成系統(tǒng)主干投影,料線連鎖的主控制程序就自然形成。所以在編寫程序時沒有專門的料線控制功能塊,而是編寫了一個具有料線信息集中分析顯示和料線互斥的約束塊。
三,具體實現(xiàn)
具體程序采用分層設(shè)計,共分為3層:

1、輸入預(yù)處理子層(I映射層):
作用是把從輸入通道讀入后的信息,在交給控制邏輯層處理之前,先進(jìn)入輸入預(yù)處理子層進(jìn)行預(yù)先處理。它的意義是實現(xiàn)統(tǒng)一的接口。比如:設(shè)備就緒信號在不同的設(shè)備,就緒條件是不同的,通過預(yù)處理子層后每一個設(shè)備只有一個統(tǒng)一的設(shè)備就緒信號,這樣就為控制邏輯層提供了簡單的概念統(tǒng)一的接口。把復(fù)雜轉(zhuǎn)化為簡單。
輸入預(yù)處理子層,靠近硬件輸入,處理硬件設(shè)備信息的封裝和轉(zhuǎn)換,為控制邏輯層,統(tǒng)一了接口(Interface),統(tǒng)一了概念。
2、輸出預(yù)處理子層(O映射層):
作用是把控制邏輯層輸出的信息,在寫入硬件通道之前,先進(jìn)入輸出預(yù)處理子層進(jìn)行預(yù)先處理。它的意義是實現(xiàn)OOP的多態(tài)。
通過預(yù)處理,將控制邏輯層的統(tǒng)一輸出接口,轉(zhuǎn)化為適應(yīng)設(shè)備多變的細(xì)節(jié),從而實現(xiàn)了多態(tài)。舉例說明:同樣是啟動行為,皮帶機類和分料器類的啟動行為是不同的;即使都是皮帶機類啟動、連鎖行為也不相同,因為有電機數(shù)和有無軟啟動器的差異,及設(shè)備所在位置的差異等。
輸出預(yù)處理子層,靠近硬件輸出,處理從控制邏輯層到硬件通道的多態(tài)特性。
輸入預(yù)處理子層和輸出預(yù)處理子層,一方面將程序主體與實際硬件隔離開來,從而使程序?qū)τ布囊蕾囆詼p弱,實現(xiàn)了項目的易于復(fù)用和移植;另一方面它們的行為相反,前者是為了實現(xiàn)同化,提供統(tǒng)一編程接口;后者是為了異化,實現(xiàn)不同的行為。I/O映射層,為高度分離主體控制邏輯提供了條件,它的設(shè)計借鑒bbbbbbs 操作系統(tǒng)的HAL層(硬件抽象層)設(shè)計。
3、控制邏輯層:
控制邏輯層,因為有I/O映射層的加入,實現(xiàn)起來就只是關(guān)注控制邏輯。該層只處理統(tǒng)一的概念,不直接處理硬件信息。既沒有復(fù)雜設(shè)備細(xì)節(jié)的干擾,又沒有具體硬件信息的影響,所以邏輯控制高度內(nèi)聚,為實現(xiàn)復(fù)雜的高級功能提供了基礎(chǔ)。
具體實現(xiàn)(略),參見程序。
分層設(shè)計,借鑒了bbbbbbs分層設(shè)計的思想。高度分離的各層中,某一層的修改不會傳遞到其他層,所以避免了“牽一發(fā)而動全身”的弊端。
具體實現(xiàn)過程是通過中間變量(即結(jié)構(gòu)化變量)和定義接口實現(xiàn)。
首先把硬件通道輸入值賦給接口變量;或讀入后再加以預(yù)處理,再賦值給接口變量。控制邏輯層的程序中只使用接口變量,這樣就實現(xiàn)了程序邏輯和硬件的分離。(實質(zhì)就是模仿函數(shù)傳遞的形式參數(shù)列表)。
使用結(jié)構(gòu)化數(shù)據(jù)給我們帶來了很大的便利,(實質(zhì)上此處有面向?qū)ο蠓诸愒O(shè)計的思想,只是由于工具的限制無法實現(xiàn)繼承和多態(tài)特性…..)。
編寫帶自定義參數(shù)的功能塊(如下圖)。

Bel表示皮帶機

Rt2表示兩位式分料器
程序搭建,示例如下:
首先畫出實際的帶式輸送機拓?fù)浣Y(jié)構(gòu):
圖中有四條皮帶對象S1、S2、S3、S4,一個分料器對象F1。

依樣搭建主控制程序(FBD示意圖):

一個類功能塊代表一個對象實例。
通過結(jié)構(gòu)變量把各個功能塊連接起來就形成控制程序,在ABB的CBF里也可以將對應(yīng)的功能塊管腳直接連線。ABB的CBF不能象西門子的STEP那樣可以把DB綁定到FC上一次傳遞一個結(jié)構(gòu)化變量塊給功能塊。CBF的結(jié)構(gòu)化變量不能用一個功能塊的管腳直接傳遞到功能塊內(nèi)部帶來的結(jié)果就是我們開發(fā)的功能塊實際的樣子想個多腳蟲子(如下圖)。

Bel表示皮帶機 Rt2表示兩位式分料器 Rt3表示三位式分料器
四,經(jīng)驗總結(jié)和推廣意義
OOP成功的應(yīng)用到PLC程序設(shè)計領(lǐng)域,是剛剛起步,它的意義是為PLC程序設(shè)計提出一個實踐的新思路。它的最大優(yōu)勢是開發(fā)出來的程序,概念統(tǒng)一、架構(gòu)優(yōu)良、易于維護、可復(fù)用、程序員對所開發(fā)的項目信心增強。
經(jīng)驗總結(jié):
掌握OOP程序設(shè)計思想有一定的難度,因為它需要改變設(shè)計人員的習(xí)慣性思維模式(正如包頭鋼鐵設(shè)計研究總院自動化所的設(shè)計人員王工程師,聽我們介紹完程序后,他感慨地說:“你們的程序設(shè)計概念,顛覆了我的思維,……?!保?。因為我們?nèi)粘A?xí)慣以“面向過程的模式思維” 做事情,就是一步一步來做。即使是在微型機程序設(shè)計領(lǐng)域,經(jīng)常也會人有拿著OOP的工具,寫出來的代碼卻是面向過程的。可以肯定地說現(xiàn)在微型機程序設(shè)計領(lǐng)域,優(yōu)秀的具有一定規(guī)模的軟件基本框架都是OOP的,而且必然采用“設(shè)計模式”。有趣的事實是,PLC開發(fā)工具的研發(fā),都是面向?qū)ο缶幊痰摹?/SPAN>
要求設(shè)計人員熟悉UML語言和建模工具的使用。因為PLC開發(fā)工具不支持OOP,更沒有與之對應(yīng)的UML建模工具。在微型機程序設(shè)計領(lǐng)域,與OOP開發(fā)工具配合使用的UML建模工具,可以直接以畫UML圖形建模,然后由建模工具完成從UML圖形到框架代碼的自動轉(zhuǎn)換(這就是所謂的“畫圖生成程序”),極大地提高了軟件項目的生產(chǎn)率。而我們只得借助Borland ModuelMaker、Microsoft Visio、IBM Rose這樣的工具來協(xié)助完成UML模型設(shè)計;依靠大腦來完成轉(zhuǎn)換代碼框架的工作,其中還得轉(zhuǎn)換PLC程序設(shè)計工具不支持的那部分特性,所以要求設(shè)計人員對UML語言和建模工具比較熟悉。
開發(fā)前必須有成熟的、較全面的需求分析和設(shè)計目標(biāo)。那種邊開發(fā)邊加入新的需求會使系統(tǒng)難于控制,以至徹底不可控,使程序員喪失信心,系統(tǒng)健壯性難以得到保證。最終不得不降低開發(fā)目標(biāo)。
接口的設(shè)計是一個重點,一定要高度重視。修改接口不能避免,但是不能出現(xiàn)反復(fù)修改接口的情況,越到項目的后期修改接口的代價越高。
目前的主要困難是所有的PLC廠商提供的開發(fā)工具都不支持OOP開發(fā)。也許將來會提供,但是這有待于市場的需求和居于領(lǐng)導(dǎo)地位廠商的決策,以及工控技術(shù)潮流的影響。
推廣意義:
本論文闡述的解決方案,適于在控制類型少,同樣控制類型的數(shù)量又較多的控制系統(tǒng)。使用該方案可以得到非常好的開發(fā)效果,實現(xiàn)較高的開發(fā)目標(biāo)。
即使項目的控制類型多,同樣控制類型的數(shù)量少的情況下,如果正確的使用此方案分析開發(fā),利用分層設(shè)計一定可以得到一個高度內(nèi)聚的、易于維護的系統(tǒng)。
小的控制系統(tǒng)應(yīng)用此方案是不值當(dāng)?shù)?,原因就是它的“設(shè)計”成分所占太多(“建狗窩和大廈,是要求不同程度的設(shè)計;一個優(yōu)秀的項目,要有合理程度的設(shè)計”)。
從程序設(shè)計師的視角來說,它的最大優(yōu)勢就是:程序設(shè)計師在設(shè)計復(fù)雜系統(tǒng)的時候,增強了他們對自己“產(chǎn)品”的信心。
2008年9月17日 于宣鋼煉鐵廠原料場
參考資料:
[1]、《ABB開發(fā)手冊》ABB公司
[2]、《面向?qū)ο蟮姆椒ㄔ砼c實踐》Ian Graham著 袁兆山等譯 機械工業(yè)出版社2003年3月第一版
[3]、《深入解析bbbbbbs操作系統(tǒng)》第四版 [美]Mark E.Russinovich、David A.Solomon著潘愛民譯 機械工業(yè)出版社2007年4月第一次印刷
[4]、《設(shè)計模式-可復(fù)用面向?qū)ο筌浖幕A(chǔ)》Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides著 李英軍、馬曉星、蔡敏、劉建中等譯 機械工業(yè)出版社 2000年9月第一版
[5]、《面向?qū)ο箝_發(fā)實踐之路_Delphi版》李維 著 機械工業(yè)出版社 2005年4月第一版
[6]、《DFLPHI6企業(yè)級解決方案及應(yīng)用剖析》劉藝 著 機械工業(yè)出版社 2002年7月第一版
[7]、《STEP7 V5.3手冊》西門子公司
[8]、《UML2.0學(xué)習(xí)指南》Russ Miles & Kim Hamilton 著汪青青譯 清華大學(xué)出版社 2007年2月第一版
[9]、《操作系統(tǒng)基礎(chǔ)》第三版屠祁 屠立德 編著 清華大學(xué)出版社 2001年12月第六次印
[10]、《數(shù)據(jù)結(jié)構(gòu) c語言版》嚴(yán)蔚敏 吳偉民 編著 清華大學(xué)出版設(shè) 2002年9月第一版 2005年8月第13次印
本文標(biāo)簽:OOP思想和UML分析技術(shù)在帶式輸送機控制程序開發(fā)中的應(yīng)用
* 由于無法獲得聯(lián)系方式等原因,本網(wǎng)使用的文字及圖片的作品報酬未能及時支付,在此深表歉意,請《OOP思想和UML分析技術(shù)在帶式輸送機控制程序開發(fā)中的應(yīng)用》相關(guān)權(quán)利人與機電之家網(wǎng)取得聯(lián)系。
關(guān)于“OOP思想和UML分析技術(shù)在帶式輸送機控制程序開發(fā)中的應(yīng)用”的更多資訊










