前言:
最近項(xiàng)目需要用到NI的數(shù)據(jù)采集設(shè)備,之前的項(xiàng)目在使用NI的采集設(shè)備時(shí)更多用的labview編寫相關(guān)程序,也能夠快速搭建相關(guān)的采集平臺(tái),但是最近更多的使用的QT c++,前期的的其他工作均是有QT完成,所以這次采用QT C++平臺(tái)編寫相關(guān)程序,僅對(duì)QT調(diào)用NI設(shè)備API的配置做記錄。
NI-DAQmx安裝:
NI官網(wǎng)下載DAQmx。

根據(jù)需要下載相應(yīng)的版本,我下載的是最新版本。
下載完成之后,安裝需要選擇 ANSI C Support。

新建QT工程:
工程可選擇32位編譯器或者64位編譯器均可,添加外部庫(kù)和頭文件。網(wǎng)上很多人說(shuō)需要選擇32位編譯器是因?yàn)闆](méi)有找到相應(yīng)的64位庫(kù)導(dǎo)致。

64位庫(kù)路徑:
C:Program Files (x86)National InstrumentsSharedExternalCompilerSupportClib64msvc
32位庫(kù)路徑:
C:Program Files (x86)National InstrumentsSharedExternalCompilerSupportClib32msvc
測(cè)試代碼:
測(cè)試代碼是應(yīng)用的NI提供的示例代碼。
#include
#include
#include
#include
#define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else
#define PI 3.1415926535
int32 CVICALLBACK DoneCallback(TaskHandle taskHandle, int32 status, void *callbackData);
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int32 error=0;
TaskHandle taskHandle=0;
float64 data[1000];
char errBuff[2048]={'?'};
int i=0;
for(;i<1000;i++)
// data[i] = 0+9.95*sin((double)i*2.0*PI/50.0);
data[i]=10-10*(double)i/1000;
/*********************************************/
// DAQmx Configure Code
/*********************************************/
DAQmxErrChk (DAQmxCreateTask("",&taskHandle));
DAQmxErrChk (DAQmxCreateAOVoltageChan(taskHandle,"Dev1/ao0","",-10.0,10.0,DAQmx_Val_Volts,NULL));
DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",1000.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,1000));
DAQmxErrChk (DAQmxRegisterDoneEvent(taskHandle,0,DoneCallback,NULL));
/*********************************************/
// DAQmx Write Code
/*********************************************/
DAQmxErrChk (DAQmxWriteAnalogF64(taskHandle,1000,0,10,DAQmx_Val_GroupByChannel,data,NULL,NULL));
/*********************************************/
// DAQmx Start Code
/*********************************************/
DAQmxErrChk (DAQmxStartTask(taskHandle));
printf("Generating voltage continuously. Press Enter to interruptn");
getchar();
Error:
if( DAQmxFailed(error) )
DAQmxGetExtendedErrorInfo(errBuff,2048);
if( taskHandle!=0 ) {
/*********************************************/
// DAQmx Stop Code
/*********************************************/
DAQmxStopTask(taskHandle);
DAQmxClearTask(taskHandle);
}
if( DAQmxFailed(error) )
printf("DAQmx Error: %sn",errBuff);
printf("End of program, press Enter key to quitn");
getchar();
return a.exec();
}
int32 CVICALLBACK DoneCallback(TaskHandle taskHandle, int32 status, void *callbackData)
{
int32 error=0;
char errBuff[2048]={'?'};
// Check to see if an error stopped the task.
DAQmxErrChk (status);
Error:
if( DAQmxFailed(error) ) {
DAQmxGetExtendedErrorInfo(errBuff,2048);
DAQmxClearTask(taskHandle);
printf("DAQmx Error: %sn",errBuff);
}
return 0;
}
測(cè)試結(jié)果:

代碼運(yùn)行正常。

輸出正常。
————————————————
審核編輯:湯梓紅
-
NI
+關(guān)注
關(guān)注
19文章
1124瀏覽量
102068 -
模擬電壓
+關(guān)注
關(guān)注
6文章
64瀏覽量
18624 -
C++
+關(guān)注
關(guān)注
22文章
2119瀏覽量
75237 -
Qt
+關(guān)注
關(guān)注
2文章
314瀏覽量
39066
發(fā)布評(píng)論請(qǐng)先 登錄
低成本NI-USB-6009數(shù)據(jù)采集卡,數(shù)據(jù)采集,提供Labview使用指導(dǎo)
關(guān)于NI myRIO模擬信號(hào)數(shù)據(jù)采集
不是NI公司的數(shù)據(jù)采集器,怎么加入labview進(jìn)行采集呢?
基于QT/Embedded的可變情報(bào)板應(yīng)用程序開(kāi)發(fā)
基于QT/Embedded的可變情報(bào)板應(yīng)用程序開(kāi)發(fā)
低成本的U盤數(shù)據(jù)采集器設(shè)計(jì)

基于C++的數(shù)據(jù)采集器的設(shè)計(jì)與實(shí)現(xiàn)

跨平臺(tái)C++圖形用戶界面應(yīng)用程序QT4中文教程手冊(cè)
通用采集器電壓量信號(hào)采集電路(基于FPGA)

評(píng)論