Comment mettre à jour périodiquement le graphique Labview lors de la collecte de données multicanaux à un débit élevé

StackOverflow https://stackoverflow.com/questions/345893

  •  19-08-2019
  •  | 
  •  

Question

Vous recherchez de l'aide pour un programme de collecte de données Labview. Si je pouvais collecter 2 ms de données à 8 kHz (donne 16 points de données) par canal (je collecte des données sur 4 canaux analogiques avec une carte d’acquisition de données National Instruments). La tâche de collecte DAQ-MX donne un tableau 1D de 4 formes d'onde.

Si je n’affiche pas les données, tout mon temps de calcul est de 2 ms environ et c’est acceptable si la boucle de traitement est un peu en retard sur la boucle de collecte. La mise à jour du graphique dans le panneau avant de Labview introduit un retard inacceptable. Nous n’avons pas besoin de mettre à jour très rapidement l’affichage à 5-10Hz serait probablement suffisant. Mais je ne sais pas comment mettre cela en place.

Mon VI Labview actuel comporte trois boucles parallèles

  1. Une boucle temporisée pour la collecte de données
  2. Une boucle d'analyse et de traitement
  3. Une boucle de faible priorité pour la mise en cache de données sur disque sous forme de fichier TDMS

Les données sont transmises de la boucle de collecte aux autres boucles à l'aide d'une file d'attente. Les exemples de Labview m'ont donné quelques idées mais je suis coincé.

Toute suggestion, référence ou idée serait la bienvenue.

Merci

Azim

Question de suivi

eaolson suggère de ré-échantillonner les données pour les afficher. Les données provenant de la lecture DAQ-MX constituent un tableau unidimensionnel de formes d'onde. Il me faudrait donc en quelque sorte créer ou concaténer les données de forme d'onde pour chaque canal. Ensuite, ré-échantillonnez les données avant de mettre à jour le graphique du panneau avant. Je suppose que la meilleure approche serait de mettre les données en file d'attente et, dans une boucle d'affichage, de mettre en file d'attente la construction de pile, de rééchantillonner les données en fonction de la résolution de l'écran, puis de mettre à jour le graphique. Y aurait-il une autre approche? Je vais regarder (NI Labview Forum) [ http://forums.ni.com/ni /board?board.id=170] pour plus d'informations, comme suggéré par eaolson.

Mises à jour

  1. modification du taux de mise à jour acceptable des graphiques à 5-10Hz (merci Underflow et eaolson)
  2. la boucle de cache disque est une priorité basse (merci eaolson)
  3. Merci pour toutes les réponses.
Était-ce utile?

La solution

Votre description générale de l’architecture semble solide, mais ... atteindre un taux de 30 Hz pour tout graphique non trivial sera un défi. Assurez-vous que vous avez vraiment besoin de ce taux avant d'essayer de le réaliser. L’optimisation à ce niveau peut prendre un certain temps.

Références utiles:

Vous pouvez reporter les mises à jour du panneau . . Cela empêche la régénération du panneau avant jusqu'à ce que vous soyez prêt à le faire, ce qui vous permet de mettre en tampon les données en arrière-plan et de ne les dessiner qu'occasionnellement.

Vous devez connaître (a) l'affichage synchrone . Cette option permet de contrôler les taux d’affichage.

Il existe des conseils généraux . disponible sur l'accélération de l'exécution.

Il existe un rapport sur la vitesse d'exécution sur les forums LAVA. Googler sur les forums LAVA est une excellente idée si vous devez optimiser votre vitesse.

Autres conseils

Mises à jour télévisées à environ 30 Hz. Pas plus que cela n'est plus rapide que l'œil humain ne peut voir. 30 Hz devrait être au taux de mise à jour maximum que vous devriez considérer pour un affichage, pas le point de départ. Considérez un taux de mise à jour de 5-10 Hz.

graphiques LabVIEW ajoutent la les données les plus récentes aux données historiques qu'ils stockent et affichent toutes les données à la fois. À 8 kHz, vous acquérez au moins 8 000 points de données par canal et par seconde. Cela signifie que le tableau sauvegardant ce graphique doit être redimensionné en permanence pour contenir les nouvelles données. De plus, même si votre graphique a une largeur de 1000 pixels, cela signifie que vous affichez 8 points de données par pixel d'écran. Il n’ya généralement aucune raison d’afficher plus d’un point de données par pixel. Si vous avez vraiment besoin de taux de mise à jour rapides, tracez moins de données. Créez un tableau contenant les données historiques et tracez uniquement chaque Nème point de données, où N est choisi de manière à représenter, par exemple, quelques centaines de points seulement.

N'oubliez pas que vos boucles peuvent fonctionner à des vitesses différentes. Il peut être satisfaisant d’exécuter la boucle d’écriture sur disque à une fréquence bien inférieure au taux de collecte des données, par exemple toutes les deux secondes.

Évitez les nœuds de propriété si vous pouvez. Ils s'exécutent dans le thread d'interface utilisateur, ce qui est plus lent que la plupart des autres exécutions.

En dehors de cela, il est vraiment difficile de donner beaucoup de conseils substantiels sans voir le code ou des informations plus spécifiques. Vous pouvez également poser votre question sur les forums NI LabVIEW . Il y a beaucoup de gens utiles là-bas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top