面向?qū)ο?a target="_blank">編程是計(jì)算機(jī)高級(jí)語言的一種高級(jí)編程模式,這種設(shè)計(jì)思想也可以應(yīng)用于工業(yè)控制系統(tǒng)的plc程序中。雖然我們無法實(shí)現(xiàn)面向?qū)ο缶幊痰脑S多優(yōu)秀特性,如“繼承性”甚至完全不具備面向?qū)ο缶幊陶Z言的特性,但面向?qū)ο缶幊痰幕靖拍钍穷惡皖惖膶?shí)例(即對(duì)象),我們只需要使用這個(gè)概念。在計(jì)算機(jī)編程中,我們需要在編寫類之前抽象和總結(jié)一些東西。在工業(yè)控制系統(tǒng)中,電機(jī)、閥門等控制對(duì)象是顯而易見的控制類別,無需抽象就可以顯而易見地為其編寫類。下面將用西門子的Step7編程語言和施耐德的Unity編程語言來講解PLC的面向?qū)ο缶幊獭?/p>
?一、實(shí)施方式
面向?qū)ο缶幊淘诓襟E7中使用功能塊(FB)編程。說到這個(gè),我們會(huì)想到西門子提出的模塊化編程。是的,就是這個(gè)模塊化編程。但是西門子提出的模塊化、后臺(tái)數(shù)據(jù)塊、多背景等術(shù)語,并不能讓所有人都非常清楚地理解和使用這個(gè)優(yōu)秀的設(shè)計(jì)理念。如果你從面向?qū)ο缶幊痰慕嵌葋砝斫馑?,你就能很好地理解這種設(shè)計(jì)模式?!癋B塊”被視為“類”,可視為同類控制對(duì)象的代碼歸納。比如MM440的變頻器可以寫FB塊:MtrMM440,在面向?qū)ο缶幊讨蟹Q為“類”。當(dāng)需要對(duì)特定的電機(jī)進(jìn)行編程和控制時(shí),可以給它分配一個(gè)后臺(tái)DB塊,在面向?qū)ο缶幊讨蟹Q為類的實(shí)現(xiàn)(即創(chuàng)建class: object的一個(gè)實(shí)例)。需要時(shí),F(xiàn)B塊可以作為實(shí)現(xiàn)類的參考。在步驟7中還有另一種程序塊,即FC塊?;贔C塊的編程在西門子稱為結(jié)構(gòu)化編程,也可以與計(jì)算機(jī)編程中面向過程的編程相比較,即單純基于函數(shù)的編程。
施耐德的Unity軟件編程可以更好的理解面向?qū)ο缶幊?。它的DFB定義包括輸入/輸出參數(shù)、私有/共享變量和代碼實(shí)現(xiàn),它們是計(jì)算機(jī)面向?qū)ο缶幊讨小邦悺钡幕驹亍?chuàng)建類的實(shí)例(對(duì)象)就像創(chuàng)建普通的“布爾”變量一樣,只需在“功能塊”中定義這個(gè)“類”的變量。
Step7和Unity都可以采用面向過程和面向?qū)ο蟮木幊谭椒ā_@兩種編程方法的區(qū)別類似于計(jì)算機(jī)高級(jí)語言中C語言和C++語言編程的區(qū)別。
下面的解釋將把步驟7中的FB和Unity中的DFB稱為“類”,步驟7中的FB+背景DB和Unity中的DFB實(shí)例稱為“對(duì)象”。
二、面向?qū)ο蟮木幊碳軜?gòu)
以上解釋是關(guān)于實(shí)現(xiàn)細(xì)節(jié),編程思路是基于程序架構(gòu)的。如果不在本地使用面向?qū)ο蟮姆椒?,可以稱為這種編程或面向?qū)ο缶幊獭_@種編程需要從以下幾個(gè)方面入手:
1.結(jié)構(gòu)化電路設(shè)計(jì)。
本文主要介紹自動(dòng)線,它可以是單機(jī)的簡(jiǎn)化結(jié)構(gòu)。
自動(dòng)線級(jí):這是最高級(jí)別,它有一個(gè)主控PLC,控制其下的區(qū)域。
工程層:有獨(dú)立的配電系統(tǒng),但沒有PLC,只有分布式模塊,由自動(dòng)線控制。顧名思義,它具有很大的獨(dú)立性,可以作為一個(gè)單獨(dú)的項(xiàng)目進(jìn)行設(shè)計(jì)和制造。當(dāng)自動(dòng)線很小時(shí),這個(gè)級(jí)別可以省略。
功能組層:根據(jù)工藝劃分,將實(shí)現(xiàn)某一工藝功能的工段設(shè)備劃分為一個(gè)功能組,屬于工程層,當(dāng)省略工程層時(shí),屬于自動(dòng)線層。
面向?qū)ο缶幊滩灰欢ㄐ枰褂蒙鲜鼋Y(jié)構(gòu),但是好的電氣結(jié)構(gòu)更有利于面向?qū)ο缶幊獭?/p>
2.任何控制對(duì)象邏輯都是在“類”中實(shí)現(xiàn)的。
為此,有必要分析與受控對(duì)象相關(guān)的信息。例如,對(duì)于電機(jī),需要考慮以下相關(guān)信息:
輸入信息:
、電路保護(hù)信息,如電機(jī)的空氣開關(guān)、熱繼電器等。
、功能保護(hù)信息,如電機(jī)限位開關(guān)、風(fēng)扇氣壓開關(guān)、油泵油位開關(guān)等。
、啟停條件下,上述電路保護(hù)和功能保護(hù)可能導(dǎo)致電機(jī)運(yùn)行終止,而復(fù)位也可能導(dǎo)致重啟,但這里的條件是指正常運(yùn)行的啟停條件,如順序控制的流程步驟。
控制方式:如手動(dòng)和自動(dòng)。
故障復(fù)位:通過復(fù)位信息重啟。
輸出信息:
控制輸出,如控制電機(jī)的主接觸器。
,狀態(tài)信息輸出
,故障輸出
.........
狀態(tài)存儲(chǔ)信息:
用于代碼實(shí)現(xiàn)的中間變量和可由人機(jī)界面讀出的狀態(tài)變量等。
將以上所有信息集成到一個(gè)類中,并嘗試標(biāo)準(zhǔn)化該類的參數(shù)。但是,與高級(jí)編程語言有一些不同。對(duì)于Step7,應(yīng)該遵循的標(biāo)準(zhǔn)是:程序結(jié)構(gòu)用FC實(shí)現(xiàn),對(duì)象控制用FB實(shí)現(xiàn)。以下結(jié)構(gòu)體系(其電氣結(jié)構(gòu)來源于上面的介紹):這只是一個(gè)粗略的PLC程序架構(gòu)體系,好的架構(gòu)應(yīng)該更完善、更科學(xué)。
3.規(guī)劃數(shù)據(jù)結(jié)構(gòu)。
數(shù)據(jù)結(jié)構(gòu)的定義很重要,盡量統(tǒng)一這些結(jié)構(gòu),不用擔(dān)心存儲(chǔ)空間。如今的PLC內(nèi)存足以容納大量數(shù)據(jù)。有一點(diǎn)是,在步驟7中,我們應(yīng)該盡量不要在類外定義數(shù)據(jù)結(jié)構(gòu)(UDT),而是在類內(nèi)定義它。雖然會(huì)造成同一結(jié)構(gòu)在不同類中的重復(fù)定義,但會(huì)提高類的獨(dú)立性。
?第三,優(yōu)越性
1.標(biāo)準(zhǔn)化
使用這種設(shè)計(jì)模式,程序設(shè)計(jì)可以分為兩個(gè)階段,即標(biāo)準(zhǔn)庫、基礎(chǔ)架構(gòu)開發(fā)和實(shí)際應(yīng)用級(jí)設(shè)計(jì)。其中,標(biāo)準(zhǔn)庫和基礎(chǔ)架構(gòu)是使程序標(biāo)準(zhǔn)化的基礎(chǔ),而應(yīng)用層設(shè)計(jì)是針對(duì)具體的控制工程編程,這樣程序員可以分為兩類,一類是標(biāo)準(zhǔn)開發(fā),由資深程序員負(fù)責(zé),另一類是應(yīng)用設(shè)計(jì)(包括程序調(diào)試規(guī)劃到應(yīng)用設(shè)計(jì)),由經(jīng)過標(biāo)準(zhǔn)化培訓(xùn)的一般程序員完成。通過這種分配,可以解決中國(guó)工業(yè)自動(dòng)化面臨的尷尬局面。在中國(guó)傳統(tǒng)的受控行業(yè),一個(gè)程序是一個(gè)人設(shè)計(jì)的,所以他還必須負(fù)責(zé)現(xiàn)場(chǎng)調(diào)試,經(jīng)驗(yàn)豐富的程序員一般都是30歲以后,已經(jīng)結(jié)婚了,顯然長(zhǎng)期出差對(duì)家人不好,所以很多優(yōu)秀的程序員為了家庭考慮不得不改行,要么轉(zhuǎn)行到管理崗位,要么去制造工廠維修設(shè)備,這是資源的嚴(yán)重流失。毫無疑問,使用上述設(shè)計(jì)流程,我們可以讓有經(jīng)驗(yàn)的程序員設(shè)計(jì)標(biāo)準(zhǔn)庫和架構(gòu),讓剛踏入這個(gè)行業(yè)的年輕人設(shè)計(jì)和調(diào)試應(yīng)用。這不僅能讓老程序員在不影響家庭的情況下繼續(xù)自己的工作,還能讓年輕程序員參與現(xiàn)場(chǎng)調(diào)試,培養(yǎng)自己的經(jīng)驗(yàn),增加收入。
這可能會(huì)讓一些人擔(dān)心年輕程序員能否參與現(xiàn)場(chǎng)調(diào)試?可以肯定的是,沒有標(biāo)準(zhǔn)化支持的程序不僅可以由年輕的程序員編譯,而且在現(xiàn)場(chǎng)調(diào)試中也存在很多問題。但是有了好的標(biāo)準(zhǔn)化,一年半以上工作經(jīng)驗(yàn)的程序員應(yīng)該可以獨(dú)立面對(duì)自動(dòng)線。
PLC中面向?qū)ο缶幊痰暮诵氖呛诤芯幊?。?duì)于步驟7,我們使用FB來控制每個(gè)對(duì)象??刂七壿?、報(bào)警處理和信號(hào)交換都在FB中。對(duì)于應(yīng)用程序設(shè)計(jì)人員來說,他們不需要了解里面的代碼實(shí)現(xiàn),只需要知道FB的功能以及如何很好地使用它,這就大大降低了對(duì)應(yīng)用人員編程能力的要求。對(duì)于編程,他們只是遵循架構(gòu),復(fù)制代碼并更改輸入和輸出條件。
調(diào)試呢?很多人認(rèn)為使用FB編程最大的麻煩是在反復(fù)調(diào)用FB后無法診斷這些代碼。嚴(yán)格來說,這是真的。除了從后臺(tái)數(shù)據(jù)庫查看信息,我們無法監(jiān)控FB反復(fù)調(diào)用后的代碼。但正如我所說,這是黑盒編程。我們不需要診斷這些代碼,只需要知道什么樣的輸入和什么樣的參數(shù)設(shè)置導(dǎo)致什么樣的輸出。代碼的邏輯和功能是標(biāo)準(zhǔn)庫開發(fā)人員的責(zé)任,這就要求標(biāo)準(zhǔn)開發(fā)人員在不同的條件下對(duì)自己設(shè)計(jì)的功能塊進(jìn)行不同的測(cè)試,以保證正確性,同時(shí)還要編寫完整詳細(xì)的功能描述文檔,方便應(yīng)用程序設(shè)計(jì)人員理解這些塊。標(biāo)準(zhǔn)架構(gòu)不是一勞永逸制定出來的,需要針對(duì)千變?nèi)f化的項(xiàng)目不斷完善和修訂,這也是工程公司實(shí)際可以積累知識(shí)的地方。
程序不僅需要調(diào)試人員使用,還需要用戶(設(shè)備維護(hù)人員)知道,如果將完整的標(biāo)準(zhǔn)庫文檔交給用戶,可能存在技術(shù)泄露的可能;如果沒有,可能很難為他們?cè)\斷設(shè)備,這就需要標(biāo)準(zhǔn)制定者制作另一個(gè)文檔,即設(shè)備維護(hù)文檔,而知識(shí)的公開僅限于用戶使用程序進(jìn)行診斷的能力。
2.可重用性和可管理性
計(jì)算機(jī)面向?qū)ο缶幊痰膬?yōu)點(diǎn)還包括可重用性和易于管理,這在可編程邏輯控制器中也有應(yīng)用。以步驟7為例,有必要討論FC和FB的區(qū)別。觀察數(shù)據(jù)類型,F(xiàn)B只比FC多了一個(gè)“STAT”類型。在使用中,F(xiàn)B需要后臺(tái)DB,而FC不需要。但由于這種差異,F(xiàn)B有自己獨(dú)立的數(shù)據(jù)存儲(chǔ)空間,而FC的數(shù)據(jù)存儲(chǔ)必須依賴公共變量(如中間變量M或共享DB)。有一個(gè)規(guī)則,程序塊的獨(dú)立性越強(qiáng),它的可重用性越好,數(shù)據(jù)訪問沖突的可能性越小,管理也越容易。有些公司生產(chǎn)的PLC,其編程語言沒有類似FB的這個(gè)特性,可以用類似“FC+共享DB”的替代解決方案來解決,但其獨(dú)立性已經(jīng)大大降低。
同一代碼的獨(dú)立性是制定標(biāo)準(zhǔn)的重要環(huán)節(jié)。很難想象一個(gè)與其他功能塊有著千絲萬縷聯(lián)系的功能塊,能夠在不同的項(xiàng)目中被有效地復(fù)用為標(biāo)準(zhǔn)塊。
縱觀計(jì)算機(jī)語言的發(fā)展,最初的編程是令人恐懼的,但今天的編程給了人們極大的解脫。有許多現(xiàn)成的標(biāo)準(zhǔn)類庫可供實(shí)際使用。人們可以把更多的編程精力投入到實(shí)現(xiàn)功能本身。plc編程也應(yīng)該朝著這個(gè)方向發(fā)展。更多的人應(yīng)該從事應(yīng)用級(jí)的設(shè)計(jì)。那些標(biāo)準(zhǔn)功能塊不應(yīng)該由不同的人重復(fù)開發(fā)。雖然各大PLC工廠都開發(fā)了大量的程序庫,但不同行業(yè)的工業(yè)控制對(duì)象也各不相同,此處可以結(jié)合plc視頻教程來學(xué)習(xí)。
3.先進(jìn)的設(shè)計(jì)理念
在電路圖設(shè)計(jì)中,我們已經(jīng)使用了控制對(duì)象的繪制方法,即在配置好基本的主配電電路和PLC后,我們將為電機(jī)、閥門、氣缸等各個(gè)現(xiàn)場(chǎng)控制對(duì)象繪制電路圖。它們的電源來自獨(dú)立的分配電路,控制和反饋與PLC相連,硬件鏈根據(jù)實(shí)際情況調(diào)整,控制對(duì)象堆砌得像積木一樣有組織。同樣,編程也可以通過對(duì)每個(gè)控制對(duì)象使用相應(yīng)的標(biāo)準(zhǔn)控制塊來實(shí)現(xiàn),有效地封裝了程序的控制細(xì)節(jié),使程序看起來簡(jiǎn)潔,易于維護(hù),而好的設(shè)計(jì)可以使原理圖和程序有很好的連接,甚至實(shí)現(xiàn)一對(duì)一的關(guān)系。比如原理圖中的一個(gè)控制對(duì)象可以在程序中找到對(duì)應(yīng)的FB調(diào)用,真正實(shí)現(xiàn)控制面向?qū)ο缶幊獭?/p>
有些人可能會(huì)有疑問,PLC編程大多是分步編程,每個(gè)標(biāo)準(zhǔn)塊都是針對(duì)控制對(duì)象的,那么如何實(shí)現(xiàn)控制順序呢?這就需要編寫一個(gè)專門的FB塊進(jìn)行順序控制,或者用西門子現(xiàn)成的Graph7來實(shí)現(xiàn),這和一般的編程沒什么區(qū)別。
結(jié)論:目前工業(yè)控制領(lǐng)域有很多程序大師。他們非常精通算法,有自己的編程思路。當(dāng)我和一些人討論標(biāo)準(zhǔn)化時(shí),他們意識(shí)到標(biāo)準(zhǔn)化的高效率,但他們認(rèn)為這不能反映他們的編程水平。是的,如上所述,應(yīng)用層面的編程不應(yīng)該有很高的編程水平,但是想一想,一個(gè)人能一輩子都在做現(xiàn)場(chǎng)調(diào)試嗎?如果你想展示你的價(jià)值,你可以從事標(biāo)準(zhǔn)編程。也希望他們能花一點(diǎn)時(shí)間研究一下程序架構(gòu),各行各業(yè),真正的高手是系統(tǒng)架構(gòu)設(shè)計(jì)師,而編程小技巧只是一個(gè)好架構(gòu)的錦上添花。本文來源:www.jcpeixun.com。
?
審核編輯:鄢孟繁
評(píng)論