LabVIEW有限状态机
顺序模式是我们最先接触,也是最基本的一种编程模式, 程序按照固定的顺序依次执行,结束(如图1)
但在很多情况下,静态的顺序模式并不能满足我们编程的要求,我们需要更有效地动态结构来实时改变程序的执行顺序 (如图2),在这种情况下,状态机的引入就成了必然的结果。

- LabVIEW中的状态机
如下图所示,在LabVIEW中,任何一个状态机都是由三个基本部分构成的,首先外层是一个while循环,同时在while循环中包含有一个条件结构, while循环用于维持状态机的运行,条件结构用以对各个不同的状态迚行判断,第三个基本部分是移位寄存器,用以将下一个状态传递到下一次循环状态判断中。另外在一个完整的状态机中,我们一般还会提供初始状态,每一个状态的执行步骤以及下一个状态切换代码等等。

除了前面提到的三个基本部分以外,状态机的构建还有一个技巧,就是使用枚举型常量来作为状态变量,相对于其它数据类型来说, 枚举常量表示了两组成对的数据,一组是字符串,一组是数值,两者一一对应,在前面板上,能直观地看到字符串。

为什么要使用枚举型数据来作为状态变量呢,因为枚举型数据和条件结构配合使用时相当方便。第一,在条件结构的条件判断框中,我们看到的将不是单纯的数值,而是我们定义好的字符串,这样直观的表现形式给不同状态的管理带来了方便,另外,我们在条件结构上通过右键单击,选择为每个值添加分支,就能够自动地将条件结构根据枚举数据迚行展开,从而保证每个状态的完整性。
下面是一个简单的例子,在前面板上添加指示灯显示现在所处状态。从初始状态Start开始每个1秒按顺序切换到下一状态,到达最终状态End时结束循环:


- 状态机中的状态转换
上面的那个例子太简单,在实际的工程状态机中, 很多时候会遇到一个状态可能往多个状态转换的情况,在这个时候,我们能够使用LabVIEW提供的附加的逻辑功能来实现下一个状态的判断。如下图所示的例子,在状态框图中有一个子VI,利用该子VI(根据程序实际的需要自行编写 )来对选择哪一个分支为下一状态进行判断。条件结构的多个分支分别对应了不同的下一状态值,根据逻辑判断子 VI 输出的结果,跳入不同的分支以选择不同的状态。
条件结构虽然解决了多个状态选择的问题,但从结构上来看不太直观,管理不够方便,我们可以把所有待选择的状态放入数组中,通过逻辑判断子 VI 输出不同的索引值直接从数组中索引出下一个状态输出到移位寄存器。

LabVIEW有限状态机的更多相关文章
- AKKA 笔记 - 有限状态机 -2
AKKA 笔记 - 有限状态机 -2 原文地址: http://rerun.me/2016/05/22/akka-notes-finite-state-machines-2/ 在上一节的Akka FS ...
- [翻译]AKKA笔记 - 有限状态机 -1
原文地址:http://rerun.me/2016/05/21/akka-notes-finite-state-machines-1/ 我最近有个机会在工作上使用了Akka FSM,是个非常有趣的例子 ...
- 基于Unity有限状态机框架
这个框架是Unity wiki上的框架.网址:http://wiki.unity3d.com/index.php/Finite_State_Machine 这就相当于是“模板”吧,自己写的代码,写啥都 ...
- LabVIEW 吸星大法 - 看见的好东西都是我的(下篇)
前言 写了多年的LabVIEW程序,你是否面临这样的问题 总是在做一些重复的工作,感觉很没有意思: 总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感: 总在天加班,没有时间去提高自己; ...
- LabVIEW 吸星大法 - 看见的好东西都是我的(中篇)
前言 写了多年的LabVIEW程序,你是否面临这样的问题 总是在做一些重复的工作,感觉很没有意思: 总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感: 总在天加班,没有时间去提高自己; ...
- LabVIEW 吸星大法 - 看见的好东西都是我的(上篇)
前言 写了多年的LabVIEW程序,你是否面临这样的问题 总是在做一些重复的工作,感觉很没有意思: 总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感: 总在天加班,没有时间去提高自己; ...
- 有哪些LabVIEW快捷键让你相见恨晚
前言 任何一门工具,当你使用它到极致的时候,往往都朝着这样子的两个方向发展 1. 具有鼠标操作功能的软件,他的使用的极致就是脱离鼠标,迈向键盘 2. 主要是键盘操作的,他的极致就是脚本自动化,或者说一 ...
- 【LabVIEW技巧】路径依赖解除方法
前言 LabVIEW程序开发,让我们的程序设计变的简单容易,但是设计过程中也不乏大量的重复性工作,其中最让人头痛的莫过于依赖冲突问题. 事实上,只要你对文件进行了修改或者移动,必不可少的依赖冲突就会产 ...
- 有限状态机(FSM)
在游戏开发中,AI是个永恒不变的话题,如果你要的AI只是很简单的一个逻辑 那么有限状态机是一个很好的解决方案,尽管在实际开发中,AI的设计并不是一个简单的逻辑, 如果用有限状态机,维护起来会非常麻烦, ...
随机推荐
- response实现文件下载
package cn.itcast.response; import java.io.FileInputStream; import java.io.IOException; import java. ...
- JSTL标签使用说明
使用jstl需进行以下操作 a.下载jstl. b.解压jar文件将jstl.jar和standard.jar文件放到项目lib文件夹. c.在需要使用jstl地方引用标签库,比如在jsp页面引用以下 ...
- iOS中集成ijkplayer视频直播框架
ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...
- myEclipse 界面窗口打不开问题
用的myEclipse版本为2014,在其他工作空间没有此问题,在此工作有此问题. 解决办法: 把当前工作空间视图重置即可
- 【转】Linux下怎样检查、如何查看某软件包是否已经安装?
因为linux安装软件的方式比较多,所以没有一个通用的办法能查到某些软件是否安装了.总结起来就是这样几类: 1.rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm -qa ...
- HTML 中按钮作为form表单元素提交特性两则 --- 参HTML考标准分析
相同name的submit 类型的input提交行为 描述 这种情况, <input type="submit" name="ACTION" value= ...
- Matlab中图片保存的5种方法
matlab的绘图和可视化能力是不用多说的,可以说在业内是家喻户晓的. Matlab提供了丰富的绘图函数,比如ez**系类的简易绘图函数,surf.mesh系类的数值绘图函数等几十个.另外其他专业工具 ...
- sdutoj 2610 Boring Counting
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2610 Boring Counting Time ...
- 面试:浅谈tcp/udp
tcp是一种面向连接的.可靠的.基于字节流的传输层通信协议.是专门为了在不可靠的互联网络上提供一个可靠的端到端字节流而设计的,面向字节流. udp(用户数据报协议)是iso参考模型中一种无连接的传输层 ...
- 列间距column-gap
column-gap主要用来设置列与列之间的间距,其语法规则如下: column-gap: normal || <length> 取值说明 属性值 属性值说明 normal 默认值,默值为 ...