Оптимизация PyQtGraph для построения графиков данных в реальном времени - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь написать сценарий python для отслеживания данных о температуре, поступающих от термистора, подключенного к USB DAQ. У меня не получается понять, как структурировать входящие данные о температуре в движущемся массиве, чтобы я мог поддерживать график прокрутки. Я использовал это видео как ссылку для получения код выложен. Обратите внимание, что temp = t_in(board_num, 0, 0) - это функция, которую я вызываю из библиотеки DAQ, чтобы считать текущую измеряемую температуру в виде числа с плавающей запятой.

Вот что у меня есть на данный момент. принимает только массивы, когда я пытаюсь скормить ему поплавок. Я предполагаю, что мне нужно создать массив длиной 500 столбцов и заполнить его текущим показанием на 500-м месте, а pu sh предыдущим показанием до 499 et c. Затем я скармливаю его блоку трассировки.

Думаю, я просто понял это, когда собрал свои мысли, чтобы задать вопрос, но я все равно опубликую это, чтобы получить второе мнение и, надеюсь, получить предложения по коду. Пожалуйста, будьте осторожны, я еще новичок в python.

from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
import sys
from mcculw import ul
from mcculw.enums import ULRange
from mcculw.enums import AnalogInputMode
from mcculw.ul import ULError
from mcculw.ul import t_in

board_num = 1
channel = 6
ai_range = ULRange.BIP5VOLTS
input_mode = AnalogInputMode.DIFFERENTIAL
ul.a_input_mode(board_num, input_mode)

class Plot2D():
    def __init__(self):
        self.traces = dict()

        #QtGui.QApplication.setGraphicsSystem('raster')
        self.app = QtGui.QApplication([])
        #mw = QtGui.QMainWindow()
        #mw.resize(800,800)

        self.win = pg.GraphicsWindow(title="Temperature Plot")
        self.win.resize(1000,600)
        self.win.setWindowTitle('pyqtgraph example: Plotting')

        # Enable antialiasing for prettier plots
        pg.setConfigOptions(antialias=True)

        self.canvas = self.win.addPlot(title="Temperature Plot")
        self.i = 0

    def start(self):
        if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
            QtGui.QApplication.instance().exec_()

    def trace(self, name, dataset_x, dataset_y):
        if name in self.traces:
            self.traces[name].setData(dataset_x, dataset_y)
        else:
            self.traces[name] = self.canvas.plot(pen='y')

    def update(self):
        temp = t_in(board_num, 0, 0)
        self.trace("Temp", [self.i], [temp])
        self.i += 1

    def animation(self):
        timer = QtCore.QTimer()
        timer.timeout.connect(self.update)
        timer.start(50)
        self.start()
# Start Qt event loop unless running in interactive mode or using pyside.


if __name__ == '__main__':
    p = Plot2D()
    p.animation()
...