0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

liangyuhc 来源:恋 作者:恋 2023-06-26 17:19 次阅读

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

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

poYBAGSZV4yAKLT8AACT32dFSTg281.png

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

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

pYYBAGSZV5eALvaLAADOPogITKo327.png

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

poYBAGSZV6CAbVknAAB0HaJfcFU811.png

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;
}
测试结果:

poYBAGSZV6yAKI-VAAAa5mCpipU403.png


代码运行正常。

pYYBAGSZV8CAGZlpAA2HdoMgmOo848.png

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

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

    关注

    19

    文章

    1117

    浏览量

    99511
  • 模拟电压
    +关注

    关注

    6

    文章

    58

    浏览量

    18149
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900
  • Qt
    Qt
    +关注

    关注

    1

    文章

    299

    浏览量

    37339
收藏 人收藏

    评论

    相关推荐

    基于串行通信的虚拟仪器数据采集器

    目前的虚拟仪器系统大多采用美国NI公司LabView平台,采用PCI总线结构的数据采集卡进行数据采集。主从式虚拟仪器技术在软件和硬件都摆脱了LabView的框套。该技术利用基于单片机的数据采集
    发表于 03-09 15:52

    低成本NI-USB-6009数据采集卡,数据采集,提供Labview使用指导

    `NI USB-600914位, 48 kS/s低价位多功能数据采集卡(二手95新,898元,全网最低,现货100件) · 8路模拟输入通道(14位分辨率,48 kS/s) ·2路模拟输出
    发表于 08-15 10:58

    关于NI myRIO模拟信号数据采集

    我使用NI myRIO进行模拟信号数据采集程序很简单,如下:然后由外部函数信号发生发出1K
    发表于 11-08 17:19

    数据采集分享】基于LABVIEW的USB接口高速数据采集的设计

    引言  在日常的测试测量中,经常使用数据采集采集数据。但是很多数据采集卡往往通过PCI总线完成数据的传输,它有诸多弊端,例如操作不便,受限
    发表于 12-16 11:32

    要用USB7310数据采集器和labview进行数据采集具体要怎么操作

    毕业设计要做一个信号测试系统,需要使用数据采集卡对待测模拟信号进行采集,老师给提供的是北京中泰研创的USB7310
    发表于 06-04 21:36

    USB数据记录仪 / USB数据采集器

    设备等模拟和数字被测单元中,自动采取非电量或电量信号,送到上位机或计算机中进行分析和处理的仪器。数据采集器应用广泛:可视测量、数据记录、控制、自动化
    发表于 06-22 09:40

    不是NI公司的数据采集器,怎么加入labview进行采集呢?

    不是NI公司的数据采集器,怎么加入labview进行采集呢?
    发表于 11-08 19:08

    二手NI USB-6343全新美国数据采集卡回收

    了获得专利的NI信号读写技术,该技术通过基于消息的指示和设备智能来实现基于USB的高速双向数据传输。 借助USB X系列,用户可同时双向传输模拟、数字和计数
    发表于 10-22 11:21

    基于USB总线的高速数据采集系统

    引言  在日常的测试测量中,经常使用数据采集采集数据。但是很多数据采集卡往往通过PCI总线完成数据的传输,它有诸多弊端,例如操作不便,受限
    发表于 05-07 09:40

    通过NI-DAQmx的10个函数来解决数据采集中的问题

    NI数据采集(DAQ)硬件用户一直在充分利用软件的诸多特性来节省开发时间,并提高数据采集应用程序的性能。其中一个能节省大量
    发表于 07-13 07:00

    工业数据采集器的优势

      1)更加坚固耐用的品质  我们都知道,工业生产中的环境非常的恶劣,其恶劣的环境对工业数据采集器产品的耐用性是一种严峻的考验,而国内供应高效专业的工业数据采集器商家对工厂环境进行深度了解,提供了
    发表于 12-07 16:15

    Qt 跨平台C++图形用户界面应用程序开发框架

    Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可
    发表于 03-28 21:03

    基于C++数据采集器的设计与实现

    数据采集器是普遍用在超市、商场、各大小企业之中的数据采集设备。本文主要介绍如何基于C++语言来设计数据采集器,并根据数据库的基本原理,成功设
    发表于 04-15 19:34 0次下载
    基于<b class='flag-5'>C++</b>的<b class='flag-5'>数据采集器</b>的设计与实现

    什么是数据采集器数据采集器的分类有哪些

    数据采集器是一种具有现场实时数据采集、处理功能的自动化设备。一般具备实时采集、自动存储、即时显示、即时反馈、自动处理、自动传输等功能,为现场数据的真实性、有效性、实时性、可用性提供了保
    发表于 03-11 17:41 4732次阅读

    NI数据采集技术之模拟I/O与数字I/O

    本期节目介绍测试测量的接线方式,如何使用 NI 数据采集板卡及底层的 DAQmx VI 来完成模 拟输入输出以及数字输入输出功能。 在介
    发表于 08-21 10:36 1次下载