Discussions au sujet de NI LabVIEW

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

débordement de mémoire

Bonjour ,

 

Je fais l'acquisition de 6 paramètre à 100kHz , j'utilise la carte NI USB 6361 mais je n'arrive pas , j'ai une erreur 200631 ,d’après l'erreur j'ai un débordement de mémoire  je comprend pas pourquoi , est ce que il y une façon de régler ce problème ? est ce que le problème vient de mon pc?

est ce que il y a un moyen de régler ce problème sans diminuer la fréquence d’échantillonnage.

pour enregistrer les données j'utilise le daqmxConfigureLogging

0 Compliments
Message 1 sur 4
281 Visites

Bonjour,

 

Cela est très certainement lié à une taille de buffer

 

En ajoutant le noeud de propriété "Daqmx Read" Most Recent, cela permet de ne prendre que les derniers échantillons du buffer

Essai.png

J'espère que cela pourra résoudre ton problème

Message 2 sur 4
250 Visites

Bonjour 

 

Pour compléter la réponse de baptiste, le problème de buffer doit venir de la périodicité à laquelle vous venez lire les échantillons. Suivant la configuration de la fonction read DAQmx, cette erreur peut arriver car vous ne lisez pas assez vite les échantillons et les buffers se remplissent. DAQmx retourne cette erreur quand on est en acquisition continue et qu'il y a un écrasement d'échantillons et donc une perte de données.

Pour vous apporter une meilleure réponse il nous faudrait aussi un peu plus de code pour voir votre implémentation.

 

Dans votre cas il serait préférable d'avoir une architecture producteur consommateur car on commence a avoir quelques points à traiter. Autrement dit, une boucle qui ne fait que l'acquisition des données et qui envoie les données à une autre boucle qui s'occupe de les traiter.

 

 

Maxime R.  

  CLA - Certified LabVIEW Architect / Architecte LabVIEW Certifié
  CTA - Certified TestStand Architect / Architecte TestStand Certifié

0 Compliments
Message 3 sur 4
238 Visites

Tu devrais poster ton code car seulement le message d'erreur laisse place à beaucoup de possibilitées.

 

Comme le message d'erreur provient du vi "DAQmx Is Task Done.vi" je soupçonne que le mode nombre d'échantillons fini est utilisé. Dans ce mode, par défaut,  tous les échantillons sont acquisitionnés avant d'être transférés du onboard memory au buffer de sortie. ll est possible de modifier ce comportement par défaut en utilisant la propriété

Analog Input:General Properties:Advanced:Data Transfer and Memory:Data Transfer Request Condition

On peut utiliser la valeur "Onboard memory More Than Half Full", dans ce cas les échantillons seront transférés aux buffer de sortie lorsque la mémoire onboard sera remplie à plus de la moitié.

 

Pour plus d'efficacité il est possible de configuré daqmxConfigureLogging en mode Log seulement, dans ce cas les acquisitions seront transférés directement au fichier sans utiliser DAQmx Read. Si tu désires quand même utiliser DAQmx Read pour visualiser le data alors dans ce cas il serait probablement préférable d'utiliser la condition Onboard Memory Not Empty pour le transfert du data vers le buffer. Tu peux utiliser le noeud de propriété DAQmx Read et mettre la propriété Read All Available samples à vrai. Dans la boucle contenant le vi DAQmx Is Task Done tu ajoutes alors le vi DAQmx Read et met la valeur "-1" à l'entrée "number of samples per channel" pour lire tous les échantillons disponibles

 

La taille de buffer FIFO d'entrée analogique est de 2047 échantillons, donc à 100KS/s le buffer se remplira en moins de 50 ms, il faudra donc lire le buffer plus rapidement (35 ms dans mon exemple).

 

L'exemple suivant illustre les 2 méthodes (avec et sans visualisation du data).

 

Finite Analog IO.png

 

Ben

 

 

0 Compliments
Message 4 sur 4
219 Visites