高級篇PLC的面向對象編程

2021-02-14 啟程自動化培訓

啟程工控學院 傳播有態度的自動化資訊

           啟程自動化培訓  中國專業的自動化培訓服務提供商

    面向對象編程是計算機高級語言的一種先進的編程模式,在工業控制系統的PLC程序中也可以採用這種設計思想,雖然我們無法實現面向對象的很多優秀特點如「繼承」,甚至於它根本就不具備面向對象程式語言的特點,但面向對象編程的基本概念就是類和類的實例(即對象),我們只需要使用這種概念就可以了。在計算機編程中我們需要把一些事物抽象和歸納,才能編寫類,而在工業控制系統中,控制對象如:電機,閥等等是很明顯的控制類別,不需要抽象就可以很明顯的針對它們編寫類,以下將會用到西門子的Step7程式語言和施奈德的Unity 程式語言來講解PLC的面向對象編程。

一、 實現方式

    面向對象編程在Step7中使用功能塊(即FB)編程,一談到此大家就會想到西門子提出的模塊化編程,不錯,就是這個模塊化編程,但西門子提出的模塊化、背景數據塊、多重背景等名詞並不能讓大家很明白的理解和使用這種優秀的設計理念。如果大家從面向對象編程的角度去理解,則可以很好的理解這種設計模式。「FB塊」被看 成「類」,它可以被看成是對相似的控制對象的代碼歸納,如對MM440的變頻器可以編寫FB塊:MtrMM440,這在面向對象編程中稱為「類」,當需要 編程控制具體的電機時,可以給它分配一個背景DB塊,在面向對象編程中稱為類的實現(即創建類的實例:對象),當需要控制多個電機時,可以分配不同的背景 DB到這個FB塊,即創建類的多個實例。Step7中有另外一種程序塊,即FC塊,以FC塊為主的編程在西門子中稱為結構化編程,這也可以類比於計算機編程中的面向過程編程,即純粹以函數為主體的編程。

    施奈德的Unity軟體編程可以更好的理解面向對象編程。它的DFB定義中包含輸入/輸出參數,私有/共有變量,以及代碼實現,而這正是計算機的面向對象 編程中「類」的基本元素,而創建類的實例(對象)就像創建普通的「布爾」變量一樣,只需在「Function Blocks」中定義這種「類」的變量即可。

    Step7和Unity都可以採用面向過程和面向對象編程方式,這兩種編程方式的區別類似於計算機高級語言中的C語言和C++語言編程的區別。

    以下的講解將會把Step7中的FB和Unity中的DFB稱為「類」,Step7中的FB+背景DB以及Unity中DFB的實例稱為「對象」。

二、 面向對象編程架構

    以上講解的是實現細節,而編程思想是建立在程序架構上的,不是某個局部使用了面向對象方式,則可以稱之為這種編程就是面向對象編程。這種編程需要從以下方面著手:

1、 電路設計的結構化。

    這裡主要以自動線為主介紹,對於單機工具機可以是它的簡化結構,

    <1>、自動線層:這是最高層次,它擁有一個主PLC,對屬於它下面的各區域控制

    <2>、工程層:擁有獨立的配送電系統,但沒有PLC,只有分布式模塊,由自動線控制。顧名思義,它有著較大的獨立性,可以作為一個單獨的工程項目設計和製造,當自動線比較小時,可以省略該層次。

    <3>、功能組層:根據工藝劃分,將實現某一個工藝功能的區段設備劃分為一個功能組,它隸屬於工程層,當工程層被省略時,隸屬於自動線層。

    面向對象編程並不一定要求使用以上的結構,但好的電氣結構更利於面向對象編程。

