Forum: Mikrocontroller und Digitale Elektronik Messdaten mit GNUplot anzeigen


von H. G. (ledi)


Lesenswert?

Hallo,

ich möchte mit dem Programm GNUplot Messdaten (Strom und Spannung) 
grafisch anzeigen lassen. Die Daten sende ich von meinem Mikrocontroller 
über die UART-Schnittstelle und einem UART/USB-Wandler an den PC.

Weiß jemand, wie ich die empfangenen Daten auf der Seite des PC genau 
verarbeiten muß, damit GNUplot diese Daten grafisch anzeigt?

von Klaus W. (mfgkw)


Lesenswert?

Du könntest die Daten in eine Datei umleiten, und dann gnuplot mit 
diesem Dateinamen aufrufen.
Wie der Aufruf genau aussieht, hängt davon ab, wie die Daten aussehen (t 
in der ersten Spalte, I in der zweiten, U in der dritten?).

Wenn man gnuplot aufruft, kann man mit dem Kommando help sich durch eine 
Online-Doku hangeln. Im Internet gibt es natürlich auch viel, inkl. 
Beispielen.

von H. G. (ledi)


Lesenswert?

Klaus Wachtler schrieb:
> Du könntest die Daten in eine Datei umleiten, und dann gnuplot mit
> diesem Dateinamen aufrufen.

Wie erstelle ich bzw. wie leite ich die seriellen Daten in diese Datei?

von Ein Gast (Gast)


Lesenswert?

H. G. schrieb:
> Wie erstelle ich bzw. wie leite ich die seriellen Daten in diese Datei?

Das kommt auf dein Betriebssystem drauf an.

von Christian B. (casandro)


Lesenswert?

In der Regel so was wie cat /dev/ttyS0 > datei

von Wolfgang (Gast)


Lesenswert?

Christian Berger schrieb:
> In der Regel so was wie cat /dev/ttyS0 > datei

Unter Windows funktioniert das so bestimmt nicht. Dort könnte LogView 
eine alternative Möglichkeit sein.

von Vincent H. (vinci)


Lesenswert?

Wenns nur um die "Verarbeitung" der Daten geht -> Soweit ich weiß 
zeichnet Gnuplot so ziemlich alles, was einen simplen Space besitzt.

Also 2 Spalten
Messwert1 Messwert2
Messwert3 Messwert4

usw. usf.

Textfile schreiben unter unix: open + write

Mehr brauchts da eigentlich nicht, dürften ein paar Zeilen Code sein.

von Christian B. (casandro)


Lesenswert?

Wolfgang schrieb:
> Unter Windows funktioniert das so bestimmt nicht. Dort könnte LogView
> eine alternative Möglichkeit sein.

Unter Windows geht dafür
type com1: > datei
Oder er installiert einfach cygwin.

von Ingo W. (Gast)


Lesenswert?

Im ZIP-Archiv von Beitrag "Re: Visualisierung von geloggten Daten"
ist das Kommandozeilentool "sercapt" enthalten, welches diesem Zweck 
dient und jeder neuen Textzeile gleich noch einen Zeitstempel vorlegt, 
falls der nicht schon vom Quellsystem kommen sollte. Benutzung, siehe 
Anleitung.
mfG ingo

von H. G. (ledi)


Lesenswert?

Christian Berger schrieb:

> Unter Windows geht dafür
> type com1: > datei

Kannst du mir das genauer erläutern?
Gebe ich das im cmd-Fenster ein?

von Klaus W. (mfgkw)


Lesenswert?

ja

von Björn B. (elmo)


Lesenswert?

Hier ein nettes Beispiel zur Verwendung von Gnuplot für Messdaten:

http://blog.sarine.nl/2012/08/19/commandline-logging-of-data-the-plotting/

von Klaus W. (mfgkw)


Lesenswert?

Hier im Forum wurde das ebenso schon mehrfach behandelt.
Wie bei allen Fragen von H. G. (ledi) lässt er sich wieder den Hinweis 
auf elementare Doku/Datenblatt/Suchfunktion/Tutorial hinterhertragen.

Es wird Zeit, endlich so etwas wie google zu erfinden.

Naja, jeder wie er will. Bis man hier tausend Leute bemüht, hätte man es 
schon selbst im Netz gefunden.

von H. G. (ledi)


Lesenswert?

Ich hab jetzt versucht, die Messdaten mit HTerm aufzuzeichnen und 
abzuspeichern.
Das geht ganz gut. Allerdings sind die gespeicherten Daten so nicht 
GNUPlot kompatibel.
Beispiel:

12:41:30.075:
073
12:41:31.075:
074
12:41:32.074:
075
12:41:33.073:
076
12:41:34.073:
077
12:41:35.072:
078
12:41:36.072:

In Zeile 1 steht der timestamp gefolgt vom Messwert (hier 73) in der 
Zeile 2. Dann wieder timestamp, Messwert usw.

Für GNUPlot brauche ich die Daten aber mit Tabulator getrennt:
12:41:30   073
12:41:31   074
12:41:32   075

Wie kann ich diese Daten am einfachsten umwandeln?

