web-dev-qa-db-fra.com

Comment tracer des données par programme c?

Je suis un ingénieur en mécanique qui n'a que des connaissances limitées en programmation C. J'ai écrit du code pour faire des simulations et je veux visualiser les résultats de la simulation. En ce moment j'utilise Dev-C pour avoir écrit mes codes. Avec les commandes fopen et fprintf, je génère un .dat fichier contenant les résultats. Ensuite, j'ouvre le programme GNUPLOT et j'importe mon .dat fichier pour tracer les résultats. Cela prend du temps et je dois attendre la fin de la simulation. Existe-t-il un moyen simple de connecter mon traceur à Dev-C, donc mon traceur commence à tracer des données pendant la simulation? Une bibliothèque ou etc.?

20
CrazyHorse

Puisque vous connaissez déjà gnuplot, la chose la plus simple à faire peut être d'appeler simplement gnuplot à partir de votre programme et de lui rediriger les données:

FILE *gnuplot = popen("gnuplot", "w");
fprintf(gnuplot, "plot '-'\n");
for (i = 0; i < count; i++)
    fprintf(gnuplot, "%g %g\n", x[i], y[i]);
fprintf(gnuplot, "e\n");
fflush(gnuplot);
13
Edgar Bonet

OK, une solution, lorsque vous écrivez dans un fichier, serait de simplement appeler system() lorsque vous écrivez dans le fichier et d'appeler gnuplot.

Mais cela signifie que vous devez changer le nom de fichier à chaque fois, mais je crains que si vous le faites, cela ne semblera pas correct, car vous envoyez chaque fois de petites quantités de données.

http://www.gnu.org/software/libc/manual/html_node/System-Calls.html

Je n'ai jamais utilisé gnuplot, mais si vous regardez cette page ( http://gnuplot-tricks.blogspot.com/ ) vous pouvez trouver des astuces qui permettraient à cela de bien fonctionner.

Mais, je pense, sauf si vous allez tout tracer vous-même et sauter gnuplot, alors vous devrez peut-être attendre, comme vous êtes.

Vous pouvez trouver que l'interface C vers gnuplot peut vous aider:

http://ndevilla.free.fr/gnuplot/

3
James Black

J'utilise PLPlot pour tracer à partir de C et je l'ai trouvé à la fois efficace et facile. Il est multiplateforme, open source et prend en charge un large éventail de capacités de tracé. Je recommanderais de jeter un œil aux exemples pour commencer.

2
kallikak

J'ai fait un petit tour pour voir ce que d'autres personnes ont fait concernant le traçage en temps réel dans gnuplot, et j'ai trouvé ceci:

http://users.softlab.ntua.gr/~ttsiod/gnuplotStreaming.html

Il y a un petit script Perl qui peut conduire le traçage, et vous venez de canaliser vos informations.

Étant donné que vos données sont écrites dans un fichier, vous souhaiterez peut-être tail -f yourdata.dat et le canaliser dans le traceur en temps réel.

De plus, comme vous utilisez les appels du fichier stdio, vous devrez vider régulièrement (en appelant fflush)

De toute évidence, votre simulation s'exécuterait en arrière-plan ou dans un autre shell. De cette façon, vous pouvez sortir du tracé à tout moment sans interrompre la simulation.

J'espère que cela vous sera utile.

0
paddy