在工業(yè)自動化領(lǐng)域,梯形圖邏輯仍然是最常用的編程語言之一,但對于更加復(fù)雜的控制對象,面向?qū)ο缶幊滩皇橐环N高效率的方式。下面先來談?wù)劽嫦驅(qū)ο缶幊蹋?/strong>
面向?qū)ο缶幊淌怯嬎銠C(jī)高級語言的一種先進(jìn)的編程模式,在工業(yè)控制系統(tǒng)的PLC程序中也可以采用這種設(shè)計思想,雖然我們無法實現(xiàn)面向?qū)ο蟮暮芏鄡?yōu)秀特點(diǎn)如“繼承”,甚至于它根本就不具備面向?qū)ο缶幊陶Z言的特點(diǎn),但面向?qū)ο缶幊痰幕靖拍罹褪穷惡皖惖膶嵗磳ο螅?,我們只需要使用這種概念就可以了。在計算機(jī)編程中我們需要把一些事物抽象和歸納,才能編寫類,而在工業(yè)控制系統(tǒng)中,控制對象如:電機(jī),閥等等是很明顯的控制類別,不需要抽象就可以很明顯的針對它們編寫類,以下將會用到西門子的Step7編程語言和施奈德的Unity 編程語言來講解PLC的面向?qū)ο缶幊獭?/p>
一、 實現(xiàn)方式
面向?qū)ο缶幊淘赟tep7中使用功能塊(即FB)編程,一談到此大家就會想到西門子提出的模塊化編程,不錯,就是這個模塊化編程,但西門子提出的模塊化、背景數(shù)據(jù)塊、多重背景等名詞并不能讓大家很明白的理解和使用這種優(yōu)秀的設(shè)計理念。
如果大家從面向?qū)ο缶幊痰慕嵌热ダ斫猓瑒t可以很好的理解這種設(shè)計模式。“FB塊”被看 成“類”,它可以被看成是對相似的控制對象的代碼歸納,如對MM440的變頻器可以編寫FB塊:MtrMM440,這在面向?qū)ο缶幊讨蟹Q為“類”,當(dāng)需要 編程控制具體的電機(jī)時,可以給它分配一個背景DB塊,在面向?qū)ο缶幊讨蟹Q為類的實現(xiàn)(即創(chuàng)建類的實例:對象),當(dāng)需要控制多個電機(jī)時,可以分配不同的背景 DB到這個FB塊,即創(chuàng)建類的多個實例。Step7中有另外一種程序塊,即FC塊,以FC塊為主的編程在西門子中稱為結(jié)構(gòu)化編程,這也可以類比于計算機(jī)編程中的面向過程編程,即純粹以函數(shù)為主體的編程。
施奈德的Unity軟件編程可以更好的理解面向?qū)ο缶幊?。它的DFB定義中包含輸入/輸出參數(shù),私有/共有變量,以及代碼實現(xiàn),而這正是計算機(jī)的面向?qū)ο?編程中“類”的基本元素,而創(chuàng)建類的實例(對象)就像創(chuàng)建普通的“布爾”變量一樣,只需在“Function Blocks”中定義這種“類”的變量即可。
Step7和Unity都可以采用面向過程和面向?qū)ο缶幊谭绞剑@兩種編程方式的區(qū)別類似于計算機(jī)高級語言中的C語言和C++語言編程的區(qū)別。
以下的講解將會把Step7中的FB和Unity中的DFB稱為“類”,Step7中的FB+背景DB以及Unity中DFB的實例稱為“對象”。
二、 面向?qū)ο缶幊碳軜?gòu)
以上講解的是實現(xiàn)細(xì)節(jié),而編程思想是建立在程序架構(gòu)上的,不是某個局部使用了面向?qū)ο蠓绞?,則可以稱之為這種編程就是面向?qū)ο缶幊獭_@種編程需要從以下方面著手:
1、 電路設(shè)計的結(jié)構(gòu)化。
這里主要以自動線為主介紹,對于單機(jī)機(jī)床可以是它的簡化結(jié)構(gòu):
<1>、自動線層:這是最高層次,它擁有一個主PLC,對屬于它下面的各區(qū)域控制<2>、工程層:擁有獨(dú)立的配送電系統(tǒng),但沒有PLC,只有分布式模塊,由自動線控制。顧名思義,它有著較大的獨(dú)立性,可以作為一個單獨(dú)的工程項目設(shè)計和制造,當(dāng)自動線比較小時,可以省略該層次。
<3>、功能組層:根據(jù)工藝劃分,將實現(xiàn)某一個工藝功能的區(qū)段設(shè)備劃分為一個功能組,它隸屬于工程層,當(dāng)工程層被省略時,隸屬于自動線層。面向?qū)ο缶幊滩⒉灰欢ㄒ笫褂靡陨系慕Y(jié)構(gòu),但好的電氣結(jié)構(gòu)更利于面向?qū)ο缶幊獭?/p>
2、 任何控制對象邏輯都在“類”中實現(xiàn)。
為了做到這點(diǎn),必須分析與控制對象相關(guān)的信息,譬如,對于一個電機(jī),有以下相關(guān)的信息需要考慮:
輸入信息:
<1>、電路保護(hù)信息,如電機(jī)的空氣開關(guān),熱繼電器等。
<2>、功能保護(hù)信息,如運(yùn)動電機(jī)的限位開關(guān),風(fēng)機(jī)的風(fēng)壓開關(guān),油泵的油位開關(guān)等。
<3>、啟動和終止條件,以上的電路保護(hù)和功能保護(hù)都可能導(dǎo)致電機(jī)運(yùn)轉(zhuǎn)終止,復(fù)位也可能導(dǎo)致重啟動,但這里的條件指的是正常運(yùn)行的啟動和終止條件,譬如順序控制的流程步。
<4>、控制模式:如手動和自動等。
<5>、故障復(fù)位:通過復(fù)位信息,重新啟動。
輸出信息:
<1>、控制輸出,如控制電機(jī)的主接觸器。
<2>、狀態(tài)信息輸出
<3>、故障輸出
狀態(tài)儲存信息:
用于代碼實現(xiàn)的中間變量以及可以被人機(jī)界面讀出的狀態(tài)變量等。把以上信息都整合到一個類中,并盡量使類的參數(shù)標(biāo)準(zhǔn)化。不過,同高級編程語言還是存在一些差別,針對Step7,應(yīng)該遵循的標(biāo)準(zhǔn)是:程序結(jié)構(gòu)由FC實現(xiàn),對象控制由FB實現(xiàn),如下的一種結(jié)構(gòu)體系(其電氣結(jié)構(gòu)來自上面的介紹):這只不過是一個粗略的PLC程序架構(gòu)體系,好的架構(gòu)應(yīng)該更完善和科學(xué)。
3、 規(guī)劃好數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)的定義相當(dāng)重要,并盡量統(tǒng)一這些結(jié)構(gòu),不要顧慮存儲空間,當(dāng)今的PLC內(nèi)存足以容納大量的數(shù)據(jù)。說明一點(diǎn)的是在Step7中盡量不要在類的外部定義數(shù)據(jù)結(jié)構(gòu)(UDT),而是在類里面定義,雖然會造成不同類中同一結(jié)構(gòu)的重復(fù)性定義,但卻提高了類的獨(dú)立性。
在接下來的篇幅中,我們來對比一下這兩種編程方式:
面向?qū)ο缶幊痰膬?yōu)點(diǎn)與梯形圖邏輯相比,面向?qū)ο缶幊逃幸韵聝?yōu)點(diǎn) :
? 代碼可移植,易于重復(fù)使用 ;
? 易于使用數(shù)學(xué)函數(shù)、循環(huán)等 ;
? 幾乎在每一門計算機(jī)編程課程中,都會教授面向?qū)ο缶幊?;
? 代碼可以在各種硬件平臺上運(yùn)行。
要掌握面向?qū)ο缶幊?,首先需要理解對象的概念及其使用。一旦對象或模塊類編寫完成, 就很容易通過多次調(diào)用來實現(xiàn)重復(fù)利用。例如,創(chuàng)建一個對象來控制電機(jī),用來處理所有輸入、輸出和故障。當(dāng)需要時,可以通過多次實例化 該單一控制對象,來控制多個電機(jī)。這就是所謂的按需實例化。當(dāng)需要控制多個電動機(jī)時, 可以多次使用該單個物體。它在需要時調(diào)用,并在使用時創(chuàng)建實例。?
每個電機(jī)的每個實例都有自己的特性,如電機(jī)停機(jī)、電機(jī)運(yùn)行、電機(jī)轉(zhuǎn)速、電機(jī)過載 等。大多數(shù)編程工作都是在首次創(chuàng)建對象時完成的。這是一種與梯形邏輯不同的思維方式,而且更強(qiáng)大,因為一旦構(gòu)建了一個對象,它就很容易使用和重用。面向?qū)ο缶幊谈子趫?zhí)行復(fù)雜的數(shù)學(xué)函數(shù)、循環(huán)計算、數(shù)組和嵌套子例程。幾乎每一門計算機(jī)編程——無論是高中、大學(xué)、還是網(wǎng)絡(luò)上的教程,都會教授這方面的知識。創(chuàng)建的代碼是可移植的,可以在各種硬件平臺上運(yùn)行。
“梯形圖邏輯遵循繼電器控制 系統(tǒng)中使用的梯形電氣圖的格 式,大多數(shù)人都可以快速學(xué)習(xí) 并掌握它?!?/strong>
不過,與梯形圖邏輯相比,面向?qū)ο缶幊逃幸韵氯秉c(diǎn) :
? 費(fèi)用更高 ;
? 更陡峭的學(xué)習(xí)曲線 ;
? 對于維護(hù)人員來說,故障排除不是特別 容易 ;
? 在將源代碼上傳到處理器之前,通常需要編譯。
與梯形圖邏輯相比,面向?qū)ο缶幊掏枰嗟膬?nèi)存和更強(qiáng)的處理能力,因此費(fèi)用就更高。面向?qū)ο缶幊陶Z言的學(xué)習(xí)時間可能更長。很可能需要課堂學(xué)習(xí),需要大量的時間、實踐、測試和應(yīng)用來掌握核心概念。編程人員必須經(jīng)常研究面向?qū)ο缶幊?,以便使用跟蹤器來追蹤代碼,或調(diào)試器來調(diào)試邏輯。使用這種類型的高級編程,可能很難實現(xiàn)實時在線監(jiān)視功能。
在將源代碼下載到控制器之前,必須對其進(jìn)行編譯。通常,源代碼并不保存在處理器內(nèi)存中。這意味著必須小心備份源代碼,因為編譯過的代碼通常是不可編輯的。使用面向?qū)ο缶幊蹋瑤煳募仨毰c在編譯過程中使用的其它資源相連接。如果不了解連接和資源,將很難使程序運(yùn)行。
梯形圖邏輯優(yōu)勢: ? ? ?
梯形圖邏輯是一種簡單且自文檔化的編碼方法,甚至有人懷疑它是否是一種編程語言。它遵循繼電器控制系統(tǒng)中使用的梯形電氣圖的格式,大多數(shù)人都可以快速學(xué)習(xí)并掌握它。它是在過去的數(shù)十年來唯一在機(jī)器自動化領(lǐng)域中大規(guī)模應(yīng)用的編程語言,并且在可預(yù)見的將來, 仍然是自動化行業(yè)中使用的主要編程語言之一。
隨著時間的推移,具有不同背景的人從不同領(lǐng)域進(jìn)入該行業(yè),各種編程語言被引入工業(yè)自動化工具箱中。其中包括功能塊編程、結(jié)構(gòu)化文本、狀態(tài)編程和順序功能圖。這 4 種編程語言和梯形圖邏輯,構(gòu)成了IEC61131-3 國際電工委員會 (IEC) 的標(biāo)準(zhǔn)編程語言。
IEC61131 背后的邏輯是 :如果每個供應(yīng)商都遵循該標(biāo)準(zhǔn),那么至少在某種程度上,一個人只需學(xué)習(xí)這 5 種編程語言,就可以輕松地在來自不同供應(yīng)商提供的平臺之間進(jìn)行切換。然而,事實卻并非如此。
基本梯形圖邏輯(如使用繼電器觸點(diǎn)和線圈)也是一樣的 ;但是在編程時,必須學(xué)習(xí)每個供應(yīng)商的語法和用戶體驗,以及如何使用編程平臺的詳細(xì)信息。盡管缺乏標(biāo)準(zhǔn)化,但與面向?qū)ο缶幊滔啾?,梯形圖邏輯有以下優(yōu)勢 :?
? 非常適合機(jī)器和過程控制 ;
? 由于本質(zhì)上是自文檔,因此更易于理解;
? 易于對受控系統(tǒng)進(jìn)行故障排除 ;
? 易于調(diào)試 ;
? 源代碼通??梢源鎯υ谔幚砥髦?。
梯形圖邏輯非常適合于機(jī)器和過程控制, 特別是具有大量離散輸入、輸出(I/O)的自動化系統(tǒng)。多年來,梯形圖邏輯也在不斷改進(jìn),以處理模擬量I/O,使其更適合于眾多的過程控制應(yīng)用。
與機(jī)器控制應(yīng)用相比,過程應(yīng)用中模擬量 I/O 的比例往往較高。
因為梯形圖邏輯比面向?qū)ο缶幊谈子谑褂?,因此眾多熟練的技術(shù)人員和工程人員可以快速學(xué)習(xí)梯形圖邏輯。邏輯高度系統(tǒng)化、有序化,再加上其具有自文檔的性質(zhì),使其更易于理解和掌握。在啟動某個設(shè)備之前,每行代碼都必須為真。如果有 5 個電機(jī)需要控制,那么至少需要 5行代碼,實現(xiàn)了高度簡化。
“梯形圖邏輯源代碼和描述符通常保存在控制器中,無需訪問源代碼,這可以消除程序員在試圖理解編譯程序所遭受的挫敗。”
對電氣工程師和維護(hù)人員來講,梯形圖邏輯非常直觀。雖然梯形圖邏輯需要有與面向?qū)ο缶幊滩煌乃季S方式,但通過學(xué)習(xí)可以快速掌握,并且理解他人編寫的代碼所需的時間也較少。邏輯何時為真,何時為假,一清二楚。即使編程經(jīng)驗有限的人,也很容易弄清楚開或關(guān)、線圈通電、比較變量和常見的數(shù)學(xué)函數(shù)。?
它簡單易用,簡化了故障排除和調(diào)試工作。監(jiān)視邏輯時,可以很容易明白目前正在發(fā)生的工況。無需軟件學(xué)位或高級編程技能。有了梯形圖邏輯,維護(hù)人員和工程人員就很容易跟蹤流程,了解正在發(fā)生的事情。可以將梯形圖邏輯看作真值表。如果左邊的邏輯為真,則右側(cè)的邏輯就會啟動。?
梯形圖邏輯源代碼和描述符,通常被保存在控制器中。這可以消除程序員在試圖理解編譯程序而無法訪問源代碼時所遭受的挫敗,面向?qū)ο缶幊桃彩侨绱恕?
然而,與面向?qū)ο缶幊滔啾?,梯形圖邏輯也有如下缺點(diǎn) :?
? 計算機(jī)程序員和 IT人員對梯形圖邏輯不熟悉 ;
? 難于進(jìn)行數(shù)學(xué)函數(shù)、文本和數(shù)據(jù)處理 ;?
? 依賴于掃描時間 ;?
? 需要專門的硬件來執(zhí)行, 如可編程邏輯控制器 (PLC) 。
梯形圖邏輯是計算機(jī)程序員和IT人員所不熟悉的一種符號語言,他們在學(xué)校里并沒有學(xué)習(xí)這種語言。在梯形圖邏輯中處理數(shù)學(xué)函數(shù)、文本字符串和數(shù)據(jù)可能會很困難,這主要是因為梯形圖邏輯最初并不是為了處理這些函數(shù)而設(shè)計的。
梯形圖邏輯也依賴于掃描時間。較大的程序,需要更長的時間來掃描和處理邏輯。執(zhí)行梯形 圖邏輯時,讀取輸入、掃描邏輯、 更新數(shù)據(jù)表和輸出、執(zhí)行通信, 然后循環(huán)重復(fù)??梢詫崿F(xiàn)中斷和其它編程技術(shù)等功能,以確保更快地執(zhí)行某些邏輯。?
盡管配置了梯形圖邏輯的基于軟件的PLC可以在PC上運(yùn)行, 但通常硬件 ( 如 PLC)要與編程軟件相匹配,兩者最好都是從同一個供應(yīng)商處購買的。這樣就可以確保兼容性,但如果想要更換供應(yīng)商,則不是特別方便。?
除了比較梯形圖邏輯和面向?qū)ο缶幊痰睦淄?,用戶還應(yīng)該評估這些編程語言在將要部署的環(huán)境中的使用情況。如果工廠或設(shè)施已實現(xiàn)了梯形圖邏輯的標(biāo)準(zhǔn)化,那么即使面向?qū)ο缶幊谈m合于該應(yīng)用,也不鼓勵將梯形圖邏輯更換為 面向?qū)ο缶幊獭kS著面向?qū)ο缶幊痰氖褂萌找嬖龆?,預(yù)計在未來幾十年內(nèi),它將與梯形圖邏輯共存。一個有遠(yuǎn)見的自動化專業(yè)人士,最好要掌握這兩種語言。
編輯:黃飛
?
評論
查看更多