前言:
最近項目需要用到NI的數(shù)據(jù)采集設(shè)備,之前的項目在使用NI的采集設(shè)備時更多用的labview編寫相關(guān)程序,也能夠快速搭建相關(guān)的采集平臺,但是最近更多的使用的QT c++,前期的的其他工作均是有QT完成,所以這次采用QT C++平臺編寫相關(guān)程序,僅對QT調(diào)用NI設(shè)備API的配置做記錄。
NI-DAQmx安裝:
NI官網(wǎng)下載DAQmx。
根據(jù)需要下載相應(yīng)的版本,我下載的是最新版本。
下載完成之后,安裝需要選擇 ANSI C Support。
新建QT工程:
工程可選擇32位編譯器或者64位編譯器均可,添加外部庫和頭文件。網(wǎng)上很多人說需要選擇32位編譯器是因為沒有找到相應(yīng)的64位庫導(dǎo)致。
64位庫路徑:
C:Program Files (x86)National InstrumentsSharedExternalCompilerSupportClib64msvc
32位庫路徑:
C:Program Files (x86)National InstrumentsSharedExternalCompilerSupportClib32msvc
測試代碼:
測試代碼是應(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;
}
測試結(jié)果:
代碼運行正常。
輸出正常。
————————————————
審核編輯:湯梓紅
-
NI
+關(guān)注
關(guān)注
19文章
1123瀏覽量
100611 -
模擬電壓
+關(guān)注
關(guān)注
6文章
64瀏覽量
18358 -
C++
+關(guān)注
關(guān)注
22文章
2114瀏覽量
73854 -
Qt
+關(guān)注
關(guān)注
1文章
308瀏覽量
38065
發(fā)布評論請先 登錄
相關(guān)推薦
評論