von Stefan Salewski (Gast)


Lesenswert?

H. G. schrieb:
> Wie kann ich diese Daten am einfachsten umwandeln?

Ich habe jetzt nur dein letztes Posting angesehen, aber ich denke, 
Umwandeln ist nicht unbedingt nötig.

set datafile separator ":\n"

oder ähnlich könnte funktionieren.

Doppelpunkt gefolgt von Zeilenumbruch ist ja dein "Trenner" zwischen 
Zeit und Datenwert. \n wäre der Zeilenumbruch bei Linux/Unix, bei 
anderen OS womöglich etwas anders.

Guck mal in der Dokumentation nach "set datafile separator".

Wenn man die Datei verändern will, wäre das mit sed sicher einfach, 
wobei sed bei Windows womöglich nicht verfügbar ist.

von H. G. (ledi)


Lesenswert?

Habs versucht mit set datafile separator ":\n", aber leider nix.

In der Hilfe steht auch nur:

Syntax:

      set datafile separator {"<char>" | whitespace}

Examples:

      # Input file contains tab-separated fields
      set datafile separator "\t"

      # Input file contains comma-separated values fields
      set datafile separator ","

Zum Test habe ich die Datendatei geändert auf:

12:41:30
073
12:41:31
074
12:41:32
075
12:41:33
076
12:41:34
077

mit
set datafile separator "\n"
plot "testfile.dat"

erhalte ich nur einen leeren Graphen

von Lukas K. (carrotindustries)


Lesenswert?

Ist in python ein Zweizeiler:
1
import sys
2
print(sys.stdin.read().replace(":\n", "\t"))

von H. G. (ledi)


Lesenswert?

Lukas K. schrieb:
> Ist in python ein Zweizeiler:
>
1
> import sys
2
> print(sys.stdin.read().replace(":\n", "\t"))
3
>

Cool das es in Phyton so geht. Aber wie kann ich das auf meine Textdatei 
anwenden?

von Lukas K. (carrotindustries)


Lesenswert?

H. G. schrieb:
> Lukas K. schrieb:
>> Ist in python ein Zweizeiler:
>>
1
>> import sys
2
>> print(sys.stdin.read().replace(":\n", "\t"))
3
>>
>
> Cool das es in Phyton so geht. Aber wie kann ich das auf meine Textdatei
> anwenden?
Hau das in ne datei, nennen wir sie mal conv.py
dann im Terminal
1
pythton conv.py < eingabe > ausgabe
Liest die Datei eingabe ein, wandelt sie um und schreibt die Ergebnisse 
in die Datei ausgabe

von Michael (Gast)


Lesenswert?

H. G. schrieb:
> Die Daten sende ich von meinem Mikrocontroller

Wenn du die Daten selber mit dem µC erzeugst, kann dich doch niemand 
davon abhalten, Timestamp und Messwert in einer Zeile zu senden, so dass 
GnuPlot das direkt versteht.

von Nicht "Gast" (Gast)


Lesenswert?

Hallo,

um live daten darzstellen ist gnuplot vielleicht keine so gute Idee.

Python in Verbindung mit pyserial und mathplotlib ist ideal um schnell 
Daten direkt von der seriellen Schnittstelle plotten.

Grüße,

von Lukas K. (carrotindustries)


Lesenswert?

Nicht "Gast" schrieb:
> um live daten darzstellen ist gnuplot vielleicht keine so gute Idee.

Auch das ist kein Ding der Unmöglichkeit: 
http://blog.mister-muffin.de/2011/11/13/gnuplot-live-update/

von H. G. (ledi)


Lesenswert?

Michael schrieb:

> Wenn du die Daten selber mit dem µC erzeugst, kann dich doch niemand
> davon abhalten, Timestamp und Messwert in einer Zeile zu senden, so dass
> GnuPlot das direkt versteht.

Ja, aber ich habe keine RTC für die Zeit auf der Mikrocontrollerseite.

von H. G. (ledi)


Lesenswert?

Lukas K. schrieb:

> Hau das in ne datei, nennen wir sie mal conv.py
> dann im Terminal
>
1
> pythton conv.py < eingabe > ausgabe
2
>
> Liest die Datei eingabe ein, wandelt sie um und schreibt die Ergebnisse
> in die Datei ausgabe

Das geht aber nur unter Linux oder?

von Michael (Gast)


Lesenswert?

H. G. schrieb:
> Ja, aber ich habe keine RTC für die Zeit auf der Mikrocontrollerseite.

Im Prinzip wäre das hinzukriegen
Beitrag "Die genaue Sekunde / RTC"

Hast du LogView schon probiert? Das plottet live mit und fügt auch einen 
Timestamp hinzu.

von Lukas K. (carrotindustries)


Lesenswert?

H. G. schrieb:
> Das geht aber nur unter Linux oder?
Nein, das Unix deiner Wahl tut's ebenfalls. Ich meine Windows könnte das 
auch, aber afaik wird die Ausgabe erst geschrieben, wenn das Programm 
fertig ist. Wo wir 'grad bei Windows wären: Achte darauf, welche 
Zeilenenden die Eingabedaten haben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.