基于LabVIEW的海量数据存储系统软件设计
2015-03-27靳先聚
靳先聚
(华电郑州机械设计研究院有限公司,河南 郑州 450015)
0 引言
在工程测试中,往往需要对测试信号进行实时采集、处理和存储,同时希望在测试结束后能方便的查看历史数据。现代的工程测试信号多为多通道、长时间、不间断的海量数据,传统仪器已经无法满足对这些数据的处理和存储要求。因此,如何快速、准确、可靠地存储这些海量数据是目前的一个研究热点。
虚拟仪器是把计算机、模块化的仪器等硬件与高效灵活的软件结合起来,从而提高了系统的灵活性和工作效率[1~2]。在其模块化的开发环境下,用户只需拥有常规硬件设备,就可以根据自己的实际需要,自主设计各种功能的测试系统。LabVIEW(Laboratory VirtualInstrumentEngineer Workbench)是美国国家仪器(National Instruments,简称NI)公司推出一种图形化的即时可重构虚拟仪器软件。用户可以根据自身的特殊需要,构建特定的虚拟仪器,降低了对硬件设备的依赖[3~4]。 另外,LabVIEW也是这一领域应用最广、发展最快、功能最强的软件。笔者探讨了在LabVIEW编程环境下,数据存储系统的软件设计。
1 系统结构和存储文件的选择
1.1 系统结构
该数据存储系统由信号采集、信号处理、数据存储和数据查询4部分组成,其结构如图1所示。
1.2 系统存储文件的选择
图1 软件结构图Fig.1 Software structure
LabVIEW环境支持的可读写文件格式主要有文本文件、二进制文件和数据记录文件3种[5]。其中,二进制文件占用磁盘空间最少,并且文件的存储格式与数据在内存中的格式一致,无需转换,致使读写文件的速度更快[6]。因此,二进制文件是数据存储最为紧凑和快速的格式,特别适合海量数据的存储和读取。LabVIEW提供的以二进制文件进行数据存储的文件类型有:Datalog文件、Waveform文件、TDMS文件、TDM文件等。TDMS文件具有读写速度快、占用硬盘空间小等优点[7~9],更适合多通道、海量振动数据的存储。所以,本系统采用TDMS文件对数据进行存储。
2 程序设计
2.1 编制流程图
程序流程图是整个编程过程中的指导性文件,通过它可以了解到其环节要实现什么功能,以及下一个环节程序会转向哪里。本文设计的程序流程图如图2所示。
由图2可知,程序总体分为初始化和执行两部分,这两部分要按顺序执行。LabVIEW提供的顺序循环结构只需设立两步,就可以达到这一要求。
图2 存储系统程序流程图Fig.2 Storige system program flow
2.2 数据存储模块设计
数据的存储模块是完成对数据后续分析的前提和基础。因此,必须保证存储的速度和可靠性。采用TDMS的存储方式保证了存储的速度。为了保证存储的可靠性,必须在数据存储的速度小于数据产生的速度时,能缓存数据。这就需要选择合适的编程模式。
LabVIEW为编程者提供的如图3所示的用于数据处理的标准设计模式——生产者/消费者设计模式(数据)能同时执行数据产生和数据存储这两个过程,并且保证它们不会相互影响。生产者/消费者设计模式(数据)由循环结构(While循环)和队列组成。队列是一个先入先出的缓冲区域。生产者产生数据,并将数据放入队列中;消费者依次从队列中取出数据,并进行相应的处理。当生产过剩而消费不足时,缓冲区的剩余空间不断减少,直至耗尽。反之,当消费能力大于生产能力时,缓冲区的数据会逐渐减少,直至缓冲区中再无数据可用。此时,消费者进入等待状态,直至生产者输入新数据或程序结束。
为适应系统对海量数据的存储要求,将队列所能容纳的最大数据点数设置为“无限”(最大)。因系统设计为8通道,要建立8个队列,分别存放各个通道的数据。各队列分别以各自的通道名命名。
由于各通道所实现功能完全相同,下面以通道1为例,对系统程序进行详细介绍。通道1的数据存储程序框图如图4所示。将仿真信号放在生产者循环中。为了方便程序的调试,利用输入控件实现对信号频率、幅值和相位的即时输入。在消费者循环中,从队列中取出数据,并存储、处理和显示。由于通道多、数据量大,此处只存储原始数据、均方根值和报警信息(报警序号、报警通道名和报警时间)。
图3 生产者/消费者设计模式(数据)Fig.3 Producer/consumer design pattern(data)
图4 通道1的数据存储程序框图Fig.4 Data storage program of channel 1
程序运行过程中,先用“TDMS打开”函数新建或打开一个TDMS文件,再用“TDMS设置属性”函数为TDMS文件设置测试时间属性,并记录测试的开始时间。然后,以通道名(例如通道1)命名TDMS的“组名”,以“原始数据”和“均方根值”命名TDMS的“通道名”。同时,利用“平均直流—均方根”函数获得波形数据的均方根值,并将其与预设报警值进行比较。如果均方根值大于或等于报警值,将报警通道的通道名称和报警时间写入TDMS文件中的报警组中,并为报警指示灯赋值为“真”,用于提示用户该通道已经报警。如果均方根值小于报警值,不作数据存储处理,并保持指示灯为上一次判定时的值。这就可以确保指示灯在第一次报警后仍然能保持报警状态。最后,用“TDMS关闭”函数关闭TDMS文件,用“简易错误处理器”函数处理数据存储过程中出现的错误,并发送相关的错误信息。
为了减少程序编写的工作量,简化程序结构,各通道存储程序均以通道1存储程序子VI形式存在于主程序中。为了能通过人机交互的方式控制数据存储的开始和结束,需要采用事件结构对用户的操作进行响应。在数据存储程序中,若使用包含While循环的生产者/消费者设计模式(数据),将数据存储程序直接放在事件结构内,将会出现前面板死锁现象。本系统采用LabVIEW的另一种标准设计模式——生产者/消费者设计模式(事件),其程序结构如图5所示。
图5 生产者/消费者设计模式(事件)Fig.5 Producer/consumer design pattern(event)
在本程序中,将数据存储程序中需要响应的事件(开始采集事件和退出程序事件)分别通过生产者循环中事件结构对应的分支放入到队列中,通过队列传输到消费者循环中,再通过条件结构判断对应的事件分支,执行对应的程序代码。停止采集则是通过生产者/消费者设计模式 (数据)中生产者中的 “停止采集”按钮以及消费者循环中“停止采集”按钮的局部变量来实现。这样,能同时停止数据的产生和存储。
系统程序的其他功能模块的设计开发此处不再做详细介绍。稳定高效的后台程序配以人性化的人机界面(如图6所示)即成为一完备的测试系统。
3 结语
在LabVIEW提供的软件平台上开发的多通道海量数据存储系统弥补了工业生产中传统测试仪器在技术和经济方面的诸多不足。它在大宗数据存储方面,展现出了高效、准确的存取性能。这说明,虚拟测试系统是未来工程实际的发展方向。
图6 系统主界面Fig.6 System main interface
[1]韩琪.基于虚拟仪器的数据采集与分析系统研究与设计[D].北京:北京交通大学,2011.
[2]何春鹏.基于LabVIEW的数据处理与仿真的研究[D].北京:北京交通大学,2008.
[3]李文涛,曹彦红,卜旭芳,等.LabVIEW数据库访问技术的实现及应用[J].工矿自动化,2012(3):69-71.
[4]刘珊珊.基于LabVIEW的数据采集系统设计与应用[D].太原:中北大学,2012.
[5] 胡仁喜,高海宾.LabVIEW2010从入门到精通[M].北京:机械工业出版社,2011:14-38.
[6] Thatlife10.数 据 存 取 的 好 帮 手-TDMS[EB /OL].(2013-01-24)[2015-05-18].http://www.docin.com /p-580779352.html.
[7] 陈树学,刘萱.LabVIEW 宝典[M].北京:电子工业出版社,2011:81-96.
[8]吕云熙.LabVIEW中表格控件的灵活使用[J].仪表与计量技术,2011(3):41-42.
[9]阮奇桢.我和LabVIEW[M].北京:航空航天大学出版社,2009:50-62.