LabVIEW程序设计模式(二)—基本状态机模式

LabVIEW程序设计模式(二)—基本状态机模式

ID:40299218

大小:166.00 KB

页数:5页

时间:2019-07-30

LabVIEW程序设计模式(二)—基本状态机模式_第1页
LabVIEW程序设计模式(二)—基本状态机模式_第2页
LabVIEW程序设计模式(二)—基本状态机模式_第3页
LabVIEW程序设计模式(二)—基本状态机模式_第4页
LabVIEW程序设计模式(二)—基本状态机模式_第5页
资源描述:

《LabVIEW程序设计模式(二)—基本状态机模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、LabVIEW程序设计模式(二)—基本状态机模式LabVIEW程序设计2009-04-2709:25:15阅读744评论2  字号:大中小 订阅状态机是一种最为经典的程序设计模式,在LabVIEW7.1(含)之前它几乎统治了大部分的LabVIEW主程序。最基本的状态机结构如图1所示。状态是状态机运行的经脉,在开始使用状态机模式撰写程序时需要将应用分为若干个状态。下面以图中的应用为例说明基本状态机的使用。【应用1】前面板具有3个按钮(Control)和1个波形显示控件Chart(Indicator),功能分别是:1)     

2、  开始采集:Label是start,单击后开始进行模拟数据采集程序(这里使用随机数代替)。2)       关于:Label是dialog,单击后弹出对话框以说明这个程序的版权、帮助等信息。3)       停止:Label是stop,单击后停止程序的运行。4)       Chart:用于显示获取的随机数。这是一个非常简单的应用,但是具有一定的代表性。根据要求,该应用至少包含以下5种状态结构。1)       Initial:初始化状态;2)       Idle:空闲状态,用于响应各种用户界面操作;3)       a

3、cquire:采集状态,用于持续模拟采集数据;4)       about:用于弹出关于和帮助对话框;5)       stop:停止状态,退出循环并中止程序。(a)   背面板(b)   前面板图1基本的状态机结构背面板仔细分析图中的基本状态机,可以看出状态始终贯穿整个应用程序,并由移位寄存器进行值的寄存和传递。当前状态分支的结果将决定下一个状态,如图中的Idle状态。在这个状态中,程序将自动检测前面板的三个按钮是否被按下。如果start被按下,则进入acquire状态;如果dialog被按下,则进入about状态;如果s

4、top被按下,则进入stop状态;否则如果没有任何按钮被按下,则仍然进入当前的Idle状态继续检测。在acquire状态中,为了保证程序的重复采集使得下一个状态仍然为acquire,但是这样会导致程序无法停止(中断采集)。于是需要在acquire状态分支中加入stop的探测,如果stop被按下,则不再进入acquire状态而直接进入stop状态。从应用1可以看出,基本状态机模式大体上能够满足主程序结构的需要。该模式能够很好地使得应用程序的各个功能以状态的方式有顺序地执行,并且保证了程序的可读性(以状态图的方式显示清晰明了)和

5、扩展性(日后只需要扩展状态即可扩展相应的功能)。事例中使用的是“string”型结构来标记状态,事实上也可以使用其它的数据类型替换,如ring、numeric或enum。从严格意义而言,ring并不属于一种数据类型,它只是一种特殊的numeric性,其性质与numeric基本上一样。尽管ring与enum控件从外观上看是一样的,如图2所示,但是它们实质上是不同的。主要体现为以下7点。图2Enum型和Ring型控件(1)    enum型代表的值只能够为U8、U16和U32型,而ring型代表的值允许为I8、I16、I32、I

6、64、U8、U16、U32、U64、EXT、SGL、DBL和FXP型;(2)    ring型实质上是一种numeric型,而enum型是一种独立于numeric之外的数据类型;(3)    当把ring或enum型控件分别连接到case时,对ring型而言,case结构的选择端子只能够显示数值;而对enum型而言,case结构的选择端子能够显示具体的枚举值;(4)    ring的strings[]属性可以在程序运行时被修改,而enum的strings[]属性在程序运行时却无法被修改;(5)    当把ring型和enum

7、型控件分别制作成自定义类型控件(TypeDef.)时,ring的控件实例可以任意设置其strings[]属性的值,而enum的控件实例却无法设置strings[]属性的值,如图3所示;(6)    当把ring型和enum型控件分别制作成自定义类型控件(TypeDef.)时,改变ring的TypeDef中控件的strings[]属性的值,但是其对应的实例的strings[]属性却不会改变;而改变enum的TypeDef中控件的strings[]属性的值,其对应的实例的strings[]属性会随之发生变化。(7)    rin

8、g型控件对应的各个状态可以表示任何值(在控件的property>>EditItems对话框中),而enum控件对应的各个状态只能够从0开始顺序表示(在控件的property>>EditItems对话框中)。由于应用程序的各个状态在设计时就是相对固定的,不会在应用程序中进行修改。对比以上ri

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。