创建兼容的函数块库

现代软件开发方法的一部分是创建可重用的组件,称为功能块,其中包含部分应用软件功能,最常见的两种类型是边缘触发和级别控制。

通过PLCopen 2017年6月27日

软件开发的一个问题是效率的提高非常低。这里没有摩尔定律;效率没有每18个月翻一番。更糟糕的是:随着功能的增加,复杂性也呈指数级增长。解决这一问题需要现代软件开发工具和现代开发方法。

现代软件开发方法的一部分是创建可重用的组件,称为功能块,其中包含部分应用软件功能。这个过程称为封装。

下一步是将这些测试过的和文档化的组件集成到一个库中,从这个库中组织内外的每个人都可以使用,并以这种方式更快地创建扩展应用程序软件,并且错误更少。

边缘触发vs水平控制功能块

有两种类型的功能块。那些在上升输入时初始化(启动)并保持活动直到完成或中止的线程;只要相应的输入是高的,它们就会活跃。第一种叫做边缘触发,第二种叫做水平触发。

边缘触发功能的一个例子是移动到位置命令,该命令在通过输入Execute初始化后一直运行,直到完成。关卡触发功能的一个例子是PowerOn函数,只要设置了相关输入(Enable),电源就会打开。注意,Enable输入与Valid输出配对,Execute与Done配对。

有时,选择水平控制模型而不是边缘触发模型是很重要的。为了检测功能块中的上升边,需要两个PLC周期。因此,如果要求能够在每个周期中处理一个新值,则边缘触发模型不能作为解决方案。在这种情况下,级别控制的功能块模型是实现所需功能的首选方法。

边缘触发的例子

基本功能块是边缘触发Etrig。这是边缘触发功能的最简单形式,只有一个Execute作为输入,无论是文本形式还是图形形式:

对应的状态图如下所示,由与重置链接的“休眠”、“执行”和“完成”组成,用于正常行为,并通过“错误”链接回到“休眠”,用于不规则行为。为了实现,例如状态图可以很容易地转换为SFC或st。规范中包含了这方面的示例。

Etrig的相应时序图显示在这里,其中3理查德·道金斯图表显示了发生错误时的行为。

用中止扩展基

除此之外,还可以添加中止功能来中止流程,其中包括其他状态aborting和Aborted。

此外,这个状态图可以很容易地转换为SFC或ST,文档中包含了这些示例。

包括计时器功能

在中止功能之上(甚至没有此功能),可以添加计时器以使功能更加健壮。基本上有3个定时器选项:

  1. TimeOut (To):定义的操作的总操作时间应小于输入值udiTimeOut指定的时间(单位为µs)
  2. TimeLimit (Tl):在此设置操作停留在周期时间内的时间限制。这样,一个较长的操作就可以分成几个周期
  3. 和两者的结合(TlTo)。

udiTimeLimitdo做什么

例如,一个函数块可以在循环中完成一个复杂的任务。任务越大,该功能块的当前任务消耗的时间就越多。udiTimeLimit参数可以定义每个调用允许在各自的函数块中消耗多少时间。

udiTimeOut做什么

在处理其循环动作时,可以强制函数块等待外部事件。它可以在内部循环(BusyWait)中执行此操作,也可以在每个循环中检查其任务是否可以完全完成。udiTimeOut参数可以定义允许在xBusy状态下消耗多少时间。

水平控制功能块

对于级别控制的功能,类似的集合可以识别为类似的状态:

添加定时器Time Out、To和Time Limit、Tl,组合TlTo类似。然而,还有2个用于连续行为的额外块,这意味着它不会停止,所以没有完成状态:连续行为的LConC和LConTlC,包括时间限制:

边缘触发和水平控制器功能块数据表

规范本身包括所有列出的功能块的数据表。这包括状态图,实现和边缘触发FBs的时序图。

同样对于LCon功能,相应的ST代码示例也包含在面向对象中。在附录中,根据IEC 61131-3第二版的ETrigATlTo函数块的ST代码示例,这意味着没有添加面向对象。

用户可以在PLCopen概念中创建自己的库,其中包括级别和边缘控制功能,通过中止和计时器功能进行扩展。为了完成这个规范,给出了ST中的例子,包括经典的和面向对象的方法。

本文最初发表于PLCopen网站。PLCopen是CFE Media的内容合作伙伴。由制作编辑克里斯·瓦夫拉编辑,控制工程, CFE传媒,cvavra@cfemedia.com

原始内容可以在www.plcopen.org