运动控制系统软件原理及其标准功能块应用
上QQ阅读APP看书,第一时间看更新

3.1.4 边沿触发功能块和电平控制功能块

1.PLCopen规范中功能块的概念

PLCopen的功能块的概念又称公共行为模型(Common Behavior Model),分为两组:边沿触发(Edge Triggered)和电平控制(Level Controlled)。边沿触发功能块是指与Execute输入相配合的功能块;电平控制功能块是指与Enable输入相配合的功能块。需要指出的是,上升沿触发的功能块需要两个PLC的扫描周期处理执行;如果要求在一个扫描周期都用新值处理执行功能块,应该选择电平控制功能块。

2.边沿触发功能块

图3-9给出了ETrigA(由边沿触发的、具有中止功能的功能块,Edge Triggered with Abort functionality)的图形描述和状态图。

图3-9 EtrigA功能块的图形描述和状态图

有关边沿触发功能块的规则定义如下:

● 输入变量xExecute定义这种功能块特征。

● 在输入变量xExecute上升沿被检测时刻(这是起动条件),开始这一特定边沿触发功能块的执行操作。

● 除了xExecute和xAbort的所有输入都在该边沿触发时刻被采样,这两个输入都是就地存储的。这表示这些输入以后的变化不会影响在其运行期间所定义的操作执行。

● 在输入变量xExecute的状态为TRUE,并已在输出变量xBusy表现出来后,它可以设置为FALSE。

● 检测到输入变量xExecute的下降沿,不会使所定义的操作执行失效。所定义的操作执行正常运行到其准备状态、中止状态或出错状态。

● 只有检测到输入变量xAbort的状态为TRUE(最终表达),所定义的操作执行才取消(中止条件)。

● 如果输入变量xAbort存在,同时输入变量xExecute具有同样的值TRUE,立即进入中止状态。

● 在同一时刻所有的输出变量xDone、xBusy、xError或xAborted(如果有的话)中,只能有一个输出为TRUE。

● 在设置输出变量xBusy为FALSE后,如果检测到中止状态,输出变量xAborted置为TRUE。

● 在xBusy处于下降沿,而输入变量xExecute被采样,且其取反值被存贮,作为功能块内部的请求复位。

● 对于一次调用的最小值,尽管输入变量xExecute已经被设置为FALSE,输出变量的状态将是有效的。在此情况(复位请求)下,功能块的内部状态自动再初始化。在另外一种情况(xExecute仍为TRUE)时,在功能块再初始化(标准握手)之前,功能块等待输入变量xExecute的下降沿。

● 仅在xDone的状态为TRUE期间,其他输出变量xBusy、xError、xAborted的状态或eErrorID的值仍有效。

● 有一个主动的复位请求,且输出变量xDone、xError或xAborted中有任一个其状态为TRUE之后,输入变量再次设置为TRUE,功能块将再次启动其定义的操作执行(快速握手)。

在图3-9中其状态图的状态有:休眠、执行中、执行完、中止中、中止、出错和复位中。各个状态的转移及转移条件在图3-9的状态图中都有详细标出。

3.电平控制功能块

如图3-10所示给出了电平控制功能块LCon的图形描述和状态图。

图3-10 电平控制功能块LCon的图形描述和状态图

以下定义有关电平控制功能块的规则:

● 输入变量xEnable定义这种功能块的特征。

● 检测输入变量xEnable的状态为TRUE(起动条件),起动了由此特定电平功能块所定义的操作执行。在输入变量xEnable为TRUE期间,所定义的操作执行运行到其准备状态,或发生出错状态。检测到输入变量xEnable为FALSE被解释为一次中止(中止条件),这意味着功能块的内部状态和所有的输出将被重新初始化,做好新的起动准备(标准的握手信号)。

● 输入变量将不会在就地存储,因而会影响所定义操作执行的工作流。

● 输出变量xDone、xBusy或xError中,在同一时间仅有一个输出状态可为TRUE。

● 只要输出变量xBusy或xDone为TRUE,所有输出变量的状态均有效。

● 在xBusy的下降沿,输入变量xEnable被采样,同时其取反值被存储作为复位请求。

● 对于一次调用的最小量,即使输入变量xEnable已经设置为FALSE,输出变量的状态也将有效。在此情形下(复位请求为TRUE)功能块的内部状态自动再初始化。在出现一次出错条件后所定义的操作被中止期间,这尤其会发生;

● 仅在xDone的状态为TRUE期间,除xDone以外的输出xBusy、xError或eErrorID均有效;

● 在一次有效的复位请求和输出变量xDone或xError其中有一个状态为TRUE,输入变量xEnable可被再次设置为TRUE,且功能块会再次起动其所定义的操作(快速握手)。

在图3-10中其状态图的状态有:休眠、执行中、执行完、中止中、出错以及复位中。各个状态的转移及转移条件在图3-10中都有详细标出。

4.边沿触发功能块和电平控制功能块的共同特性和时间约束

(1)共性。这些功能块有以下共同特性:

● 若功能块的一次调用检测到一次起动条件,输出变量xBusy立即设置为TRUE。

● 只要功能块所定义的操作仍在运行,输出变量xBusy便有TRUE值。

● 若到达执行完状态,输出变量xDone设置为TRUE,同时输出变量xBusy设置为FALSE。

● 若出错条件成立,输出变量xError设置为TRUE,输出变量xBusy设置为FALSE。另外输出变量eErrorID设置为出错代码,而不是ERROR或NO_ERROR。这里eErrorID定义为一个枚举数据类型ENUM,虽然用户也可定义它为整数INT、字WORD、双字DWORD或其他数据类型。

若所定义的操作可以在一次调用中全部处理,则准备条件或出错条件立即成立,且输出变量xBusy的TRUE状态不再显示出来。

● 在xDone的上升沿所有输出变量的状态将被冻结。

● 只要输出变量xDone、xBusy或xError中的任一个为TRUE,而所定义的功能块操作还未完成,有必要进行进一步的调用。

(2)时间约束。这些功能块的时间约束是如下。

● udiTimeLimit(单位[μs],0表示无操作时间限制):例如,一个功能块在一个回路中完成一个复杂任务,任务越大,在当前调用中消耗的时间就越多。参数udiTimeLimit定义为在各自功能块中每次调用所允许的消耗时间。有udiTimeLimit输入变量的功能块以下述方式实现:当任务完成(准备条件)时,当前的调用结束;或者当此次调用所消耗的时间已经超过udiTimeLimit所设置的值。

● udiTimeOut(单位[μs],0表示无操作时间限制):例如,在处理所定义的操作时,可将一个功能块强制等待一个外部事件,这可以在一个内部回路(Busy等待),或者在每次调用时检查任务是否完全完成。参数udiTimeOut定义为允许所定义的操作消耗多少时间。有输入变量udiTimeOut的功能块以下述方式实现:当时间间隔已经超出udiTimeOut所规定的时间,则当前的调用结束,并输出出错条件(xError⇒TRUE,且eErrorID⇒ERROR.TIME_OUT)。