從PLC 到IEC61499 控制器

PLC 是工業控制領域被廣泛使用的控制器。並且制定了相關的國際標準IEC61131。於1992年發佈.

  IEC 61131-3  規定了PLC 的編程語言

  -梯形圖(Ladder Diagram)

-序列功能圖(Sequential Function Charts)

  -功能塊(Function Block)

  -結構文本(Structure Text)

  -指令表(Instruction List)

    梯形圖是使用最廣泛的PLC編程方式.學習PLC編程的人大多數是從梯形圖開始的。不過對於複雜的控制系統。梯形圖就難以建模。這就需要功能塊圖形編程。比如運動控制.PLCOpen 就使用功能塊來描述.但是IEC61131-3的功能塊編程看來進展並不大.無法滿足複雜工業控制越來越多的需求。也沒有體現.軟件工程的最新技術進步。

    事實上,現代工業自動控制系統大多數是分佈式系統。而PLC 是獨立運行的控制設備。IEC61131 缺乏對分佈式系統的支持 .另一方面,PLC 的程序一般都是使用廠家提供的專用開發環境預先編寫,並且編譯好之後,下載到PLC 中運行的.沒有支持動態在線更新和參數設定。也就是說,PLC 沒有支持系統的重配置(reconfiguration).這些性能的確失,導致了它的表兄-IEC61499 標準的誕生。

 本文我們來討論基於IEC61131的PLC和IEC61499 兼容型控制器之間的差別。

運行模式

PLC 的運行模式

PLC 採取的循環掃描方式運行程序PLC的CPU將用戶程序存儲在內存中。當程序執行時,它首先開始我們所謂的PLC  掃描週期。掃描週期將讀取所有輸入並更新輸入狀態文件。它將其應用於PLC梯形圖邏輯。最後,它更新輸出狀態文件並將信號發送到適當的輸出以打開或關閉。在整個PLC程序執行過程中,將反覆重複此掃描週期。這使PLC能夠實時讀取和寫入輸入和輸出.

掃描週期是一個順序執行的過程,這意味着它一次讀取並執行一行代碼。像梯形圖一樣從左至右讀取程序。CPU不斷更新並執行程序文件狀態。如果需要其他數據或數學/邏輯,它將停止掃描並從內存中調用子例程。這些子例程具有附加的數據文件,該文件存儲某些功能(例如計時器和計數器)的值。子例程完成後,它將返回主用戶程序並繼續掃描週期。

這是基於梯形圖邏輯的PLC程序的基本結構。

IEC61131的功能塊編程是爲了擴展當前的梯形邏輯編程,並且現在越來越多地使用它。它基本上允許程序員將子例程定義爲一個數據塊,該子例程可以反覆調用和使用,而無需重寫代碼。

語句列表編程是一種使用編程語句而不是梯形圖邏輯寫入PLC的方法。

兩者都在不斷髮展並在市場上佔有一席之地,但它們偏離了PLC的梯形邏輯編程。不過,它們依然遵循了循序程序執行的模式.每次掃描週期中,讀入所有的輸入信號,並且存儲在內存中,然後從左到右地執行一遍功能塊圖,並輸出狀態。

 

 顯然,輸入沒有變化,功能塊也將會執行一遍.除非標註每個數據是否有變化.當掃描週期確定之後,PLC 的CPU的處理能力決定了一個週期內執行程序指令數.爲了提高PLC 的實時性能,也有PLC 通過FPGA 硬件來加速梯形圖的執行速度。

PLC 程序執行的方式是同步方式的.每個時鐘週期,同步地執行所有的功能塊.功能塊的執行順序應該是有程序中的位置來確定的.. 是靜態不變的。

IEC61499 控制器的運行模式

  IEC61499 標準的編程方式只有一種-功能塊圖.不過,它和IEC61131-3 中的功能塊有很大的不同.下面同樣是一個計數器電路.左邊是IEC61131,右邊是IEC61499.可以看出IEC61499 的功能塊多了事件的輸入輸出。

