繁体   English   中英

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

[英]Error while running program in qt to read from DAQ

我有一个简单的数据采集系统,可从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中的设备名称相同,但问题仍然存在。

请帮忙

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

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

char数组可能在解释反斜杠

DAQ设备名称不正确。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM