NI公司有很多款性能比较好的数据采集卡,我实验室有数据采集卡6353和USB-6210,都是USB连接电脑,只是供电方式不同,通道数目不同,我都编过一些程序,程序编写是一样的,都是调用NI公司提供的DAQmx里面的函数,让数据采集卡按照我们的要求工作,这里我只介绍USB-6210吧。
刚开始学数据采集卡时,关于数据采集卡的C语言程序时不好找,大多数是通过NI公司的labview控制的,用C语言控制的比较少,所以在这里讲解一下,希望能对大家有用。
好,现在正式开始,最近几天在实验室采集压力传感器的数据,用的是NI公司的数据采集卡,压力传感器输出的是电压信号,经过数据采集卡的模数转换和采集以后传到电脑上,编程环境:VS2010和VS2015都可以。
首先,买数据采集卡的时候会带有一个光盘,这个光盘里面有很多产品信息和一些配套软件,首先安装NI-DAQmx驱动程序,具体的安装方法光盘里面的有个文档有专门讲解,挺简单的,就不介绍了,下面主要介绍一下如何编程控制数据采集卡。
先介绍C语言版的吧,安装完DAQmx驱动程序以后我们可以找到官方给的C语言例程:开始->所有程序->National Instruments->NI DAQmx->NI DAQmx范例/NI DAQmx 文档,范例可以找到例程,文档里面包含一些NI DAQmx的文档链接,文档里面对于编程最有用的是NI-DAQmx C Reference Help ,它提供了编程需要的API。这个网上也可以搜到。
首先新建一个项目,项目建成以后开始编程,
第一步:将NIDAQmx.h头文件和官方提供的库文件NIDAQmx.lib复制粘贴到所建项目下面
第二步:在项目里面加入NIDAQmx.h头文件和NIDAQmx.lib
第三步:在.cpp文件中将NIDAQmx.h头文件和NIDAQmx.lib加入,代码如下
1 #include "NIDAQmx.h"
2 #pragma comment(lib,"NIDAQmx.lib")
第四步:调用API中的函数编程序实现自己想实现的数据采集方式,
数据采集方式有很多种,我常用的是每次采集有限个数据和连续不断的采集两种采集方式,这里介绍前一种数据采集方式,后一种采集方式的实现我会另外写一篇博客。
啥也不说了,上代码:
1 #include <stdio.h>
2 #include "NIDAQmx.h"
3 #pragma comment(lib,"NIDAQmx.lib")
4 #include<iostream>
5 using namespace std;
6
7 #define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else
8 float64 data[6000], last=0;
9 float64* Smooth(float64 data[]);
10 #define N 12
11 #define M 20
12
13 int main(void)
14 {
15 int32 error=0;
16 TaskHandle taskHandle=0;
17 int32 read;
18 char errBuff[2048]={'