探讨基于IEC61499开发类似LabVIEW图形编程工具

       LabVIEW 是一个十分出名的图形化编程工具,与之类似的还有Matlab 的Simulink,他们统称为图形化编程语言(Graphical Programming Language),另一方面,IEC61499 功能块标准也是一种图形化编程工具,它面向分布式工业控制系统。本篇博文讨论一个十分有趣的话题,如何使用IEC61499 实现一个类似LabVIEW 界面的图形编程工具?

图形编程(Graphical Programming)方法

        图形编程方法使用二维或多个维度图形来表达计算机的程序。与使用代码行的基于文本的编程相比,图形编程用物理事物的图片或符号替换文本。

        图形编程提供了一种更直观、不繁琐的方法,对于某些程序员来说。它也可以是向视觉学习者介绍计算机编程的更有效方法。例如,终身幼儿园小组的研究人员创建了一个名为Scratch的程序,该程序使用图形编程来帮助儿童学习数学并参与创造性思维。

在计算机应用中有大量基于图形编程的方式:

  1. LabView G语言 应用于虚拟仪器,信号处理和控制
  2. Ladder:应用于描述PLC 的控制流程
  3. Simulink:用于系统仿真
  4. Node-RED 用与web 前端设计
  5. Google TensorFlow 用于神经网络计算

图形编程的本质

   基于数据流计算

        图形编程是通过将图表上的图形图标连接在一起来执行的,然后将其直接编译为机器代码,以便计算机处理器可以执行它。图形中的每一个图标表示一种计算单元,完成单一的计算。连线代表了数据的流向。因此,图形编程本质上是数据流计算模型(Dataflow Computing)。当数据流到某一个节点就开始节点的计算。

下面是一个数据流计算的例子:

探讨基于IEC61499开发类似LabVIEW图形编程工具_第1张图片

      尽管数据流计算是一种可行的计算模型,甚至比冯-洛伊曼计算机更加有效,但是由于硬件技术的限制,数据流计算机并没有流行,多个数据总线,分布式存储器等等。它只是成为了计算机软件架构的模型。使用数据流计算的运行时,可以实现数据流模型的计算。

目前AI 流行,数据流计算又被人们重视,事实上AI 的神经网络就是一种典型的数据流计算模型。

探讨基于IEC61499开发类似LabVIEW图形编程工具_第2张图片

        而Google 公司的tensorFlow AI计算平台,就是采用了数据流图模型来做为计算内核的接口模型的。AI 芯片设计师也在努力设计适合数据流计算的硬件架构。 

当你深入了解各种图形设计方法后将会发现,大多数图形编程的背后是数据流计算。

基于流程的模型

        这种方式采用图形来表达程序的执行顺序,类似于程序设计过程中使用的框图。PLC 的梯形图也是一种基于流程的模型。

IEC61499 的功能块网络图

        IEC61499 是基于事件功能块的分布式控制系统的标准,在IEC61499 标准中,采用了基于图形的程序设计方法,一个分布式控制的应用是一个功能块网络。

探讨基于IEC61499开发类似LabVIEW图形编程工具_第3张图片

       其中计算节点是功能块,它们通过事件连线和数据连线连接在一起。IEC61499 的功能快网是基于数据流的计算模型,当数据和事件沿着连线到达功能块时,执行功能块内部的某些算法。IEC61499 功能块网络与通用数据流计算模型相比的唯一区别是它除了数据之外,还有事件。事件能够使功能块计算具备确定性。计算节点的数据流是异步有先后的,有时候很难确定什么时间开始内部的计算。例如一个乘法功能块,理论上当乘数输入和被乘数输入到达后,才开始进行进行计算,但是如果被乘数是一个常量呢?它只有初始化时一次数据输入。同时,成数和被乘数也可能不是每次都计算的。因此,在数据流计算机中要有格外的信号来确定功能块何时计算内部算法。在PLC 的梯形图中,靠计算周期来控制的,每个计算周期,每个功能块都被计算一次。在IEC61499 采用了事件信息显式表示。当事件到达时开始计算。IEC61499 中的事件类似于硬件集成电路的时钟信号。

      增加了事件的功能块具有更加清晰的描述能力,同时,IEC61499 还增加了复合功能块,子应用,适配器等一系列机制,使IEC61499 成为面向分布式控制系统的图形编程工具。

IEC61499 作为图形编程语言的基础

        各种图形编程方法在本质上是相似的,它们能够进行转化的。例如,我们也许可以设计一种类似与Labview 类似的图型计算语言,然后将其转化为IEC61499 功能块网络,在IEC61499 的运行时中运行。

