状态机不是LABVIEW独有的概念,早在LABVIEW诞生之前,就有了状态机(STATE MACHINE)的概念,只所以在LABVIEW编程中经常强调状态机是因为LABVIEW特有的图形编程方式特别适合于采用状态机模式编程,在PLC中 有流程图的编程方式,从本质上说,那是一种特殊的状态机。

STATE MACHINE包括三个基本要件,STATE、EVENT 、ACTION,状态、事件和动作

状态:是一个抽象的概念在一定条件下或者一定时间内保持不变,等待一个或几个事件的发生,命名状态时,往往可以用等待--来定义。

事件:是一个瞬时的概念,表示某件事情发生了,一旦有关的事件发生了,势必要采取某种动作。

动作:表示一旦事件发生,采取何种处理方式,处理的结果就是另一个稳定的状态。

状态(等待事件)---》事件发生----》采取动作----》另一个状态。

状态机的概念是非常简单的,越是简单的东西越不容易处理,原因是简单则限制少,则灵活,状态机设计的好坏完全取决于编程者的水平,这不仅仅指 LABVIEW编程的水平,更重要的是编程者的逻辑思维,一个好的状态机的设计,关键是如何定义状态,状态少了,则意味着每一个状态中要处理的事务多了, 状态多了,则整个状态机就变的复杂了。

以一个简单的红绿灯控制来说,简单地说有两个状态,红色状态和绿色状态,事件是绿灯时间到和红灯时间到,绿色时间到触发的动作是,绿色灯灭,红色灯量,红色时间到触发的动作是红色灭,绿灯量。

我过去的文章中多次提到ACTION ENGINE的概念,它与状态机的区别是,它仅仅定义了ACTION,而没有定义STATE和EVENT,因此,它的ACTION完全取决于编程者,而状 态机自己本身就可以根据内部或者外部条件的变化,自动采取相应的动作,转入其它的状态,实现控制自动化。

有多种形式的STATE MACHINE,我将在后续的文章中陆续介绍,先看一下红绿灯的实现过程,假如绿灯亮20秒,红灯亮10秒。

先定义三个基本状态:初始化(仅在第一次调用时发生),等待绿灯结束和等待红灯结束。
LABVIEW的严格枚举数据类型是LABVIEW状态机定义状态的最好工具,使用状态机时,必须要使用这种数据类型,好处是增加或者减少状态,程序可以自动更新。




Leave a Reply.