遲君平 得利滿水處理系統(tǒng)(北京)有限公司 北京 100020
摘要:本文描述了軟件工程中的結(jié)構(gòu)化思想在PLC編程中的一種運(yùn)用方法,為自控項(xiàng)目中的PLC編程提供了一種方法論。通過(guò)分層次的編程來(lái)構(gòu)成PLC程序,采用這種方法可以實(shí)現(xiàn)多人協(xié)作,為大型的控制程序進(jìn)行共同工作,編寫出風(fēng)格一致,穩(wěn)健可靠的程序,文中通過(guò)一個(gè)例子對(duì)這種方法進(jìn)行了說(shuō)明。
Abstract:In this paper, to describe a sort of compose-code method in the PLC programme develop depend on structural idea, and provide one methodology for PLC programme. To according to program layered to constitutes the PLC code.Its may implement multiman-cooperation in develop and work for big project, the composed program have same style and steadily performance. One example be show to explain this method.
關(guān)鍵詞:PLC ;結(jié)構(gòu)化編程; 編程思想
Key words: PLC ; Structured programming ; Program idea
作者簡(jiǎn)介:
遲君平(1976-),男,漢,畢業(yè)于天津理工學(xué)院自動(dòng)化系,工程師。主要從事自控系統(tǒng)的設(shè)計(jì)開發(fā)和PLC的編程調(diào)試。
1 概述
可編程邏輯控制器(PLC)目前廣泛應(yīng)用于工業(yè)控制系統(tǒng)當(dāng)中,是自動(dòng)化工程的主要控制設(shè)備。在PLC程序的開發(fā)過(guò)程中,各種編程方式和開發(fā)思想都得到了應(yīng)用,沒(méi)有形成一種統(tǒng)一有效的編程標(biāo)準(zhǔn)。在實(shí)際的工業(yè)控制項(xiàng)目中,自動(dòng)化系統(tǒng)中的控制程序編寫比較隨意,往往可讀性較差,控制程序通常有較強(qiáng)的的個(gè)人風(fēng)格;當(dāng)項(xiàng)目較大,開發(fā)成員較多的時(shí)候,很難進(jìn)行團(tuán)隊(duì)協(xié)作;控制程序的后期維護(hù)很不方便、更遑論功能的擴(kuò)展。目前的這種狀態(tài)已經(jīng)阻礙了自控系統(tǒng)質(zhì)量的進(jìn)一步提高,不適應(yīng)工業(yè)控制項(xiàng)目對(duì)編程技術(shù)的要求。隨著軟件工程技術(shù)的發(fā)展,高級(jí)語(yǔ)言的編程技術(shù)不斷成熟,PLC編程也應(yīng)該吸收軟件工程技術(shù)的成果,提高這方面的技術(shù)水平。
PLC編程方法較多,比較常用的組合邏輯函數(shù)法、功能轉(zhuǎn)移圖法、Petri 網(wǎng)分析法,甚至還有面向?qū)ο蟮腜LC程序設(shè)計(jì)思想,如圖1所示。組合邏輯函數(shù)法是一種最基本的設(shè)計(jì)方法,但不適用于大規(guī)模PLC程序開發(fā)。功能轉(zhuǎn)移圖法適合于處理順序、隨機(jī)等類型的控制。Petri 網(wǎng)理論雖然不斷發(fā)展,但是不能從根本上解決狀態(tài)空間隨模型增長(zhǎng)而指數(shù)性增長(zhǎng)的問(wèn)題,因而不適合復(fù)雜和大規(guī)模系統(tǒng)模型的分析求解。面向?qū)ο蟮腜LC程序設(shè)計(jì)思想目前應(yīng)用于PLC編程有一定的困難。還有其他的一些編程方法,不再贅述。
圖1 面向?qū)ο蟮腜LC編程方法
軟件工程中的結(jié)構(gòu)化思想發(fā)展的比較成熟,廣泛應(yīng)用于高級(jí)語(yǔ)言編程中,可以大大提高編程的效率,改善可讀性。同樣,這種思想也可以應(yīng)用于PLC編程中,通過(guò)采用這種方法,可以大大降低PLC編程的難度,提高開發(fā)效率,改善程序的可移植性。目前的PLC開發(fā)平臺(tái)一般都支持結(jié)構(gòu)化的編程。
2 方法介紹
結(jié)構(gòu)化程序設(shè)計(jì)(Structured Programming)是以模塊化設(shè)計(jì)為中心的軟件設(shè)計(jì)思想,其概念最早由迪克斯特拉(E.W.Dijikstra)在1969年提出。按照結(jié)構(gòu)化程序設(shè)計(jì)方法進(jìn)行程序設(shè)計(jì)時(shí),先考慮總體設(shè)計(jì),后考慮細(xì)節(jié)設(shè)計(jì)。復(fù)雜的問(wèn)題一般由若干個(gè)簡(jiǎn)單的問(wèn)題構(gòu)成,可以對(duì)其進(jìn)行分解,設(shè)計(jì)一些子目標(biāo)作過(guò)渡,逐步細(xì)化。復(fù)雜的程序,通常應(yīng)該由若干簡(jiǎn)單的程序模塊所組成。按照這種方式編寫出的程序清晰易讀,易于理解,程序員能夠進(jìn)行逐步求精,程序易于證明和測(cè)試,程序的正確性得到了保證。
根據(jù)結(jié)構(gòu)化編程的思路,一個(gè)完整的工藝控制程序,通常可以劃分為三個(gè)層次:控制層、設(shè)備層、功能層,結(jié)構(gòu)如圖2所示。每個(gè)設(shè)備模塊對(duì)應(yīng)一臺(tái)設(shè)備,每個(gè)設(shè)備模塊內(nèi)部由幾個(gè)不同的功能模塊組成,控制模塊根據(jù)工藝流程控制設(shè)備模塊依次動(dòng)作,完成工藝要求。由于模塊相互獨(dú)立,因此在設(shè)計(jì)其中一個(gè)模塊時(shí),不會(huì)受到其它模塊的牽連,因而可將原來(lái)較為復(fù)雜的問(wèn)題化簡(jiǎn)為一系列簡(jiǎn)單模塊的設(shè)計(jì)。采用最佳的可能方法設(shè)計(jì)系統(tǒng)的各個(gè)組成部分,然后通過(guò)控制模塊將各個(gè)設(shè)備模塊聯(lián)系起來(lái),實(shí)現(xiàn)特定的工藝功能。
圖2 工藝控制程序結(jié)構(gòu)圖
針對(duì)一個(gè)電機(jī)設(shè)備的控制要求,把PLC編程需要完成的控制任務(wù)進(jìn)行進(jìn)一步分解,劃分為幾個(gè)較小的控制功能,然后針對(duì)每個(gè)功能分別進(jìn)行代碼編寫,就是不同的功能模塊,每個(gè)控制功能采用一個(gè)功能模塊完成,該功能模塊只完成一個(gè)單一的控制功能,并且與其他模塊的聯(lián)系最少且接口簡(jiǎn)單,這樣就易于編寫,具有清晰的結(jié)構(gòu),大大降低了編程難度,同時(shí)獲得了較高的程序質(zhì)量。若干個(gè)功能模塊組成設(shè)備模塊,不同的設(shè)備模塊在控制模塊的控制下按照指定的順序完成工藝功能。一個(gè)典型的的電機(jī)設(shè)備,比如一臺(tái)風(fēng)機(jī)或者水泵,設(shè)備模塊的組成如圖3所示。
圖3涉及到的功能模塊在表1中列出,這些基本的功能模塊都采用獨(dú)立封裝的形式完成,比如定義為UnityPro中的DFB,Setp7中的FB,或者RSlogix5000中的Add-On-Instructions功能。不同的功能模塊程序可以構(gòu)成一個(gè)功能模塊庫(kù),作為PLC程序庫(kù)的一部分,每當(dāng)進(jìn)行程序開發(fā)時(shí),可以把繁瑣的代碼編寫工作變?yōu)榇罘e木式的開發(fā)過(guò)程。
表1 模塊功能列表
設(shè)備模塊通過(guò)調(diào)用功能模塊的實(shí)例,也定義為DFB、FB或者Add-On-Instructions,表現(xiàn)為獨(dú)立封裝的形式,設(shè)備模塊的實(shí)例則對(duì)應(yīng)到一個(gè)實(shí)際的設(shè)備。通過(guò)實(shí)例的多重定義和調(diào)用,可以如圖4所示的常用程序結(jié)構(gòu)。
圖4 常用程序結(jié)構(gòu)圖
具有這種層次結(jié)構(gòu)的程序代碼,可以方便的進(jìn)行軟件測(cè)試和現(xiàn)場(chǎng)調(diào)試,大大減輕自動(dòng)化工程師的工作負(fù)擔(dān)和現(xiàn)場(chǎng)壓力,同時(shí)程序的后期維護(hù)和擴(kuò)展變得非常容易。程序也往往具有良好的可移植性,并且功能模塊可以重復(fù)使用,具有較高的可重用性。
目前,編程平臺(tái)支持?jǐn)U展標(biāo)記語(yǔ)言(XML)是一個(gè)發(fā)展方向,通過(guò)使用XML語(yǔ)言實(shí)現(xiàn)編程自動(dòng)化是未來(lái)發(fā)展的趨勢(shì),程序中合理的層次結(jié)構(gòu)以及模塊化的編程組件為今后編程自動(dòng)化打下了良好的基礎(chǔ)。
3 應(yīng)用說(shuō)明
一臺(tái)典型的電機(jī)設(shè)備的設(shè)備模塊如圖5所示,是一個(gè)DFB塊,定義了相應(yīng)的輸入輸出管腳,表現(xiàn)為獨(dú)立封裝的形式。設(shè)備模塊的內(nèi)部如圖6所示,由若干個(gè)功能模塊組成,功能模塊則是由最基本的梯形圖、指令表或者文本代碼編寫實(shí)現(xiàn)。
圖5 設(shè)備模塊圖
圖6 設(shè)備模塊內(nèi)部圖
4 結(jié)語(yǔ)
作為PLC編程人員,要具備這種結(jié)構(gòu)化編程的意識(shí),用于指導(dǎo)自己的編程工作,按照這種方法來(lái)分析問(wèn)題,解決問(wèn)題,組織程序。當(dāng)遇到新問(wèn)題時(shí),可快速寫出符合需要的PLC程序。作為一名自動(dòng)化工程師,一方面要掌握各種編程技術(shù)技巧,另一方面也要具備成熟的編程思想,來(lái)指導(dǎo)自己的編程工作。
通過(guò)掌握結(jié)構(gòu)化編程思想,可以加快開發(fā)進(jìn)度,提高項(xiàng)目的開發(fā)效率,節(jié)省開發(fā)工日,同時(shí)可以保證程序質(zhì)量,使編程人員可以從繁瑣的底層代碼編寫中解脫出來(lái),思想更加自由,去思考一些更為重要的內(nèi)容。
參考文獻(xiàn):
[1] 遲君平,王斌,李業(yè)友.模塊化編程方法在PLC程序開發(fā)中的應(yīng)用[J]. 微計(jì)算機(jī)信息.2005.6.
[2] 宋伯生編著.PLC編程理論、算法及技巧[M].機(jī)械工業(yè)出版社.2005.2.
摘自《自動(dòng)化博覽》2011年第四期