Multifunction DAQ

cancel
Showing results for 
Search instead for 
Did you mean: 

erreur :Value passed to the Task/Channels In control is invalid

Bonjour,

 

je voudrais générer un signal analogique. j'ai une carte PCI-6110 avec une BNC-2110 et je code en C avec un simple éditeur de texte. mon driver est le nidaqmxbase 3.2.0.

la carte est bien détectée (lsdaq :Dev1 ). j'utilise Mandrive 2007 32 bit.

la compilation se fait sans erreurs avec gcc myprogram.c -o myprogram -I/usr/local/natinst/nidaqmxbase/include/ -Wall /usr/local/lib/libnidaqmxbase.so

lors de l'exécution, j'obtiens cette erreur : Value passed to the Task/Channels In control is invalid.

 

avez vous des idées?

 Merci d'avance

Pedro

 

voici mon program  :

#include <math.h>
#include <NIDAQmxBase.h>
#include <stdio.h>
#include <time.h>

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

#define PI    3.1415926535

static int gRunning=0;

int main(int argc, char *argv[])
{
    // Task parameters
    int32       error = 0;
    TaskHandle  taskHandle = 0;
    int32       i = 0;
    char        errBuff[2048]={'\0'};
    time_t      startTime;
    bool32      done=0;

    // Channel parameters
    char        chan[] = "Dev1/ao0";
    float64     min = -10.0;
    float64     max = 10.0;

    // Timing parameters
    #define     bufferSize 512
    uInt64      samplesPerChan = bufferSize;
    float64     sampleRate = 20000.0;

    // Data write parameters
    float64     data[bufferSize];
    int32       pointsWritten;
    float64     timeout = 10.0;

    for(;i<bufferSize;i++)
        data[i] = 9.95*sin((double)i*20.0*PI/(double)bufferSize);
    DAQmxErrChk (DAQmxBaseCreateTask("",&taskHandle));
    DAQmxErrChk (DAQmxBaseCreateAOVoltageChan(taskHandle,chan,"",min,max,DAQmx_Val_Volts,NULL));
    DAQmxErrChk (DAQmxBaseCfgSampClkTiming(taskHandle,"Dev1/ao/SampleClock",sampleRate,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,samplesPerChan));
    DAQmxErrChk (DAQmxBaseWriteAnalogF64(taskHandle,samplesPerChan,0,timeout,DAQmx_Val_GroupByChannel,data,&pointsWritten,NULL));
    DAQmxErrChk (DAQmxBaseStartTask(taskHandle));
    gRunning = 1;
    // The loop will quit after 10 seconds
    startTime = time(NULL);
    while( gRunning && !done && time(NULL)<startTime+10 ) {
        DAQmxErrChk (DAQmxBaseIsTaskDone(taskHandle,&done));
        if( !done )
            sleep(1);
    }

Error:
    if( DAQmxFailed(error) )

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

0 Kudos
Message 1 of 3
(3,110 Views)

Bonjour,

 

Pourriez-vous préciser au niveau de quelle fonction appelée l'erreur a lieu?
Avez-vous un numéro d'erreur?

 

Cordialement,

Thomas B. | CLAD
National Instruments France

0 Kudos
Message 2 of 3
(3,086 Views)

 Hi,

 

Actually, it was the driver who causes that.

I change my driver from nidaqmxbase to nidaqmx and everything works correctly.

Thank you for your interest.

 

Pedro

0 Kudos
Message 3 of 3
(3,073 Views)