日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用C语言给NI公司数据采集卡编程序进行电压数据采集

發(fā)布時間:2023/12/20 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用C语言给NI公司数据采集卡编程序进行电压数据采集 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??? NI公司有很多款性能比較好的數(shù)據(jù)采集卡,我實驗室有數(shù)據(jù)采集卡6353和USB-6210,都是USB連接電腦,只是供電方式不同,通道數(shù)目不同,我都編過一些程序,程序編寫是一樣的,都是調(diào)用NI公司提供的DAQmx里面的函數(shù),讓數(shù)據(jù)采集卡按照我們的要求工作,這里我只介紹USB-6210吧。

??? 剛開始學數(shù)據(jù)采集卡時,關(guān)于數(shù)據(jù)采集卡的C語言程序時不好找,大多數(shù)是通過NI公司的labview控制的,用C語言控制的比較少,所以在這里講解一下,希望能對大家有用。

??? 好,現(xiàn)在正式開始,最近幾天在實驗室采集壓力傳感器的數(shù)據(jù),用的是NI公司的數(shù)據(jù)采集卡,壓力傳感器輸出的是電壓信號,經(jīng)過數(shù)據(jù)采集卡的模數(shù)轉(zhuǎn)換和采集以后傳到電腦上,編程環(huán)境:VS2010和VS2015都可以。

???? 首先,買數(shù)據(jù)采集卡的時候會帶有一個光盤,這個光盤里面有很多產(chǎn)品信息和一些配套軟件,首先安裝NI-DAQmx驅(qū)動程序,具體的安裝方法光盤里面的有個文檔有專門講解,挺簡單的,就不介紹了,下面主要介紹一下如何編程控制數(shù)據(jù)采集卡。

???? 先介紹C語言版的吧,安裝完DAQmx驅(qū)動程序以后我們可以找到官方給的C語言例程:開始->所有程序->National Instruments->NI DAQmx->NI DAQmx范例/NI DAQmx 文檔,范例可以找到例程,文檔里面包含一些NI DAQmx的文檔鏈接,文檔里面對于編程最有用的是NI-DAQmx C Reference Help ,它提供了編程需要的API。這個網(wǎng)上也可以搜到。

??? 首先新建一個項目,項目建成以后開始編程,

??? 第一步:將NIDAQmx.h頭文件和官方提供的庫文件NIDAQmx.lib復制粘貼到所建項目下面

??? 第二步:在項目里面加入NIDAQmx.h頭文件和NIDAQmx.lib

??? 第三步:在.cpp文件中將NIDAQmx.h頭文件和NIDAQmx.lib加入,代碼如下


#include "NIDAQmx.h"#pragma comment(lib,"NIDAQmx.lib")

??? 第四步:調(diào)用API中的函數(shù)編程序?qū)崿F(xiàn)自己想實現(xiàn)的數(shù)據(jù)采集方式,

????????????????? 數(shù)據(jù)采集方式有很多種,我常用的是每次采集有限個數(shù)據(jù)和連續(xù)不斷的采集兩種采集方式,這里介紹前一種數(shù)據(jù)采集方式,后一種采集方式的實現(xiàn)我會另外寫一篇博客。

??? 啥也不說了,上代碼:

???

#include <stdio.h> #include "NIDAQmx.h" #pragma comment(lib,"NIDAQmx.lib") #include<iostream> using namespace std;#define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else float64 data[6000], last=0; float64* Smooth(float64 data[]); #define N 12 #define M 20int main(void) {int32 error=0;TaskHandle taskHandle=0;int32 read;char errBuff[2048]={'\0'};memset(data, 0, sizeof(float64) * 6000);/*********************************************/// DAQmx Configure Code//第一步:創(chuàng)建任務(wù)//第二步:創(chuàng)建電壓輸入通道//第三步:配置采樣時鐘//第四步:進行終端配置,這個將決定怎么連接電路。//第五步:開始任務(wù)//第六步:讀取數(shù)據(jù)//第七步:對數(shù)據(jù)進行保存和處理,這里是保存了原始數(shù)據(jù),然后進行濾波,最后保存濾波后的數(shù)據(jù),//都保存到txt文檔中了/*********************************************/DAQmxErrChk (DAQmxCreateTask("",&taskHandle));DAQmxErrChk (DAQmxCreateAIVoltageChan(taskHandle,"Dev2/ai0","",DAQmx_Val_Cfg_Default ,-10.0,10.0,DAQmx_Val_Volts,NULL));DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",10000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,6000));DAQmxErrChk (DAQmxSetAITermCfg(taskHandle,"Dev2/ai0",DAQmx_Val_RSE));/*********************************************/// DAQmx Start Code/*********************************************/DAQmxErrChk (DAQmxStartTask(taskHandle));/*********************************************/// DAQmx Read Code/*********************************************/DAQmxErrChk (DAQmxReadAnalogF64(taskHandle,6000,10.0,DAQmx_Val_GroupByChannel,data,6000,&read,NULL));FILE *fp1=fopen("data1.txt","w+");for(int l=0;l<6000;l++){fprintf(fp1,"%f",data[l]);fputc(',',fp1);fprintf(fp1,"%f",0.0001*l);fputc('\n',fp1);}fclose(fp1);for(int i=0;i<M;i++) //濾波的次數(shù){Smooth(data);}FILE *fp2=fopen("data2.txt","w+");for(int l=0;l<6000;l++){fprintf(fp2,"%f",data[l]);fputc(',',fp2);fprintf(fp2,"%f",0.0001*l);fputc('\n',fp2);}fclose(fp2);printf("Acquired %d points\n",(int)read);Error:if( DAQmxFailed(error) )DAQmxGetExtendedErrorInfo(errBuff,2048);if( taskHandle!=0 ) {/*********************************************/// DAQmx Stop Code/*********************************************/DAQmxStopTask(taskHandle);DAQmxClearTask(taskHandle);}if( DAQmxFailed(error) )printf("DAQmx Error: %s\n",errBuff);printf("End of program, press Enter key to quit\n");getchar();return 0; } float64* Smooth(float64 data[]) { //添加自己的濾波算法,我用的是滑動平均濾波,具體實現(xiàn)我會另外寫一篇博客 }


?? 這是一個簡單的NI數(shù)據(jù)采集卡的程序,只采集了有限個數(shù)據(jù),進行了濾波和數(shù)據(jù)存儲,我還實現(xiàn)過連續(xù)的數(shù)據(jù)采集,并且實現(xiàn)了C++類的封裝和調(diào)用,這個我會另外寫一篇博客。

??? 如果有問題,請在底下留言,謝謝大家觀看。


??????????????????????????????????????????????

總結(jié)

以上是生活随笔為你收集整理的用C语言给NI公司数据采集卡编程序进行电压数据采集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。