前言:参考来源:http://bbs.elecfans.com/jishu_209658_1_5.html,感谢原作者  zhihuizhou

这里的内容只针对NI的数据采集卡,不保证适用于其它公司的数据采集卡。有不对的地方请指出,谢谢!

1.数据采集的时候数据会不会丢失?

    
这是最常见的一个问题,刚开始学数据采集的时候都会在考虑,如果软件上读取数据的循环运行得不够快时,比如100K采样率的时候,软件上循环肯定没这么快,数据是不是就丢失了?
首先我们要清楚的是,数据采集功能是由数据采集卡来完成的,软件只是将采集到的数据接收到电脑上面过来,数据采集卡有自身的办法来解决硬件采集速度快过于软件读取速度的问题。
这需要对数据采集过程中数据的传输作一个介绍:外部的信号进入数据采集卡后,经过各种处理转换,先进入数据采集卡自身的缓冲区里面,缓冲区是先进先出(FIFO,First In First Out)的,NI的数据采集卡应该是都有板载的缓冲区,区别在于缓冲区的大小而已。然后当板载缓冲区中的数据量到了一定的条件时,数据采集卡将缓冲区的数据上传到计算机内存中,一般是以DMA(直接内存访问)方式传入的,但也可以设置为其它方式,比如中断等。上传数据的方式和时机可以通过DAQmx的属性节点进行设置或查看,DAQmx中默认是使用DMA传输方式,传输条件是板载内存非空。
以下蓝色部分摘自NI网站:
数据传输方式包括直接内存访问(DMA),中断请求(IRQ)和可编程I/O。DMA是一种DAQ板卡和PC内存间直接通讯的传输方式,不再需要处理器的干预。NI "MITE"芯片可以处理与PCI总线间的所有总线协议。IRQ传输方式会置高信号并中断处理器,然后由处理器处理数据传输。
IRQ 传输通常很低,只有150 kb/s,而DMA可以高达20 Mb/s。IRQ 传输速率与使用的系统设备相关,如处理器速度等。
图 1 设置模拟输入数据传递方式与时机
数据到了内存后,再由程序中的DAQmx Read.vi从内存中读入到计算机中去。这里计算机的内存要和板载缓冲区区分开来,板载缓冲区是厂商固定死的,改变不了,不会出现溢出的情况,它的空间可以很小,比如1Kbit以下,但计算机中为数据采集开辟的内存建议是采样率的10左右,即是说即使DAQmx Read.vi在10秒钟都没有执行一次的话,那么就会出现内存不足以存放采集到的数据的问题,导致数据丢失,DAQmx Read.vi会报错。内存中的大小可以在DAQmx Timing (Sample Clock).vi的每通道采样输入端进行设置,参考下图中DAQmx帮助中的说明:
                               图2 设置内存缓冲区大小
但是DAQmx会默认设置一个最小值,如果你在每通道采样输入端设置的值小于这个值的话,DAQmx会忽略你输入的这个值而使用默认最小值,见下图:
图3 确定缓冲区大小
不过单单将这个缓冲区设置成10倍,并不一定能保证缓冲区不会溢出,因为缓冲区的存储的数据量不但跟它的输入速度(采样率)有关,还跟它的输出速度有关,它的输出速度就是采集程序从它里面读取的速度,所以一般在使用循环中调用DAQmx Read.vi的时候,一般是选择多态VI中的多采样而不是单采样。
同时将它的每通道采样数设置为-1,表示每次调用DAQmx Read.vi的时候都是将内存中的所有数据读取进来。在一些特殊情况下才将这个输入设置为其它整数,但就得保证循环能尽快的执行,以免缓冲区溢出。如果设置为100的话,表示每次从缓冲区中读取100个数据回来,如果缓冲区的数据不足100个,那么就会等到够了100个后才读进来并输出,程序会在这里等待缓冲区的数据够100个才往后执行,跟串口设置读取缓冲区字节数一样。设置为-1则不会出现等待的情况,有就读,没有就返回空数组。
所以,总结一下,为了保证数据不会失丢,要设置好内存缓冲区的大小,还要保证读取缓冲区的程序(DAQmx Read.vi)循环得尽量快,每一次读取的数据尽量多。
2.数据采集的时间问题

