LabVIEW程序设计模式(二)—基本状态机模式
【应用1】
前面板具有3个按钮(Control)和1个波形显示控件Chart(Indicator),功能分别是:- 开始采集:Label是start,单击后开始进行模拟数据采集程序(这里使用随机数代替)。
- 关于:Label是dialog,单击后弹出对话框以说明这个程序的版权、帮助等信息。
- 停止:Label是stop,单击后停止程序的运行。
- Chart:用于显示获取的随机数。
- Initial:初始化状态;
- Idle:空闲状态,用于响应各种用户界面操作;
- acquire:采集状态,用于持续模拟采集数据;
- about:用于弹出关于和帮助对话框;
- stop:停止状态,退出循环并中止程序。

- 背面板

- 前面板
仔细分析图中的基本状态机,可以看出状态始终贯穿整个应用程序,并由移位寄存器进行值的寄存和传递。当前状态分支的结果将决定下一个状态,如图中的Idle状态。在这个状态中,程序将自动检测前面板的三个按钮是否被按下。如果start被按下,则进入acquire状态;如果dialog被按下,则进入about状态;如果stop被按下,则进入stop状态;否则如果没有任何按钮被按下,则仍然进入当前的Idle状态继续检测。
在acquire状态中,为了保证程序的重复采集使得下一个状态仍然为acquire,但是这样会导致程序无法停止(中断采集)。于是需要在acquire状态分支中加入stop的探测,如果stop被按下,则不再进入acquire状态而直接进入stop状态。
从应用1可以看出,基本状态机模式大体上能够满足主程序结构的需要。该模式能够很好地使得应用程序的各个功能以状态的方式有顺序地执行,并且保证了程序的可读性(以状态图的方式显示清晰明了)和扩展性(日后只需要扩展状态即可扩展相应的功能)。事例中使用的是“string”型结构来标记状态,事实上也可以使用其它的数据类型替换,如ring、numeric或enum。从严格意义而言,ring并不属于一种数据类型,它只是一种特殊的numeric性,其性质与numeric基本上一样。尽管ring与enum控件从外观上看是一样的,如图 2所示,但是它们实质上是不同的。主要体现为以下7点。
评论