IEC61499 是基於事件的功能塊.圖。當事件來到時,功能塊更據事件的類型和內部的狀態,來決定執行內部的程序(算法)。並且根據執行的結果輸出事件。數據是和事件同步地輸入輸出的(交叉點的小方塊決定了數據和哪一個事件同步。

下面是一個小例子,實現一個32分頻器。由E_CYCLE功能塊週期性地產生事件,每次施加在計數器上。當計數器到達PV 設置的值時,引起Q 輸出TRUE。E_CTU 復位。

具有硬件數字電路設計經驗的讀者會發現,IEC61499功能塊的事件類似於數字邏輯電路中的時鐘。整個功能塊圖是在時鐘的驅動和控制下運行的。E_CYCLE 相當於一個內部時鐘源,而所有的輸入接口功能塊。當收到新的輸入信號時,會產生相應的事件。

  在IEC61499 中沒有周期的掃描過程。只有週期性的事件節拍。上面的例子中,脈衝節拍的週期是1000ms。功能塊執行的循序會應爲狀態的變化而改變。

  可以開發IEC61499兼容的IEC61131-3 功能塊, 事實上在IEC61499 的開發環境中,也提供了IEC61131的功能塊庫。 同樣地,使用IEC61499 功能塊的事件IO,也可以實現PLC週期掃描的工作方式。

如何支持分佈式系統

  PLC 是獨立運行的控制設備,廠商提供的開發工具是用來開發單個PLC 內部程序的。當需要多個PLC 協同操作時,系統設計師需要定義好PLC相互之間交換數據的方向和格式,每個PLC各自編程。然後進行系統聯合調試。

PLC也具有與外界通信的網絡接口,這些網絡包括:

-Modbus

-EtherNet/IP

-Profibus

-ControlNet

-EtherCAT

-HART

  當多臺PLC 構建一個控制網絡時,需要設計相關的消息格式和語義。PLC 聯網更多地是通過上位機來實現的,比如SCADA 系統就是通過PC 機構建 一個PLC+上位機的星型網。

  也可以使用額外的網關來實現各種結構的PLC控制網絡。例如,使用一個Modbus/MQTT 網關和MQTT 代理構建一個Publish/Subscribe 發佈/訂閱網絡。能夠實現於雲端的各種協議的通信。現在的許多設備遠程監控項目大多數是採用這樣的方式。PLC 只是一個控制末端設備,通過網關接入物聯網或者雲端系統。

  由於涉及各種協議轉換和異種機互聯,這樣的控制系統的軟件開發和設備安裝過程是比較複雜和耗費時間精力的。由於各個PLC 產品是一個嚴重依賴廠商的產品。而且是部分符合標準。各廠商提供的網絡接口的使用方式各不相同。而且各種網絡模塊價格不菲。

 

IEC61499 標準是針對分佈式控制系統而開發的,在它的概念下,當你要開發一個有多臺控制器構成的分佈式系統時,你是建立一個統一的功能塊網絡。可以想象是在一個大的控制器上編寫一個應用程序。當編寫好之後,最後再將功能塊網絡分段映射到不同的控制器中去運行。映射時自動地增加了用於功能塊之間事件和消息交換的通信功能塊。如下圖所示。這些工作是IEC61499開發環境和運行時預先設計好的。應用程序員完全不用關心。只要網絡是通的。功能塊網絡就能分佈在各個控制器中運行。就像在一臺大的控制器上運行一樣。當我第一次映射IEC61499 功能塊網絡到幾個樹莓PI 上時,着實吃驚了一次。感覺十分神奇。

IEC61499 這種系統化設計,分段映射到控制器的編程方式帶來的好處是使得系統的修改和重配置變得簡單,比如如果我們希望將某些功能塊從一個控制器轉移到另一個控制器上運行的時候,只要重新的map一下就可以了。如果在PLC 構建的系統中,這樣的修改是比較費勁的。

硬件平臺

  PLC 產品是廠商依賴型產品,各家的硬件平臺各不相同。用戶對其硬件不甚瞭解。甚至它們使用的什麼CPU 都不知道。當然現在也出現了基於通用計算機平臺的“軟件PLC”。除了軟件PLC之外,標準PLC 產品的性能擴展是十分有限的,

  相比之下IEC61499 的運行時(runtime)和軟件PLC一樣是基於通用的計算機平臺的。通常是可以在一個RT linux OS 加上一些硬件IO模塊就能夠構建一個一個IEC61499 兼容的控制器。事實上,我們在瑞芯微RK3399 ,樹莓PI 上都運行了開源項目4diac的IEC61499 的運行時forte。基於開放平臺開發的控制器使我們能夠及時地選用最先進的硬件。提高控制器的性能。更多的第三方工業PC 開發上能夠加入開放IEC61499 的行列。形成一個開放型生態系統。用戶可以更加系統設計的需求,選擇各種性能的控制器,它們可以是基於X86 的系統,也可以是單核或者多核Arm 的系統。

功能擴展 

  同樣地,要想在標準PLC 產品上擴展功能只能等待廠商。比如我們想在PLC 上添加一個AI 算法。目前的方法只能是外接一臺計算機來完成。PLC廠商就像外國警察那樣總是行動遲緩。

  基於Linux OS是一個開放性平臺,如果採用IEC61499 開源運行時(例如4diac ),就可以任意地擴展功能。它們包括幾個方面:

1 第三方廠商開發功能塊庫

IEC61499 的開發環境具有功能塊類型的開發工具,它們使用交互界面來設計功能塊的事件輸入/輸出。數據輸入輸出。能夠使用java 或者ST 語言,lua語言 ,C語言開發功能塊的算法。然後結合到IEC61499 的運行時中。這些功能塊庫能夠給用戶使用。

例如著名的IEC61499 廠商nxtControl爲建築自動化,過程控制和機器控制編寫的功能塊庫。專業的公司可以將自己的核心算法,KNOW-HOW 編寫到功能塊中,以功能塊的方式提供給客戶使用。

2 使用Lua 編寫控制塊的算法

用戶可以使用Lua 編寫功能塊。不需要編譯在運行時內部解釋執行。在Linux OS 下開發各種服務組件,通過服務接口功能塊訪問這些服務組件。

3 使用基本的功能塊編寫複合功能塊

 

4 編寫外部微服務,通過服務接口功能塊交換消息

在當前信息系統領域,容器/微服務技術在雲平臺和物聯網邊緣設備中已經廣泛地應用了。所謂微服務(micro service)技術是將以前大型的單一程序分解成爲功能單一的微服務。它們可以獨立的開發,部署,維護和升級。而容器是將微服務的程序以及運行環境打包成爲一個容器,在容器環境中運行。目前最流行的容器管理技術是docker技術。微服務之間採用通用的消息平臺交換消息。

 我們可以將IEC61499 運行時打包成爲一個容器在docker中運行。並且通過消息系統(比如MQTT)與其它微服務交換數據。提供的微服務可以是基於web 的HMI用戶界面,時間序列數據庫,與雲端的接入,AI 和數據分析等。

事實上,我們在2019年,曾經開發了基於容器技術的小型工業邊緣計算機設備。採用了Go語言作爲主要的程序設計語言,使用RabbitMQ 作爲消息系統。其目的是希望像手機App 那樣安裝工業App。但是遇到的問題是儘管已經編寫了各種支持型微服務。使應用程序的編寫更加簡捷。但是畢竟還需要編寫程序。而讓控制工程師編寫程序是困難的。

一種創新的方法是將這兩種方法結合起來,以便在製造設備上輕鬆分發和管理軟件模塊,同時利用IEC 61499應用模型來啓用應用程序編排工具。我們已經初步的做了一些嘗試。證明是可行的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章