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)推薦閱讀(點擊標題試試)

  1. PLC就在你身邊,圖說PLC前世今生與未來!
  2. 工業4.0時代不再需要PLC?談未來高端PLC必備5大特點
  3. PLC進入發展新階段,4個方向值得關注!
  4. 寫好PLC程序必須掌握的循環掃描工作過程
  5. PLC大牛們,你真的懂OPC嗎?
  6. 據說這5類PLC程序,大家都喊【丟】
  7. 實地調研DCS控制系統,百聞不如一貼
  8. 中文詳解西門子PLC指令,瞬間都明白了!
  9. PLC與labview OPC通訊的四種簡單方式
  10. 3分鐘搞定 FCS、DCS、PLC的區別到底是啥!
  11. 爭議很大,DCS和PLC扯不清的那些事
  12. PLC要求強制認證了!你怎麼看?
  13. PLC實例丨輪胎生產線膠料定長裁斷系統
  14. 西門子PLC常見的20個問題
  15. PLC與HMI抵抗干擾的謀略套路
  16. PLC詳細圖解,so young so simple
  17. PLC干擾從哪裡來?到哪裡去?

推薦閱讀:

【變頻選型】不拍腦袋做決定,數據說話差不了!
最新 DevOps 實戰全攻略
電氣故障精準定位少走彎路是王道,你行【它】才好!
爭議很大,DCS和PLC扯不清的那些事

TAG:自动化 | 电气工程 | 电气工程师 |