Zahlen von Konsole in Diagramm laden
-
Moin, moin,
ich bastle gerade an einem Steuerprogramm für Roboter in C++. Dabei hab ich nun oft das Problem, dass ich Zahlenwerte über die Zeit betrachten muss (z.B. zum Einstellen von Reglern und Filtern). Bisher hab ich dafür noch keine grafische Ausgabe erstellt, sondern die Werte werden auf der Konsole (Linux) ausgegeben.
Anstatt nun eine spezielle Lösung für die Steuerung zu bauen, würde ich gerne ein allgemeines Tool haben, dass die Werte direkt aus der Konsolenausgabe einließt. Ich stelle mir von der Bedienung etwas in der Art wie grep vor, in dass ich die Ausgabe meines Programm pipe und mit einem Regulären Ausdruck angebe, wo die Werte sind. Das Tool sollte die Werte dann möglichst in 'Echtzeit' in einem Diagramm darstellen.Ich habe leider keine Ahnung, wie ich so ein Tool bezwichnen soll (siehe Titel), weshalb meine Suche im Netz bisher erfolglos war. Kennt vielleicht jemand von euch so ein Tool?
cu
Thundernail
-
Schau dir mal Gnuplot an.
-
Das war ne schnelle Antwort!!
Und dabei wollte ich gerade schlafen gehen - jetzt muss ich mir das aber erstmal ansehen ;).
-
Moin, moin,
ich hab mir gnuplot angeschaut und man kann ja wirklich viel damit machen. Es kann auch Daten von der Standardausgabe lesen und anzeigen aber leider wird die Anzeige erst erstellt, wenn das laufende Programm selbst beendet wurde. Oder hab ich in der Doku was übersehen? Ich möchste aber die Daten parallel zum Programmlauf angezeigt bekommen.
Gibt es noch andere Vorschläge?
cu
Thundernail
-
Dann ist aber pipen nicht das Richtige.
Natürlich lassen sich die meisten wissenschaftlichen Programme, die was wert sind, durch APIs auch von externen Programmen ansprechen. SCILAB z.B.
Aber nach meiner Erfahrung dauert die Einarbeitung zu lange und da kann man sich gleich irgendeine hochlevelige Grafikschnittstelle aussuchen und die Daten vom Programm zeichnen lassen.
Richtig schick wäre übrigens der Ansatz, das Programm einen Stream oder Socket öffnen zu lassen, über den man die Status abfragen kann. Aber das ist vielleicht für dein Projekt zu überzogen.
-
Thundernail schrieb:
ich hab mir gnuplot angeschaut und man kann ja wirklich viel damit machen. Es kann auch Daten von der Standardausgabe lesen und anzeigen aber leider wird die Anzeige erst erstellt, wenn das laufende Programm selbst beendet wurde. Oder hab ich in der Doku was übersehen? Ich möchste aber die Daten parallel zum Programmlauf angezeigt bekommen.
Ne, gnuplot generiert die Graphen sofort, wenn du den plot-Befehl auf rufst.
-
rüdiger schrieb:
Ne, gnuplot generiert die Graphen sofort, wenn du den plot-Befehl auf rufst.
Mein Testprogramm:
#include <iostream> int main() { float f = 0.1; while (f<10.0) { f += 0.1; std::cout << f << std::endl; usleep(100000); } return 0; }gnuplot> plot "< ./a.out"gnuplot wartet 10 Sekunden bis ./a.out fertig ist und dann wird der Graph angezeigt. Ich möchte den Graph aber wachsen sehen (Punkt für Punkt).
SeppSchrot schrieb:
Dann ist aber pipen nicht das Richtige.
Natürlich lassen sich die meisten wissenschaftlichen Programme, die was wert sind, durch APIs auch von externen Programmen ansprechen. SCILAB z.B.
Aber nach meiner Erfahrung dauert die Einarbeitung zu lange und da kann man sich gleich irgendeine hochlevelige Grafikschnittstelle aussuchen und die Daten vom Programm zeichnen lassen.
Leider hab ich mit mit GUI-Programmierung noch nicht beschäftigt. Mein Anspruch an die Schnittstelle im Programm wäre dann auch, dass sie ähnlich flexibel zu handhaben ist wie die Debugausgaben und die Software muss weiterhin auf einem System ohne X-Server laufen können.
SeppSchrot schrieb:
Richtig schick wäre übrigens der Ansatz, das Programm einen Stream oder Socket öffnen zu lassen, über den man die Status abfragen kann. Aber das ist vielleicht für dein Projekt zu überzogen.
So ähnlich sähe es dann aber warscheinlich aus, da sowieso einzellne Prozesse über TIPC die Daten untereinander austauschen. Aber warum Kompliziert, wenn da draußen vielleicht eine Lösung schon fertig ist
