LabVIEW程序设计模式(四)—状态机和事件结构的结合

发布者:sdlg668最新更新时间:2015-08-04 来源: vihome关键字:LabVIEW  程序设计  状态机  事件结构 手机看文章 扫描二维码
随时随地手机看文章
上两节分别解决了基本状态机的第(1~5)个问题,但是是否具备一种模式能够综合队列型状态机模式和用户界面事件型模式的优点呢?这样可以同时避免基本状态机的第(1~5)个问题。答案是肯定的,本节将介绍如何将状态机与事件结构结合起来形成一种新的、稳定的模式。
状态机模式的基本构成元素是while循环和case结构,而事件结构模式的基本构成元素是while循环和event结构,因此新的模式应该由while循环、case结构和event结构组成。而while循环的目的是为了保证程序的持续运行,因此必须在最外层,这样就只剩下了图 20所示的两种组合方式。
在第一种方式中,每次循环的运行需要经过一个事件结构才能够实现case中各个分支的运行,那么到底需要多少个分支呢?一般而言不同的事件都会有不同的事件处理函数(这些函数可以在case结构中共用),显示这是无法满足要求的,它从本质上而言仍然是一种事件结构。
在第二种方式中,程序的主体是一个状态机结构,不同的是在某一个状态分子中有一个事件结构。我们可以回忆状态机模式中的“空闲Idle”状态,这正是长时间占用CPU资源的源头,如果在Idle中加入一个事件结构后就有效地规避了这个问题。

LabVIEW程序设计模式(四)—状态机和事件结构的结合 - statemice - Change
20 三种结构的组合方式
因此图 20中的第二种结构综合了状态机和事件结构的优点,有效地克服了基本状态机的第(1~5)个问题。此外,在【应用2_自动贩卖机】例程中,按钮1USD、2USD和5USD的作用是相同的,唯一不同的是它们的代表的币值不同。如果我们希望系统共用“币值相加”这个功能,即当这三个按钮任何一个被按下后都调用同一个函数(该函数的功能是将系统中原来的货币值与新加入的币值相加得到新的值)。这样,需要有一种途径把1USD、2USD和5USD代表的币值作为参数传递给函数。
图 21所示为带参数的状态机结构,在消息队列的状态机模式中,加入了一个变体型的变量作为状态传递的参数。实际上,可以把红色的部分做成子vi,不仅节省了背面板空间而且能够进行错误处理。程序中应该设置一个专门的错误处理状态,当任何一个状态运行后如果发生错误将直接转到错误处理状态。当然,也可以在图 21的基础上做一些改进和变形,假定参数的数据类型为string型,这样就把Data参数和State合并起来,中间使用特殊符号(如@)隔开。

LabVIEW程序设计模式(四)—状态机和事件结构的结合 - statemice - Change
21 带参数的状态机结构
应用4
本节的例程将使用Multicolumn Listbox控件处理2维数组排序问题,前面板如图 22所示。该Listbox用于显示系统中的各种采集数据值,分为5列。程序的功能是当单击Listbox的列头时,对数据以该列的升序/降序进行排序。单击Stop按钮或×按钮则停止程序运行。

LabVIEW程序设计模式(四)—状态机和事件结构的结合 - statemice - Change
22 2D数组排序_前面板
系统使用状态机和事件结构相结合的模式,如图 23所示。程序分为8个状态,共有4类。各个状态的功能与消息队列型的状态机模式类似,程序加入了错误处理部分。在背面板的循环中共享同一个“错误簇”结构的移位寄存器,当存在错误时程序将暂时停止运行其它的状态而优先进入错误状态(这里是Error分支)。

LabVIEW程序设计模式(四)—状态机和事件结构的结合 - statemice - Change
23 2D数组排序_背面板
在Idle状态中,事件结构可以防止CPU资源的长时间占用,也可以响应各种前面板事件,如图 24所示。[page]

LabVIEW程序设计模式(四)—状态机和事件结构的结合 - statemice - Change
24 状态机中的事件结构
本例中引入了4个变量以供不同的状态分支调用,如图 25所示。其中的意义如下所述。
  1. Index:当前排序的列号,表示Listbox以哪一列为依据进行排序。
  2. ASC:表示当前排序的方式,true表示升序,而false表示降序。
  3. Column Header:表示Listbox的列头数据。
  4. Data:表示Listbox的内容数据。

LabVIEW程序设计模式(四)—状态机和事件结构的结合 - statemice - Change
25 数据变量
在图 26中,事件结构处理的是Listbox的事件,此时只需要对内部的变量赋值即可,并且当该单击是有效单击时进入“DSort”状态进行排序操作。

LabVIEW程序设计模式(四)—状态机和事件结构的结合 - statemice - Change
26 排序事件
在图 27所示的DSort状态中,根据内部变量的值对Listbox赋值并更新列头的显示。

LabVIEW程序设计模式(四)—状态机和事件结构的结合 - statemice - Change
27 DSort状态
图 27调用了2D数组的排序函数,该函数的实现过程如图 28所示。LabVIEW并没有提供2D数组的排序方式,只提供了1D数组的排序函数。本例充分利用了LabVIEW提供的排序函数功能,当然并不是唯一的,也可以使用LabVIEW实现常用的排序算法。

LabVIEW程序设计模式(四)—状态机和事件结构的结合 - statemice - Change
28 2D数组排序
关键字:LabVIEW  程序设计  状态机  事件结构 引用地址:LabVIEW程序设计模式(四)—状态机和事件结构的结合

