From 2cfd16249829efb2bcf02967ce8ef542099d017f Mon Sep 17 00:00:00 2001 From: topquark12 Date: Wed, 1 Jun 2022 17:47:31 +0800 Subject: [PATCH] plot both channel temperatures --- pytec/tecQT.py | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 pytec/tecQT.py diff --git a/pytec/tecQT.py b/pytec/tecQT.py new file mode 100644 index 0000000..cf33439 --- /dev/null +++ b/pytec/tecQT.py @@ -0,0 +1,86 @@ +from pyqtgraph.Qt import QtGui, QtCore +import numpy as np +import pyqtgraph as pg +from pytec.client import Client + +rec_len = 1000 +refresh_period = 20 + +channel_data = [{ + 'adc': np.zeros(rec_len), + 'sens': np.zeros(rec_len), + 'temperature': np.zeros(rec_len), + 'i_set': np.zeros(rec_len), + 'pid_output': np.zeros(rec_len), + 'vref': np.zeros(rec_len), + 'dac_value': np.zeros(rec_len), + 'dac_feedback': np.zeros(rec_len), + 'i_tec': np.zeros(rec_len), + 'tec_i': np.zeros(rec_len), + 'tec_u_meas': np.zeros(rec_len), + 'interval': np.zeros(rec_len), + 'temp_set': np.zeros(rec_len), +} for _ in range(2)] + +tec = Client() + +app = pg.mkQApp() +mw = QtGui.QMainWindow() +mw.setWindowTitle('Thermostat Control Panel') +mw.resize(800,800) +cw = QtGui.QWidget() +mw.setCentralWidget(cw) +l = QtGui.QVBoxLayout() +cw.setLayout(l) + +pg.setConfigOptions(antialias=True) + +pw0= pg.PlotWidget(name='Channel 0') +l.addWidget(pw0) +pw1 = pg.PlotWidget(name='Channel 1') +l.addWidget(pw1) + +curve0 = pw0.plot() +curve1 = pw1.plot() + +cnt = 0 +time_stamp = np.zeros(rec_len) +def update(n): + global cnt + for data in tec.report_mode(): + ch = data[n] + for tag, seq in channel_data[n].items(): + if tag in ch: + v = ch[tag] + if type(v) is float: + if cnt == 0: + np.copyto(seq, np.full(rec_len, v)) + else: + seq[:-1] = seq[1:] + seq[-1] = v + if quit: + break + return + +def updateData(): + global cnt + update(0) + update(1) + cnt += 1 + time_stamp[:-1] = time_stamp[1:] + time_stamp[-1] = cnt * refresh_period / 1000 + pw0.setRange(xRange=[cnt * refresh_period / 1000 - 20.0, cnt * refresh_period / 1000]) + pw1.setRange(xRange=[cnt * refresh_period / 1000 - 20.0, cnt * refresh_period / 1000]) + curve0.setData(x = time_stamp, y = channel_data[0]['temperature']) + curve1.setData(x = time_stamp, y = channel_data[1]['temperature']) + + +## Start a timer to rapidly update the plot in pw +t = QtCore.QTimer() +t.timeout.connect(updateData) +t.start(refresh_period) + +mw.show() + +if __name__ == '__main__': + pg.exec() \ No newline at end of file