04-29-2009 10:31 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 :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;
}
05-02-2009 11:31 AM
05-04-2009 02:29 AM
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