56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
|
|
from .backends.keithley import keithley
|
|
|
|
def _update_print(i, ival, vval):
|
|
print(f"n = {i:5d}, I = {ival: .12f} A, U = {vval: .5f} V" + " "*10, end='\r')
|
|
|
|
class _Monitor:
|
|
"""
|
|
Monitor v and i data
|
|
"""
|
|
def __init__(self, max_points_shown=None, use_print=False):
|
|
self.max_points_shown = max_points_shown
|
|
self.use_print = use_print
|
|
self.index = []
|
|
self.vdata = []
|
|
self.idata = []
|
|
|
|
plt.ion()
|
|
self.fig1, (self.vax, self.iax) = plt.subplots(2, 1, figsize=(8, 5))
|
|
|
|
self.vline, = self.vax.plot(self.index, self.vdata, color="g")
|
|
self.vax.set_ylabel("Voltage [V]")
|
|
self.vax.grid(True)
|
|
|
|
self.iline, = self.iax.plot(self.index, self.idata, color="m")
|
|
self.iax.set_ylabel("Current [A]")
|
|
self.iax.grid(True)
|
|
|
|
def update(self, i, ival, vval):
|
|
if self.use_print:
|
|
_update_print(i, ival, vval)
|
|
self.index.append(i)
|
|
self.idata.append(ival)
|
|
self.vdata.append(vval)
|
|
# update data
|
|
self.iline.set_xdata(self.index)
|
|
self.iline.set_ydata(self.idata)
|
|
self.vline.set_xdata(self.index)
|
|
self.vline.set_ydata(self.vdata)
|
|
# recalculate limits and set them for the view
|
|
self.iax.relim()
|
|
self.vax.relim()
|
|
if self.max_points_shown and i > self.max_points_shown:
|
|
self.iax.set_xlim(i - self.max_points_shown, i)
|
|
self.vax.set_xlim(i - self.max_points_shown, i)
|
|
self.iax.autoscale_view()
|
|
self.vax.autoscale_view()
|
|
# update plot
|
|
self.fig1.canvas.draw()
|
|
self.fig1.canvas.flush_events()
|
|
|
|
def __del__(self):
|
|
plt.close(self.fig1)
|