基于NI 数据采集器的QT C++应用程序开发测试输出模拟电压信号

电子说

1.2w人已加入

描述

前言:
       最近项目需要用到NI的数据采集设备,之前的项目在使用NI的采集设备时更多用的labview编写相关程序,也能够快速搭建相关的采集平台,但是最近更多的使用的QT c++,前期的的其他工作均是有QT完成,所以这次采用QT C++平台编写相关程序,仅对QT调用NI设备API的配置做记录。

NI-DAQmx安装:
       NI官网下载DAQmx。

模拟电压

根据需要下载相应的版本,我下载的是最新版本。

下载完成之后,安装需要选择 ANSI C Support。

模拟电压

 

新建QT工程:
工程可选择32位编译器或者64位编译器均可,添加外部库和头文件。网上很多人说需要选择32位编译器是因为没有找到相应的64位库导致。

 

模拟电压

64位库路径:

C:Program Files (x86)National InstrumentsSharedExternalCompilerSupportClib64msvc

32位库路径:

C:Program Files (x86)National InstrumentsSharedExternalCompilerSupportClib32msvc

测试代码:
测试代码是应用的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;
}
测试结果:

模拟电压


代码运行正常。

模拟电压

输出正常。
————————————————
  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分