IEC61131-3 PLC 编程方式已经获得了广泛的应用,特别是梯形图更是深入到了OT 工程师的骨子里。哪怕是再复杂的控制逻辑,OT 工程师都能够编写出复杂的梯形图来。如果与他们讨论IEC611499 基于事件功能块编程时,他们仍然觉得与他们过往的经验和思维方式存在很大的差别。能否使用PLC 的设计方式来实现IEC61499 功能块应用呢?本文讨论IEC61131-3 与IEC61499 集成,相互融合的问题。
现状
IEC61131 在大量的工业控制场合得到了长期大量的使用,大多数OT 工程师熟悉了IEC61131的编程方法,它是一种基于周期扫描的执行方式。
IEC61131 标准适合单机运行。实现分布式控制的设计工作量大,效率不高。
IEC61499 是基于事件功能块在分布式控制系统中的标准。它更适合分布式工业控制的场景。这对于OT 工程师而言是一个相当比较新的概念。转变设计方法和理念,需要一个很长的过程。
问题
1 是否能够使用IEC61499 功能块来实现IEC61131 的周期扫描执行方式?
2 是否能够在一个设备中同时实现IEC61131和IEC61499?
3 IEC61131-3 和IEC61499 相融合带来了什么?
第一个问题
大家知道,PLC 的程序是基于周期扫描的方式执行的。如下图所示:
如果IEC61499 功能块的一个时钟是基于时钟(E_CYCLE)的周期性事件,那么实现PLC IEC61131 理论上是看来是可能的。比如下面这个应用就是基于时钟的周期性事件的。
IEC61131 梯形图
这是最简单的一个梯形图,两个串联的开关,控制一个灯。
IEC61499 功能块应用
我们使用E_CYCLE 功能块产生周期事件,将输入输出功能块IX和QI 串在事件链中,并且建立了一个常开功能块(NormalOpen)。每个周期事件产生时,程序从E_CYCLE 开始执行一遍
由此可见,除了没有梯形图那么简约之外,IEC61499 功能块网络能够简单粗暴地实现PLC 周期扫描方式的梯形图程序。E_CYCLE 周期性产生事件。触发两个读DI 功能块读取开关A和B的值,然后通过两个常开功能块块。当A和B 都为1 是,输出功能块Light输出1。我们还可以定义一个NormalClose 功能块,实现常闭触点。以及线圈等等。假如将IX 和NormalClose 封装在一个复合功能块中,IEC61499 功能块网络会相对简单一些。
不过,问题还不那么简单。我们知道,IEC61131 PLC 具有公共的存储器。所有的IO值和内部变量都是存放在公共存储器中的。而IEC61499 并不直接支持公共变量。IEC61499 功能块之间共享变量是很麻烦的事情。比如下面的梯形图,它采用了三个内部变量Int1,Int2和Int3.
在IEC61499 功能块网络中,虽然我们可以设置RS 功能块来作为Int1,Int2和Int3 的存储器,下图是一个例子,它使用RS功能块实现了一个内部变量Int1。
但是你会发现功能块网络会非常的杂乱无章。如果一台设备中有很多的IO接口和内部变量,相应的功能块网络会非常复杂。
IEC61499 实现全局变量的方法
那么是否存在一种方式,在IEC61499中实现公共变量,从而简化IEC61499 仿真IEC61131呢?笔者认为至少有三种种方式来实现:
1 实现一个内部变量的功能块(例如下面的RAM功能块),在它内部定义一个INT16 数组。作为公共内部变量.
RW 是读写控制
DIN 写入比特
DIN16 写入16为字
ADDR 为地址,可以写成 1000,1000.1.字符串。1000.1表示是1000内存的第一位。DOUT和DOUT16 是读出比特和字。
这种方式显然是最简单的。
2 在IEC61499 运行时的资源中提供一个内存变量区域(数组),IEC61499 功能块应用通过服务接口功能块SIFB 访问内部变量。
这种方式不太可取,应为造成了不兼容问题。
3 在PLC OS 下独立实现一个内部变量管理线程,SIFB通过远程过程调用RPC。
在设备的OS上实现一个独立的线程,通过RPC与运行时内部的功能块交换内部变量就可以了。系统结构如下图所示:
在这种架构下,对应IEC61131 PLC 梯形图的IEC611499 功能块网络变成如下简约方式:
其中NormalOpen,NormalClose和Coil 是一个复合功能块。其中的Variables 是一个访问内部变量的服务接口功能块。用于通过RPC 访问内部变量。
更进一步地,我们也可以采用PLC 的IO方式,将IO 读出程序搬到IEC611499 运行时的外面来实现:
在某些应用场合,采取这样的方式,可以大大简化应用网络的复杂性,比如大量IO接口的应用场合。
第二个问题
当我们研究了第一个问题后,第二个问题基本已经有答案了。我们完全可以在一个设备中同时运行IEC61499 运行时(4diac)和IEC61131 运行时(ProConOS)
在IEC61499 和IEC61131 运行时中分别实现一个功能块,通过功能块之间的数据交换实现内存共享。
第三个问题
一个设备中同时包含61499/61131两个运行时,这件事情充满了想象空间。这里不仅仅是为了迎合OT 工程师的偏好,还能够做的更多。
- 在PLC 中增加61499 运行时,实现PLC 的分布式处理能力。
PLC 实时能力强,而61499 具有分布式控制的优势。两者相加,各自发挥优势
- PLC 实现Realtime控制,61499 实现Anytime功能(云端访问,物联网,AI。。。)
目前异构多核处理器架构已经开始流行,可以在一个内核中跑PLC 程序,完成实时任务,在其它内核中运行61499 应用,实现Any time 的任务。比如访问数据库,云端等等。
结束语
在IEC61499 设备中,通过一个SIFB 功能块,可以实现类似PLC 内部存储器的公共变量。会给某些应用带来便利。并且使IEC61499 应用更加接近传统PLC 周期扫描执行方式。
在一台设备中同时运行IEC61499 运行时和IEC61131 运行时。通过SIFB和FD 通信实现数据共享是可行的。这种异构控制系统会带来无穷遐想。
本文的内容再一次表明,IEC61499 功能块是软件组件的模型,并且采纳了面向对象的思想。如果不做二次开发,那它只是一种模型,没什么使用价值。一旦你使用它们继续发展的化,它们可以做任何事情。就像任何一种计算机语言一样。