结合状态机模式、事件结构和动态调用技术,能够归纳出针对较复杂应用程序的通用设计模式。对常见的测试测量程序而言,主要由数据采集、数据分析、外围菜单项响应、报表生成、数据显示这五个部分组成。其中数据采集是相对独立和长时间运行的一个模块,可以与其它的模块同时运行。因此,在大多数持续采集的程序设计中需要将它单独作为一个模块运行。与此同时,子程序也需要一条数据通道发送一些反馈命令给主程序。于是可以构成如图 44所示的一个通讯回路。
图 44 通讯回路
LabVIEW提供了多种主程序与子程序之间的通讯方式,如队列、Reference、事件等。为了介绍这些方式的具体使用方法,将结合最常用的数据采集实例进行阐述。
【应用7】
图 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方法传递给了消费者循环。[page]
图 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 退出流程
关键字:LabVIEW 程序设计模式
引用地址:LabVIEW程序设计模式(五)—生产者/消费者模式(5)
图 44 通讯回路
LabVIEW提供了多种主程序与子程序之间的通讯方式,如队列、Reference、事件等。为了介绍这些方式的具体使用方法,将结合最常用的数据采集实例进行阐述。
【应用7】
本例以“计算机组件测试”为应用介绍消费者和生产者循环的具体使用方法和数据交互过程。例子并不是为了说明计算机组件测试的过程和方法,而是重在强调对该应用而言应该采用什么样的程序设计模式。因此,例子中使用了多种数据交互方式,这些交互方式的选择并不是唯一的,可以根据实际情况选择合适的数据交互方法。
假设计算机的整个测试过程由CPU、RAM、CDROM、Power….等等数项子测试项组成,程序需要充分考虑可扩展性要求,使得后期增加新的待测组件时对主程序的影响不大或者没有影响。测试过程应能够实现暂停和提前停止的功能,并且测试过程不受其它界面操作的影响。
根据以上的测试要求,可以把整个测试程序分为两个部分:控制部分和执行部分。其中前者是用户主界面,用来响应用户界面事件以及控制测试流程的执行;后者是执行程序,用来根据控制命令运行测试流程并且产生测试结果。系统的结构如图 45所示。
假设计算机的整个测试过程由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方法传递给了消费者循环。[page]
图 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 退出流程
在实际应用过程中,可能会遇到更加复杂的情况,如出现多个子程序。那么主程序与各个子程序之间如何通讯呢?各个子程序之间又是如何通讯呢?事实上,只要掌握了队列的用法,这些问题就迎刃而解了。
上一篇:LabVIEW程序设计模式(六)—总结
下一篇:LabVIEW程序设计模式(五)—生产者/消费者模式(4)
推荐阅读最新更新时间:2024-03-30 23:02
基于LabVIEW机器视觉的微小位移动态测量
前言 测量物体的微小位移在许多方面如数控机床的精确加工等,有广泛的应用。目前测量物体的微小位移已经发展了多种方法:激光位移传感器测量法、电容位移传感器测量法等。本文实现了一种基于LabVIEW机器视觉软件平台和读数显微镜以及USB摄像头测量微小位移的系统。该系统成本低,操作方便,并实现了计算机的实时动态测量。由美国NI公司推出的LabVIEW是目前最流行、应用最广、发展最快和功能最强的图形化数据软件 。NI公司推出的机器视觉平台是专门的图像处理软件平台。本测量系统采用LabVIEW和机器视觉软件平台编程控制USB摄像头采集读数显微镜的物体图像移动,通过计算机判断物体图像的像素移动来计算物体移动的微小位移。整个实验过程中,图像采集和
[测试测量]
LabVIEW在暖通空调数据采集控制系统中的应用
引言 LabVIEW 大量应用在自动控制领域,对于HVAC系统中采用LabVIEW作为上位端软件还不多见,但随着LabVIEW 7 Express的发布,LabVIEW已经开始逐渐渗透到各个领域。在笔者所在专业HVAC自动控制领域使用LabVIEW后发现,其功能十分强大,节省系统开发时间,非常适合工程开发人员使用。笔者结合近来开发的一套HVAC系统,对LabVIEW在HVAC数据采集控制系统的应用做个介绍。 1 系统总体结构 HVAC中有大量数据需要采集,通过对数据的采集,来对各项系统参数进行调整。本系统主要由水系统、风系统、控制系统组成。 ● 水系统包括:水冷式冷水机组,冷却塔,膨胀水箱,冷冻水泵,冷
[测试测量]
Labview基本常见问题解答
1、Labview如何实现由一个事件引发其他三个事件的顺序发生,且这三次事件间的时间间隔为50ms?回答:可以引用状态机来设计程序,将触发事件作为状态机的状态控制参数,后面发生的三个事件依次作为状态机的三个顺序状态,设置状态切换时间间隔为500ms. 2、labview在主程序通过局部变量不能实时看子vi的参数回答:通过局部变量只能得到子vi运行完之后的结果。可以用control reference 方式,在子vi加一个属性节点引出一个reference。主程序里把需要显示的控件创建一个reference连到子vi的reference输入端口。另外也可以用vi server方式实现。 3、如何在一个graph或chart显示多
[测试测量]
基于MCS51的低成本LabVIEW实验教学系统
在此利用廉价的MCS51 单片机设计 了包含常用传感器、数据采集模块与USB通信接口的LabVIEW 实验教学系统。该系统使用USB接口与上位机通信并提供电源,而上位机编程直接调用VISA驱动USB接口,大大降低了数据采集程序设计的难度。该系统可以满足大学虚拟仪器实验教学的需要,性价比高,具有良好的推广前景。 0 引言 NI 公司于20 世纪70 年代提出了虚拟仪器的概念。虚拟仪器是在以计算机为核心的平台上,由用户设计,具有虚拟面板,由软件实现测试功能的计算机仪器系统,是计算机与测试仪器相结合的产物。虚拟仪器最常用的编程语言为LabVIEW,是NI公司的基于图形化编程语言的虚拟仪器 开发工具 ,利用它可以轻松组建一个测
[单片机]
基于LabVIEW的便携式汽车仪表检测仪的研制----硬件系统和软件
3.2硬件系统的作用 汽车仪表检测系统的硬件系统主要包括工控机、PXI板卡、信号接线盒、数据通信转换板卡、CAN卡、可编程网络电阻、供电电源以及被检测仪表等主要部分。在此硬件平台基础上,通过频率脉冲信号发生板卡产生不同频率的各种汽车仪表所需要的脉冲信号,给车速表和里程表,因为这两个表的指针偏转或显示数字变化的大小是根据不同幅值不同频率的脉冲信号变化而变化的,在根据相应的频率对应着相应的车速和里程,当我们测试时就可以按照标准的频率对应着车速和里程来判断仪表的准确度如何。 整个测试系统硬件功能框图如图3-13所示。 在硬件系统中我们利用LabVIEW产生一待测仪表可以接受的在量程范围内的信号给待测仪表,同时我们用同一信号给
[测试测量]
在LabVIEW中实现基于C/S结构的远程数据采集
LabVIEW具有强大的远程数据采集能力,实现方法主要有主要4种:方法一, 软件操作界面共享方式, 利用RemotePanels技术实现远程数据采集;方法二, DAQ 设备共享方式,采用RDA 技术实现DAQ 设备的远程控制;方法三,数据发布方式,利用TCP技术实现远程数据采集 ;方法四,数据共享方式,利用DataSocket技术实现远程数据采集[。无论采用哪种方式,系统都由通过网络连接的客户机(Client)和服务器( Server)构成,其中DAQ设备安装在服务器上,客户机通过网络控制服务器上的DAQ设备完成数据采集。系统组成如图1所示。 利用Remote Panels技术实现远程数据采集 从LabV IE
[测试测量]
基于虚拟仪器的模糊控制恒压供水系统
0 引 言 城市供水,历来是一个城市发展过程中的一大问题,目前城市能源的短缺已经越来越限制了城市整体的发展,传统的泵组供水系统不但使水压高低不稳,而且还浪费大量的能源,使工厂的用电量急剧上升,节能环保已经成为了这个时代的主题。为了达到能源利用最大化,工程师们针对供水系统设计出了各种各样的控制方法,但大都需要大量的设备投入和复杂编程,而且无法实现控制方式的自优化。本文在传统的控制方法基础上,应用虚拟仪器模糊控制技术来实现 恒压供水 ,该方法编程设计简单,操作界面美观大方,控制可靠,即保证了供水压力的稳定性,节约了能源,同时也为将来城市供水网络化管理提供了接口。 1虚拟仪器控制简介 1.1虚拟仪器 所谓虚拟仪
[工业控制]
- 热门资源推荐
- 热门放大器推荐