面向對象編程是計算機高級語言的一種先進的編程模式,在工業掌握體系的plc程序中也能夠接納這種設計頭腦,固然我們無法實現面向對象的很多優秀特色如“秉承”,乃至于它基礎就不具有面向對象編程語言的特色,但面向對象編程的根基概念即是類和類的實例(即對象),我們只需要使用這種概念就可以了。在計算機編程中我們需要把一些事物空洞和歸納,才氣編寫類,而在工業掌握體系中,掌握對象如:電機,閥等等是很明顯的掌握種別,不需要空洞就可以很明顯的針對它們編寫類,以下將會用到西門子的Step7編程語言和施奈德的Unity編程語言來疏解PLC的面向對象編程。
一、實現方法
面向對象編程在Step7中使用功效塊(即FB)編程,一談到此朋友們就會想到西門子提出的模塊化編程,不錯,即是這個模塊化編程,但西門子提出的模塊化、布景數據塊、多重布景等名詞并不能讓朋友們很清楚的理解和使用這種優秀的設計理念。若朋友們從面向對象編程的角度去理解,則可以很好的理解這種設計模式?!癋B塊”被當作“類”,它可以被當作是對類似的掌握對象的代碼歸納,如對MM440的變頻器可以編寫FB塊:MtrMM440,這在面向對象編程中稱為“類”,當需要編程掌握具體的電機時,可以給它分派一個布景DB塊,在面向對象編程中稱為類的實現(即建立類的實例:對象),當需要掌握多個電機時,可以分派不同的布景DB到這個FB塊,即建立類的多個實例。Step7中有另外一種程序塊,即FC塊,以FC塊為主的編程在西門子中稱為布局化編程,這也能夠類比于計算機編程中的面向歷程編程,即純粹以函數為主體的編程。
施奈德的Unity應用編程可以更好的理解面向對象編程。它的DFB定義中包含輸入/輸出參數,專有/共有變量,以及代碼實現,而這恰是計算機的面向對象編程中“類”的根基元素,而建立類的實例(對象)就像建立一般的“布爾”變量同樣,只需在“FunctionBlocks”中定義這種“類”的變量即可。
Step7和Unity都可以接納面向歷程和面向對象編程方法,這兩種編程方法的差別類似于計算機高級語言中的C語言和C++語言編程的差別。
以下的疏解將會把Step7中的FB和Unity中的DFB稱為“類”,Step7中的FB+布景DB以及Unity中DFB的實例稱為“對象”。
二、面向對象編程架構
以上疏解的是實現細節,而編程頭腦是確立在程序架構上的,不是某個局部使用了面向對象方法,則可以稱之為這種編程即是面向對象編程。這種編程需要從以下方面動手:
1、電路設計的布局化。
這里主要以自動線為主說明,對于單機機床可以是它的簡化布局,
自動線層:這是非常高檔次,它擁有一個主PLC,對屬于它下面的各區域掌握
工程層:擁有自力的配送電體系,但沒有PLC,惟有分布式模塊,由自動線掌握。顧名思義,它有著較大的自力性,可以作為一個獨自的工程項目設計和制造,當自動線相對小時,可以省略該檔次。
功效組層:憑據工藝分別,將實現某一個工藝功效的區段裝備分別為一個功效組,它從屬于工程層,當工程層被省略時,從屬于自動線層。
面向對象編程并不一定要求使用以上的布局,但好的電氣布局更利于面向對象編程。
2、任何掌握對象邏輯都在“類”中實現。
為了做到這點,必需說明與掌握對象關聯的信息,譬如,對于一個電機,有以下關聯的信息需要考慮:
輸入信息:
電路護衛信息,如電機的空氣開關,熱繼電器等。
功效護衛信息,如運動電機的限位開關,風機的風壓開關,油泵的油位開關等。
啟動和終止條件,以上的電路護衛和功效護衛都可能造成電機運轉終止,復位也可能造成重啟動,但這里的條件指的是平常運轉的啟動和終止條件,譬如挨次掌握的流程步。
掌握模式:如手動和自動等。
故障復位:通過復位信息,重新啟動。
輸出信息:
掌握輸出,如掌握電機的主接觸器。
狀況信息輸出
故障輸出
狀況儲存信息:
用于代碼實現的中心變量以及可以被電路圖設計中我們早曾經在使用針對掌握對象的畫圖方法,即把根基的主配送電路和PLC配置實現后,我們會針對每一個現場掌握對象如:電機、閥、氣缸等掌握對象繪制電路圖,他們的電源來自主配送電路,掌握和反應與PLC確立連接,硬件連鎖憑據現實情況調整,一個個掌握對象就象搭建積木同樣有組織的堆積起來,同樣的,編程也是針對一個個掌握對象使用相應的標準掌握塊實現就可以,把程序掌握細節實現了有用的封裝,使程序看起來簡潔和易于護衛,而好的設計可以把道理圖和程序進行很好的關聯,乃至于做到一對一的關系,如道理圖中的一個掌握對象可以在程序中找到相應的FB調用與之對應,真正做到面向掌握對象編程。
可能有人疑慮,PLC編程大片面是步進編程,這一個個標準塊都是針對掌握對象的,那掌握挨次怎樣實現呢?這就要求編寫特地的挨次掌握FB塊,或者使用Siemens現成的Graph7來實現,這點與一般編程沒什么差別。
結束語:當今的工業掌握平臺有很多程序妙手,他們很醒目算法,也有著本人的編程理念,當我和一些人探究標準化時,他們認識到標準化的高效性,但覺得如許無法體現本人的編程水準,是的,如上所述作為應用層面的程序設計是不要很高的編程水平,但要想想,一個人豈非能一輩子去搞現場調試嗎?若想體現本人的代價,可以從事標準編程。我更希望他們能花一點時間研究程序架構,各行各業,真確大師是體系架構設計者,編程小方法只但是是為好的架構如虎添翼。