APP下载

基于虚拟仪器的多线程数据采集与分析系统设计

2014-05-10傅思勇符茂胜

宜春学院学报 2014年3期
关键词:虚拟仪器数据流线程

傅思勇,符茂胜

(皖西学院信息工程学院,安徽 六安 237012)

随着现代化信息技术的持续发展,数据的采集和分析处理已经渗透到科学技术研究、工业生产等各个领域,无论在哪个领域中,信息数据采集和处理的越精确,取得的经济效益就越大。[1]一般传统的数据采集系统由传感器模块、信号调理模块、AD转换单元、微处理器单元等组成,整体的性能主要由传感器、AD转换和微处理器等关键模块决定。在高性能的传感器和AD转换器的前提下,尽可能提高数据处理与分析的速度和精度,将决定了整个采集系统的性能。传统的数据采集系统一般以单片机、DSP、ARM、FPGA作为主控制器,受限于单片机的工作主频,对于数据的实时采集、处理很难完成;对于DSP和ARM虽可结合嵌入式操作系统,可采用多任务多线程编程、多任务处理方式,但整个系统开发难度较大,系统研发周期较长;现场可编程门阵列 (FPGA)虽具有常用微处理器无法比拟的优势,比如FPGA时钟频率高,内部延时小,算法硬件实现等,但对于编程数据读取采集、分析处理方面来讲,由于数据读取采集读取的频率与FPGA硬件运行频率往往会不同,在编程方面将会涉及很多跨时钟区域编程等问题,且对于复杂数据分析处理算法编程较难,整个系统开发周期相对较长,虽各公司提供各种算法IP核,但价格不菲,整体系统开发成本较高。基于通用PC机的虚拟仪器技术充分利用了PC机高速、多核、多线程等优点,[2]用户可以很方便的实现一个多线程的数据采集分析应用系统。

1 虚拟仪器技术及Labview

20世纪70年代NI公司提出虚拟仪器的概念,以通用计算机为核心硬件平台,数据测试、处理分析软件系统由用户自主设计定义,具有虚拟显示面板的一种计算机仪器系统。[2][3]以虚拟仪器技术设计成的数据采集与处理系统,相比传统数据采集与处理系统,具有以下特点:

1)性价比高,一方面是,虚拟仪器技术可以同时实时测量多个信号,数据信号的处理与分析全部由软件完成,节省硬件成本,并可减少了硬件环境噪声的干扰,进而可保证数据处理与分析的精度,另一方面,虚拟仪器技术开发自由,软件功能可随意增减,开发时间较短。

2)核心是软件,信号的传感、采集的硬件一旦确定,后续数据的处理、分析等所有功能全部由软件编程完成。

3)可靠性高、性能稳定,虚拟仪器的硬件平台主要是通用PC机,其稳定性、运行速度、精度等远高于普通微处理器。具体的虚拟仪器系统构成框图如下图1所示,

图1 虚拟仪器系统框图

测控对象一般是各种待测量的物理量,如如位移、压力、温度等,一般先是通过各种传感器待测物理量转换成有用电信号,再通过滤波、放大、ADC转换,将模拟信号转换成数据信号,然后再对数字信号进行处理与分析并显示结果。[3-4]如图2所示,传统数据采集与分析系统的数据采集、信号处理、结果表达基本上由硬件组成,对于这种传统数据采集系统存在种种缺陷,一方面,在信号处理与结果表达过程中不可避免的一些系统噪声和干扰,影响系统的精度,另一方面,微处理器处理速度慢,数据处理的位数短,限制系统整体运行速度。虚拟仪器技术则是将信号处理、结果表达从微处理器中剥离出来,以通用计算机的CPU处理器代替微处理器,可很大程度上提高系统的精度和速度。

图2 虚拟仪器与传统测量仪器结构

目前开发虚拟仪器的语言一般采用LabVIEW,它是一种图形化的编程语言,又称G语言,在工业界和学术界中广泛用于开发数据采集系统、仪器控制软件和分析软件的标准语言。[4-6]相对于C或C++它具有以下几个特点,一是:编程简单,易于理解和掌握,LabVIEW提供了一系列针对仪器控制、数据采集、信号分析与处理任务的节点函数,用户只需直接调用即可,可很大程度上提高编程开发效率;二是:LabVIEW是基于数据流的编程语言,其语言本身就是并行的程序开发结构,程序中的每一条数据流就代表一条线程,当数据流只有一条时,如图3所示,对于多核CPU的计算机,编译器不会让程序运行始终固定在同一个线程上,而会根据CPU的核心和线程数量,让程序分时段的、教均匀占用的各个线程或CPU 核。[7][8]

图3 单数据流

当VI程序中有多条数据流时,LabVIEW的编译器会根据程序中数据流的分布,自动识别并行程序模块并创建线程,如图4所示,程序创建四个独立不断循环累加一的程序,在VI中没有额外线程代码,在四核CPU的计算机上,当VI程序运行时,由CPU占用率图中可看出,LabVIEW编译器自动将并行排列的循环结构被分配到了不同线程上,为此利用LabVIEW可以方便的实现多线程、多任务的编程。

