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

2023-09-21 14:02:34

       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)。当数据流到某一个节点就开始节点的计算。

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

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

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

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

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

基于流程的模型

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

IEC61499 的功能块网络图

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

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

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

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

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

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

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

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

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

LabView的执行模型

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

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

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

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

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

数据流图形到IEC61499 的转换

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

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

增加事件IO

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

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

隐藏事件IO

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

例如:

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

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

实现的基本思路 

系统架构

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

图形程序的文本语言

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

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

应用场景

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

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

结束语 

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

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

更多推荐

处理SQLSyntaxErrorException异常:数据库表 ‘books‘ 不存在;

目录背景介绍我的问题中的解决方法通用方法背景介绍今天遇见了这个问题,解决后发出来分享一下Java应用程序中的SQLSyntaxErrorException:表'bookmanagement.books'不存在问题解决解决MySQL错误:无法找到表'bookmanagement.booksjava.sql.SQLSynt

从数据、产品、管理的视角探讨MES管理系统

MES生产管理系统在企业生产中扮演着关键角色,它集成了生产流程、数据应用、管理功能等多方面要素,为企业提供全面的生产运营支持。本文将从数据的视角聊聊MES管理系统,介绍其在数据管理、分析和利用方面的应用;从产品的视角,剖析其在生产过程管理、质量控制和追溯能力等方面的功能;最后从管理的视角,阐述其在生产调度、资源管理和决

KVCache原理简述

在GPT的推理过程中,它根据完整的提问和回答的已生成部分,来生测下一个词(的概率)。例如,我们的提问是【天王盖地虎,】,回答是【宝塔镇河妖。】。那么第一次,GPT根据【天王盖地虎,】生成【宝】,之后根据【天王盖地虎,宝】生成【塔】,以此类推,直到碰上终止符。这里面提问【天王盖地虎,】的QKV实际上重复计算了很多遍。由于

学了1个月机器学习的总结

书实在是厚,看不下去,还是看视频容易接受。总结:入门应该从如何把点拟合成一条线开始。先从统计学里的方差开始,扩展最小二乘法,引出线性回归。然后是逻辑回归,引出机器学习核心——求代价函数最小值。进而引出正则、学习率、过拟合欠拟合、偏差方差、准确率召回率、训练集验证集测试集等机器学习基础。进而扩展知识面,从线性到非线性,神

一、八大排序(sort)

文章目录一、时间复杂度(一)定义:常数操作二、空间复杂度(一)定义:三、排序(一)选择排序1.定义2.代码3.特性(二)冒泡排序1.定义2.代码3.特性(三)插入排序1.定义2.代码3.特性(四)归并排序1.定义2.代码3.特性(五)快速排序(六)堆排序(七)基数排序(八)计数排序一、时间复杂度(一)定义:常数操作与数

口袋参谋:淘宝生意参谋指数,如何一键转换成真实数值?

在淘宝天猫上,我们是无法直接清楚的,了解竞品真实数据,因为平台为了保护商家的权益,将真实数值全部隐藏起来了,也就是变成了我们能看到的虚拟指数。那我们在生意参谋中,从市场排行、市场大盘等地方,看到的交易额、支付人数、转化率、收藏人数、加购人数等数据都是指数,而不是实际值。这样的话,我们在做竞品分析时,基本上就失去参考价值

nginx反向代理

nginx反向代理8.反向代理8.1实现http反向代理8.1.1反向代理配置参数8.1.2反向代理单台web服务器8.1.2.1端口号后加"/"8.1.2.2端口号后不加"/"8.1.3指定location实现反向代理,动静分离8.1.4反向代理实例:缓存功能8.1.4.1举例8.1.5实现反向代理客户端IP透传8.

2024得物校招面试真题汇总及其解答(一)

1.有哪些查找优化算法查找优化算法是指可以提高查找效率的算法。常见的查找优化算法包括:二分查找:二分查找是一种基于分治思想的查找算法。它首先将查找范围缩小一半,然后再在缩小后的范围内进行查找,以此类推,直到找到目标元素或判断目标元素不存在。二分查找的平均时间复杂度为O(logn),其中n是数据集的大小。哈希表:哈希表是

Java常见面试题

目录1、mysql并发事务会带来哪些问题,如何解决?2、请详细描述Redis持久化机制?3、简述Redis缓存雪崩和缓存穿透的问题和解决方案?4、RabbitMQ消息丢失及对应解决方案5、什么叫线程安全?举例说明6、举例说明常用的加密算法7、synchronized和ReentrantLock有什么区别?8、synch

【Python 基础篇】Python环境搭建

文章目录一、Python环境的下载二、Python环境变量的安装及配置三、Python编译器的选择一、Python环境的下载Python官方网站:www.python.org这个是Python的官方网站,Python下载以及相关文档都能在里面找到如果下载慢的话,可以在各大电脑应用市场下载(自己是在联想应用商店下载的)…

01-安装

1、安装前准备1.1、集群IP分布主机名IP地址角色备注kube-master192.168.168.60kube-master管理节点kube-node1192.168.168.61kube-node计算节点kube-node2192.168.168.62kube-node计算节点kube-node3192.168.

热文推荐