7
votes

Temps réel tracé / journalisation des données

Je vais écrire un programme qui parcourt des données d'un capteur connecté à l'ordinateur. La valeur du capteur va être tracée en fonction du temps (valeur du capteur sur l'axe des Y, le temps sur l'axe des x). Je veux pouvoir ajouter de nouvelles valeurs à l'intrigue en temps réel. Quoi de mieux pour faire cela avec en C ++?

EDIT: Et d'ailleurs, le programme sera exécuté sur une machine Linux


2 commentaires

Paul, ce n'est pas vraiment une question, c'est plus une demande de conseil et même alors c'est vague. Je suppose que vous recherchez une bibliothèque de graphique qui vous permet d'ajouter des données à la parcelle de manière dynamique. Je suggère de choisir les mots-clés de cette phrase et de vous rendre à Google.


Avez-vous besoin d'une heure exacte ou est-ce que le temps est-il suffisant? La récupération de l'heure relative du système d'exploitation peut être plus rapide que la durée absolue.


6 Réponses :


2
votes

écrire une fonction qui peut tracer un std :: deque d'une manière que vous aimez, alors .push_back () valeurs du capteur sur la file d'attente. et .pop_front () Valeurs de la file d'attente si elle devient trop longue pour un bon complot.

La nature exacte de votre fonction de tracé dépend de votre plate-forme, des besoins, du sens de l'esthétique, etc.


2 commentaires

Cela semble prometteur. Je vais regarder ça. Merci!


Vous ne pouvez pas itérer sur un std :: file d'attente , vous voudrez donc probablement utiliser std :: deque directement à la place; Vous pouvez toujours push_back et pop_front avec une drique.



1
votes

Vous pouvez utiliser Bague Bague . Dans ce tampon, vous avez lu la position de lecture et de l'écriture. De cette façon, un thread peut écrire sur un tampon et une autre lecture et tracer un graphique. Pour l'efficacité, vous finissez généralement par écrire votre propre cadre.

La taille de ce tampon peut être estimée à l'aide d'une vitesse de livraison de données par exemple à partir de capteur (40 kHz?), de taille d'une sonde et d'une durée de temps que vous souhaitez conserver à des fins de traçage.

Cela dépend également si vous souhaitez stocker de telles données non compressées, stockez le complot rendu - tout pour une analyse hors ligne ultérieure. Dans l'environnement non-RTOS, votre "temps réel" dépend de la vitesse de traitement: quelle vitesse vous pouvez récupérer / stocker / stocker et tracer des données. Habituellement, c'est une efficacité de temps quasi réel.


0 commentaires

0
votes

J'ai fait une chose similaire pour un dispositif qui avait un capteur de perméabilité attaché via RS232.

  • octets d'emballage reçus de capteur en paquets
  • Utilisez une collection (principalement une liste) pour les stocker
  • empêche la collecte de passer sur une taille fixe en prélevant les valeurs les moins récentes avant que de nouveaux arrivent
  • Trouvez une bibliothèque graphique appropriée à dessiner avec (peut-être sdl si vous voulez la garder facile et croisée), mais ce choix dépend du type de graphique dont vous avez besoin ( ncurses < / em> peut suffire)
  • Enfin, car étant donné que vous utilisez un capteur, je suppose que votre approche sera multi-threadé, réfléchissez-y et utilisez une collection synchronisée ou une collection permettant d'ajouter des valeurs lorsque d'autres threads les récupèrent (itérateurs aussi oubliés, peut-être qu'un tableau est suffisant)

    BTW Je pense qu'il y a tellement de bibliothèques, juste la recherche d'eux:


0 commentaires

0
votes

Je suppose que vous déployez cette application sur un RTO. Mais, quel sera le taux de données et quelles sont les exigences en temps réel! Par conséquent, comme écrit ci-dessus, une solution simple peut être plus que suffisante. Mais si vous avez des contraintes de temps en temps réel, tout change radicalement. Un design multi-threadé avec des tuyaux de données peut résoudre vos problèmes en temps réel.


0 commentaires

4
votes

Êtes-vous particulièrement préoccupé par l'aspect C ++? J'ai fait 10Hz ou donc les données de taper sans briser la transpiration en mettant Gnuplot dans une boucle de lecture / raffretation / rafraîchissante ou avec LiveGraph sans problèmes.


0 commentaires

1
votes

Vous voudrez peut-être vérifier RRDTool pour voir si cela répond à vos exigences.

RRDTool est un système de journalisation de données de haute performance et de système de graphique pour les données de la série chronologique.


0 commentaires