基于IEC61499标准的组件
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是双向的。
更新部分:IEC61499与MVC架构
MVC架构指的是由模型(Model)、视图(View)和控制器(Controller)组成的架构。MVC经常与IEC61499配合使用。其中模型就是某个实体资源的模型,比如机床的模型。视图就是机床的视图,而控制器就是指机床的控制器,即数控系统。
基于IEC61499标准的组件的更多相关文章
- WebApi系列~基于RESTful标准的Web Api
微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,它是简单,代码 ...
- 基于RESTful标准的Web Api
微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,它是简单,代码 ...
- 基于第三方vuejs库组件做适配性个性开发
相信大家在使用vuejs时候会用到很多的第三方库,能够找到适合自己的库并且加以使用可以大大加快进度,减少bug.但是很多时候会出现这样一个尴尬的境地: 基线的第三方组件并不能很好地满足我们自己地需求, ...
- WebApi系列~基于RESTful标准的Web Api 转载 https://www.cnblogs.com/lori/p/3555737.html
微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,它是简单,代码 ...
- SQL Standard Based Hive Authorization(基于SQL标准的Hive授权)
说明:该文档翻译/整理于Hive官方文档https://cwiki.apache.org/confluence/display/Hive/SQL+Standard+Based+Hive+Authori ...
- ABP从入门到精通(5):使用基于JWT标准的Token访问WebApi
项目:asp.net zero 4.2.0 .net core(1.1) 版本 我们做项目的时候可能会遇到需要提供api给app调用,ABP动态生成的WebApi提供了方便的基于JWT标准的Token ...
- 基于vue项目的组件中导入mui框架初始化滑动等效果时需移除严格模式的问题
基于vue项目的组件中导入mui框架初始化滑动等效果时,控制台报错:Uncaught TypeError: 'caller', 'callee', and 'arguments' properties ...
- ABP从入门到精通(4):使用基于JWT标准的Token访问WebApi
项目:asp.net zero 4.2.0 .net core(1.1) 版本 我们做项目的时候可能会遇到需要提供api给app调用,ABP动态生成的WebApi提供了方便的基于JWT标准的Token ...
- treeql 基于rest 标准的接口开发协议
treeql 可以让我们按照数据库的关系模型,生成一个tree 模型的json 数据,基于rest 标准, 从设计上,来说还是很不错的,但是从长远发展来说graphql 应该会更好,也有相关的比较 参 ...
随机推荐
- 2022GDUT寒训专题一C题
题目 题面 马在中国象棋以日字形规则移动. 请编写一段程序,给定n×m大小的棋盘,以及马的初始位置 (x, y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. 输入格式 ...
- springMvc 启动过程
转载自https://www.jianshu.com/p/dc64d02e49ac 这里给出一个简洁的文字描述版SpringMVC启动过程: tomcat web容器启动时会去读取web.xml这样的 ...
- javascript 获取<td>标签内的值。
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. 通过可编程的对象模型,JavaScript 获得了足够的能力来 ...
- gin框架中的同步异步
goroutine机制可以方便地实现异步处理 另外,在启动新的goroutine时,不应该使用原始上下文,必须使用它的只读副本 // 异步 func longAsync(context *gin.Co ...
- 负载均衡部署BBS
目录 一:部署后端服务(web服务器) 二:部署Python(web) 三:部署Django和uwsgi 四:配置并启动 五:部署负载均衡(lb01) 六:(web服务器 lb服务器) 1.测试 2. ...
- mysql加强(6)~子查询简单介绍、子查询分类
一.子查询简单介绍 1.什么是子查询? 一个查询之中嵌套了其他的若干查询. 在使用select 语句查询时,有时候where的查询条件中的限制条件不是一个确定的值,而是一个来自于另一个查询的结果. 子 ...
- C++ DLL注入工具完整源码
先上源码 #include "Inject_Main.h" #include "resource.h" #include <Windows.h> # ...
- Lesson4——NumPy 数组属性
NumPy 教程目录 NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推. 在 NumPy中,每一个线性的数组称为是一个轴(axi ...
- 技术管理进阶——Leader应该关注成长慢的同学吗?
原创不易,求分享.求一键三连 两个故事 我该怎么办? 在大学毕业的时候,恩师跟我说了一个故事: 有一个女同学跟他说,不知道毕业了该干撒,不知道该怎么办. 正处于「低谷期」的恩师突然一怔,想到貌似自己 ...
- Spring中NESTED和REQUIRED_NEW传播行为的区别
简介 PROPAGATION_REQUIRED_NEW: 表示当前方法必须运行在它自己的事务中.一个新的事务将被启动.如果存在当前事务,在该方法执行期间,当前事务会被挂起.如果使用JTATransac ...