在 qt 中运行程序以从 DAQ 读取时出错

Posted

技术标签:

【中文标题】在 qt 中运行程序以从 DAQ 读取时出错【英文标题】:Error while running program in qt to read from DAQ 【发布时间】:2016-03-02 21:59:22 【问题描述】:

我有一个简单的数据采集系统,可以从 NI USB 6009 读取模拟直流电压。我还创建了一个 qt 控制台应用程序来使用 NIDAQmxbase 功能。

.pro文件如下

QT += core
QT -= gui

TARGET = untitled4
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp
LIBS += "C:\Users\nikhilmurthy161229\Documents\untitled3\nidaqmxbase.lib"
HEADERS += "C:\Users\nikhilmurthy161229\Documents\untitled3\NIDAQmxBase.h"

我已将 .lib 文件和 .h 文件包含在项目文件夹中。

我的 main.cpp 文件如下所示

#include <QCoreApplication>
#include <stdio.h>
#include <NIDAQmxBase.h>


#define DAQmxErrChk(functionCall)  if( DAQmxFailed(error=(functionCall)) )  goto Error;  

int main(int argc, char *argv[])

    QCoreApplication a(argc, argv);
    // Task parameters
        int32       error = 0;
        TaskHandle  taskHandle = 0;
        char        errBuff[2048]='\0';

        // Channel parameters
        char        chan[] = "nikhil\ai0";
        float64     min = 0;
        float64     max = 5;

        // Timing parameters
        uInt64      samplesPerChan = 1;

        // Data read parameters
        float64     data;
        int32       pointsToRead = 1;
        int32       pointsRead;
        float64     timeout = 5;


        DAQmxErrChk (DAQmxBaseCreateTask("",&taskHandle));
        DAQmxErrChk (DAQmxBaseCreateAIVoltageChan(taskHandle,chan,"",DAQmx_Val_Cfg_Default,min,max,DAQmx_Val_Volts,NULL));
        DAQmxErrChk (DAQmxBaseStartTask(taskHandle));
        DAQmxErrChk (DAQmxBaseReadAnalogF64(taskHandle,pointsToRead,timeout,DAQmx_Val_GroupByChannel,&data,samplesPerChan,&pointsRead,NULL));
        DAQmxErrChk (DAQmxBaseStopTask(taskHandle));
        DAQmxErrChk (DAQmxBaseClearTask(taskHandle));

        printf ("Acquired reading: %f\n", data);

    Error:
        if( DAQmxFailed(error) )
            DAQmxBaseGetExtendedErrorInfo(errBuff,2048);
        if( taskHandle!=0 ) 
            DAQmxBaseStopTask(taskHandle);
            DAQmxBaseClearTask(taskHandle);
        
        if( DAQmxFailed(error) )
        printf ("DAQmxBase Error %ld: %s\n", error, errBuff);
        return a.exec();

但是,当我运行程序时,我收到以下错误 “DAQmxBase 错误 -200428:传递给控制中的任务/通道的值无效”

我已验证设备名称与 NI MAX 中的相同,但问题仍然存在。

请帮忙

【问题讨论】:

【参考方案1】:

作为一个快速的猜测,我会让你的 chan 变量

char        chan[] = "nikhil\\ai0";

char 数组可能正在解释反斜杠

【讨论】:

【参考方案2】:

DAQ 设备名称不正确。

即使您使用 MAX 将设备重命名为 nikhil,DAQmx Base 枚举设备的方式也不同。使用lsdaq 实用程序查找您的设备名称(可能是Dev1)并更改您的chan 变量以使用发现的名称。

【讨论】:

以上是关于在 qt 中运行程序以从 DAQ 读取时出错的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Windows 上运行 Qt 应用程序的发布版本时出错

QT运行出错

在 Qt 中将 x 可执行文件作为按钮事件运行时出错

在 Android 应用程序上部署 Qt 时出错

尝试运行在 C++ 中读取的文件时出错

在树莓派的交叉编译 qt 中构建应用程序时出错