2、 任何控制對象邏輯都在「類」中實現。

    為了做到這點,必須分析與控制對象相關的信息,譬如,對於一個電機,有以下相關的信息需要考慮:

    輸入信息:

    <1>、電路保護信息,如電機的空氣開關,熱繼電器等。

    <2>、功能保護信息,如運動電機的限位開關,風機的風壓開關,油泵的油位開關等。

    <3>、啟動和終止條件,以上的電路保護和功能保護都可能導致電機運轉終止,復位也可能導致重啟動,但這裡的條件指的是正常運行的啟動和終止條件,譬如順序控制的流程步。

    <4>、控制模式:如手動和自動等。

    <5>、故障復位:通過復位信息,重新啟動。

    輸出信息:

    <1>、控制輸出,如控制電機的主接觸器。

    <2>、狀態信息輸出

    <3>、故障輸出

    ....

    狀態儲存信息:

    用於代碼實現的中間變量以及可以被人機界面讀出的狀態變量等

    把以上信息都整合到一個類中,並儘量使類的參數標準化。不過,同高級程式語言還是曾在一些差別,針對Step7,應該遵循的標準是:程序結構由FC實現,對象控制由FB實現,如下的一種結構體系(其電氣結構來自上面的介紹):這只不過是一個粗略的PLC程序架構體系,好的架構應該更完善和科學。

3、 規劃好數據結構

    數據結構的定義相當重要,並儘量統一這些結構,不要顧慮存儲空間,當今的PLC內存足以容納大量的數據。說明一點的是在Step7中儘量不要在類的外部定義數據結構(UDT),而是在類裡面定義,雖然會造成不同類中同一結構的重複性定義,但卻提高了類的獨立性。


三、 優越性

1、 標準化

    使用這種設計模式,可以將程序設計分為兩個階段,即標準庫、基本架構開發,以及實際應用層面設計。其中標準庫、基本架構是制定程序標準化的基礎,而應用層設計是針對具體的控制工程編程,這樣可以把程序設計人員分成兩類,一類是標準開發,由資深程式設計師負責,一類是應用設計(其中程序調試規劃到應用設計),由經過標準化培訓的一般程式設計師完成,通過這種分配就可以解決中國工業自動化中面臨的尷尬局面。傳統的中國控制工業,一個程序設計由一個人完成,這樣他還必須負責現場調試,而擁有豐富經驗的程式設計師一般是三十歲後,這時他已經成家,而顯然長期出差對家庭不利,很多優秀的程式設計師為了家庭考慮不得不改行,要麼轉到管 理崗位,要麼去製造工廠搞設備維護,這是資源的嚴重流失。毫無疑問,使用以上的設計流程,我麼可以讓經驗豐富的程式設計師搞標準庫和架構的設計,而讓剛踏入這個行業的年輕人搞應用設計和調試,這不僅可以讓老程式設計師繼續他自己的工作,而不影響家庭,也可以讓年輕的程式設計師參入現場調試,培養自己的經驗,提高自己的 收入。

    這可能讓某些人士擔心,認為年輕的程式設計師可以參加現場的調試嗎?可以肯定的是沒有標準化支撐的程序不僅年輕的程式設計師編不出來,而且現場調試會問題多多。但有了好的標準化後,一年半以上工作經驗的程式設計師就應該能夠獨立面對自動線。

    PLC中的面向對象編程的核心就是黑匣子編程,針對Step7,我們使用FB去實現每一個對象的控制,控制邏輯、報警處理、信號交換全在FB中,對於應用設計人員,不需要明白裡面的代碼實現,只需要了解該FB的功能以及如何使用好它就行,這樣對於應用程式人員的編程能力要求大大降低,對於編程只不過是遵循架構,拷貝代碼,改變輸入輸出條件而已。

    那麼調試呢?很多人認為使用FB編程的最大麻煩就是FB的多次調用後,根本無法診斷這些代碼,從技術層面上講確實如此,我們除了從背景DB上查看信息外, 是無法在它多次被調用後監控代碼的,但我已說過,這是黑匣子編程,我們不需要診斷這些代碼,只需要知道什麼樣的輸入、什麼樣的參數設定導致什麼樣的輸出就行,代碼的邏輯與功能好壞是由標準庫開發人員負責的,這就要求標準開發人員需要對他設計的功能塊在不同條件下進行不同的測試,保證無誤,還需要編寫完整、 詳盡的功能說明文檔,以便於應用設計人員了解這些塊,標準架構並不是制定出來就一勞永逸的,針對千變萬化的工程,它是需要不斷完善和修訂的,這也是一個工程公司可以實實在在進行知識積累的地方。


    程序不僅需要給調試人員使用,而且用戶(設備維護人員)也需要了解,如果把完整的標準庫文檔給用戶,可能曾在技術外洩的可能,若不給,對他們診斷設備可能曾在困難,這就需要標準制定人員製作另外一分文檔,即設備維護文檔,其知識的透漏以用戶能夠使用程序進行診斷為限。

