LabVIEW程序设计模式(五)—生产者消费者模式(5)-生产者消费者模式扩展_第1页
LabVIEW程序设计模式(五)—生产者消费者模式(5)-生产者消费者模式扩展_第2页
LabVIEW程序设计模式(五)—生产者消费者模式(5)-生产者消费者模式扩展_第3页
LabVIEW程序设计模式(五)—生产者消费者模式(5)-生产者消费者模式扩展_第4页
LabVIEW程序设计模式(五)—生产者消费者模式(5)-生产者消费者模式扩展_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上LabVIEW程序设计模式(五)生产者/消费者模式(5)_生产者/消费者模式扩展结合状态机模式、事件结构和动态调用技术,能够归纳出针对较复杂应用程序的通用设计模式。对常见的测试测量程序而言,主要由数据采集、数据分析、外围菜单项响应、报表生成、数据显示这五个部分组成。其中数据采集是相对独立和长时间运行的一个模块,可以与其它的模块同时运行。因此,在大多数持续采集的程序设计中需要将它单独作为一个模块运行。与此同时,子程序也需要一条数据通道发送一些反馈命令给主程序。于是可以构成如图 44所示的一个通讯回路。图 44 通讯回路LabVIEW提供了多种主程序与子程序之间的通讯方式

2、,如队列、Reference、事件等。为了介绍这些方式的具体使用方法,将结合最常用的数据采集实例进行阐述。【】本例以“计算机组件测试”为应用介绍消费者和生产者循环的具体使用方法和数据交互过程。例子并不是为了说明计算机组件测试的过程和方法,而是重在强调对该应用而言应该采用什么样的程序设计模式。因此,例子中使用了多种数据交互方式,这些交互方式的选择并不是唯一的,可以根据实际情况选择合适的数据交互方法。假设计算机的整个测试过程由CPU、RAM、CDROM、Power.等等数项子测试项组成,程序需要充分考虑可扩展性要求,使得后期增加新的待测组件时对主程序的影响不大或者没有影响。测试过程应能够实现暂停和

3、提前停止的功能,并且测试过程不受其它界面操作的影响。根据以上的测试要求,可以把整个测试程序分为两个部分:控制部分和执行部分。其中前者是用户主界面,用来响应用户界面事件以及控制测试流程的执行;后者是执行程序,用来根据控制命令运行测试流程并且产生测试结果。系统的结构如图 45所示。图 45 “计算机组件测试系统”结构从上图可以看出,该应用与消费者和生产者模式是相符的,不同的是还涉及到消费者(执行部分)向生产者(控制部分)的数据传输。本例使用的是队列型的生产者和消费者模式,而反向的数据传输使用了“用户自定义事件”和“Reference”方法。当然,也可以使用队列等其它的方式。程序的主界面如图 46所

4、示,包括菜单栏,测试控制按钮和测试项列表3大部分。背面板如图 47所示,生产者部分采用状态机和事件结构相结合的设计模式,共包含5大类的状态。图 46 PC Test前面板图 47 PC Test背面板在PInitialize状态中,主要实现前面板控件的初始化以及调用待测组件,如图 48所示。为了满足测试系统的可扩展性要求,将目前的测试组件统一集中放置到TestItems目录中。如果后续需要增加测试组件项,只需要编写相应的测试组件代码并且放置到TestItems目录中即可。图 48 PInitialize状态在DInitialize、Run、Pause和Stop状态中都使用到了PCTest_Ex

5、ecute_Controller.vi程序,该VI用来启动和控制消费者循环,如图 49所示。图中使用了新建队列函数,并且将该队列和主程序有关控件的Reference通过VI Server方法传递给了消费者循环。图 49 PCTest_Execute_Controller.vi消费者循环采用典型的状态机模式,如图 50所示。使用TestItems字符串记录需要执行的vi的名字(与测试组件相对应),TestIndex表示当前运行的测试项的Index值,该值可以用于记录当前的运行状态以暂停程序的运行。图 50 消费者循环消费者共有3种运行状态:运行(Run)、暂停(Pause)和停止(Stop),在

6、每一种状态下主程序前面板控件的显示均会有所不同,因此消费者会根据不同的运行状态修改生产者程序前面板上控件的属性(通过Reference)。图 51所示为Run状态的执行代码,程序首先选择当前的测试组件并且调用相应的测试代码;然后将TestIndex加1,不断地调用Run状态直至收到其它的控制指令(如Stop或Pause)或者测试项执行完毕。图 51 消费者Run状态整个程序的退出与其它的设计模式略有不同,其退出流程如图 52所示。关键在于确保消费者循环能够顺利退出,然后再退出生产者循环。因为消费者的Reference均是来源于生产者,一旦生产者先于消费者退出,则会导致消费者循环报错。这里重点强调退出的顺序主要是为了避免程序报错和系统资源没有释放。图 52 退出流程在实际

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论