数据采集技术概览

   

【作者:lion3875 原创文章 参考文献《 The Control and Measurement Device Interface handbook 》】
 

    数据采集是工业控制领域中一项非常重要的技术,通常数据采集设备会对自然界中连续的物理量(如电压、气压、湿度、温度等)进行采样,然后量化,再以离散的数字量形式存储到计算机中,之后便可以对采集到的数据进行分析、处理。
   
    当然这只是数据采集的通常定义,在工业控制行业中,一个真实的多功能数据采集设备,不仅仅是对物理量做采样、量化、存储,它还有许多其它功能,我们会在今后的连载中一一道来。

    本篇文章会对数据采集技术及数据采集开源项目comedi做一番简单阐述。

    刚刚我们提到了自然界中连续的物理量这个概念,其实自然界中许多事物都是连续的物理量,比如今天下午的气温、昨天夜间的大气湿度。这些物理量在一段时间内产生了剧烈或者细微的变化,从摄氏30度到摄氏32度,其实是有无限多个变化量的,因此我们认为这些变化量是连续的。

    人们通过传感器(如温度传感器、湿度传感器、光传感器等),将自然界的物理量转换成电的形式,用电来模拟自然界中的物理量,以方便进行分析处理,因此我们把经过转换的自然界物理量叫做模拟量(比如一段模拟声音的电信号)。
   
    然而在计算机中,我们没有能力、也并不需要这全部的连续模拟量,并且模拟也很容易受到各种因素的干扰(如不稳定的电子元器件产生的干扰电压)。

    数据采集技术的意义很重大,它将不稳定的模拟信号整成数字量存储到计算机中,这些数字量可以更加精确的表示原来的物理量,它们不存在干扰或不稳定因素。对一段连续模拟量做数据采集通常要经过以下过程:

    滤波 – 使用低通滤波器对模拟信号进行抗干扰过滤,以消除超过一定值的谐波频率,关于谐波请到互联网查阅。

    采样 – 在某段模拟信号中取得足够数量的离散值,这些值的集合可以定义这段模拟量。采样值越多,所定义的模拟量就更接近原始形态。如下图所示: 
 

     
    其中采样脉冲控制着采样的频率,最上面的连续模拟输入信号经过一定频率的采样就会产生最下面的离散形态,采样的频率越高,采样到的离散数据就越接近原始模拟量。


    量化 – 将模拟值转换为二进制编码的过程称为量化。在此过程中,ADC将对模拟信号采样的每个值都转换为一个二进制码。用来表示采样值的编码位数越多,准确度就越高,16位的ADC可以比12位的ADC得到更精确的量化值。可以简单的理解这个概念,将一个值切分成4096份表示当然没有切分成65535份表示更精确。

    存储 – 将量化后的二进制编码数据存储到计算机中。

    分析处理 – 根据现场需要,对数据进行分析,并进行相关的后续处理。

    数据采集技术的基本概念就介绍到这里,如果希望对采集技术做深层的研究需要了解大量硬件知识,希望大家可以写些文章深入讨论。以下我们将对linux下数据采集开源项目comedi做简要概述。 


    Comedi的目前情况
    Comedi是control and measurement device interface(控制测量设备接口)的所写,最早由开源项目热衷者David Schleef提出,它是由一系列驱动程序、用户接口库以及工具组成的用于数据采集的开源软件包。目前主要有三名维护者在继续此项目的开发完善,他们是David Schleef、Frank Mori Hess和Herman Bruyninckx。

    Comedi的发布形式
    此开源项目目前分成如下包囊在官方网站发布 – www.comedi.org

    Comedi – 这个包囊涵盖了comedi项目所支持的全部工业数据采集板卡的一系列驱动程序模块,以及一个用于为文件系统提供通用接口的核心模块。

    Comedilib – 这个包囊涵盖了由一系列用户编程接口封装而成的动态库,此库是为方便用户进行应用程序开发时使用的。这个包还包括文档、配置及校准工具,以及一部分demo程序。

    Kcomedilib – 此包提供了与Comedilib兼容的接口库,不过全部接口均是在内核态实现的,其最终目的是为了用于实时性较强的任务。

 
    Comedi的实现原则
    像大多数优秀的驱动程序那样,Comed只提供了机制,而没有提供策略,它如实的反映着硬件的全部特性,而没有限制用户该如何去使用这些特性。

    Comedi支持的数据采集功能 (关于各功能具体含义会在今后的文章中陆续阐明)
    AI/O – 模拟量输入/输出
    DI/O – 数字量输入/输出
    Counter input/output – 计数与输出计数
    Pulse input/output – 脉冲输入/输出


    设备分类
    Comedi将所有设备统一划分为如下三类:

    1. Channel – 最底层的硬件部分,描述了某一个独立数据通道的全部属性,例如:某个AI通道或AO通道。每一个Channel都具备一些参数,像电压量程、参考电压、通道极性(单极/双极)、物理值与电压值间的转换因子,等等。

    2. Sub-device – 在同一个物理设备上(如一块采集卡)实现的一组功能相同的物理通道(Channel),例如: 一组16个相同的AO通道(Channel),我们把这组功能相同的AO通道看成一个子设备,即Sub-device。这个子设备拥有两个参数,分别是通道的数量,以及通道类型。

    3. Device – 在同一物理设备上(如一块采集卡)实现的一组物理子设备,换句话说,就是这个物理设备本身



    采集序列
    Comedi提出了一个采集序列的概念,它描述了一个数据采集设备进行数据采集时的典型过程,这个典型过程如下图所示(图片原创 Kurt Mueller):
  

    下面我将对此图做详细说明,首先请大家注意图示两端(点击图片放大):

    1. 有seq_start与seq_end,是的,每一个数据采集序列都会有开始、结束两个动作

    2. 在开始之后以及结束之前,硬件或软件则需要一些初始化或配置的行为,当然这些行为时需要时间的,也就是图两端靠底部的位置,initialization time与termination time。

    3. 下面我们要说更重要的部分,它们是中间那些多个相同的,使用较大的粗体字所描述的部分,即Scan。与上面描述的类似,每个Scan过程,也会有scan_begin、scan_end,在scan_begin之后以及scan_end之前,软硬件都需要有一些配置或善后行为,当然了,一样需要时间,它们分别是setup time与scan delay。

    4. 在每个Scan过程的内部,会有很多个相同的convert过程,这便是最核心的转换过程,即将采样到的物理数据转换成应用程序需要的数据,每个convert过程都各自针对对某一个通道,不过这些过程可不是无缝的连接在一起的,软硬件都不可能做到瞬间完工,所以就有了conversion interval,即转换间隔。

    5. 我们仔细观察一下,多个convert过程连在一起,形成一个序列,是的,对于一组通道会按顺序做串行化的convert,形成一个Scan过程,这叫做多通道串行化数据采集。然而值得一提的是,有些高端的数据采集产品提供多通道并行化数据采集,例如:Advantech公司生产的PCI-1714,它拥有4个AI通道,每一个通道都配备独立的AD转换器,4通道在同一时刻可以做并行化的数据采集。

    待续……

初识Comedi