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是双向的。