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