Labview与状态机/状态图的概念

来源:互联网 发布:餐厅排队叫号软件 编辑:程序博客网 时间:2024/06/05 06:50

1.什么是状态机?

首先介绍顺序模式。顺序模式是我们最先接触的也是最基本的一种编程模式,程序按照固定的顺序依次执行,如下图。


但是在很多情况下,顺序模式是静态的,无法满足我们编程的要求;则需要更有效的动态结构来实时改变程序的执行顺序。


此时,就需要引入状态机的概念。

状态机是对系统的一种描述,该兄包含了有限的状态,并且在各个状态之间可通过一定的条件进行转换。一般可用状态图来对一个状态机进行精确地描述。


从图中可以清楚看到可乐机的运行过程,图中只管地表现了可乐机投入不同金额硬币时的情况及几个处理步骤的各个状态和它们之间的转换关系,根据投入硬币的

不同面值,对总金额进行计算,最后完成一次购买。对于这样的系统,使用顺序结构是难以实现的。

2.Labview中的状态机

状态机的动态结构使得其在通讯系统,数字协议处理系统,控制系统,用户界面等领域得到广泛应用。

如何在Labview中来实现一个状态机呢?


在Labview中,任何一个状态机都是由三个基本部分构成:

(1)首先外层是一个while循环,用于维持状态机的运行;

(2)同时在while循环中包含一个条件结构,条件结构用于对各个不同的状态进行判断;

(3)第三个基本部分是移位寄存器,用以将下一个状态机传递到下一次循环状态判断中。

另外,在一个完整的状态机中,我们一般还会提供初始状态,每一个状态的执行步骤以及下一个状态切换代码等。

3.枚举常量

除了前面提到的三个基本部分外,状态机的构建还有一个技巧,就是使用枚举型常量来作为状态机变量,相对于其它数据类型来说,枚举型常量表示了

两组成对的数据,一组是字符串,一组是数值。

4.状态机中的状态转换

在实际的工程状态机中,会遇到一个状态向多个状态转换的情况。一般来说,实现状态变量的选择有四个基本的方法。

(1)默认转换;无论这个状态执行的情况怎么样,都会无条件地转换到指定的下一个状态中。

(2)选择转换;利用真假选择函数来实现,在逻辑子VI输出为真时,跳入真分支的状态,进行state1,为假时,跳入假分支的状态,进行state2。

当下一个状态有可能是三个或三个以上的状态时:

(3)条件结构转换;条件结构的多个分支分别对应了不同的下一个状态值,根据逻辑判断子vi输出的结果,跳入不同的分支以选择不同的状态,当子vi输出1时,跳入state1;


(4)转换数组转换;条件结构虽然解决了多个状态选择的问题,但是从结构上来看不太直观,管理不够方便,因此可以把所有选择的状态放在数组中,通过逻辑子vi输出不同的索引值直接从数组中索引出下一个状态输出到移位寄存器。


5.状态机的维护

由于引入了枚举常量这一有效的状态变量,在后期对状态机的维护中我们会非常轻松,只需要对已经存在的自定义枚举常量进行相应的修改,添加,删除等操作,就能方便地完成状态机中所有状态变量的更新,再对程序框图做必要的修改,就能高效并准确地完成状态机的维护。

*********************************************************************************************************************************

6.Labview状态图