staging.inyokaproject.org

[C] gnuplot in eigene Programme einbinden

Status: Gelöst | Ubuntu-Version: Lubuntu 12.04 (Precise Pangolin)
Antworten |

Dr.Eisenbart

Anmeldungsdatum:
26. November 2013

Beiträge: Zähle...

Hallo,

ich möchte einige Temperaturen, die zyklisch von einem Messgerät abgefragt werden, im 10-s-Takt mit gnuplot darstellen. Das funktioniert soweit ganz gut.

OS: Lubuntu

Linux lem01 3.2.0-56-generic #86-Ubuntu SMP Wed Oct 23 17:31:43 UTC 2013 i686 i686 i386 GNU/Linux

gnuPLot Version: 4.4

Problem: Jedes Mal, wenn gnuplot in der Messschleife mit Daten gefüttert wird, dann bekommt gnuplot den Fokus. Wenn man nebenbei z.B. einen Text schreiben möchte, dann wird man also im 10-s-Abstand von dieser Fokus-Übernahme durch gnuplot gestört. Gibt es eine Möglichkeit, dies zu unterbinden? Das gnuplot-Fenster soll also aktualisiert werden, wenn es mit Daten gefüttert wird; Es soll aber nicht den Fokus an sich ziehen, d.h. auf Tastatur- und Maussignale reagieren.

Hier noch der Quelltext:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?C
Initialisierung:    
    p_gnu = popen("gnuplot" , "w");         // eine Pipe für die Kommunikation mit gnuplot öffnen
    ...	                                    // sonstige Formatierungen
    fprintf( p_gnu, "set key left box\n");  // Legendebox links
    fflush( p_gnu );            // Befehle sofort ausführen

In der Messschleife:
    // Daten mit gnuplot darstellen
    fprintf( p_gnu, "plot \"%s\" u 1:2, \"\" u 1:3, \"\" u 1:4, \"\" u 1:5\n", outfile);
    fflush( p_gnu );       // Befehl sofort ausführen
    // Daten in PNG-Datei plotten
    fprintf( p_gnu, "set terminal push\n"); // save the current terminal settings 
    fprintf( p_gnu, "set terminal png\n");  // change terminal to png
    fprintf( p_gnu, "set output \"%s\"\n", outfile_png);
    fflush( p_gnu );       
    fprintf( p_gnu, "replot\n");            // plot the picture into the png file
    fprintf( p_gnu, "set output\n");        // restore output to the interactive mode
    fprintf( p_gnu, "set terminal pop\n");  // restore the terminal
    fflush( p_gnu );       

Zum Programmende:
    pclose(p_gnu);
?>

TheDarkRose

Avatar von TheDarkRose

Anmeldungsdatum:
28. Juli 2010

Beiträge: 3459

Dr.Eisenbart schrieb:

1
2
3
Initialisierung:    
    p_gnu = popen("gnuplot" , "w");         // eine Pipe für die Kommunikation mit gnuplot öffnen
    ...	                                    // sonstige Formatierungen

Das wäre natürlich interessant gewesen. Ansonsten kennt gnuplot die Option -noraise [does not raise plot window after each plot].

set term x11 noraise

Dr.Eisenbart

(Themenstarter)

Anmeldungsdatum:
26. November 2013

Beiträge: Zähle...

Hallo DarkRose,

der Tipp mit noraise war gut. Da sich mein gnuplot mit

  "Terminal type set to 'wxt' 

meldet, habe ich

  set terminal wxt noraise 

benutzt.

Beim ersten Aufruf des gnuplot-Fensters holt es sich nach wie vor den Fokus. Bei allen weiteren Aufrufen dann jedoch nicht mehr. Dafür ist das Problem für mich gelöst.

Danke.

Antworten |