LabVIEW程序设计模式—生产者消费者模式生产者消费者模式扩展.docVIP

LabVIEW程序设计模式—生产者消费者模式生产者消费者模式扩展.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LabVIEW程序设计模式—生产者消费者模式生产者消费者模式扩展

LabVIEW程序设计模式(五)—生产者/消费者模式(5)_生产者/消费者模式扩展 结合状态机模式、事件结构和动态调用技术,能够归纳出针对较复杂应用程序的通用设计模式。对常见的测试测量程序而言,主要由数据采集、数据分析、外围菜单项响应、报表生成、数据显示这五个部分组成。其中数据采集是相对独立和长时间运行的一个模块,可以与其它的模块同时运行。因此,在大多数持续采集的程序设计中需要将它单独作为一个模块运行。与此同时,子程序也需要一条数据通道发送一些反馈命令给主程序。于是可以构成如图 44所示的一个通讯回路。 图 44 通讯回路 LabVIEW提供了多种主程序与子程序之间的通讯方式,如队列、Reference、事件等。为了介绍这些方式的具体使用方法,将结合最常用的数据采集实例进行阐述。 【应用7】 本例以“计算机组件测试”为应用介绍消费者和生产者循环的具体使用方法和数据交互过程。例子并不是为了说明计算机组件测试的过程和方法,而是重在强调对该应用而言应该采用什么样的程序设计模式。因此,例子中使用了多种数据交互方式,这些交互方式的选择并不是唯一的,可以根据实际情况选择合适的数据交互方法。 假设计算机的整个测试过程由CPU、RAM、CDROM、Power….等等数项子测试项组成,程序需要充分考虑可扩展性要求,使得后期增加新的待测组件时对主程序的影响不大或者没有影响。测试过程应能够实现暂停和提前停止的功能,并且测试过程不受其它界面操作的影响。 根据以上的测试要求,可以把整个测试程序分为两个部分:控制部分和执行部分。其中前者是用户主界面,用来响应用户界面事件以及控制测试流程的执行;后者是执行程序,用来根据控制命令运行测试流程并且产生测试结果。系统的结构如图 45所示。 图 45 “计算机组件测试系统”结构 从上图可以看出,该应用与消费者和生产者模式是相符的,不同的是还涉及到消费者(执行部分)向生产者(控制部分)的数据传输。本例使用的是队列型的生产者和消费者模式,而反向的数据传输使用了“用户自定义事件”和“Reference”方法。当然,也可以使用队列等其它的方式。 程序的主界面如图 46所示,包括菜单栏,测试控制按钮和测试项列表3大部分。背面板如图 47所示,生产者部分采用状态机和事件结构相结合的设计模式,共包含5大类的状态。 图 46 PC Test前面板 图 47 PC Test背面板 在PInitialize状态中,主要实现前面板控件的初始化以及调用待测组件,如图 48所示。为了满足测试系统的可扩展性要求,将目前的测试组件统一集中放置到TestItems目录中。如果后续需要增加测试组件项,只需要编写相应的测试组件代码并且放置到TestItems目录中即可。 图 48 PInitialize状态 在DInitialize、Run、Pause和Stop状态中都使用到了PCTest_Execute_Controller.vi程序,该VI用来启动和控制消费者循环,如图 49所示。图中使用了新建队列函数,并且将该队列和主程序有关控件的Reference通过VI Server方法传递给了消费者循环。 图 49 PCTest_Execute_Controller.vi 消费者循环采用典型的状态机模式,如图 50所示。使用TestItems字符串记录需要执行的vi的名字(与测试组件相对应),TestIndex表示当前运行的测试项的Index值,该值可以用于记录当前的运行状态以暂停程序的运行。 图 50 消费者循环 消费者共有3种运行状态:运行(Run)、暂停(Pause)和停止(Stop),在每一种状态下主程序前面板控件的显示均会有所不同,因此消费者会根据不同的运行状态修改生产者程序前面板上控件的属性(通过Reference)。图 51所示为Run状态的执行代码,程序首先选择当前的测试组件并且调用相应的测试代码;然后将TestIndex加1,不断地调用Run状态直至收到其它的控制指令(如Stop或Pause)或者测试项执行完毕。 图 51 消费者Run状态 整个程序的退出与其它的设计模式略有不同,其退出流程如图 52所示。关键在于确保消费者循环能够顺利退出,然后再退出生产者循环。因为消费者的Reference均是来源于生产者,一旦生产者先于消费者退出,则会导致消费者循环报错。这里重点强调退出的顺序主要是为了避免程序报错和系统资源没有释放。 图 52 退出流程 在实际应用过程中,可能会遇到更加复杂的情况,如出现多个子程序。那么主程序与各个子程序之间如何通讯呢?各个子程序之间又是如何通讯呢?事实上,只要掌握了队列的用法,这些问题就迎刃而解了。

文档评论(0)

178****9325 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档