Visualisierung von Messdaten (Oszilloskop)
Verfasst: Montag 17. August 2020, 15:16
Hallo Forum,
ich habe ein USB Oszilloskop bei dem ich die Messdaten Visualisieren will. Zusätzlich will ich die Daten modifizieren und entsprechend graphisch darstellen. Für die Visualisierung nutze ich PYQT5 und Matplotlib. Bei der Initialisierung lassen sich die Messfenster erzeugen. Die Messkurven (simulierter Sinus und Cosinus) können dargestellt werden. Jedoch lassen sich die Daten über einen Timer nicht aktualisieren. In den entsprechenden Python Fachbüchern kann ich leider auch nichts zu dem Fehler finden. Ich erhalte die Fehlermeldung " object has no Attribute ´_ax1´". Hat jemand einen guten Rat wo mein Fehler liegt?
Vielen Dank für eure Unterstützung und Anmerkungen vorab!
Jürgen
---------------------------------------------------------------Begin CODE--------------------------------------
import time
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QPushButton, QAction, QLineEdit, QMessageBox, QLabel
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import numpy as np
class Window(QtWidgets.QWidget):
def __init__(self):
super(Window, self).__init__()
figure1 = Figure()
figure2 = Figure()
figure3 = Figure()
figure4 = Figure()
canvas1 = FigureCanvas(figure1)
canvas2 = FigureCanvas(figure2)
canvas3 = FigureCanvas(figure3)
ax1 = figure1.add_subplot(111)
ax2 = figure2.add_subplot(111)
ax3 = figure3.add_subplot(111)
toolbar1 = NavigationToolbar(canvas1, self)
toolbar2 = NavigationToolbar(canvas2, self)
toolbar3 = NavigationToolbar(canvas3, self)
mainLayout = QtWidgets.QGridLayout()
mainLayout.addWidget(toolbar1,0,0)
mainLayout.addWidget(toolbar2,0,1)
mainLayout.addWidget(toolbar3,2,0)
mainLayout.addWidget(canvas1,1,0)
mainLayout.addWidget(canvas2,1,1)
mainLayout.addWidget(canvas3,3,0)
ax1.set_title("Messsignal")
ax2.set_title("Analyse 1")
ax3.set_title("Analyse 2")
self.setLayout(mainLayout)
self.setWindowTitle("Signal Analye")
time = np.arange(0, 50, 0.1);
# Amplitude of the sine wave is sine of a variable like time
# Testsignal
amplitude = np.sin(time)
ax1.set_title("Messsignal")
ax1.plot(time,amplitude*10)
time2 = np.arange(0, 50, 0.1);
amplitude2 = np.cos(time2)
ax2.plot(time2,amplitude2)
amplitude3 = amplitude + amplitude2
ax3.plot(time2,amplitude3)
#---------------Timer------------
self._timer = canvas1.new_timer(100, [(self._update_canvas, (),{})])
self._timer.start()
#Aktualisierung des Messsignals
def _update_canvas(self):
self._ax1.clear()
t = nplinespace(0, 10, 0)
self._ax1.plot(t, np.sin(t + time.time()))
self._ax1.figure.canvas1.draw()
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
mainWin = Window()
mainWin.show()
sys.exit(app.exec_())
----------------------------------------------------------Ende CODE---------------------------------------------------------------------------
ich habe ein USB Oszilloskop bei dem ich die Messdaten Visualisieren will. Zusätzlich will ich die Daten modifizieren und entsprechend graphisch darstellen. Für die Visualisierung nutze ich PYQT5 und Matplotlib. Bei der Initialisierung lassen sich die Messfenster erzeugen. Die Messkurven (simulierter Sinus und Cosinus) können dargestellt werden. Jedoch lassen sich die Daten über einen Timer nicht aktualisieren. In den entsprechenden Python Fachbüchern kann ich leider auch nichts zu dem Fehler finden. Ich erhalte die Fehlermeldung " object has no Attribute ´_ax1´". Hat jemand einen guten Rat wo mein Fehler liegt?
Vielen Dank für eure Unterstützung und Anmerkungen vorab!
Jürgen
---------------------------------------------------------------Begin CODE--------------------------------------
import time
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QPushButton, QAction, QLineEdit, QMessageBox, QLabel
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import numpy as np
class Window(QtWidgets.QWidget):
def __init__(self):
super(Window, self).__init__()
figure1 = Figure()
figure2 = Figure()
figure3 = Figure()
figure4 = Figure()
canvas1 = FigureCanvas(figure1)
canvas2 = FigureCanvas(figure2)
canvas3 = FigureCanvas(figure3)
ax1 = figure1.add_subplot(111)
ax2 = figure2.add_subplot(111)
ax3 = figure3.add_subplot(111)
toolbar1 = NavigationToolbar(canvas1, self)
toolbar2 = NavigationToolbar(canvas2, self)
toolbar3 = NavigationToolbar(canvas3, self)
mainLayout = QtWidgets.QGridLayout()
mainLayout.addWidget(toolbar1,0,0)
mainLayout.addWidget(toolbar2,0,1)
mainLayout.addWidget(toolbar3,2,0)
mainLayout.addWidget(canvas1,1,0)
mainLayout.addWidget(canvas2,1,1)
mainLayout.addWidget(canvas3,3,0)
ax1.set_title("Messsignal")
ax2.set_title("Analyse 1")
ax3.set_title("Analyse 2")
self.setLayout(mainLayout)
self.setWindowTitle("Signal Analye")
time = np.arange(0, 50, 0.1);
# Amplitude of the sine wave is sine of a variable like time
# Testsignal
amplitude = np.sin(time)
ax1.set_title("Messsignal")
ax1.plot(time,amplitude*10)
time2 = np.arange(0, 50, 0.1);
amplitude2 = np.cos(time2)
ax2.plot(time2,amplitude2)
amplitude3 = amplitude + amplitude2
ax3.plot(time2,amplitude3)
#---------------Timer------------
self._timer = canvas1.new_timer(100, [(self._update_canvas, (),{})])
self._timer.start()
#Aktualisierung des Messsignals
def _update_canvas(self):
self._ax1.clear()
t = nplinespace(0, 10, 0)
self._ax1.plot(t, np.sin(t + time.time()))
self._ax1.figure.canvas1.draw()
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
mainWin = Window()
mainWin.show()
sys.exit(app.exec_())
----------------------------------------------------------Ende CODE---------------------------------------------------------------------------