Real-Time Plot von Bewegungskurve
Verfasst: Dienstag 26. Juni 2012, 13:03
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.
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
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

Geht das ganze vielleicht sogar einfacher, oder seht ihr den Fehler?
Vielen Dank schoneinmal!
Grüße,
web