76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
#*************************************************************************
|
|
# Copyright (c) 2020 European Spallation Source ERIC
|
|
# ecmc is distributed subject to a Software License Agreement found
|
|
# in file LICENSE that is included with this distribution.
|
|
#
|
|
# ecmcTrendPv.py
|
|
#
|
|
# Created on: July 6, 2020
|
|
# Author: Anders Sandström
|
|
#
|
|
# Heavily inspired by: https://exceptionshub.com/real-time-plotting-in-while-loop-with-matplotlib.html
|
|
#
|
|
# Extends the ecmcTrend class will epics pv callbacks
|
|
#
|
|
#*************************************************************************
|
|
|
|
import sys
|
|
import os
|
|
import epics
|
|
import ecmcTrend
|
|
from PySide2 import QtCore, QtGui, QtWidgets
|
|
from PySide2.QtWidgets import *
|
|
from PySide2.QtGui import *
|
|
from PySide2.QtCore import *
|
|
|
|
#from PyQt5.QtWidgets import *
|
|
#from PyQt5 import QtWidgets
|
|
#from PyQt5.QtCore import *
|
|
#from PyQt5.QtGui import *
|
|
import functools
|
|
import numpy as np
|
|
import random as rd
|
|
import matplotlib
|
|
matplotlib.use("Qt5Agg")
|
|
from matplotlib.figure import Figure
|
|
from matplotlib.animation import TimedAnimation
|
|
from matplotlib.lines import Line2D
|
|
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
|
|
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
|
|
import time
|
|
import threading
|
|
|
|
|
|
class comTrend(QObject):
|
|
data_signal = pyqtSignal(float)
|
|
|
|
|
|
class ecmcTrendPv(ecmcTrend.ecmcTrend):
|
|
def __init__(self,pvName=None):
|
|
super(ecmcTrendPv, self).__init__()
|
|
self.comTrend = comTrend()
|
|
self.comTrend.data_signal.connect(self.addData_callbackFunc) # update trend
|
|
self.startval = 0
|
|
self.pvName = pvName
|
|
self.connectPv(self.pvName) # Epics
|
|
self.setTitle(pvName)
|
|
return
|
|
|
|
def connectPv(self, pvname):
|
|
if pvname is None:
|
|
raise RuntimeError("pvname must not be 'None'")
|
|
if len(pvname)==0:
|
|
raise RuntimeError("pvname must not be ''")
|
|
self.pv = epics.PV(self.pvName)
|
|
self.startval = self.pv.get()
|
|
self.pv.add_callback(self.onChangePv)
|
|
self.myFig.addData(self.startval)
|
|
QCoreApplication.processEvents()
|
|
|
|
def onChangePv(self,pvname=None, value=None, char_value=None,timestamp=None, **kw):
|
|
self.comTrend.data_signal.emit(value)
|
|
|
|
def writePV(self,value):
|
|
self.pv.put(value)
|
|
self.myFig.addData(value)
|