数据采集中时间相关的问题主要是二方面,一个是每一个数据点的时间,在NI的数据采集中是通过T0和dt来确定的,T0就是开始数据采集的初始时间,是任务开始时数据采集卡读取的计算机时间,dt二个数据点之间间隔的时间,是采样率的倒数,比如1K采样率,dt就是1/1000=0.001秒=1毫秒。在使用DAQmx Read.vi的时候要选择波形输出而不是选择DBL输出,波形输出就带有这些信息,而DBL就只是有数据而没有时间信息了。见图4。
问题: 我设置采集的采样速率为500,001 Hz。我想知道我的设备所用的实际采样率。如果我在LabVIEW中用NI-DAQmx编成,如何确定实际采样率?

解答: 您可以用DAQmx定时属性节点来获得此信息。SamplClk.Timebase.Rate属性提供了产生实际采样率的时基频率(timebase frequency)。大多数DAQ设备有两个时基频率:20 MHz和100 kHz。SamplClk.TimebaseDiv属性提供分频系数,用于从时基频率分频下来到您所希望的实际采样时钟频率。所以当您设置您的采样速率为500,001 Hz,设备利用20 MHz时基和分频系数39来获得实际的采样速率20 MHz/39 = 512,820.51 Hz 分频系数永远是一个整数,该整数的大小取决于您的数据采集板卡的型号。举个例子:假设分频系数是一个16位的整数,这样20 MHz时基允许您使用的所有频率均大于305.18 Hz,因为一个16位整数对应的最大分频系数为65,535。100 kHz时基用于低于该频率的采样速率。进而,如果您指定的频率不能准确得到,驱动将采用最接近于您指定的采样率且高于您所指定的采样率

对E系列:
AI采样时钟分频系数 = 24位
AI转换时钟分频系数= 16位
AO采样时钟分频系数 = 24位
对M系列:
AI 采样时钟分频系数 = 32位
AI转换时钟分频系数 = 32位
AO采样时钟分频系数 = 32位
3.问题:
我设置采集的采样速率为500,001 Hz。如果我在LabVIEW中用NI-DAQmx编成,如何确定实际采样率?
解答:
您可以用DAQmx定时属性节点来获得此信息。SamplClk.Timebase.Rate属性提供了产生实际采样率的时基频率(timebase frequency)。大多数DAQ设备有两个时基频率:20 MHz和100 kHz。SamplClk.TimebaseDiv属性提供分频系数,用于从时基频率分频下来到您所希望的实际采样时钟频率。所以当您设置您的采样速率为500,001 Hz,设备利用20 MHz时基和分频系数39来获得实际的采样速率20 MHz/39 = 512,820.51 Hz 分频系数永远是一个整数,该整数的大小取决于您的数据采集板卡的型号。举个例子:假设分频系数是一个16位的整数,这样20 MHz时基允许您使用的所有频率均大于305.18 Hz,因为一个16位整数对应的最大分频系数为65,535。100 kHz时基用于低于该频率的采样速率。进而,如果您指定的频率不能准确得到,驱动将采用最接近于您指定的采样率且高于您所指定的采样率
另外,如果确实需要指定的采样率,也可以用外部的时钟源作为采样脉冲来进行数据采集。

其实更深入一点的话,在连续采集的应用程序中,数据采集时钟源的准确性问题就会显示出来,假设时钟源的误差是50ppm(百万分之五十),即二万分之一,而一天有86400秒,如果连续运行一天的话数据采集的时钟误差最多就会有4秒多,所以到了24小时后就会出现波形图上的时间与计算机时间差了大概4秒左右的现象,时间越长这个误差就可能越大,如果这个误差不能接受的话就需要想其它办法解决。其中一个方法是换一个更高精度的时钟源,但长时间运行的话始终还是会有误差的,之前用过的方法是到了0点的时候关闭任务再重新开启,让数据采集卡与计算机重新对时。

