编程入门笔记:状态机模式在工控机中的体现

2021.11.06
——
参考文献
[1] 李霞,王永章,梁宏斌,等.有限状态机在开放式数控系统中的应用[J].计算机集成制造系统,2005(3):428-432.
[2] 余孟尝. 数字电子技术基础简明教程[M]. 第三版. 北京:高等教育出版社, 2006.
[3] 王永华. 现场总线技术及应用教程[M]. 第2版. 北京:机械工业出版社, 2012.
[4] 三菱电机. FX3S·FX3G·FX3GC·FX3U·FX3UC系列微型可编程控制器 编程手册[基本·应用指令说明书][EB/OL]. 2016[2021-11-6]. cn.mitsubishielectric.com.

1状态机概念简述

状态机,又称自动机,通常指有限状态机(FSM,Finite State Machine),按其输出特性可分为Moore状态机和Mealy状态机:

  1. Moore状态机:输出只和状态有关而与输入无关
  2. Mealy状态机:输出不仅和状态有关,而且和输入有关系

FSM由一定数目的状态和相互之间的转移构成,在任何时候只能处于给定数目状态中的一个。它以一种事件驱动的方式工作,当接收到一个事件时,状态机产生一个输出,同时也可能伴随着状态的转移。

FSM构成四要素:

  1. 状态是对象的生命周期中满足某种条件、执行某些动作或等待某些事件发生的一个阶段,能持续一段时间。状态应集中描述主干,详细细节放在动作中完成。
  2. 转移是从一个状态节点(源状态)到另一个状态节点(目标状态)的移动,发生状态转移时,对象会相应地执行某些动作。
  3. 事件用于触发状态转移。
  4. 动作是对象在状态发生转移时(而非某一状态下)所作的一系列处理操作。

2 UML状态图

FSM使用状态图(Statechart Diagram) 来表示,该状态图可以使用UML(Unified Modeling Language,统一建模语言) 进行描述。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。UML状态图是Harel状态图面向对象的表示方式,Harel状态图是对传统状态图的扩展,扩展的内容包 括层次 、并发和通信。

在UML状态图中,状态由环绕着状态文本的圆角矩形表示,用一条有向线表示状态的转移,线上的文字代表的是状态的转移条件。
编程入门笔记:状态机模式在工控机中的体现_第1张图片

状态图还包含开始状态和结束状态。
●开始状态:由一个实心圆圈表示。有且只有一个开始状态。
●终止状态:由一个牛眼符号表示。终止状态是可选的,对象可以有多个终止状态。
在这里插入图片描述在这里插入图片描述
状态转换的完整语法格式为:
事件(参数列表)[警戒条件]/动作^目标.发送事件(参数)

一个状态允许嵌套,子状态被嵌套地放入父状态的框图里,并继承其父状态的所有转换。
编程入门笔记:状态机模式在工控机中的体现_第2张图片
上述状态采用了省略表示,若动作较多,则可采用状态的完整表示。
编程入门笔记:状态机模式在工控机中的体现_第3张图片
图中activities活动由一系列动作组成。
状态的入口动作用“entry/动作”表示,出口动作用“exit/动作”表示。

3状态机编程

Switch状态机
此处用C语言表示了状态机的一个状态。

cur_state=nex_state;
switch(cur_state)
{
    case s0://s0状态
    {
           if(event0)
           {
                    //如果发生event0,则执行相关操作,执行完后,不需要切换状态
                    nex_state=s0;//切换状态为自身,可省略该行
            }
           else if(event1)
           {
                 //如果发生event1,则执行相关操作,执行完成后,切换状态
                     nex_state=s1;//切换状态
             }
           else if(event2)
          {
              //如果发生event2,则执行相关操作,执行完成之后,切换状态
                  nex_state=s2;
           }
                  break;
     }

4顺序功能图SFC简述

顺序功能图( Sequential Function Chart,SFC)是专用于工业控制领域的状态机建模语言,隶属于标准工业控制编程语言IEC61131-3。SFC实质为一种图形表示方法,可以直接输入PLC来执行控制动作。

SFC的具体实现与状态转移图略有不同,这里指出差异和新增之处,一些不重要的概念将不会讲解。

  1. 状态类型
    在这里状态被细分为初始状态、工作状态和与状态对应的动作。
    初始状态:初始状态是功能图的运行起点,其图形符号为双线矩形图框,一个功能图至少要有一个初始状态;初始状态的意义在于同于执行流程的相互分离,以及防止双重启动。
    工作状态:控制系统正常运行时的状态;
    与状态对应的动作:这里要注意动作与状态对应,而非与转移对应;

  2. 功能图类型
    功能图类型被分为单流程、选择分支流程、并行分支流程、跳转和循环。
    1)单流程:每个状态仅连接一个转移,每个转移仅连接一个状态;
    2)选择分支流程:有三种选择分支流程表示方法,用于决定分支执行顺序:
    ●按从左到右的固定顺序来计算和判断转移条件;
    ●由用户定义转移执行的优先级,并将表示优先级的数字写在分支旁边;
    ●由用户定义相互排斥的转移条件,保证每次只有一个分支可以发生状态转移;
    编程入门笔记:状态机模式在工控机中的体现_第4张图片

