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