探讨基于IEC61499开发类似LabVIEW图形编程工具_第4张图片

        这样做的好处是保持原有图型编程语言的感观(Look &Feel)和使用习惯,降低用户的学习事件。同时又能够快速地实现一种图形设计语言的运行时。

       行业应用能够基于IEC61499 开发领域图形化编程工具(Graphical DSL)。比如为测量设备,物联网开发一套专用的图形设计语言。

      这也许是一个疯狂的想法,但是万一成功了呢?

下面我们来探讨如何基于IEC61499 开发类似Lab View 的图形化语言的相关问题。

LabView的执行模型

        LabView 遵循数据流模型在其平台上执行程序。当节点收到所有所需的输入时,它会处理程序的执行并生成输出数据。然后,该输出数据作为输入数据呈现给数据流路径中的下一个节点。数据沿着线路并通过节点的移动称为数据流,它决定了图中节点的执行顺序。

   由于节点仅在所有输入都接收到数据时才会执行,因此在Add完成执行并将数据传递给Subtract之前,下面的 G 图中的Subtract节点无法执行。

     然而,在下面的 G 图中,AddRandom NumberDivide节点都满足具有执行所需的输入数据的数据流要求。未通过电线相互连接的节点可以按任何顺序执行,因为这些节点不依赖于来自另一个节点的数据。您无法确定哪个节点首先执行。 

探讨基于IEC61499开发类似LabVIEW图形编程工具_第5张图片

      由于数据流(而不是命令的顺序)决定了 G 中节点的执行顺序上图展示了并行运行的操作。 

数据流决定了数据的执行顺序,而不是简单的从上到下,从左到右的顺序。

数据流图形到IEC61499 的转换

        前面提到,IEC61499 是使用事件来确定程序的执行流程,数据使用With 与事件同步。因此,当你将数据流图形转化为IEC61499 功能块网络时遇到的第一个问题是如何根据数据流计算的执行模式(输入数据都到达时,节点进行计算)转换为IEC61499基于事件驱动的执行模型(事件到达时,内部状态变化,节点进行计算)。

     这一点可以通过增加事件IO的方式实现。具体的方法如下:

增加事件IO

探讨基于IEC61499开发类似LabVIEW图形编程工具_第6张图片

        当转化时,我们增加输入输出事件,多少个输入数据,就增加多少个输入事件,同样地多少个输出数据就添加多少个输出事件。

        如果输入数据没有连线或者连接的是常量,那么它可以连接到有输入连线的数据对应的事件上,也就是说,别的数据变化就引起常量数据端一次“虚拟”的输入。

隐藏事件IO

   在图形编程的图形中,可以直接改变IEC61499 功能块的外观。不区分事件和数据IO,统一称为引脚,由于引脚的名称与背后的IEC61499 功能块是一一对应的。所以,将图形转化到功能块时,是可以确定那些是事件,那些是数据。

例如:

探讨基于IEC61499开发类似LabVIEW图形编程工具_第7张图片

        这里带来一个新的思路,可以将IEC61499 功能块的外观改头换面,以符合行业应用的习惯。我们甚至可以做成:

探讨基于IEC61499开发类似LabVIEW图形编程工具_第8张图片

      通过IEC61499 复合功能块构建复杂的图形单元,比如While ,For 功能块,本质上是一个复合功能块实现while 语句,而内部嵌入了While 语句的循环体。在转换过程中,需要自动生成一个While 功能块,然后嵌入令一个功能块。这样的转换当然是比较复杂的。 

实现的基本思路 

系统架构

系统架构如下,IEC61499 作为中间层。图形程序设计工具通过一些适配,转换软件转化为IEC61499 功能块和应用。OS 组成IEC61499 的资源层,透过资源访问底层硬件和网络资源。

探讨基于IEC61499开发类似LabVIEW图形编程工具_第9张图片

图形程序的文本语言

 使用图形编程设计工具构建的应用程序,完成后导出图形的文本。需要定义一个领域专用语言。可以使用XML ,JSON 格式的语言。

使用一个Converter 程序将图形编程模型转化成为IEC61499 的功能块网络和功能块类型库。这同样是一个XML描述的文本。由IEC61499 运行时导入运行。

应用场景

基于IEC61499 实现图形化编程工具的应用场景非常广泛,包括:

  • 仪器仪表行业
  • 实验室设备
  • 物联网
  • 自动控制

结束语 

        连同上一篇博文,我们讨论了一个非常有趣的话题,在IEC61499 的基础之上,可以构建许多的应用。但是IEC61499 只是作为一个中间层存在。真可谓“功成不必在我”的境界和“功成必定有我”的担当。

探讨基于IEC61499开发类似LabVIEW图形编程工具_第10张图片

      采取第一原则思考,在自动化行业为什么只能使用少数几种编程和组态方式呢?我们应该倡导高层编程工具与底层程序语言解耦,就像计算机汇编语言上构建各种高级语言一样。只有这样,开放自动化的春天才真正的到来了。

你可能感兴趣的:(labview,IEC61499)