
3.2.4 运动控制功能块的状态图及其实现示例
运动控制功能块分为边沿触发功能块和电平控制功能块两类。每类功能块还可添加操作时间限制的参数,这里介绍基本功能的两类功能块的状态图。
1.边沿触发功能块
边沿触发功能块是带有Execute输入信号的功能块。
为描述边沿触发功能块的状态,只描述公用参数组成的功能块如图3-14所示,取功能块名ETrig。
为统一起见,各变量前加字母x和e,用于区别实际的运动控制功能块参数。

图3-14 基本边沿触发功能块
基本边沿触发功能块的状态有休眠(Dormant)、执行(Executing)、出错(Error)、完成(Done)和复位(Resetting)等,如图3-15所示。

图3-15 边沿触发功能块的状态图
(1)数据类型
以下编写状态STATE枚举数据类型,用于描述该功能块的状态。

以下编写出错的枚举数据类型,用于描述出错的信息。

(2)程序
用结构化文本编程语言列出其变量声明。


(3)状态
各有关状态可用下述方法编写。例如,休眠状态的处理HandleDormantState编写如下:

其他状态的处理方法编写如下(其内容应是该状态下所执行的动作命令):


图3-16显示了各状态和输入输出信号的关系。
对边沿触发功能块,在输入信号xExecute的上升沿触发该功能块,其内部状态从休眠(Dormant)转换到忙(Busy,即图3-15中的执行Executing),所有输入被采样并存储。功能块输出xBusy被置位,表示功能块定义的操作将开始。

图3-16 边沿触发功能块的基本状态图
在定义的操作期间,设置一些条件可使操作退出忙(Busy)状态,这表示xBusy输出被复位到FALSE。例如,没有发生出错,则操作被执行,直到任务完成,这时,进入Done状态。例如,操作期间发生出错,则从Busy状态转换到Error状态。上述的转换是排它性的,即输出xDone和xError只能有一个被置位。
● Ready Condition:如果操作达到其准备条件,而且没有出错发生和操作时间没有超过规定等,则输出xDone置位(TRUE),即Busy状态转换到Done状态。
● Error Condition:如果操作过程中检测到一个出错,则输出xError被置位(TRUE),即Busy状态转换到Error状态。此外,被定义的出错代码(本地枚举数据类型ERROR的一个输出值)被送达输出变量eErrorID。
至少在一个周期内输出变量xDone或xError之一的值是稳定的TRUE值。
当检测到输入信号xExecute为FALSE时,表示该功能块失活,因此,其内部状态转换到Reset状态。所有输出都将被复位,所有被占用的资源都释放。
重新初始化后,该功能块的状态从Reset转换到Dormant。
在基本状态的基础上,可添加其他状态,例如中止状态。也可增加输入和输出参数,例如,增加操作超时间的输入参数等。图3-17是增加中止状态的基本边沿触发功能块的SFC图。
在xExecute上升沿,除了xExecute外的所有输入被采样并就地存储。这样,这些输入变量的改变不能影响它正在运行时所定义的操作。
在输出变量xBusy状态变为TRUE时,输入变量xExecute可以设置到FALSE。
输入变量xExecute检测到下降沿不会中断已经定义的操作。被定义的操作正常地运行到它的准备条件、中止条件或出错条件。
在xBusy输出变量的下降沿,输入变量xExecute被采样,其反相值被作为复位请求存储在功能块內。即使xExecute输入变量的状态已经被设置到FALSE,输出变量的状态至少在一个调用周期是有效的。这种情况下(复位请求),功能块的内部状态会自动重新初始化。在其他情况(xExecute仍在TRUE)时,在重新初始化功能块前(即标准握手),功能块将等待输入变量xExecute的下一个下降沿。
只有当xDone的状态为TRUE时,xDone、xBusy、xError、xAborted或eErrorID以外的其他输出变量的状态才有效。有时,当xDone未置位在TRUE时,有必要设置带有效状态的附加输出变量,这种情况下,这些变量的特定行为需用文件明确说明。有时,需要设置附加的输出变量,它仅在结合其他输出变量的状态时有效。这种情况下,这些变量的特定行为和变量之间的关系也需用文件明确说明。

图3-17 带中止功能的边沿触发功能块的SFC图
当Reset request激活,且输出变量xDone、xError中有一个的状态已经为TRUE后,输入变量xExecute可再次被设置为TRUE,并且,功能块将重新起动它的已经定义的操作(快速握手)。
2.电平控制功能块
电平控制功能块是带有Enable输入信号的功能块。这类功能块都有输入信号Enable。即它是在Enable高电平时激活该功能块的动作。
图3-18是PLCopen运动控制规范第一部分第2版规定的MC_WriteParameter功能块图像描述,它带Enable输入,是电平控制功能块。为研究其状态,将它们的公用参数用阴影列出。

图3-18 电平控制功能块的公用参数
整体而言,有两个不同层面的PLCopen规范的公用规定:
● 基本层面。用Enable/Done(或Activate/Ready)和Busy,Error和ErrorID。虽然,ErrorID可以是一个整数、一个字或一个双字(供应商规定)。
● 扩展层面。用添加的Active和CommandAborted。
与边沿触发功能块的状态类似,电平控制功能块的状态有休眠(Dormant)、执行(Executing)、出错(Error)、完成(Done)和复位(Resetting)等。如图3-10所示。
对于电平控制功能块,如果输入信号xEnable被检测到TRUE,即高电平,则该功能块起动其所定义的操作。功能块的内部状态转换到Executing。它将运行其准备条件(Ready Condition)或出错条件(Error Condition)。与边沿触发功能块不同的是电平控制功能块的输入变量不被存储,因此,它将影响所定义操作的当前工作流。
有时,需要一个从未达到它的准备条件的行为模型。例如,MC_Power运动控制功能块。它也是电平控制功能块,但它没有输出变量xDone和没有完成的状态。
与边沿触发功能块类似,可在基本型的电平控制功能块上添加中止功能,也可添加操作超时功能等。
图3-19是添加中止和带时间限功能的电平控制功能块的SFC图。

图3-19 用SFC实现LConTl状态图的示例