上一篇:LabVIEW 1.0 编程环境(图文)
下一篇:LabVIEW中读写UTF-8编码的文本文件

推荐阅读最新更新时间:2024-03-30 23:01

许多仪器控制总线对一个LabVIEW
在过去的20年中,出现了许多可以用来控制仪器的通信总线。在整个过程中,NI LabVIEW一直是连接并控制仪器的软件。随着新型仪器控制总线的出现,NI继续对LabVIEW进行创新,提供最好的仪器控制体验。使用LabVIEW,就可以完成以下任务: 使用仪器驱动程序网络(ni.com/ident)提供的可供下载的驱动程序,控制超过5000个仪器。 无需考虑通信总线,就可以使用NI-VISA建立仪器控制应用程序。 不必修改代码,即可在Windows、Macintosh以及Linux 操作系统上运行应用程序。 LXI 2012-6-21 10:58:42 上传 下载附件 (27.48 KB) LXI
[测试测量]
许多仪器控制总线对一个<font color='red'>LabVIEW</font>
STM32F103程序设计-7-引脚输入功能-按键(中断)
AFIO时钟的打开。外部中断、重映射、复用功能?当配置AFIO六个寄存器中的值时就需要打开AFIO时钟。 void EXTI0_Config(void) { /* Enable GPIOA clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* Configure PA.00 pin as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
[单片机]
STM32F103<font color='red'>程序设计</font>-7-引脚输入功能-按键(中断)
基于LabVIEW和CompactRIO设计飞虫机器人的研究
  挑战:   开发一个灵活的高带宽机器人设备,以便测量和仿真有翼昆虫的飞行方式。   解决方案:   利用NI的LabVIEW软件和CompactRIO硬件制造一个快速、模块化、易于使用的仿生机器人平台,它涉及各种工业协议和实时闭环激励信号生成。   苍蝇能够高速追逐,并精确地降落在盘子的边缘,这其中的机动性令人非常感兴趣。我们可以利用苍蝇作为模型系统研究神经信息处理、空气动力学和遗传学,此外,它们还可以快速、精确地使用它们的生物传感器、控制器和执行机构。人们对它们这样的能力很感兴趣但是难以进行研究。测量和激励装置必须具有高带宽、低延迟,并拥有灵活的界面。同时,易用性和模块化特性也是跨学科和合作研究的关键。   我们利用Comp
[测试测量]
NI发布大型Virtex-5 LabVIEW FPGA系统
国家仪器(National Instruments;NI)发布2款PXI接口的R系列I/O模块,将针对设计、控制与测试作业,提供进阶的处理效能。这些新模块将可透过现有硬件,并以NI LabVIEW FPGA Module进行图形化程序设计,以执行客制化的在线(Inline)数据分析与精确的I/O控制,适用于特定频率与触发的应用。 由于提升FPGA的容量,使用者可针对R系列模块尽可能提升嵌入式逻辑的总数,并建置如控制表达式、客制处理,与数字通讯协议的复杂功能。针对控制应用,工程师亦可增加同步化控制回路的数量,与其控制应用的复杂度。在动态测试应用中,工程师可透过FPGA扩充测试范围,并将实时响应讯号传送到在测装置(DUT
[嵌入式]
LabVIEW应用-Write Table To Excel use ActiveX
利用ActiveX将一个二维数组写入MS Excel 在LabVIEW中写table到MS Excel可以通过'编程' '文件I/O' '写入电子表格文件'工具直接写入或者借助LabVIEW Report Generation Toolkit工具,这里介绍一下利用ActiveX来实现在LabVIEW中将表格写入MS Excel. 创建Convert Cell子VI 创建一个子VI用于将数字转换为MS Excel中标示唯一单元格的字符串.(如要表示第1行27列在MS Excel中以AA1表示) 主程序部分 1. 前面板中放下'自动化引用句柄':
[测试测量]
基于Labview的锁相放大器的应用
锁相放大器是一种对交变信号进行相敏检波的放大器。它利用和被测信号有相同频率和相位关系的参考信号作为比较基准,只对被测信号本身和那些与参考信号同频(或者倍频)、同相的噪声分量有响应。因此,能大幅度抑制无用噪声,改善检测信噪比。 A)声音定位系统 如下图所示,测量仪是由三个位于等腰直角三角形的声音接受器组成,测量范围为以OA为Y轴,OB为X轴的直角坐标系的第一象限区域(三角形的右上方)。设S点为声源,由于声源到三个接收器的距离不同,其发出的声波到达三个接收器的时间不同,所测得的相位差也不同,据此计算出声源的位置。如果使声源S发出的声音为一已知固定频率,便可利用锁相放大器有效克服噪声,检测到三个信号,并较为精确地求出其两两之间的相位
[测试测量]
基于<font color='red'>Labview</font>的锁相放大器的应用
基于ARM体系的嵌入式系统BSP的程序设计
摘要:在介绍基于ARM体系的嵌入式系统启动流程的基础上,结合编程实例,详细、系统地叙述了BSP(板级支持包)程序的各个组成部分及其具体设计方案,并就实际程序设计中的几个难点问题做了说明。 关键词:ARM BSP 嵌入式系统 微处理器 ARM公司在32位RISC的CPU开发领域不断取得突破,其结构已经从V3发展到V6。 BSP(Board Support Package)板级支持包介于主板硬件和操作系统之间,其功能与PC机上的BIOS相类似,主要完成硬件初始化并切换到相应的操作系统。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说,尽管
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新测试测量文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved