测试测量
返回首页

LabVIEW程序设计模式(五)—生产者/消费者模式(5)

2015-08-05 来源:vihome

结合状态机模式、事件结构和动态调用技术,能够归纳出针对较复杂应用程序的通用设计模式。对常见的测试测量程序而言,主要由数据采集、数据分析、外围菜单项响应、报表生成、数据显示这五个部分组成。其中数据采集是相对独立和长时间运行的一个模块,可以与其它的模块同时运行。因此,在大多数持续采集的程序设计中需要将它单独作为一个模块运行。与此同时,子程序也需要一条数据通道发送一些反馈命令给主程序。于是可以构成如图 44所示的一个通讯回路。

LabVIEW程序设计模式(五)—生产者/消费者模式(5)_生产者/消费者模式扩展 - statemice - Change
应用7】
本例以“计算机组件测试”为应用介绍消费者和生产者循环的具体使用方法和数据交互过程。例子并不是为了说明计算机组件测试的过程和方法,而是重在强调对该应用而言应该采用什么样的程序设计模式。因此,例子中使用了多种数据交互方式,这些交互方式的选择并不是唯一的,可以根据实际情况选择合适的数据交互方法。
假设计算机的整个测试过程由CPU、RAM、CDROM、Power….等等数项子测试项组成,程序需要充分考虑可扩展性要求,使得后期增加新的待测组件时对主程序的影响不大或者没有影响。测试过程应能够实现暂停和提前停止的功能,并且测试过程不受其它界面操作的影响。
根据以上的测试要求,可以把整个测试程序分为两个部分:控制部分和执行部分。其中前者是用户主界面,用来响应用户界面事件以及控制测试流程的执行;后者是执行程序,用来根据控制命令运行测试流程并且产生测试结果。系统的结构如图 45所示。

LabVIEW程序设计模式(五)—生产者/消费者模式(5)_生产者/消费者模式扩展 - statemice - Change
45 “计算机组件测试系统”结构
从上图可以看出,该应用与消费者和生产者模式是相符的,不同的是还涉及到消费者(执行部分)向生产者(控制部分)的数据传输。本例使用的是队列型的生产者和消费者模式,而反向的数据传输使用了“用户自定义事件”和“Reference”方法。当然,也可以使用队列等其它的方式。
程序的主界面如图 46所示,包括菜单栏,测试控制按钮和测试项列表3大部分。背面板如图 47所示,生产者部分采用状态机和事件结构相结合的设计模式,共包含5大类的状态。

LabVIEW程序设计模式(五)—生产者/消费者模式(5)_生产者/消费者模式扩展 - statemice - Change
46 PC Test前面板
LabVIEW程序设计模式(五)—生产者/消费者模式(5)_生产者/消费者模式扩展 - statemice - Change
47 PC Test背面板
在PInitialize状态中,主要实现前面板控件的初始化以及调用待测组件,如图 48所示。为了满足测试系统的可扩展性要求,将目前的测试组件统一集中放置到TestItems目录中。如果后续需要增加测试组件项,只需要编写相应的测试组件代码并且放置到TestItems目录中即可。

LabVIEW程序设计模式(五)—生产者/消费者模式(5)_生产者/消费者模式扩展 - statemice - Change
48 PInitialize状态
在DInitialize、Run、Pause和Stop状态中都使用到了PCTest_Execute_Controller.vi程序,该VI用来启动和控制消费者循环,如图 49所示。图中使用了新建队列函数,并且将该队列和主程序有关控件的Reference通过VI Server方法传递给了消费者循环。

LabVIEW程序设计模式(五)—生产者/消费者模式(5)_生产者/消费者模式扩展 - statemice - Change
49 PCTest_Execute_Controller.vi
消费者循环采用典型的状态机模式,如图 50所示。使用TestItems字符串记录需要执行的vi的名字(与测试组件相对应),TestIndex表示当前运行的测试项的Index值,该值可以用于记录当前的运行状态以暂停程序的运行。

LabVIEW程序设计模式(五)—生产者/消费者模式(5)_生产者/消费者模式扩展 - statemice - Change
50 消费者循环
消费者共有3种运行状态:运行(Run)、暂停(Pause)和停止(Stop),在每一种状态下主程序前面板控件的显示均会有所不同,因此消费者会根据不同的运行状态修改生产者程序前面板上控件的属性(通过Reference)。图 51所示为Run状态的执行代码,程序首先选择当前的测试组件并且调用相应的测试代码;然后将TestIndex加1,不断地调用Run状态直至收到其它的控制指令(如Stop或Pause)或者测试项执行完毕。

LabVIEW程序设计模式(五)—生产者/消费者模式(5)_生产者/消费者模式扩展 - statemice - Change
51 消费者Run状态
整个程序的退出与其它的设计模式略有不同,其退出流程如图 52所示。关键在于确保消费者循环能够顺利退出,然后再退出生产者循环。因为消费者的Reference均是来源于生产者,一旦生产者先于消费者退出,则会导致消费者循环报错。这里重点强调退出的顺序主要是为了避免程序报错和系统资源没有释放。

LabVIEW程序设计模式(五)—生产者/消费者模式(5)_生产者/消费者模式扩展 - statemice - Change
52 退出流程
在实际应用过程中,可能会遇到更加复杂的情况,如出现多个子程序。那么主程序与各个子程序之间如何通讯呢?各个子程序之间又是如何通讯呢?事实上,只要掌握了队列的用法,这些问题就迎刃而解了。
进入测试测量查看更多内容>>
相关视频
  • LABVIEW数据采集随书视频

  • 微机电系统技术

  • 周公系列讲座——示波器讲解

  • 了解传感器融合和追踪

  • 电子设计竞赛中测控类题目应用对策

  • 电子测量与智能仪器(浙江大学)

精选电路图
  • CCD图像传感器在微光电视系统中的应用

  • 光控音效发生器电路

  • 如何利用ESP8266制作一个简单的四轴飞行器

  • 离子检测器电路分析

  • 如何使用LED驱动器LM3915制作振动计

  • 一种构建12V和230V双直流电源的简单方法

    相关电子头条文章