This commit is contained in:
2023-08-18 13:03:01 +02:00
parent 82af33082c
commit 6e7fc767fb

View File

@@ -1,187 +0,0 @@
#!/usr/bin/python3.6
# coding: utf-8
from PyQt5 import QtWidgets,uic
import numpy as np
import epics
from ecmcArrayStat import *
from ecmcOneMotorGUI import *
from ecmcMainWndDesigner import Ui_MainWindow
from ecmcFFTMainGui import *
from ecmcScopeMainGui import *
import ecmcTrendPv
import time
# Needed packages:
# 1. sudo yum -y install https://rhel7.iuscommunity.org/ius-release.rpm
# 2. sudo pip3.6 install pyqt5
# 3. sudo yum install qt5-qtbase-devel
# 4. sudo python3.6 -m pip install numpy scipy matplotlib
# 5. sudo pip3 install pyepics
# 6. sudo yum install python3-matplotlib
# Regenerate py from ui file:
# pyuic5 -x ecmcMainWndDesigner.ui -o ecmcMainWndDesigner.py
class ecmcMainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(ecmcMainWindow,self).__init__()
self.prefix=""
self.pvName=""
self.pv=None
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pbStartGUI.clicked.connect(self.showGUI)
self.ui.pbStartGUI.setToolTip("Start GUI for ioc-prefix + pv-name")
self.ui.lineIOCPrefix.textChanged.connect(self.newIOCPrefix)
self.ui.lineIOCPrefix.setToolTip("Enter ioc-prefix to to use.")
self.ui.linepvName.textChanged.connect(self.newIOCpvName)
self.ui.linepvName.setToolTip("Enter pv-name to plot/trend (or control)")
self.ui.comboPrefix.currentIndexChanged.connect(self.newPrefixComboIndex)
self.ui.comboPrefix.addItem("IOC_TEST:")
self.ui.comboPrefix.addItem("IOC:")
self.ui.comboPrefix.addItem("IOC2:")
self.ui.comboPrefix.addItem("IOC_SLIT:")
self.ui.comboPrefix.addItem("TEST")
self.ui.comboPrefix.setToolTip("Predefined ioc-prefix. Choose one to use..")
self.ui.comboPvName.currentIndexChanged.connect(self.newPvComboIndex)
self.ui.comboPvName.addItem("Axis1")
self.ui.comboPvName.addItem("Axis2")
self.ui.comboPvName.addItem("MCU-ThdLatMax")
self.ui.comboPvName.addItem("MCU-ThdLatMin")
self.ui.comboPvName.addItem("MCU-ThdPrdMax")
self.ui.comboPvName.addItem("MCU-ThdPrdMin")
self.ui.comboPvName.addItem("MCU-ThdSndMax")
self.ui.comboPvName.addItem("MCU-ThdSndMin")
self.ui.comboPvName.addItem("m0-DomFailCntrTot")
self.ui.comboPvName.addItem("MCU-ErrId")
self.ui.comboPvName.addItem("m0s001-BI01")
self.ui.comboPvName.addItem("m0s001-BI02")
self.ui.comboPvName.addItem("m0s003-Enc01-PosAct")
self.ui.comboPvName.addItem("FFT-0")
self.ui.comboPvName.addItem("Scope-0")
self.ui.comboPvName.setToolTip("Predefined pv-names. Choose one to use..")
if len(sys.argv)>1:
self.prefix=sys.argv[1]
self.ui.lineIOCPrefix.setText(self.prefix)
if len(sys.argv)>2:
self.pvName=sys.argv[2]
self.ui.linepvName.setText(self.pvName)
if (len(sys.argv)>2):
for i in range(2,len(sys.argv)):
self.ui.linepvName.setText(str(sys.argv[i]))
self.showGUI()
def showGUI(self):
#Check and start FFT gui
if self.showGuiFFT(self.prefix, self.pvName):
return
#Check and start Scope gui
if self.showGuiScope(self.prefix, self.pvName):
return
# See if scalar or motor
self.ui.pbStartGUI.setText("Connecting to: " + self.prefix + self.pvName + "...")
self.ui.pbStartGUI.setEnabled(False)
self.ui.pbStartGUI.update()
QtCore.QCoreApplication.processEvents()
self.prefix=self.ui.lineIOCPrefix.text()
self.pvName=self.ui.linepvName.text()
entirePvName = self.prefix+self.pvName
pos = entirePvName.rfind('.')
# ensure record/pv exist
pvtest = epics.PV(entirePvName)
connected = pvtest.wait_for_connection(timeout=2)
self.ui.pbStartGUI.setEnabled(True)
self.ui.pbStartGUI.setText("Start GUI for: " + self.prefix + self.pvName)
self.ui.pbStartGUI.update()
if not(connected):
print("Timeout. Could not connect to: " + entirePvName + ". Probably not a valid PV name.")
return
del(pvtest)
# Check if motor
if pos < 0:
pv = epics.PV(entirePvName + '.RTYP')
if pv.get() == 'motor':
self.showMotorGUI(self.prefix, self.pvName)
return
# Normal PV
self.showGuiPv(self.prefix+self.pvName)
def showMotorGUI(self,prefix,pvName):
self.dialog = MotorPanel(self,prefix,pvName)
self.dialog.resize(500, 900)
self.dialog.show()
def showGuiPv(self, pvName):
dialog = ecmcTrendPv.ecmcTrendPv(pvName)
dialog.show()
def showGuiFFT(self, prefix, pvName):
# Check if FFT gui
if pvName.find('FFT-') == 0 and len(prefix) > 0:
pvNameTemp = pvName.split('-')
if np.size(pvNameTemp)==2:
if pvNameTemp[1].isdigit():
self.dialog = ecmcFFTMainGui(prefix,int(pvNameTemp[1]))
self.dialog.show()
return 1
return 0
def showGuiScope(self, prefix, pvName):
# Check if FFT gui
if pvName.find('Scope-') == 0 and len(prefix) > 0:
pvNameTemp = pvName.split('-')
if np.size(pvNameTemp)==2:
if pvNameTemp[1].isdigit():
self.dialog = ecmcScopeMainGui(prefix,int(pvNameTemp[1]))
self.dialog.show()
return 1
return 0
def newIOCPrefix(self,iocPrefix):
self.prefix=iocPrefix
self.ui.pbStartGUI.setText("Start GUI for: " + self.prefix + self.pvName)
def newIOCpvName(self,pvName):
self.pvName=pvName
self.ui.pbStartGUI.setText("Start GUI for: " + self.prefix + self.pvName)
def newPrefixComboIndex(self,index):
self.prefix=self.ui.comboPrefix.itemText(index)
self.ui.lineIOCPrefix.setText(self.prefix)
self.ui.pbStartGUI.setText("Start GUI for: " + self.prefix + self.pvName)
def newPvComboIndex(self,index):
self.pvName=self.ui.comboPvName.itemText(index)
self.ui.linepvName.setText(self.pvName)
self.ui.pbStartGUI.setText("Start GUI for: " + self.prefix + self.pvName)
def quit(self):
self.close()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window=ecmcMainWindow();
window.show()
sys.exit(app.exec_())