多线程技术在数据采集中的应用

2014-10-21 11:09吴晓鹏
电子世界 2014年12期
关键词:采集卡驱动程序实时性

吴晓鹏

【摘要】数据采集在工业系统中占据十分重要的位置,这是因为无论是控制系统还是计算机,都需要对外界采集的数据进行分析和处理。采集数据一般使用数据采集卡,相应的软件系统可以分成两个部分:驱动程序以及应用程序。传统的数据采集采用的是单线程,但是实时性并不理想。本论文介绍了基于多线程和异步IO调用的数据采集系统,经验证,数据的实时性和可靠性都得到了很大的提高。

【关键词】多线程;采集

1.引言

数据采集在工业系统中占据十分重要的位置,这是因为无论是控制系统还是计算机,都需要对外界采集的数据进行分析和处理。采集数据一般使用数据采集卡,相应的软件系统可以分成两个部分:驱动程序以及应用程序。在数据采集卡诞生时,采集数据多采用的是单线程及同步I/O调用的方式。这种方式并不适用于大量快速的数据传输,因为软件系统在调用了驱动函数之后,一直循环采样数据直至其传输完成[1]。

多线程以及异步I/O调用很好地解决了以上的难题:多线程能够保证数据的采集以及数据的处理在不同的线程进行,这样就能够使得软件占用很小的系统资源,同时又具有很好的实时性;异步I/O调用技术可以使得应用程序只在调用时才使用驱动函数,这样就避免了阻塞的情况。本论文主要介绍如何通过使用多线程技术和对于I/O的异步调用,提高数据采集的实时性和准确性。

2.数据采集卡技术的改进

2.1 驱动程序和采集卡的通信

windows系统中,数据采集卡的驱动程序一般是工作于内核模式,而用户界面等是应用于用户模式。在显示数据和处理数据的过程中,程序需要调用API和驱动程序进行通信,进而实现底层的采集数据交互。数据传输有关的API有很多,本论文主要用到的是ReadFile()函数。该函数同时支持对于IO端口的异步调用和同步调用[2]。

2.2 调用程序时同步和异步的区别

数据采集过程中,对于IO的调用有两种方式:同步IO和异步IO调用。这两种调用方式具有很多不同,最主要的区别在于异步IO不会因为发出了IO请求就阻塞进程,而是继续执行其它进程,在本质上相当于是一个“中断”。异步调用的系统资源占用之所以比同步调用低,就是因为其能够使得内核处理IO时可以同时处理其它任务。这样即使是大量数据的传输和对于大量数据的处理,都能够取得很好的效果。函数CreatFile()决定是否发起异步IO请求。

2.3 驱动程序WDM

所谓WDM,使得用户能够灵活地使用驱动程序开发应用程序。它具有跨平台的应用特性,本论文的数据采集卡驱动通过调用WDM来开发。应用程序通过调用驱动程序,对于某些特定时间进行检测,进而和应用程序进行数据交互。一般来说,WDM模式中有两种数据交换方式:事件通知以及异步IO通知[3]。

2.3.1 事件通知

通过调用系统事件进程,WDM能够和应用程序交互数据等。WDM可以接收应用程序所创建的事件,进而在特定时刻发送数据信息。

2.3.2 异步IO方式

在接收IO的请求后,驱动程序会检测特定事件是否已经发生。

(1)没有事件等待,应用程序则会调用系统函数来查看IO的数据采集等情况。

(2)事件发生并准备将数据与应用程序进行交互,那么驱动程序会通过WDM的调度例程进行驱动程序和应用程序的数据通信[4]。

3.多线程技术的应用

3.1 串行数据处理

传统的数据采集方式是对数据进行串行处理,即数据点的获取和保存处理等工作是串行实现的,这种方法虽然容易实现,但是缺点也是显而易见的:效率低,实时性差。

3.2 多线程数据处理

众所周知,windows系统是多任务的,即同一个进程可以包含许多线程。这样就为应用程序的开发提供了无数种可能性,使得程序开发人员能够灵活地开发应用程序。多线程对于提高系统的稳定性和实时性具有重要的作用。程序开发人员很容易调用系统的多线程接口函数进行开发[5]。

4.高速数据采集卡软件设计

衡量数据采集卡的标准有两个:数据采集速率以及数据传输速率。当然,数据的处理和分析能力也很重要[6]。本论文设计的数据采集系统的软件是基于多线程和异步调用的方式,主要可以分为两个子线程:数据处理和数据传输。

5.结束语

数据采集在工业系统中占据十分重要的位置,这是因为无论是控制系统还是计算机,都需要对外界采集的数据进行分析和处理。采集数据一般使用数据采集卡,相应的软件系统可以分成两个部分:驱动程序以及应用程序。传统的数据采集采用的是单线程,但是实时性并不理想。本论文介绍了基于多线程和异步IO调用的数据采集系统,经验证,数据的实时性和可靠性都得到了很大的提高。

参考文献

[1]潘爱民,王国印.V isualC++技术内幕[M].北京:清华大学出版社(第4版),2001.

[2]史惠康.Visual C+ +5.0实用编程技术[M].北京:中国水利水电出版社,1999.

[3]邢瑞川,安世奇,疏学明.多线程技术在数据采集中的应用[J].包头钢铁学院学报.2001,20(2):157-160.

[4]李光春,黄建国,王志刚.多线程技术在数据采集中的应用[J].技术平台,2009,7:85-87.

[5]李竹青,徐建南,王志刚,田书林.基于异步I/O与多线程技术的数据采集卡软件设计[J].测控技术,2008(08).

[6]普措才仁,孫旸.基于LabWindows/CVI多线程技术数据采集系统的构建[J].甘肃联合大学学报(自然科学版),2007(05).

猜你喜欢
采集卡驱动程序实时性
高精度AD采集卡性能测试及评价方法研究
计算机硬件设备驱动程序分析
面向数控机床的多通道传感数据采集卡设计
航空电子AFDX与AVB传输实时性抗干扰对比
并行高速采样在地震物理模拟采集中的应用
计算机控制系统实时性的提高策略
PCI-e高速数据采集卡的驱动与上位机软件设计
一种车载Profibus总线系统的实时性分析
基于MPC8280的CPU单元与内部总线驱动程序设计
妙用鼠标驱动