2、 重用性和易管理型

    計算機面向對象編程的優點也有重用性和易管理型,在PLC中也曾在,以Step7為例,需要討論FC和FB的差異。觀察數據類型,FB比FC只不過多一個 「STAT」類型,在使用上FB需要背景DB,FC不需要,但就這個差別導致FB擁有自己獨立的數據儲存空間,而FC的數據儲存卻必須藉助公有變量(如中 間變量M或者共享DB),有這樣一種準則,程序塊的獨立性越強,其重用性也越好,產生數據訪問衝突的可能性也更少,則更易於管理。有些公司生產的PLC, 其程序語言沒有類似FB 的這種特性,這時可以採用類似「FC+共享DB」的替代方案解決,但它的獨立性已經大大降低。

    同樣的代碼的獨立性是標準制定的一個重要環節,很難想像一個與其他功能塊之間有著千絲萬縷聯繫的功能塊能夠被作為標準塊在不同工程中有效的重複使用。

    縱觀計算機語言的發展,最開始的編程都是令人恐怖的,而當今的編程讓人們得到很大的解脫,有很多現成的標準類庫實用,人們可以把更多的編程精力放在實現功能本身上,PLC編程也應該朝這種方向發展,應該讓更多的人從事應用層面的設計,那些標準功能塊不應該重複的被不同人員開發,雖然各大PLC廠開發了大量 的程序庫,但工業控制對象各式各樣,不同行業都應該擁有自己的程序庫,而代碼的可重用性是評價這些功能塊好壞的關鍵。

3、 設計思想的先進性

    在電路圖設計中我們早已經在使用針對控制對象的繪圖方式,即把基本的主配送電路和PLC配置完成後,我們會針對每一個現場控制對象如:電機、閥、氣缸等控制對象繪製電路圖,他們的電源來自主配送電路,控制和反饋與PLC建立連接,硬體連鎖根據實際情況調整,一個個控制對象就象搭建積木一樣有組織的堆積起來,同樣的,編程也是針對一個個控制對象使用相應的標準控制塊實現就可以,把程序控制細節實現了有效的封裝,使程序看起來簡潔和易於維護,而好的設計可以把原理圖和程序進行很好的關聯,甚至於做到一對一的關係,如原理圖中的一個控制對象可以在程序中找到相應的FB調用與之對應,真正做到面向控制對象編程。

    可能有人疑慮,PLC編程大部分是步進編程,這一個個標準塊都是針對控制對象的,那控制順序如何實現呢?這就要求編寫專門的順序控制FB塊,或者使用Siemens現成的Graph7來實現,這點與一般編程沒什麼差別。

    結束語:現在的工業控制領域有很多程序高手,他們很精通算法,也有著自己的編程理念,當我和一些人探討標準化時,他們認識到標準化的高效性,但認為這樣無法體現自己的編程水準,是的,如上所述作為應用層面的程序設計是不要很高的編程水平,但要想想,一個人難道能一輩子去搞現場調試嗎?若想體現自己的價值,可 以從事標準編程。我更希望他們能花一點時間研究程序架構,各行各業,真正的大師是系統架構設計者,編程小技巧只不過是為好的架構錦上添花。

    願中國的工業自動化能夠早日擺脫小作坊式的時代!

您也可以聯繫下面的啟程美女!!

關注啟程,關注專注的力量,啟程公眾微信號:gongkong8

啟程工控學院 啟程自動化培訓公眾微信號:gongkong8  自動化技術早知道

啟程自動化培訓:PLC實訓\人手一機\包學包會PLC編程\組態\modbus 乙太網通訊\PID\XYZ軸 運動控制 視覺識別 ,【工控老鬼團隊】執教 高薪就業!+證書辦理  信用卡分期付款

