IEC 61499標準一般用於開發分佈式控制系統。IEC 61499定義了功能模塊(FB, function block)的模型。有三種FB,分別是Basic FB (BFB),Service Interface FB (SIFB) (有的文獻也稱做Service FB (SFB))和Composite FB (CFB)。其中,BFB和SIFB都是原子FB,不能拆分的。SIFB是用於與硬件鏈接,讀取硬件信息和給硬件寫入信息的FB。CFB由BFB和SIFB組成,可是從外觀來看,CFB和其餘FB是同樣的。FB的模型如圖1所示:算法
圖1 FB模型圖編程
FB有兩種類型的接口,分別是event和data。所以能夠說FB是基於事件驅動的模塊。FB的上半部分爲ECC(execution control chart),下半部分爲算法集合和內部數據(內部算法不限制實現語言,可使用IEC61131-3編程語言,也可使用Java, C++,C#等高級語言)。某個事件所需的數據已經在輸入接口準備好且該事件接口被觸發,則FB會根據其內部的ECC執行相關的算法。ECC其實就是一個狀態機。舉個例子,如圖2所示的FB。app
圖2 FB實例編程語言
四個輸入事件,分別是INIT, RUN, STOP, UPDATE,兩個輸出事件分別是INITO, CNF。內部ECC如圖3所示。分佈式
注:INITO表示FB已經完成初始化,CNF表示當FB完成向外部代理的請求傳輸時,輸出「確認(confirmation)」事件。spa
圖3 ECC3d
其中,RUN, STOP, UPDATE共享一個輸出事件CNF,這會更新輸出的數據(MotorRun和ConveryorStatus)。代理
一個應用程序由多個FB組成,FB運行在資源上,資源屬於設備(我感受能夠理解爲計算機和進程的關係),一個系統包括多個設備,如圖4所示。設備能夠擁有多個資源,每一個資源上能夠運行多個FB,可是單個FB(包括CFB)只能運行在一個資源上。應用程序能夠運行在單個資源上或者單個設備的多個資源上或者多個設備的多個資源上,如Application1。組成Application的subapplication能夠運行在不一樣的資源上且能夠重用。blog
圖4 IEC 61499系統接口
CFB和Subapplication的區別就在於,CFB不能夠分佈在多個資源上,而Subapplication能夠分佈在多個資源上。其次,CFB能夠存儲輸入和輸出變量而Subapplication並無屬於本身的內存,只有其內部的FB纔有內存能夠存儲變量(因此就是能夠把CFB理解爲FB,只不過其內部算法是幾個BFB鏈接而成的)。舉個例子,如今有一個溫度控制子應用,由三個FB組成,分別是Input, PID, Output。Input負責從傳感器上讀取當前的溫度,PID負責與給定溫度值比較並輸出修正的溫度,Output負責控制執行器修正溫度。其子系統如圖5所示。
圖5 溫度控制子應用模型圖
圖5所示的子應用是分佈在一個單獨資源上的。子應用能夠分佈在不一樣的資源上,好比該溫度控制子應用的每一個FB均可以分佈在單獨的資源上,或者任意兩個FB能夠分佈在同一個資源上,另一個FB分佈在另一個獨立的資源上。在這種分佈式的狀況下,分佈在不一樣資源上的FB之間的通訊可使用publish和subscribe兩個SIFB,如圖6所示。
圖6 分佈式的子應用
除了PUB-SUB模式外,Client/Server模式也能夠用於SIFB之間的通訊。二者的區別在於PUB-SUB是單向的而Client/Server是雙向的。