Ошибка при запуске программы в qt для чтения из 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: значение, переданное в задачу/каналы In contril, неверно».

Я проверил, что имя устройства такое же, как в NI MAX, но проблема все еще сохраняется.

ПОЖАЛУЙСТА ПОМОГИ


person nikhil murthy    schedule 02.03.2016    source источник


Ответы (2)


В качестве быстрого предположения я бы сделал вашу переменную chan

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

Массив символов, вероятно, интерпретирует обратную косую черту

person ColKai    schedule 03.03.2016

Неверное имя устройства сбора данных.

Несмотря на то, что вы использовали MAX для переименования устройства в nikhil, DAQmx Base нумерует устройства по-другому. Используйте утилиту lsdaq, чтобы найти имя вашего устройства (вероятнее всего, Dev1) и измените переменную chan, чтобы использовать обнаруженное имя.

person Joe Friedrichsen    schedule 08.03.2016