Seite 1 von 1

Real-Time Plot von Bewegungskurve

Verfasst: Dienstag 26. Juni 2012, 13:03
von web277p9
Hey,
ich arbeite an einer Motorsteuerung, die mir während des Verfahrens Zeit und Position im Fenster ausgibt. Ich würde aus diesen Daten nun allerdings gerne einen Real-Time Plot erzeugen.
Ich habe viel im Internet und in diesem Forum gesuch und auch die beiden folgenden Beispiele gefunden. Link 1 und Link 2

Beide habe ich versucht, in mein Programm zu implemtieren, aber das hat nicht wirklich funktioniert.
Hier ist ein Auzug aus meinem Programm mit dem Beispiel aus Link 2.

Code: Alles auswählen

#Dabei sind:
d.SdoRd(0x3850, 0)        # aktuelle Zeit
d.SdoRd(0x3762, 0)        # aktuelle Position
# Welche geplottet werden sollen

Code: Alles auswählen

from pylab import *
import matplotlib.pyplot as plt
fig = plt.figure() 


from mc.dsa import *                      # Modul mc.dsa mit der Klasse Dsa importieren
import time                               # Modul time importieren
import math                               # Modul math importieren

####
#Code und Berechnungen
####

def test(neuxwert, neuywert):         # Komplett nur übernommen
    global background
    # restore the clean slate background
    fig.canvas.restore_region(background)
    # update the data
    t = neuxwert
    y = neuywert
    xdata.append(t)
    ydata.append(y)
    xmin, xmax = ax.get_xlim()
    if t>=xmax:
        ax.set_xlim(xmin, 2*xmax)
        fig.canvas.draw()
        background = fig.canvas.copy_from_bbox(ax.bbox)

    line.set_data(xdata, ydata)

    # just draw the animated artist
    ax.draw_artist(line)
    print "zeichne!"
    # just redraw the axes rectangle
    fig.canvas.blit(ax.bbox)

 
fig.canvas.draw()    # Richtige Position?

while 1:                                                                      # unendliche Schleife

            mc.Delay(1)                                                       # 1ms Verzögerung

            # Verfahren
            if Step==0:                                                       # Wenn
               d.SdoWr( 0x3790, 0, Sollpos)                             # Starte Positionierung nur einmalig
               mc.Delay(1)                                                    # 1ms Verzögerung
               Step=1                                                         #
            elif Step==1:
               status=d.SdoRd(0x3002, 0)                                      # Status lesen
               if status & 0x10:                                   # Warte bis Zielpos erreicht Bit 4 = target reached ?
                  mc.Delay(1)                                                 # 1ms Verzögerung
                  Step=0
                  if Sollpos==Ende:                                           # Sollposition umschalten
                     Sollpos=Start                                            # Jetzt Reinfahren
                  else:
                     Sollpos=Ende                                             # Jetzt Rausfahren
            
            # Ausgaben
            print d.SdoRd(0x3850, 0)-StartZeit , "," , d.SdoRd(0x3762, 0)     # Ausgabe der Zeit[ms] | Position [incr]         
            xWert = d.SdoRd(0x3850, 0)-StartZeit	        # x-Wert (aktuelle Zeit)
            yWert = d.SdoRd(0x3762, 0)        		       # y-Wert (aktuelle Position)
    

            test(xWert , yWert )                                 # Ausführen
           
Das Programm läuft ohne Fehlermedung, es passiert aber nichts :)
Geht das ganze vielleicht sogar einfacher, oder seht ihr den Fehler?

Vielen Dank schoneinmal!
Grüße,
web

Re: Real-Time Plot von Bewegungskurve

Verfasst: Mittwoch 27. Juni 2012, 11:18
von Sr4l
irgendwie fehlt dir ein draw() nach jedem aufruf von test().


Minimales Beispiel aus dem matplotlib doku:

Code: Alles auswählen

from matplotlib import pylab

pylab.ion()
x = pylab.arange(0,2*pylab.pi,0.01)
line, = pylab.plot(x,pylab.sin(x))

i = 0
while True:
    line.set_ydata(pylab.sin(x+i/10.0))
    pylab.draw()
    i += 1