有限状态机FSM的设计与实现

来源:互联网 发布:scarsong知乎 编辑:程序博客网 时间:2024/05/19 12:28

1


       很多实时系统,特别是实时控制系统,其整个分析机制与系统的状态有相当大的关系。有限状态机由有限的状态和相互之间的转移构成,在任何时候只能处于给定数目的状态中的 一个。当接收到一个输人事件时,状态机产生一个输出,同时也可能伴随着状态的转移。主要有两种方法来建立有限状态机,一种是“状态转移图”,另一种是“状态转移表” ,分别用图形方式或表格方式建立有限状态机。实时系统经常会应用于较大型的系统中,这时采用图形或表格方式对理解复杂的系统具有很大的帮助。下面介绍模块的有限状态机的实现。


2

一 状态变迁图

    在事件驱动机制的程序中,对象的行为往往是根据对象当前的状态和所收到的事件,一起结合起来,决定要做出的反应执行动作,最后状态变为另一新状态。下面用一张二维表格就能够很好的描述这一过程。


         变迁后的状态

状态


事件1


事件2

状态1

状态11

状态12

状态2

状态21

状态22

   

    其实这就是表格驱动机制,假设对象当前的状态 为1,在收到事件1后,,通过查找状 态表,获得事件处理完状态变迁后状态。变迁过程是由两部分组成。

1)状态1 –>事件1

2)事件1–>状态11

过程表示旧状态在获得事件后的出口过程,此时执行一系列的出口动作,过程表示获得 事件后进人新状态的人口过程,此时执行一系列的人口动作


3

二 状态事件动作规则的描述


我们定义了类TStateDef描述状态的属性,TEventDef描述事件属性,TStateRule描述状态变迁规则,在收到xx事件后,状态为xx。TStateActive描述了动作类型,动作编码,参数等属性,详细见下。

程序图.png


4

三 有 限 状态机 的 程 序 实 现


下图是有限状态机在程序中的两个主要数据链,事件链中定义了系统用到的所有事件,每一个事件用一个节点存放。状态链中定义了系统用到的所有状态,每一个状态用一个节点描述,状态节点中除了有状态属性字段之外,还有两个重要数据链。


image.png


(1)状态变迁规则链,规则节点中定义了该状态在某一事件中变迁后到一新的状态。


  (2)动作链,动作节点主要分两种类型、 入口动作和出口动作,人口动作指状态变迁到一新状态后,执行新状态的人口动作,出口动作指原状态变迁到一新状态中,执行原状态的 出口动作。

5

      四 流程状态机的解释执行


解释执行图.png


     五 应用对象的状态机的具体执行

具体执行图.png

       有限状态机提供了描述和控制应用逻辑的非常强大的方法。他们可 应用于通信协议、图形界面控制和其他很多应用中。FSM也是个不错 的工具。很多复杂的逻辑可以在一张小图表中表述。他们很强大也很好用使因为他们的规则简单、 可读性和可验证性。同时,他还可自动生成代码。



原创粉丝点击