啟程自動化培訓  中國專業的自動化培訓服務提供商

課程諮詢電話: 18665508041廖老師 18617081380郭老師

相關焦點

  • TIA Portal面向對象編程入門
    儘管時至今日依然有少數人質疑面向對象的編程思想,但我們看到的是面向對象技術發展的越來越好,無論是後端語言(JAVA、C#)或者前端語言(JavaScript、TypeScript),無一不是完全的支持面向對象技術。現在高校的PLC教材基本上採用的還是五六十年前的編程理念,將PLC定位為傳統繼電器控制的替代,以軟元件、寄存器這種古老落後的概念來講授這一門日新月異的現代工業控制編程技術。
  • 再談JavaScript面向對象編程
    導讀:陳皓曾發表過一篇文章《Javascript 面向對象編程》,珠玉在前,作者還是忍不住再畫蛇添足的補上一篇文章,主要是因為JavaScript這門語言魅力。另外這篇文章是一篇入門文章,是作者才開始學習Javascript,有一點心得,才想寫一篇這樣文章,文章中難免有錯誤的地方,還請各位不吝吐槽指正。
  • PLC編程及應用
    3、i/o編碼使用plc,就是以軟體程序來取代硬體配線。傳統電工圖當中,主電路是plc無法取代的;plc可以取代的部份,是控制電路。由傳統電工圖轉換為階梯圖的第一個步驟,就是i/o編碼,亦即將傳統電工圖中的輸入/輸出組件,先行確定其在plc中所擬對應之外部輸入/輸出端子編號,以及外部輸入組件接線方式是採用a/b接點,如表1所示。
  • C風格的面向對象編程
    面向對象編程(OOP),最早是C++、java等面向對象語言的一個核心特點,之後發展成了一種編程思想。面向對象編程的主要特點是,把屬性(數據)與方法(函數)按照類型綁定,並按照類型之間的關係分層分模塊設計,通過基類指針和虛函數實現多態。
  • Java面向對象編程開發認證考試項目介紹
    2、職業定義java是面向對象編程的語言,面向對象編程有四個特點:抽象,封裝,繼承,多態。面向對象區別於bai以前的面向過程,du像Java、vb、vc都是zhi採用面向dao對象編zhuan程,當然更高級的還有面向接口編shu程。
  • Python基礎知識——python面向對象的解釋型計算機程式語言
    python面向對象的解釋型計算機程式語言。數字型計算機:只能識別 0 1 組合的內容,通常成為二進位 01010101 +  機器碼0xa5 - 彙編語言 助記符 ADD彙編語言寫的軟體/程序 必須經過一個翻譯軟體把它翻譯成機器碼,即彙編器高級程式語言
  • Python面向對象編程的基本概念
    九道門商業數據分析學院提供介紹在學習面向對象的編程時。我決定深入了解它的歷史,結果令人著迷。術語「面向對象程序設計」(OOP)是艾倫·凱(Alan Kay)在1966年讀研究生時提出的。名為Simula的語言是第一種具有面向對象編程功能的程式語言。它是在1967年開發的,用於製作仿真程序,其中最重要的信息稱為對象。
  • Facebook 開源 Skip,面向對象+函數式程式語言
    而通過靜態類型系統追蹤可變性,Skip 完成了這個目標,同時它也支持現代程式語言特徵,例如 trait、泛型與子類型。Skip 是一種通用程式語言,它跟蹤副作用,提供反應失效的緩存、ergonomics 和安全的並行化以及高效的 GC。Skip 是靜態類型的,它使用 LLVM 提前編譯,生成高度優化的可執行文件。
  • Python面向對象程式語言
    Python (發音:[ 'paiθ(ə)n; (US) 'paiθɔn ]n.蟒蛇,巨蛇 ),是一種面向對象的解釋性的電腦程式設計語言,也是一種功能強大而完善的通用型語言,已經具有十多年的發展歷史面向對象————Python即支持面向過程的編程也支持面向對象的編程。在「面向過程」的語 言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在「面向對象」的語言中,程序是由數據和功能組合而成的對象構建起來的。與其他主要的語言如 C++和Java相比,Python以一種非常強大又簡單的方式實現面向對象編程。
  • 面向對象的Qt編程
    從BOP到OOP基於對象的Qt編程(不推薦)
  • 如何使用JavaScript -面向對象編程
    面向對象編程 —— Object Oriented Programming,簡稱 OOP ,是一種編程開發思想。它將真實世界各種複雜的關係,抽象為一個個對象,然後由對象之間的分工與合作,完成對真實世界的模擬。在面向對象程序開發思想中,每一個對象都是功能中心,具有明確分工,可以完成接受信息、處理數據、發出信息等任務。
  • 三菱plc學習方法與步驟
    提示:點擊上方"八方匯PLC實戰編程培訓"↑免費關注我們三菱plc學習方法與步驟1、學習plc首先應該了解強電電路中繼電器
  • 一步步分析:C語言如何面向對象編程
    這篇文章,我們就來聊聊如何在C語言中利用面向對象的思想來編程。也許你在項目中用不到,但是也強烈建議你看一下,因為我之前在跳槽的時候就兩次被問到這個問題。二、什麼是面向對象編程有這麼一個公式:程序=數據結構+算法。C語言中一般使用面向過程編程,就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步調用,在函數中對數據結構進行處理(執行算法),也就是說數據結構和算法是分開的。
  • 西門子PLC編程軟體下載_西門子PLC編程軟體官方免費下載「中文版...
    西門子plc編程軟體是一款專為西門子設備而專門開發的plc編程軟體。西門子編程軟體中文版的主要為了幫助用戶使用西門子的設備,機械設備需要進行特定的程序才能夠進行工作,這款軟體就是讓你的設備按你的想法去工作。太平洋下載中心為您提供西門子plc編程軟體官方下載。
  • R 的面向對象編程系統(S3、S4系統介紹)
    R 的面向對象編程R 語言中有四套面向對象編程系統:我們所熟悉的
  • C 語言面向對象編程 - 繼承
    上一篇文章主要講述了 C 語言面向對象編程
  • 面向對象編程會被拋棄嗎?這五大問題不容忽視
    儘管這個想法很巧妙,但直到 1981 年,面向對象編程才成為主流。在那之後,它就沒有停止過吸引新的和經驗豐富的軟體開發者。面向對象的程式設計師市場一如既往地忙碌。 但是在最近幾年中,這種已有幾十年歷史的編程範式受到越來越多的批評。難道是在面向對象編程大行其道 40 年之後,技術已經超越了這種範式?
  • 聊聊面向對象編程的幾個基本原則
    進行面向對象編程,有下面幾個原則:一. 面向抽象原則二. 開閉原則三. 多用組合少用繼承原則四. 高內聚-低耦合原則下面首先先介紹抽象類和接口,然後介紹面向抽象編程。5.阿里Java高級大牛直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!6.小號或者小白之類加群一律不給過,謝謝。目標已經有了,下面就看行動了!記住:學習永遠是自己的事情,你不學時間也不會多,你學了有時候卻能夠使用自己學到的知識換得更多自由自在的美好時光!
  • 面向對象編程
    面向對象編程(OOP)對於初學者來說可能是一個很難理解的概念。很多書籍都是從解釋OOP開始,討論三大術語:封裝、繼承和多態性,但是解釋的效果往往讓人失望。本文希望讓程式設計師、數據科學家和python愛好者們更容易理解這個概念。我們去掉所有的行話,通過一些例子來做解說。這篇文章是關於解釋OOP的外行方式。
  • plc編程工資多少一個月
    PLC編程一個月能掙多少錢?這是大多數關心的問題,技術型職業不易轉行,是伴隨多數人半輩子的事,人生的自我投資,從選擇職業開始,甚至有些人一旦從事這個行業,這輩子都是做這行。一線城市和小城市肯定不能比較的,同一個人在能力基本成熟,正式開始做PLC編程的工作狗,在不同城市的薪資不同。北上廣深蘇杭等一線城市,年薪可以達到10萬~30萬元,但在西安、武漢、天津、青島等較小城市,年薪只能維持在7萬~14萬元。