PLC程序開發 , 簡化程序最佳方式——面向對象編程
作者:Richard Jafrate
面向對象編程,是一種利用對象、方法和屬性,來組織和簡化程序元素的最佳方式。
最新發布的IEC-61131-3標準更新包括面向對象編程(OOP)語言。雖然面向對象編程是高大上的術語,但它其實是關於組織和簡化的。組織是指程序元素進行分組以及分組所採用的機制。組織良好的程序更直觀和更易於使用。面向對象的特徵旨在改善和促進健全的組織項目。簡化是指向外部世界提供簡化的介面。封裝之下,對象內部的複雜細節則保留在程序中。
何為對象?
編程中的「對象」,就是將功能和數據整合在一起,用其來實現對實際設備、過程和其它結構的狀態和行為的建模。在IEC 61131-3標準中,對象是帶額外特性的功能塊。功能塊可以定義方法和屬性,從而可以進一步劃分代碼和擴展介面。方法和屬性可以使用任何IEC-61131-3語言來實現。語言的選擇在每個方法或屬性的基礎上確定,這使其很容易根據環境來使用最適合的語言。
示例項目包含一個功能塊,該功能塊實現一個簡單的加/減計數器(如圖1所示)。在其它面向對象編程(OOP)語言中使用的「類」,是「函數功能塊」的同義詞。兩者的定義都必須在使用前進行實例化。類的實例或功能塊被稱為「對象」。
圖1:該示例工程包含了一個簡單的增/減計數器的功能塊。圖片來源: Mitek 自動化
定義方法
「方法」,是能夠訪問所定義的函數塊內部數據和參數的函數。它們也可以有輸入、輸出參數和返回值,這和普通函數一樣。
方法,可以用梯形圖來定義。當輸入參數為「真」時,計數器遞增,最後達到一個最大值。在功能塊的主體中,定義PMaxCount和Count參數。由於方法可以訪問功能塊的數據和參數,方法內部就可以使用PMaxCount和Count參數。返回值被寫入到CountUp,它是方法本身的名字。
在方法中定義NotMax變數,並將其分配給方法的調用堆棧。這意味著,前一個運行周期的變數值不會保持。在功能塊主體中定義的變數被分配到內存中,並在不同的運行周期中保持一致。
另一種方法是定義遞減計數器,比如使用結構化文本語言來實現。當輸入參數為「真」時,計數器遞減,直到減為零為止。Count 是功能塊的輸出參數,並將返回值寫入變數CountDn,這也是方法的名稱。此方法提供了一種簡單方便的方法,將整個程序分解成更小、更易於管理的程序塊。這種設計,更易於匹配不同的語言。
從函數塊本體調用這些方法,是很簡單的事情(如圖2所示)。由於這些方法是使用關鍵字「私有」定義的,所以只能在函數中調用它們。使用關鍵字「公共」定義的方法,也可以在外部調用。
圖2:用戶可以從功能塊本體來調用這些方法,並使用關鍵詞作為方法的防護。
定義屬性
「屬性」是類似於變數的函數,可以在表達式中使用,與使用變數的方法相同。不同於綁定到某個存儲位置,屬性與get()和set()功能綁定。當需要從屬性中讀取數據時,就需要執行get()功能。當需要向屬性寫入數據時,就需要執行set()功能。
「公有」與「私有」關鍵詞,也可以用來控制屬性的訪問許可權。「私有」意味著屬性只能在定義的功能塊內部使用。「公有」,則意味著該屬性可用在外部調用。然而,「公有」與「私有」關鍵詞也可以用於get()和set()函數的定義。這就使得該屬性,外部可讀,內部可寫。
在最基本的形式中,屬性從內部變數讀取、或寫入數據。它們的附加功能可用於驗證數據值或執行其它操作。例如,可在程序中添加MaxCount屬性。這允許將最大計數設置為指定的值,且其當前值可讀。數據通過MaxCount屬性傳遞給set()和get()函數,就像變數一樣。get()函數返回功能塊變數PMaxCount的值。set()函數驗證輸入值,以便在將結果寫入PMaxCount之前確保它是一個正數。
圖3:重置屬性沒有潛在讀寫操作對象。
在圖3所示的例子中,在項目中增加了使用梯形圖語言實現的複位功能。重置屬性沒有潛在的讀寫操作對象變數。當寫入「真」時,執行複位操作。當讀取屬性時,計算表達式的值,並返回結果。
值得一提的是,項目結構和組織如何反映到項目樹中。在項目中,每個程序、函數塊、方法和屬性都用一個節點表示。雙擊節點,就會在主窗口的文檔頁打開一個選項卡。標籤可以被移除並以單獨的窗口顯示。get()和set()功能都可以單獨顯示,因此可以用於屬性定義的顯示。
圖4:程序可以像功能塊一樣定義內部數據、參數、方法和屬性。
面向對象程序元素的優化
面向對象包括很多,但它最根本的目的就是以一種最優的方式組織程序元素。對象、方法和屬性,是實現這一目標的主要手段,對於理解和掌握這些概念,是最基本的。
項目初期,可採用較小的程序步驟來組織常規程序;基於對象的設計可以稍後進行。熟悉使用這些技術以後,會讓你更容易考慮所有其它的可能性。沒有理由不做嘗試。
資料下載
《工控【資料庫】【軟體庫】下載指南》
公眾號(industry-care)推薦閱讀(點擊標題試試)
- PLC就在你身邊,圖說PLC前世今生與未來!
- 工業4.0時代不再需要PLC?談未來高端PLC必備5大特點
- PLC進入發展新階段,4個方向值得關注!
- 寫好PLC程序必須掌握的循環掃描工作過程
- PLC大牛們,你真的懂OPC嗎?
- 據說這5類PLC程序,大家都喊【丟】
- 實地調研DCS控制系統,百聞不如一貼
- 中文詳解西門子PLC指令,瞬間都明白了!
- PLC與labview OPC通訊的四種簡單方式
- 3分鐘搞定 FCS、DCS、PLC的區別到底是啥!
- 爭議很大,DCS和PLC扯不清的那些事
- PLC要求強制認證了!你怎麼看?
- PLC實例丨輪胎生產線膠料定長裁斷系統
- 西門子PLC常見的20個問題
- PLC與HMI抵抗干擾的謀略套路
- PLC詳細圖解,so young so simple
- PLC干擾從哪裡來?到哪裡去?
推薦閱讀:
※【變頻選型】不拍腦袋做決定,數據說話差不了!
※最新 DevOps 實戰全攻略
※電氣故障精準定位少走彎路是王道,你行【它】才好!
※爭議很大,DCS和PLC扯不清的那些事