Discussions au sujet des autres produits NI

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

stabiliser le temps d'une lecture et d'une écriture.

Bonjour,
 
Je travaille avec un usb6008 en langage C.
mon programme est asez simple, je veux pouvoir lire ou écrire une seule donnée quand j'appelle une fonction.
ma première fonction configure les "taches":
 
ex:

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

 

0 Compliments
Message 1 sur 3
3 180 Visites

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

0 Compliments
Message 2 sur 3
3 167 Visites

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

 

0 Compliments
Message 3 sur 3
3 152 Visites