一种改进的基于LabVIEW 的DAQ 采集系统设计∗
2019-11-13张海波毕敬腾李廷军
张海波 毕敬腾 李廷军
(海军航空大学航空基础学院 烟台 264001)
1 引言
数据采集(DAQ)是使用计算机测量电压、电流、温度、压力或声音等电子、物理现象的过程。典型的DAQ 系统由传感器、DAQ 测量硬件和带有可编程软件的计算机组成。与传统的测量系统相比,基于PC 的DAQ 系统利用行业标准计算机的处理、生产、显示和连通能力,提供灵活且开发快速的测量解决方案[1~4]。当前基于NI LabVIEW 的DAQ 系统在科研教育领域得到了广泛的应用。使用Lab-VIEW 开发的数据采集系统,具有可视化编程,结构清晰,开发速度快,运行稳定,支持硬件广泛的特点[5~7]。
对于简单的数据采集工作利用LabVIEW 提供的DAQ 硬件示例即可满足要求。但是该示例仅给出基本的实现方式,并没有与状态机及事件处理等程序结构相结合,因而无法满足实际的开发需求。
在LabVIEW 自带示例项目中的数据采集结构有生产者消费者模型和状态机模型。但生产者消费者模型没有考虑DAQ 系统在不同状态间转换的问题。LabVIEW 现有状态机模型没有实现有效的采集过程控制和数据处理的分离,如果连续长时间采集大量数据容易造成用户界面的锁定和无响应。由于LabVIEW 图形化编程的特点,导致两种结构在遇到需要添加大量虚拟控件的时候,如果未合理的设计程序结构,随着程序规模的不断扩大,会造成扩展不方便,使得后续程序设计过程复杂繁琐,增加后续开发的难度[8~11]。
针对以上问题,本文设计一种结合了状态机、队列和事件驱动结构的DAQ 数据采集系统,并合理设计了多个结构之间的相对位置,实现后续程序的拓展。
2 总体架构设计
LabVIEW 程序天然是并行执行,因此多个循环之间是并行执行的。要实现控制程序的运行顺序,一种思路是采用平铺式顺序执行结构,但是该结构在小规模、简单的采集中较为合适,随着程序规模的扩大拖动改变程序框将会给程序的设计带来巨大的挑战。另一种思路则是采用数据流控制的方法,即通过VI 之间数据交换的先后顺序进行数据控制[12~13]。
本文提出的结构采用第二种思路。经过长期实践第二种思路可以有效避免随着程序规模的扩大造成的不断改变多个框图大小的问题。
总体上,程序可分为三个部分如图1所示。
图1 程序总体结构图
第一部分是整个程序运行环境设定部分,此处不涉及采集设备的初始化。这一部分的主要作用是设定软件运行时所需要的中间变量、控件初始状态、数据文件及数据库等外部程序环境。这一部分是整个采集系统的起点,因此在运行的时候应是第一个运行,且仅运行一次。
第二部分为数据采集状态控制结构。其作用是实现整个采集系统的数据采集的开始结束,并针对采集过程中的系统及控制消息进行处理。
第三部分为数据采集执行结构。其主要功能是完成数据的采集、写入及显示。
总体上三个部分是相互独立的。程序运行环境部分仅执行一次完成环境设定,与后面的两个结构之间的数据交换采用局部变量进行。数据采集状态控制结构和数据采集执行结构为循环结构。两个结构之间通过队列进行数据的交换。下面重点对数据采集控制结构和执行结构进行详细讨论。
3 分系统设计
3.1 状态机设计
根据采集系统的特点,本设计结构将整个小懒虫过程分为初始化、退出、事件处理、开始采集及结束采集。
初始化状态完成DAQ、串口等数据采集设备端口的初始化。如图2所示。
图2 初始化状态
退出是在所有采集结束之后完成,因而在退出之前应判断完成数据采集的DAQ 是否已正确关闭,所采集到的数据是否已正确写入磁盘数据文件中。
3.2 事件处理设计
在本文提出的数据采集程序结构中,将事件处理与状态机相结合。如图3所示。
图3 事件处理基本结构
图3 所示的四个事件中,其中超时是事件结构创建时系统默认的。开始采集事件对应状态机中的开始采集状态,停止采集对应状态机中的停止采集状态,退出对应状态机中的退出状态。此处的三个事件仅是响应界面UI 中开始采集、停止采集和退出三个按钮的消息,具体的处理过程通过状态的转变进入到相应的状态中进行处理。如果开发者有其他的事件在程序运行过程中进行响应,只需要在事件结构中添加相应事件即可。以上结构可方便的实现功能扩展,二不用更改程序结构。
3.3 DAQ设备初始化
原有的例程仅是提供演示,并不适合应用于实际的工程项目中。本文结合DAQ 设备采集基本结构进行改进,实现了采集程序结构给出的DAQ 设备数据采集控制与采集过程相分离的结构。
在DAQ 的初始化开始于DAQ 通道创建,在本文的程序结构将其放置于初始化状态中,如图4所示。
图4 DAQ初始化
创建成功则进行DAQ 采样时钟及配置记录相关子VI 的处理,为后续的采集数据准备好硬件。如果发生错误,则在主界面中的进行提示。如图5所示。
图5 主界面状态提示
以上工作完成之后如果无错误则进入事件处理状态等待下一步任务,当点击开始采集按钮之后,事件处理程序将当前的状态改变到开始采集状态,通过DAQmx 任务开始子VI 使程序开始采集。如图6所示。
此时采集的过程还未开始,DAQmx 开始任务VI 给出的信息通过队列方式发送给数据采集执行结构,如图7所示。
图6 采集开始状态
图7 队列信息交设计
通过LabVIEW 中队列的方式实现多个循环结构的数据交换和同步。
3.4 DAQ数据采集
DAQ设备实际的采集执行结构,如图8所示。
图8 数据采集执行结构
该循环结构只有当开始采集的队列消息到来之后才执行采集的循环过程。
采集过程的停止通过局部变量进行控制,控制结果传递停止采集的消息使得图8 中的停止采集变量为真,从而该循环停止,之后执行DAQ 停止任务VI 实现任务的停止。此时数据采集状态控制结构仍然执行,如果要继续进行采集,只需点击开始采集即可恢复采集过程。
由以上各分系统的设计可以得出,本文提出的DAQ 数据采集结构,实现了DAQ 设备设置初始化和采集的分离,同时结构布局针对LavVIEW 的特点进行了优化,可方便对循环结构进行拖拽扩展,有效避免了程序设计后期由于空间不够而对程序进行大幅改动的问题。
4 系统测试
前面分析了本文DAQ 数据采集程序总体框架及结构,下面通过简单的数据采集过程验证采集功能。采集设备使用NI myDAQ,如图9所示。
图9 NI myDAQ设备
采集程序前面板如图10所示。
图10 前面板界面
图10 所示的界面中,波形图用于显示当前采集的信号,DQAmx 物理通道控件用于选择物理DAQ 设备,开始采集和结束采集用于控制采集的过程,退出则是指结束整个程序。
从程序运行结果看,该系统设计完成了DAQ系统的功能,并可在运行过程中随时中断继续采集过程。
5 结语
结合相应的硬件设备,LabVIEW 具备强大的采集功能。本文利用状态机、事件结构、循环结构,设计了一种改进的DAQ 设备采集程序架构。该设计具备良好的扩展性,实现了数据采集控制与处理的有效分离,可用于实时数据的采集、分析和存储,满足不同采集任务的需求。