IEC61499 编程(4)-开放功能块库的开发

前言

 我前面的博文已经提到过,对于工业软件而言,丰富的功能块至关重要。著名的IEC61499 开放平台4DIAC的架构已经相对完善,但是它一直停留在学术研究领域,并没有在工业界获得具体的应用。我认为与它没有加强功能块库的开发不无关系。最近我们尝试开发4DIAC 项目的扩展功能块的工作。这项工作主要是开发一个称为Open IEC61499 library的功能块库。使IEC61499 应用编程更加有效和简洁。

另一方面,当开发面向应用的功能块库的时候,硬件的IO库同样非常重要,而硬件接口相关的功能块与硬件平台关系密切。为此,我们参照nxtControl 公司的做法。自己设计一个IEC61499 控制器。

Open IEC61499 library 是一个IEC61499 开放型功能块库。它是在4diac –ide 提供的标准功能块库基础上的扩展库,目的是为了更加高效地编写功能块应用程序。

目的

提高编程效率,写出简洁的应用程序

  虽然使用4DIAC 提供了基本的功能块库。其中也包含了IEC61131 的功能库。使用这些功能块库能够编写一些应用程序。但是有时一个简单的功能需要使用多个功能块才能实现。显得比较的勉强和繁琐。通过扩展的功能块,可以使一些需要多个功能块才能够实现的常用应用由一个简单的功能块实现。

  例如,在控制中经常需要分频器(在数字逻辑电路中称为Divide),如果使用IEC61499 的Event 功能块实现,需要三个功能块来实现:

在Open IEC61499 library 中可以使用一个E_DIVID_N 来实现。

 

丰富的数据处理功能块

 

在数据采集,测量和工业控制中,需要使用大量的数据处理函数。比如信号的调理,滤波,快速傅里叶变换等等。现代控制系统已经进入了数字化,大数据和人工智能的时代,对数值计算越来越重要。 商业化软件都在努力地丰富数据处理的功能。matlab和NI labview 为什么广受欢迎的一个主要的原因就是它们有丰富数值处理的功能块库。而作为新的软件工具,只有提供比商业化软件更为丰富的大数据,网络,AI 功能块库。使用户能够高效地编写出现有商业软件无法比拟的应用软件,才能获得用户的青睐。

令人沮丧的事情却是,4diac 的标准库对数据处理的支持是非常少和低级的。实现常见的数据处理非常复杂。哪怕是简单地计算一个平均值,都需要使用多个功能块来实现。

例如下面的应用是产生一个360 °的正弦波。IEC61499 的数据类型是强类型的,需要各种格式转换。

我们在Open IEC61499 library 中开发了wave 功能块来替代多个功能块。

事实上,FB_WAVE 可以产生Sin,Cos,Sawtooth(锯齿波) 各种波形。而E_DIVID_N 能够实现N 分频功能。

开发与硬件有关的功能块

   控制软件与硬件平台是分不开的。为了提高控制系统的实时性,有些功能要由硬件来实现。并且具有快速的软硬件交互能力。为此,开发IEC61499 功能块库将提供与硬件相关的功能块。

硬件平台

(另文介绍)

Open IEC61499 library功能块

开发程序库的难点就在于决定包含功能块类型,功能,结构,参数和配置方式。这方面我们并没有经验。我们采取的方法是参考大公司产品中类似的功能块库,特别是Python,matlab,labview的函数和功能块。并且结合我们编写应用程序的体验,来编写这个功能块库。

当然,这是一个旷日持久的探索。也希望感兴趣地读者给我一些建议。

基础功能块

分频器(E_DIVID_N)

信号源

  波形发生器(Wave_)

Sin,Cos 波形发生器

Sin

 根据正弦的三个参数(频率,相位和幅度) 产生一个Sin 波形。

Cos

根据余弦的三个参数(频率,相位和幅度) 产生一个Sin 波形。

Pulse

脉冲波形发生器。参数 频率

Sawtooth

锯齿波发生器

 

 

输入信号调理

限幅

积分(INTEGRATOR)

微分 (LEAD)

滤波器

  高通滤波器

  低通滤波器

  带通滤波器

  卡尔曼滤波

 

输出

手动控制输出

PWM 输出

模拟输出

控制器

PID 控制器

简单PI (PI_B)

两点控制器(STEP2)

三点控制器(STEP3)

数学

固定窗口的平均值(mean)

参数:

窗口大小(size)

 

固定窗口最大值

参数:

窗口大小(size)

 

固定窗口最小值

参数:

窗口大小(size)

 

固定窗口中位数

参数:

窗口大小(size)

 

固定窗口均方根

参数:

窗口大小(size)

 

参数:

窗口大小(size)

FFT 变换

 

与硬件有关的功能块

单点模拟输入

多点模拟输入

电量测量(电压,电流)

阀门控制

直流电机控制

步进电机控制

伺服电机控制

功能块的代码设计

为了提高代码的执行效率,大多数功能块代码采用C++ 编写。作为Forte 的external module 和Forte 代码一起编译

猜你喜欢

转载自blog.csdn.net/yaojiawan/article/details/106779985