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。
圖2 FB實例
四個輸入事件,分別是INIT, RUN, STOP, UPDATE,兩個輸出事件分別是INITO, CNF。內部ECC如圖3所示。
注:INITO表示FB已經完成初始化,CNF表示當FB完成向外部代理的請求傳輸時,輸出“確認(confirmation)”事件。
圖3 ECC
其中,RUN, STOP, UPDATE共享一個輸出事件CNF,這會更新輸出的數據(MotorRun和ConveryorStatus)。
一個應用程序由多個FB組成,FB運行在資源上,資源屬於設備(我感覺可以理解為計算機和進程的關系),一個系統包括多個設備,如圖4所示。設備可以擁有多個資源,每個資源上可以運行多個FB,但是單個FB(包括CFB)只能運行在一個資源上。應用程序可以運行在單個資源上或者單個設備的多個資源上或者多個設備的多個資源上,如Application1。組成Application的subapplication可以運行在不同的資源上且可以重用。
圖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是雙向的。