状态机

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

状态机
一、什么是状态机?
状态机是对系统的一种描述,该类系统包含了有限的状态,并且在各个状态之间可以通过一定的条件进行转换。

一般可以用状态图来对一个状态机迚行精确地描述。

我们最先接触的是顺序模式(程序按照固定的顺序依次执行),但是在很多情况下,静态的顺序模式并不能满足我们编程的需求,我们需要更有效的动态结构来实时改变程序的执行顺序。

二、如何在labview中实现一个状态机呢?
在Labview中,任何一个状态机都是由三个基本部分构成:
(1)首先外层是一个while循环,用于维持状态机的运行;
(2)同时在while循环中包含一个条件结构,条件结构用于对各个不同的状态进行判断;
(3)第三个基本部分是移位寄存器,用以将下一个状态机传递到下一次循环状态判断中。

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

下面用“跑马灯”和“事件状态机”的例子进行步骤说明。

1、“跑马灯”
(1)利用平铺式顺序结构
在编写状态机程序之前,我们可以将每个状态用平铺式顺序结构将其罗列出来,其步骤如下:
a)在程序框图中添加平铺式顺序结构:点击鼠标右键→“函数”→“结构”
→“平铺式顺序结构”
b)在“平铺式顺序结构”后面添加帧:在结构框上右击鼠标→“在后面添
加帧”
c)在前面板中添加“布尔”控件:右击鼠标→“布尔”→“圆形指示灯”
→右击鼠标→“布尔”→“开关按钮”
d)将“布尔”控件创建“局部变量”:右击“布尔”控件→“创建”→“局
部变量”
e)在“平铺式顺序结构”中添加状态(包括初始状态、灯1、灯2、灯3、
停止)
(2)开始状态机的编程
a)在程序框图中添加“while循环”:在程序框图中点击鼠标右键→“函数”
→“结构”→“while循环”
b)在while循环中添加“条件结构”:在程序框图中点击鼠标右键→“函
数”→“结构”→“条件结构”
c)在前面板中添加“枚举”控件:右击鼠标→“下拉列表与枚举”
右击“枚举”控件→“编辑项”→分别增加“初始化”、“灯1”、“灯2”、“灯3”、“停止”五项→确定
右击“枚举”控件→“高级”→“自定义”→“自定义类型”→保存
d)在程序框图中右击“枚举”控件→“转换为常量”
e)在while循环中添加“选择”函数:右击鼠标→“比较”→“选择”
“选择”函数的连线如下图所示
f)将枚举常量与while循环连接→右击连接处的“循环隧道”→“替换为
移位寄存器”
g)在“条件结构”后面添加分支:右击“选择器标签”→“后面添加分支”
(一共添加4个)
h)将“平铺式顺序结构”中的五个状态分别移至相应的条件结构分支中,
将“平铺式顺序结构”删除
右击“真常量”与“条件端子”连接处的“循环隧道”→勾选“未连线时使用默认”
i)将每个分支的“下一状态”存在“移位寄存器”中:
选中“枚举常量”→按住Ctrl键拖动“枚举常量”到相应的分支中→将其与“移位寄存器”连接→右击连接处的“循环隧道”→勾选“未连线时使用默认”
j)在每个“条件结构”分支中添加延时:
在程序框图中右击鼠标→“定时”→“等待”→右击“等待时间(毫秒)”
→“创建”→“常量”→输入一定的值(这里输入500ms)
最终程序如下:。

相关文档
最新文档