您的位置 首页 技术

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

上两节分别解决了基本状态机的第(1~5)个问题,但是是否具备一种模式能够综合队列型状态机模式和用户界面事件型模式的优点呢?这样可以同

上两节别离处理了根本状况机的第(1~5)个问题,可是是否具有一种形式能够归纳行列型状况机形式和用户界面事情型形式的长处呢?这样能够一起避免根本状况机的第(1~5)个问题。答案是必定的,本节将介绍如何将状况机与事情结构结合起来构成一种新的、安稳的形式。
状况机形式的根本构成元素是while循环和case结构,而事情结构形式的根本构成元素是while循环和event结构,因而新的形式应该由while循环、case结构和event结构组成。而while循环的意图是为了确保程序的继续运转,因而必须在最外层,这样就只剩下了图 20所示的两种组合方法。
在第一种方法中,每次循环的运转需求通过一个事情结构才能够完成case中各个分支的运转,那么究竟需求多少个分支呢?一般来说不同的事情都会有不同的事情处理函数(这些函数能够在case结构中共用),显现这是无法满足要求的,它从本质上而言仍然是一种事情结构。
在第二种方法中,程序的主体是一个状况机结构,不同的是在某一个状况分子中有一个事情结构。咱们能够回想状况机形式中的“闲暇Idle”状况,这正是长期占用CPU资源的源头,假如在Idle中参加一个事情结构后就有效地规避了这个问题。


图 20 三种结构的组合方法
因而图 20中的第二种结构归纳了状况机和事情结构的长处,有效地克服了根本状况机的第(1~5)个问题。此外,在【运用2_主动贩卖机】例程中,按钮1USD、2USD和5USD的作用是相同的,仅有不同的是它们的代表的币值不同。假如咱们期望体系共用“币值相加”这个功用,即当这三个按钮任何一个被按下后都调用同一个函数(该函数的功用是将体系中本来的货币值与新参加的币值相加得到新的值)。这样,需求有一种途径把1USD、2USD和5USD代表的币值作为参数传递给函数。
图 21所示为带参数的状况机结构,在音讯行列的状况机形式中,参加了一个变体型的变量作为状况传递的参数。实际上,能够把赤色的部分做成子vi,不只节省了背面板空间并且能够进行过错处理。程序中应该设置一个专门的过错处理状况,当任何一个状况运转后假如产生过错将直接转到过错处理状况。当然,也能够在图 21的基础上做一些改善和变形,假定参数的数据类型为string型,这样就把Data参数和State兼并起来,中心运用特殊符号(如@)离隔。


图 21 带参数的状况机结构
【运用4】

本节的例程将运用Multicolumn Listbox控件处理2维数组排序问题,前面板如图 22所示。该Listbox用于显现体系中的各种收集数据值,分为5列。程序的功用是当单击Listbox的列头时,对数据以该列的升序/降序进行排序。单击Stop按钮或×按钮则中止程序运转。


图 22 2D数组排序_前面板
体系运用状况机和事情结构相结合的形式,如图 23所示。程序分为8个状况,共有4类。各个状况的功用与音讯行列型的状况机形式相似,程序参加了过错处理部分。在背面板的循环中同享同一个“过错簇”结构的移位寄存器,当存在过错时程序将暂时中止运转其它的状况而优先进入过错状况(这里是Error分支)。


图 23 2D数组排序_背面板
在Idle状况中,事情结构能够避免CPU资源的长期占用,也能够呼应各种前面板事情,如图 24所示。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/212323.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部