《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于LabVIEW改进状态机的数据采集系统设计
基于LabVIEW改进状态机的数据采集系统设计
来源:微型机与应用2014年第7期
王 智,李 智
(四川大学 电子信息学院,四川 成都 610064)
摘要: 分析标准状态机的不足,提出一种改进事件状态机的LabVIEW程序主框架。驱动USB 2.0采集卡进行数据实时采集,联合MATLAB混合编程进行数据分析,期间,用户可对数据按时间进行自动保存或手动保存。此外,该系统具有界面友好、操作方便及功能易扩充等优点。
Abstract:
Key words :

摘  要: 分析标准状态机的不足,提出一种改进事件状态机的LabVIEW程序主框架。驱动USB 2.0采集卡进行数据实时采集,联合MATLAB混合编程进行数据分析,期间,用户可对数据按时间进行自动保存或手动保存。此外,该系统具有界面友好、操作方便及功能易扩充等优点。
关键词: LabVIEW;改进状态机;混合编程;数据采集

1 采集卡硬件简介
 采集卡利用USB 2.0接口进行数据传输,数据传输率可达480 Mb/s。相对于其他接口USB 2.0具有突出的优点:它是一种便携接口,可以对外提供2.5 W的电源,不需要外部供电。一般的笔记本电脑没有PCI、ISA等常规接口,而USB接口是笔记本电脑的标准配置。
 采集卡ADC精度为12位、采样速率达6 MHz。并且在采集卡上集成了一个100 MHz的高速数字信号处理器(DSP)作为控制器。同时提供了一组C语言开发的API,用于复杂功能的开发。
2 软件设计
2.1 LabVIEW程序设计框架

 LabVIEW是一种以G语言(图形化)编程的软件开发平台[1-2],界面直观并提供了大量的组件和库函数,特别适合数据采集分析软件系统的开发。
G语言比较容易掌握,但是LabVIEW程序框架设计却很少有文献提到。一个合理而高效的程序框架是开发高质量软件的基石,因此想要开发一款性能优良的软件程序框架设计是第一步。
在LabVIEW中提出了单循环应用程序、对话框和标准状态机等框架。
 图1所示框架可以满足一些软件开发的需求,但对于数据采集软件系统还不够,因为该框架缺乏对事件的处理,如打开设备、单次采集和文件保存等。

 在图2中加入事件轮询和事件处理程序,每一个事件处理完后又开始不断查询事件。利用该框架可以完成数据采集、文件保存和文件读取等功能。但是其中不足之处在于处理事件时不能执行事件之外的程序,如更新状态和数据显示等。尤其在连续采集中,按照这种框架那么就必须为连续采集单独提供一个示波器,如果还有数据处理则又需要单独提供一个示波器,因此示波器不能复用,导致用户界面模块增加。

 针对上述不足,改进一种事件状态机的框架如图3所示,其中超时事件即当一个事件完成后经过设定的时间后会自动执行超时事件。利用超时事件可以提供事件外程序执行的机会,而每个事件只需要提供事件名称的枚举,然后进入超时事件,在超时事件里根据事件名称执行相应功能。采用移位寄存器作为数据传递媒介,这样状态及波形图可以实时更新。这种程序框架清晰而且易于扩展,扩展一个新的功能只需要3步。

 (1)为新功能提供事件处理。
 (2)在事件处理中把自身的事件名称更新到事件枚举中去。
 (3)在超时事件中新增事件状态,并完成相应功能。
 在这个框架中,可以简化前面板的设计,程序框图的设计也模式化,使用极为方便。
2.2 MATLAB混合编程
 在信号处理上MATLAB功能强大,在LabVIEW中可以通过MATLAB Script与MATLAB服务器通信,从而完成信号处理和数据的传递。
 需要注意的是计算机中必须安装有MATLAB 5.0及以上版本,而且只能用于Windows平台,还有就是二者在数据通信时数据类型需要匹配[3]。此外,MATLAB会占用过多的内存,因此这种混合编程最好用于复杂的信号处理上。
