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