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的设计并不是一个简单的逻辑, 如果用有限状态机,维护起来会非常麻烦, ...
随机推荐
- 新一波makefile
# CROSS_COMPILE = arm-linux-CC = $(CROSS_COMPILE)gccINC=-I../ -I.LIB=-lpthread -lcryptoCC_FLAG= -std ...
- venus java高并发框架
http://www.iteye.com/topic/1118484 因为有 netty.mima等远程框架.包括spring jboss等remoting框架 和阿里的dubbo相比, 没有亮点.. ...
- 【iCore3 双核心板】例程十九:USBD_MSC实验——虚拟U盘
实验指导书及代码包下载: http://pan.baidu.com/s/1i4eNbQd iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- php对二维数组进行相关操作(排序、转换、去空白等)
php对二维数组进行相关操作(排序.转换.去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04 这篇文章主要介绍了php对二维数组进行相关操作,包括php对 ...
- c#组元(Tuple)的使用
组元(Tuple)是C# 4.0引入的一个新特性,可以在.NET Framework 4.0或更高版本中使用.组元使用泛型来简化类的定义,多用于方法的返回值.在函数需要返回多个类型的时候,就不必使用o ...
- windows7系统下一些常用工具的总结
1.查看计算机的基本信息:计算机--右键--属性(快捷键:Win+Pause) 2.查看计算机的详细信息:开始菜单--所有程序--附件--系统工具--系统信息(运行命令:msinfo32) 3.定制计 ...
- HIVE 时间操作函数
转自http://www.oratea.net/?p=944 日期函数UNIX时间戳转日期函数: from_unixtime语法: from_unixtime(bigint unixtime[, ...
- Java学习-047-数值格式化及小数位数四舍五入
此小工具类主要用于数值四舍五入.数值格式化输出,很简单,若想深入研究,敬请自行查阅 BigDecimal 或 DecimalFormat 的 API,BigDecimal.setScale(位数,四舍 ...
- java求素数和求一个数的一个正整数的质因数
1.题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少对? (1)程序分析:不难发现兔子的规律是:1,1 ...
- 《奥威Power-BI智能分析报告制作方法 》精彩回顾
上次课我们简单介绍了奥威Power-BI的智能分析报告,并展示了报告与图表相结合的应用场景.图文分析报表的意义不只在于美观,更重要的是固定框架下的灵活性和追根究底的动态分析,有着很强的实用性.上节课 ...