3 设计实例
3.1 前面板

 美观而友好的界面是软件开发重要的一个环节,本套系统最终设计界面如图4所示。从功能上主要分为采集卡控制、波形显示、文件处理和信号处理4个模块,其他辅助设计如状态栏、进度条、指示灯和系统时间等。
3.2 采集卡控制
 根据改进的事件状态机程序框架,为采集卡控制提供开启设备、关闭设备、单次采集和连续采集4个事件。每个事件调用采集卡相应的API,这里需要用到LabVIEW中的调用库函数[4]。具体做法是把提供的dll文件拷贝到工程中,然后在库函数中配置路径和输入输出参数。输入参数由前面板提供。图4中ReadAdc为读取数据采集卡的库函数调用,由返回参数的正确性判断是否继续执行,这样能增加程序的鲁棒性。

 图5为单次采集事件在超时事件中的响应。首先将事件枚举更新为等待用户操作,再利用API读取ADC缓冲,如果读取成功,则利用的MATLAB脚本对数据进行处理,也可以用LabVIEW提供的数组函数进行处理。然后将处理后的数据传递到事件外,事件处理完毕后会进行大循环执行状态栏和示波器的更新,然后执行超时事件的等待用户操作。其他事件的处理也类似。

3.3 波形显示
 利用LabVIEW的波形图可以完成大部分显示功能,但是对于频域显示,则需要用到XY波形图。波形显示放到大循环中,每调用一个事件时,执行超时事件之后,会执行波形更新,这就使用较少的示波器显示所需的数据。
 对于LabVIEW的波形图,在运行时不能很好地交互,如伸缩X、Y轴,利用属性节点编程,可以解决该问题。
3.4 文件处理
 对于不管是单次采集、连续采集还是调用算法处理后的数据,当用户希望保存时都要对用户请求进行响应。单次采集比较容易,可以利用文件对话框选择路径和文件名,然后保存数据。但是在连续采集中,打开文件对话框会中断连续采集事件的处理,因此需要设计出一种自动保存文件的程序如图6所示。

 

 

 在程序启动时,生成一个默认的文件路径。考虑到数据文件比较多,在文件路径中加入日期,文件名由用户确定,同时在文件名中加入采集的时间;若考虑连续采集,还需要由用户确定保存的文件数。本系统采用的单次采集文件名格式如:data_12_00_00。
 需要注意的是,时间每隔1 s更新一次,所以在连续采样中当采样间隔小于1 s时,数据文件在1 s内数据会被覆盖,如果需要更短的时间,那么应该用毫秒级的时间作为文件名。另外,在文件名中不能出现‘:’,因此需要将‘:’替换为其他字符,在本系统中用下划线做的替换。此外还加入了进度条和状态栏,显示文件保存的情况。
3.5 信号处理
 对采集到的信号进行分析和处理是本系统的后期任务,前期完成的有FFT变换、小波去噪和加噪等,如图7所示,将处理后的信号输出到示波器中便可。对于复杂信号的处理借助MATLAB混合编程可以轻松实现。
本文分析了LabVIEW程序设计的框架问题,根据其中的不足提出了一种改进的事件状态机程序框架,并在该框架下开发了一套功能完善的实时数据采集分析系统。该系统性能良好且已投入使用,友好美观的界面和文件自动保存设计是本系统的一大特色。利用该程序设计模式可以快速高效地开发相应的软件系统,并且后期算法处理也极为简单,只要MATLAB算法即可,因此可以使算法设计独立开来。
参考文献
[1] 戴敬.LabVIEW基础教程[M].北京:科学出版社,2004.
[2] 杨乐平,李海涛.LabVIEW程序设计与应用(第2版)[M].北京:电子工业出版社,2004.
[3] 柴敬安,廖克俭.LabVIEW和MATLAB混合编程方法的研究与实现[J].计算机测量与控制,2008,16(5):737-739.
[4] 戴新.数据采集卡在LabVIEW中的驱动方法[J].计算机应用与软件,2008,25(3):156-158.

此内容为AET网站原创,未经授权禁止转载。