一、前言
状态图描述的是一种状态到另一种状态的转换。UML(统一建模语言)中将其归为行为图,广泛应用于嵌入式系统的建模中。目前在NI LabVIEW和MATLAB/Simulink都将这种建模图直接集成到其开发环境中,实现“建模=编程”的思想,在相关应用开发中使用状态图模块,可大大提升开发效率。
二、LabVIEW中状态图介绍
David Harel为了克服以前经典状态机(State Machine)描述方法的缺点,在状态机中增加了层次结构、并发和通信等概念,设计了状态图。采用LabVIEW状态图模块提供的功能,可有效地开发出复杂的应用程序,并且LabVIEW状态图可部署至桌面系统(PC)、实时系统(RT)、FPGA等对象上应用。
LabVIEW状态图中相关元素和概念术语与UML规范一致,由域、状态、伪状态、转换、连接器组成。
1.域(Region)
域是指包含状态的区域。顶层状态图是一个包含了所有状态的域。另外,还可以在某个状态中创建域:即利用层次式设计的方法,在某个状态的内部创建其他状态。下图中描述了这种层次式设计功能:在一个状态的内部,通过域创建了一个子状态。每个域中都必须包含一个开始伪状态。
图12.状态(State)
状态是指状态图所能存在的某个阶段。状态必须位于域中,并且至少拥有一个进入的转换。
3.状态进入动作(Entry Action)和退出动作(Exit Action)
每个状态都有一个相关的进入和退出动作。进入动作是指进入某个状态时所执行的LabVIEW 代码。退出动作是指离开某个状态时(在转换到下一个状态之前)所执行的LabVIEW 代码。每个状态都只能有一个进入和退出动作,而且这两个都是可选的。每次进入或退出某个状态时,都会执行进入与退出动作。可以通过双击需要编辑的状态边缘打开Configure State 对话框来查看和修改状态的进入与退出代码,如下图所示。
图2
4.状态的静态动作(Static)
不同于LabVIEW状态图中状态的进入和退出动作,静态动作需要自行添加,添加方法如下图所示,双击需要编辑的状态边缘,打开Configure State 对话框,点击左下角“Create”按键。静态动作是指状态没有执行任何进入或退出转换时所执行的动作。一个状态可以有多个静态动作,状态图的每次执行时都会执行这些静态动作。每个静态动作都由三个部分组成 – 触发器、监护条件和动作。状