LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

problème de ressources processeur

Bonjour à tous,
 
Je suis en train de développer une application avec un boîtier d'acquisition USB. Mon boîtier a une fréquence d'échantillonnage de 1MHz. Je fais une acquisition en continu et j'effectue un horodatage et une conversion des données 8 bits des ports numériques pour ne sélectionner que les voies qui m'intéresse.
Le problème est que les différents traitements sont relativement lent et ne permettent pas d'avoir une fréquence d'échantillonnage élevée (20 kHz maxi). Le PC prend du retard sur le boîtier jusqu'à saturation de la Fifo et plantage de l'acquisition.
J'ai déjà réduit les temps de traitement en enregistrant régulièrement les données sur le disque dur, ce qui permet de réduire la taille des tableaux à traiter.
J'ai essayé de faire deux boucles while, une avec l'acquisition et l'autre avec le traitement en y ajoutant une temporisation pour favoriser l'acquisition. La partie traitement accédait aux données issues de l'acquisition grâce à des variables globales ou locales dans lesquelles étaient copiés les tableaux, mais l'utilisation de variables a empiré les choses. Les temps de traitement étaient encore plus lent. J'ai essayé également d'accédé aux tableaux de la boucle acquisition avec des noeuds de propriétés, mais ça n'a pas changé grand chose.
 
Est-ce que quelqu'un pourrait me dire comment améliorer mes temps de traitement?
 
Je vous mets mon code en pièce jointe.
 
 
Merci d'avance.
Max
0 Kudos
Message 1 of 5
(2,733 Views)

Votre problème se gère normalement  avec une structure de programmation de type producteur/consommateur, telle que décrite par exemple ici.

Evitez les variables locales ou globales ou les noeuds de propriété, qui, entre autres inconvénients, imposent des copies multiples des variables.

La bonne approche est d'utiliser une file (Queue), que vous trouverez dans la sous-palette "Synchronisation".

Chilly Charly    (aka CC)
Message 2 of 5
(2,722 Views)

Merci pour votre aide,

J'ai essayé de palcer les éléments issus de mon acquisition dans une file d'attente comme vous me l'avez conseillé. Il est vrai que je peux augmenter la fréquence d'échantillonnage, mais le problème est que la partie traitement prend toujours du retard. Le nombre d'éléments dans la file d'attente ne cesse d'augmenter.

Y aurait-il un moyen d'accélérer mes temps de traitement.

Max

0 Kudos
Message 3 of 5
(2,713 Views)
1/ Pourquoi initialisez-vous le tableau tampon pour ensuite utiliser une fonction insert element qui force un redimentionnement, alors qu'il aurait fallu utiliser une fonction Replace Array element ?
2/ Débarrassez-vous des variables locales, comme je vous l'ai déjà dit dans mon précédent message. Elles ralentissent probablement de facteur 2 votre programme. Remplacez les par des registres à décalage.
3/ 100000 points dans le buffer de votre graphe déroulant ??? Comment voulez-vous avoir une vitesse d'exécution convenable pendant un scroll de ce graphe ???
Il y a probablement encore beaucoup à dire, mais je pense que si vous commencez par nettoyer ces quelques erreurs, l'accélération seta très perceptible.
Chilly Charly    (aka CC)
Message 4 of 5
(2,706 Views)

Meci pour votre aide.

Je vais suivre vos conseils.

 

Encore merci.

 

Max

0 Kudos
Message 5 of 5
(2,694 Views)