献给初学labview数据采集的初学者相关推荐

  1. 献给初学iOS的小盆友们------微博app项目开发之一项目初始化

    献给初学iOS的小盆友们--微博app项目开发之一 项目初始化 本人自学iOS也有七八个月了,不敢说学到很深入了,但也算入了门.此次微博app项目参考了传智播客培训教材,主要学习内容有架构思想,封装思 ...

  2. 献给android原生应用层开发初学者技术架构选型和整合的方案思路(二)

    前篇<献给android原生应用层开发初学者技术架构选型和整合的方案思路(一)> 本篇侧重于安卓创建的创建和后续 demo 中用到的 lib 在 gradle 中的依赖配置,本文假设您已经 ...

  3. 《LabVIEW数据采集》视频教程第18集:数值型数据—无符号整形数

    <LabVIEW数据采集>视频教程第18集:数值型数据-无符号整形数

  4. 《LabVIEW数据采集》视频教程第19集:数值型数据—复数

    <LabVIEW数据采集>视频教程第19集:数值型数据-复数

  5. LabVIEW数据采集卡

    CSDN话题挑战赛第2期 参赛话题:学习笔记 博客写作背景----项目中解决的问题 最近遇到一个使用stm32单片机多路采集信号的项目,还需要在上位机进行波形的查看,信号算法的处理,初步定为使用lab ...

  6. 浅析NI LabVIEW数据采集与处理信号的10大优势

    LabVIEW是一种用图标代替文本行创建应用程序的图形化编程语言,广泛地被工业界.学术界和研究实验室所接受,视为一个标准的数据采集和仪器控制软件.NI是领先的机器视觉与科学视觉硬件.软件工具的供应者. ...

  7. 《LabVIEW数据采集》视频教程第8集:程序框图的节点

    <LabVIEW数据采集>视频教程第8集:程序框图的节点

  8. LabVIEW数据采集:配套视频教程第2集(2.1.1节-2.1.13节)

    2.1.1 运行LabVIEW 2.1.2 范例查找器 2.1.3 新建一个VI 2.1.4 ni.com全站搜索 2.1.5 前面板概览 2.1.6 程序框图概览 2.1.7 "工具&qu ...

  9. LabVIEW数据采集视频教程:网友问答编程打开程序框图

    <LabVIEW数据采集>视频教程:网友问答编程打开程序框图

  10. LabVIEW数据采集:配套视频教程第1集(1.1节-1.6节)

    第1章 LabVIEW概述 1.1 什么是LabVIEW 1.2 如何获得LabVIEW 1.3 安装.启动LabVIEW 1.4 什么是NI MAX 1.5 LabVIEW分类及其工具网络 1.6 ...

最新文章

  1. JS 验证表单不能为空
  2. python 二进制数 转字符串_Python二进制串转换为通用字符串的方法
  3. Go语言获取文件的文件路径、文件名、扩展名
  4. 流处理框架Storm简介
  5. QProcess实现交互式命令
  6. c语言程序设计100题,编程题(c语言编程题库100题)
  7. 流水线、超流水线、超标量(superscalar)技术对比(转)
  8. 鼠标到达a标签时变成手型
  9. 自己搭服务器 做购物网站成本,从零搭建一个购物网站,实操经验
  10. Hive可视化工具squirrel-sql --小松鼠
  11. 电容笔适用所有平板吗?值得推荐电容笔排行
  12. 【NOIP2018模拟赛2018.10.22】pets
  13. PPT个人学习笔记(四)——神奇移动的实现
  14. 展讯/北京移动--笔试题
  15. 作品1:MIDI彩虹钢琴(将简谱或五线谱制作成mid)
  16. Java单个文件下载
  17. 人脸和手部特征点检测
  18. JointJS动态流程图
  19. 人工神经网络原理及应用,深度神经网络应用实例
  20. access防下载表原理

热门文章

  1. html 静止横屏_移动端开发-禁止横屏
  2. 学生个人网页设计作品 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计
  3. 软路由安装openwrt系统
  4. 日本被动元件是怎样称霸全球的
  5. 027. 从从门槛和可复制性聊聊生意模式
  6. Ultraedit删除空白行
  7. hd620显卡驱动 linux,倍控工控机i7 7500U PVE下核显HD620 HDMI直通成功
  8. EPUB、CAJ 、PDF 格式的区别,有什么好用的安卓epub阅读器
  9. H5开发和原生开发的区别
  10. 如何在word文档使其单页变为横向,教程来啦,怎样把word文档更改为横向