Discussions au sujet des autres produits NI

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

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 donne 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 Compliments
Message 1 sur 2
3 288 Visites
Message dupliqué -> voir ici
Alexandre M. | Certified LabVIEW Developer
Embedded and Control Systems Engineer (NI France)
0 Compliments
Message 2 sur 2
3 262 Visites