图4 LabVIEW多线程编程机制

在多线程编程中如何保证线程之间的数据安全传递,和如何保证线程之间同步通信是系统设计的难点。在LabVIEW多线程编程的数据传递方式一般有局部变量、全局变量、通知、队列、集合和事件等技术手段。[7-8]在数据采集线程模块中将数据写入一局部变量,则在数据分析、处理线程模块中可简单的设置一个读取局部变量,二个模块之间虽没有直接的数据连接,但通过局部变量,数据采集和数据分析处理线程还是可自由数据通信,但这种局部变量数据传递方式存在较大缺陷,特别是当数据采集模块和数据分析处理模块二者运行周期相差较大时,会造成数据多次重复读取、数据丢失和内存泄漏等问题。本文以多线程GPS数据采集系统程序来说明如何采用了通知、队列技术手段,来管理数据采集线程和数据分析处理线程之间数据的安全传递。

2 系统设计

系统程序主要功能是以一个固定点为坐标原点,判断当前动态目标相对固定点的位置,首先需根据WGS-84椭球模型将动态目标的GPS接收到的大地经纬坐标值转换为空间直角坐标系下的坐标值 (如图5),转换公式为

图5 空间直角坐标系

式中,B为纬度、L为经度、H为高度、N为法线长度,且

式中,e2为第一椭球偏心率,为0.0066943799013。

假设A点为固定点,其WGS-84经纬度坐标为 (LA,BA,HA),其空间直角坐标为(xA,yA,zA);设B点为动点,坐标为 (xB,yB,zB),则 B点在A点的东北天坐标系下的坐标 (x,y,z)为

由上述分析发现,数据处理比较复杂,要保证数据实时处理与显示,就必须将将数据读取、分析处理安排在不同线程上运行,系统界面如图6所示,第一个线程是数据采集模块,这一线程主要负责读取串口数据、并实时保存,第二线程主要负责读取GPS的数据信息处理、计算,两个线程之间的数据传递采用通知、队列技术手段。

图6 系统程序界面

在第一个While循环作为数据采集线程,由底层驱动 (VISA)读取串口GPS信息,再数据解码,提取出时间、经纬度等数据信息,然后将经纬度数据存入队列中,并实时保存原始有效数据,第二个While循环作为数据处理线程,主要负责将出队列的数据进行数据运算处理,利用上述公式 (3)实时计算出动态点B在A点的东北天坐标系下的坐标(x,y,z)。只有当第一个循环体中有数据压入队列,第二个循环体的数据处理部分才会执行,这样就可以保证数据处理的实时性,且避免了数据丢失或重复读取等问题,其流程图如图7所示。

图7 流程图

进队列、出队列在此的作用有点类似D触发器,数据通过进、出队列这一方式,将GPS数据读取和GPS数据运算分开处理,通过数据流驱动方式使这二部分执行更加协调且数据不丢失,从某一个单一的数据来看,进、出队列这一方式如同将数据的采集和处理之间加入了一流水线,如图8所示,这种处理方式可大大提高数据处理速度。

图8 流水线思想

3 结束语

详细研究了虚拟仪器技术以及labview多线程编程的机制,虚拟仪器技术在数据采集处理系统中的应用,并设计GPS动态指向系统,分析了多线程之间数据传递方法,讨论了如何处理运行周期不同的多线程之间数据传递的安全性,为多线程编程提供了一种可行的设计思路。

[1]袁志强,曹伟莹.基于MSC1210单片机的数据采集系统的设计[J].宜春学院学报,2008,30(4):57-59

[2]吴忠锴,梁志剑.基于LabVIEW的力学实验数据采集系统软件设计[J].制造业自动化,2012,34(22):126-128

[3]傅思勇.基于PSD的空间信标测量系统研究[D].上海:上海理工大学,2012

[4]卞娜,侯维岩.基于LabVIEW的无线传感器网络监控软件[J].测控技术,2012,31(2):31-34

[5]韩琪.基于虚拟仪器的数据采集与分析系统研究与设计[D].北京交通大学,2012

[6]豆勤勤,谈莉斌,任尚坤,等.基于DSP28335的无损检测仪系统设计[J].宜春学院学报,2013,35(6):1-4

[7]张红民,李晓峰.基于LabVIEW的多线程编程技术比较研究[J].电子技术应用,2008,(10):89-91

[8]刘筱兰,张薇,程惠华,等.虚拟实验室的类型及发展趋势[J].计算机应用研究,2004,(11):8-10

猜你喜欢

虚拟仪器数据流线程
基于C#线程实验探究
汽车维修数据流基础(上)
汽车维修数据流基础(下)
基于国产化环境的线程池模型研究与实现
PCB 刻制机功能开发及在虚拟仪器实验室建设中的应用
虚拟仪器及其在电工电子实验中的应用
一种基于虚拟仪器的电控柴油机实验台的设计
浅谈linux多线程协作
虚拟仪器技术在农业装备测控中的应用
基于数据流聚类的多目标跟踪算法