3)并行分支流程:一个顺序状态控制流可以分为多个同时被激活的并行分支;当多个并行分支的结果相同时,则可以进行分支的合并。并行分支使用双水平线表示。
编程入门笔记:状态机模式在工控机中的体现_第5张图片

4)跳转和循环:可以通过设定状态转移条件来决定流程的跳转和循环。
直接转移到下方的状态以及转移到流程外的状态,称为跳转;
编程入门笔记:状态机模式在工控机中的体现_第6张图片编程入门笔记:状态机模式在工控机中的体现_第7张图片
转移到上方的状态称为循环;
编程入门笔记:状态机模式在工控机中的体现_第8张图片

5步进梯形图

一些低端PLC仅仅支持梯形图语言而不支持SFC,为了能够实现动作时序控制,为梯形图增加了新的语言元素,称之为步进梯形图。

在步进梯形图中,用步(STEP) 来表示状态,其规则同SFC一致,只是采用了便于编程的LD梯形图形式,因此支持同继电器梯形图的混合编程(使用RET指令作为分界)。在步进梯形图程序中,将状态S视作1个控制工序,在其中对输入条件和输出控制的顺序进行编程。由于工序推进时,前工序就转为不动作,所以可以按各工序的简单的顺序来控制机械。
编程入门笔记:状态机模式在工控机中的体现_第9张图片
以三菱FX3U的步进梯形图编程为例,一个状态的规范结构如下(可以作为状态机编程的标准参考):

S n = { S T L     S n    启动状态 S n a c t i o n    与状态对应的动作 c o n d i t i o n   →   S E T S n + 1    状态转移条件,条件满足时执行 S n + 1 , S n 自动复位 R E T    结束状态 S n S^n=\begin{cases} STL~~~S^n~~~启动状态S^n\\ action~~~与状态对应的动作\\ condition~\rightarrow~SET S^{n+1}~~~状态转移条件,条件满足时执行S^{n+1},S^n自动复位\\ RET~~~结束状态S^n \end{cases} Sn= STL   Sn   启动状态Snaction   与状态对应的动作condition  SETSn+1   状态转移条件,条件满足时执行Sn+1Sn自动复位RET   结束状态Sn

注意STL、SET和RET属于专用指令,而action和condition则指代相应程序段,相关含义已在结构中注释。

此外初始状态的启动编程方法为:

M 8002     S E T     S o M8002~~~SET~~~S^o M8002   SET   So

M8002为初始化脉冲,仅在上电的一个周期ON。

状态执行的时序图见下:
编程入门笔记:状态机模式在工控机中的体现_第10张图片
分为ON执行 → \rightarrow OFF执行 → \rightarrow 不执行,共3个阶段。

  1. ON执行:执行与状态对应的动作
  2. OFF执行:满足转移条件时,次态 S n + 1 S^{n+1} Sn+1 ON,此时现态 S n S^n Sn仍未断开,即在此时有两个状态同时为ON
  3. 不执行:OFF执行后的下一个运算周期,不再执行 S n S^n Sn的相应状态

当进入下一状态时,上一状态的驱动输出除被设定为强制输出的软元件外全部自动复位,因此在步进梯形图中,支持多线圈输出和定时器的重复调用,但由于状态执行时序的关系,不允许出现在相连程序步。

6基于模型的设计

基于模型的设计(Model Based Design, MBD)是一种形式化的软件开发方法。用户可以使用状态机建模软件如stateflow创建状态机模型,然后利用代码生成工具如Simulink PLC Coder自动生成符合 IEC61131-3 编程标准的 ST 语言代码。
MBD的优势在于,用户可将精力集中在算法开发、逻辑控制的研究与模型的建立上,而无需进行人为的编程实现;用户无需关心生成的代码结果,执行出错时,只需要重新修正模型即可,只要模型正确,则执行结果必定正确。
然而很可惜,在PLC领域这项技术还没有在国内普及,相关论文数量也不多,只能长个见识罢了。
编程入门笔记:状态机模式在工控机中的体现_第11张图片

你可能感兴趣的:(自动化产品应用,状态模式,PLC)