我們自己來做一個PLC(Programmable Logic Controller,即可編程邏輯控制器)怎么樣?就像很多計算機專業的同學都自己寫過最簡單的操作系統一樣,作為工控領域的軟件人,怎么能不自己動手做個簡單的PLC呢? PLC其實也是經歷了很長時間的演變,最早的PLC雖然也是運行在單片機上,但是僅支持指定模塊的編程,而下裝組態其實是在傳輸各個點及各個點之間的連接信息,再由PLC根據這些信息在內部進行解析運行。而現在的PLC,大多數都可以被稱之為軟PLC(也稱Soft PLC),即在PC端便已經編譯成二進制文件,下載至PLC的過程是拷貝或者燒錄程序的過程,這使得PC的高性能得到了更好的發揮,我們今天討論的PLC便屬于軟PLC。 如果你想要找我要代碼的話,雖然我自己已經嘗試著做過一個簡單基本的了,但是不得不說一個完整的PLC是相當的龐大和復雜,我自己的僅供我自己學習使用了,沒有足夠的注釋和文檔去幫助別人了解,故在這里我可以推薦一個做得還算不錯的開源項目(當時我自己嘗試的時候也借用了這個項目中不少的組件),這個開源項目叫做beremiz。
首先讓我們來考慮一下,我自己要做的PLC需要些什么組件呢? 軟件環境- PLC程序IDE,方便開發人員編寫和調試程序的人機界面,支持多種語言的開發。可選的開源項目:
- PLCEdit:完全按照IEC61131標準開發,所有五種語言均支持,使用Python開發,故可以做到跨平臺。
- Beremiz:一套完整的開源PLC解決方案,不過放在這里主要是因為它不但使用了上面說的PLCEdit,同時還對其進行了增強,使得其增加了重要的在線調試功能。
- SoapBox Snap:使用C#+WPF開發的,僅支持梯形圖一種語言,不過卻已經支持了在線調試功能,含模擬器。
- 我的解決方案:我使用了Node.js+HTML5開發,僅支持梯形圖一種語言,不支持在線調試,使用HTML5方案最大的優勢有兩點,一是適應未來發展需要,二是類似于家用路由器一樣,可以將網頁嵌入到設備中,故只要一臺能瀏覽HTML5網頁的瀏覽器便可以配置PLC。
按照工業控制領域常用的IEC61131-3標準來看,工業控制領域程序語言被分為了兩大類五種語言,兩大類是指圖形化編程和代碼編程,圖形化編程中有Ladder(梯形圖),FBD(Function Block Diagram,功能塊圖)和SFC(Sequential Function Chart,序列功能表),而代碼編程有IL(Instruction List,指令集)和ST(Structured Text,結構化文本),具體內容我就不展開了,有需要自行百度百科或維基百科。
- HMI設計器,Human-machine interface,即人機界面,主要用來顯示控制過程中的實時數據,并設置一些按鍵方便操作員快速控制系統。可選方案:
- Beremiz:使用SVG技術開發,樣式可擴展性強,但是邏輯擴展性弱。
我的解決方案:使用HTML5技術開發,不但有豐富的開源編輯器可供選用,而且用戶可以自行嵌入JS邏輯。 - 編譯器,顧名思義,就是將在IDE環境中編寫好的程序轉換成可以直接運行在單片機上的二進制序列。可選的開源項目:
- mat:最全面的開源編譯器,輸入符合其標準的定義文件,并可以支持IL和ST兩種文本語言。使用純C開發,大量使用了宏定義,導致我看代碼看得挺吃力的。
- Avrian-Jump:一個非常初級的梯形圖編輯器,并可以將該梯形圖轉譯成ATMega168的二進制程序,使用js開發,直接在網頁上操作。
我的解決方案:我的初版解決方案是使用C#語言通過正則表達式識別代碼并轉成可供執行的Python代碼。后來將正則表達式的方式改為Coco/R,即專門的編譯器生成器。 其他必要的類庫或驅動,通常情況主要就是IO的驅動,以及通信的協議棧,當然還不能缺少基本的供開發人員調用的類庫。很多時候都是內嵌在編譯器中,或者提供足夠的靈活性讓用戶自行開發。
硬件環境我的解決方案:使用虛擬機運行Linux模擬,以及使用RaspberryPi這類支持運行Linux和Python的環境。 每一個子項中的解決方案或者開源項目都還會有很多,在這里,我僅列舉了我使用過和了解過的,相信你可以輕松的通過google搜索到更多的類似開源組件,所以在這里就不一一列舉了。 以上簡單的介紹了一下自己設計的PLC系統的基本組成部分,以及一些可選的開源項目和他們的特性。制作PLC并不是一件簡單的事情,相信你也無法在看過本文后便輕松的制作出自己那個PLC,不過我希望可以通過本文讓你了解到,做一個自己的PLC所需要的部件,以及其實它也并非高不可攀的。
|