le 04-29-2009 10:33 AM
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;
}
le 05-04-2009 11:57 AM