le 04-27-2011 06:06 AM
Bonjour,
Je bosse sur un logiciel, en C, utilisant la carte d'acquisition NI PCI-6220.
Mon problème est que j'ai créé une tache, j'ai configuré l'horloge comme ceci :
DAQmxErrChk (DAQmxCfgSampClkTiming(gTaskHandle,
NULL,
Frequence ,
DAQmx_Val_Rising,
DAQmx_Val_ContSamps,
SAMP_PAR_CHAN));
Frequence = 1600 et SAMP_PAR_CHAN = 1024
J'ai ensuite créé l'évènement :
// Creation evenements
DAQmxErrChk (DAQmxRegisterEveryNSamplesEvent(gTaskHandle,
DAQmx_Val_Acquired_Into_Buffer,
SAMP_PAR_CHAN,
0,
NI_Acquisition_RT,
NULL));
J'ai bien évidement lancé la tache par la suite.
Mon problème est que j'ai cette erreur qui survient tout le temps au bout de plusieurs minutes :
Attempted to read samples that are no longer available.
The requested sample was previously available, but has since been overwritten.
Increasing
the buffer size, reading the data more frequently, or specifying a
fixed number of samples to read instead of reading all available
samples might correct the problem.
J'ai vérifié, logiquement, un évènement devrais survenir toutes les 64 ms(et donc lancé NI_ACQUISITION_RT, fonction dans laquelle je récupère les 1024 données). Mais, des fois, l'évènement n'est pas lancé à temps, et l'erreur survient donc!
C'est pour quoi j'aimerais, après avoir récupéré le bloc de 1024 dans la fonction NI_ACQUISITION_RT, vérifié que le bloc suivant ne soit pas plein(et dans le cas où il est plein, je récupère directement les données, ce qui permettra d'éviter l'erreur si je ne me trompe pas?).
J'aimerais donc savoir si une fonction existe pour vérifié qu'un bloc de données est plein dans le buffer de la carte d'acquisition?
Merci d'avance pour vos réponses!
Ridbark
Résolu ! Accéder à la solution.
le 04-28-2011 08:45 AM
04-28-2011 09:05 AM - modifié 04-28-2011 09:06 AM
16 000* pas 1600, je me suis trompé d'un 0 ... :S
Et ces valeurs ont était choisis volontairement, oui.
Ridbark
le 05-02-2011 02:59 AM
Bonjour,
Le buffer doit être au moins égal voir supérieur à votre vitesse acquisition. Ainsi, si votre vitesse d'échantillonnage est de 16 000,vous devez mettre au minimun un buffer de 16 000 échantillons (SAMP_PAR_CHAN).
Cordialement
le 05-02-2011 09:07 AM
J'y avais déjà pensé, et effectivement, dans mon cas, je n'en étais qu'à 4094 échantillons au lieu de 16000, normal que ça bug.
J'ai mis, pour être vraiment tranquille, 50 sous-buffer, étant donné que l'ordinateur sur lequel mon programme tournera est dédié à ce logiciel, et qu'il tournera en continue, j'ai préféré en mettre pas mal, surtout qu'en en mettant 16 (donc 16*1024), ou même 20 pour arrondir, le bug apparait toujours ... tandis qu'a 50, il n'apparait plus.
Donc merci pour l'aide!
D'ailleurs, en regardant de plus près la documentation de DAQmx fournie, aucune fonction ne permet de seulement vérifier qu'un sample(donc 1024 échantillons dans mon cas)sont présent dans le buffer, après le pointeur courant.
Ridbark