le 06-12-2006 03:31 AM
creation_lecture_analogique1(int num_canal,int num_tache)
{
DAQmxErrChk(DAQmxCreateTask("tache",&task));
DAQmxErrChk(DAQmxCreateAIVoltageChan(task,"Dev1/ai0","",DAQmx_Val_RSE,-10.0,10.0,DAQmx_Val_Volts,NULL));
DAQmxErrChk (DAQmxCfgSampClkTiming(task,NULL,10000.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,1));
DAQmxErrChk(DAQmxStartTask(task));
}
long lecture_analogique(int num_tache)
{
DAQmxErrChk(DAQmxReadBinaryI32(task,1,-1,DAQmx_Val_GroupByChannel,valeur_lue,1,&read,NULL));
DAQmxErrChk(DAQmxSetReadRelativeTo(task,10428));
DAQmxErrChk(DAQmxSetReadOffset(task,-1));
return valeur_lue[0];
}
mon problème est que j'ai le code d'erreur -200279 qui aparait souvent, et le temps de l'acquisition varie entre 100µs et 400µs.
je voudrai stabiliser le temps autours de 100 µs ce qui correspond à une freq d'echantillonnage de 10Ks/s.
pour l'écriture je n'ai pas d'erreur mais le tps varie entre 1 et 5 ms, est-il possible de le stabiliser autours de la ms?
Merci d'avance
Adrien
le 06-13-2006 04:28 AM
Bonjour,
L'erreur -200279 apparaît lorsque le buffer définis par le nombre de points à acquérir est trop petit, il faut pour corriger cela l'augmenter. (voir lien ci-dessous)
http://digital.ni.com/public.nsf/websearch/7AD4854943BF344186256D6500807935?OpenDocument
http://forums.ni.com/ni/board/message?board.id=232&message.id=2926&requireLogin=False
http://forums.ni.com/ni/board/message?board.id=250&message.id=20164&requireLogin=False
Le probléme de l'écriture est que si vous générer en mode point par point, c'est le PC qui décide des points à générer, le boitier va donc suivre le cadencement de votre PC, et ne pourra pas être stable sous windows ce n'est pas un systéme d'exploitatation déterministe.
Pour cela, il faut plutôt utiliser des PC avec des sytémes d'exploitation temps réel.
Cordialement,
Christophe S.
Account Manager East of France І Certified LabVIEW Associate Developer І National Instruments France
le 06-19-2006 03:18 AM
j'ai modifié mon programme de plusieurs facons:
1ère:
DAQmxErrChk (DAQmxCfgSampClkTiming(task,NULL,10000.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,100));
lecture:
DAQmxErrChk(DAQmxReadBinaryI32(task[num_tache],1000,-1,DAQmx_Val_GroupByScanNumber,valeur_lue,1000,&read,NULL));
cela fonctionne pas toujours, j'ai qqfois une erreur 200279 ou 200077 et en plus le tps d'execution de la lecture peut atteindre 4ms qqfois!!!
2ème:
DAQmxErrChk(DAQmxReadBinaryI32(task[num_tache],-1,-1,DAQmx_Val_GroupByScanNumber,valeur_lue,1000,&read,NULL));
je n'ai plus d'erreur mais je ne lis pas correctrement a chaque fois(valeur_lue rempli de 0).
par ailleurs je voulais savoir si on pouvait avoir un tps d'exécution de readBinaryI32 de l'ordre de 40µs ce qui ne devrai pa etre normal pour moi...
pour mesurer le tps j'utilise QueryPerformanceCounter
Si qq'un peut m'aider ca serai top!!
merci Adrien64