2024-07-27 14:55:13 -04:00
|
|
|
#!/usr/bin/python3
|
|
|
|
|
|
|
|
import HVLibrary as hv
|
|
|
|
|
2024-07-27 18:42:57 -04:00
|
|
|
import sys
|
|
|
|
|
2024-07-27 14:55:13 -04:00
|
|
|
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QCheckBox, QLineEdit, QLabel, QVBoxLayout, QWidget, QTabWidget, QGridLayout, QMessageBox, QFileDialog, QProgressBar
|
|
|
|
from PyQt6.QtCore import Qt, QThread, QTimer, QObject, pyqtSignal
|
|
|
|
from functools import partial
|
|
|
|
|
2024-07-27 18:42:57 -04:00
|
|
|
ColStrList = ["Name", "Ch", 'On/Off', "Set V [V]", "Set I [uA]", "Out V [V]", "Out I [uA]"]
|
|
|
|
|
|
|
|
nMod = 2
|
|
|
|
nChPerMod = [48, 48]
|
|
|
|
updateTime = 3 #sec
|
|
|
|
|
|
|
|
bd = []
|
|
|
|
for k in range(nMod):
|
|
|
|
bd.append(hv.Board(3 + k))
|
|
|
|
|
|
|
|
|
|
|
|
V0SetList = []
|
|
|
|
I0SetList = []
|
|
|
|
OnOffList = []
|
|
|
|
outVList = []
|
|
|
|
outIList = []
|
|
|
|
|
|
|
|
for k in range(nMod):
|
|
|
|
V0SetList.append(bd[k].GetPV('V0Set'))
|
|
|
|
I0SetList.append(bd[k].GetPV('I0Set'))
|
|
|
|
OnOffList.append(bd[k].GetPV('Pw'))
|
|
|
|
outVList.append(bd[k].GetPV('VMon'))
|
|
|
|
outIList.append(bd[k].GetPV('IMon'))
|
|
|
|
|
|
|
|
class MyWindow(QMainWindow):
|
|
|
|
def __init__(self):
|
|
|
|
super().__init__()
|
|
|
|
|
|
|
|
self.setWindowTitle("Iseg Controller")
|
|
|
|
self.setGeometry(100, 100, 500, 200)
|
|
|
|
|
|
|
|
widget = QWidget()
|
|
|
|
layout = QVBoxLayout()
|
|
|
|
widget.setLayout(layout)
|
|
|
|
self.setCentralWidget(widget)
|
|
|
|
|
|
|
|
self.txtName = [[QLineEdit() for _ in range(rows)] for rows in nChPerMod]
|
|
|
|
self.txtV = [[QLineEdit() for _ in range(rows)] for rows in nChPerMod]
|
|
|
|
self.txtI = [[QLineEdit() for _ in range(rows)] for rows in nChPerMod]
|
|
|
|
self.txtVOut = [[QLineEdit() for _ in range(rows)] for rows in nChPerMod]
|
|
|
|
self.txtIOut = [[QLineEdit() for _ in range(rows)] for rows in nChPerMod]
|
|
|
|
self.chkON = [[QCheckBox() for _ in range(rows)] for rows in nChPerMod]
|
|
|
|
|
|
|
|
self.timer = QTimer(self)
|
|
|
|
self.timer.timeout.connect(self.updateTimer)
|
|
|
|
self.timer.start(updateTime*1000)
|
|
|
|
self.time = 0
|
|
|
|
|
|
|
|
#=========== set tab
|
|
|
|
self.tabWidget = QTabWidget(self)
|
|
|
|
layout.addWidget(self.tabWidget)
|
|
|
|
|
|
|
|
for k in range(0, nMod):
|
|
|
|
tab = QWidget(self)
|
|
|
|
layout_tab = QGridLayout()
|
|
|
|
layout_tab.setAlignment(Qt.AlignmentFlag.AlignTop)
|
|
|
|
tab.setLayout(layout_tab)
|
|
|
|
|
|
|
|
for index, lb in enumerate(ColStrList):
|
|
|
|
qlb = QLabel(lb, tab)
|
|
|
|
layout_tab.addWidget(qlb, 0, index)
|
|
|
|
|
|
|
|
for i in range(nChPerMod[k]) :
|
|
|
|
for j, lb in enumerate(ColStrList) :
|
|
|
|
#------------ name
|
|
|
|
if j == 0:
|
|
|
|
layout_tab.addWidget(self.txtName[k][i], 1+i, j)
|
|
|
|
|
|
|
|
#------------ Ch
|
|
|
|
if j == 1:
|
|
|
|
qlb = QLabel(str(i), tab)
|
|
|
|
layout_tab.addWidget(qlb, 1+i, j, alignment=Qt.AlignmentFlag.AlignCenter)
|
|
|
|
|
|
|
|
#------------ On/Off
|
|
|
|
if j == 2:
|
|
|
|
self.chkON[k][i].setChecked( OnOffList[k][i] == 1)
|
|
|
|
layout_tab.addWidget(self.chkON[k][i], 1+i, j, alignment=Qt.AlignmentFlag.AlignCenter)
|
|
|
|
|
|
|
|
self.chkON[k][i].clicked.connect(partial(self.SetOnOff, k, i))
|
|
|
|
|
|
|
|
# #------------ V set
|
|
|
|
if j == 3:
|
|
|
|
self.txtV[k][i].setText(str(V0SetList[k][i]))
|
|
|
|
self.txtV[k][i].setAlignment(Qt.AlignmentFlag.AlignRight)
|
|
|
|
layout_tab.addWidget(self.txtV[k][i], 1+i, j)
|
|
|
|
|
|
|
|
self.txtV[k][i].returnPressed.connect(partial(self.SetHV, k, i) )
|
|
|
|
self.txtV[k][i].returnPressed.connect(partial(self.UnSetTextColor, self.txtV[k][i]))
|
|
|
|
self.txtV[k][i].textChanged.connect(partial(self.TextChange, self.txtV[k][i]))
|
|
|
|
|
|
|
|
# #------------ I set
|
|
|
|
if j == 4:
|
|
|
|
self.txtI[k][i].setText(str(I0SetList[k][i]))
|
|
|
|
self.txtI[k][i].setAlignment(Qt.AlignmentFlag.AlignRight)
|
|
|
|
layout_tab.addWidget(self.txtI[k][i], 1+i, j)
|
|
|
|
|
|
|
|
self.txtI[k][i].returnPressed.connect(partial(self.SetI, k, i) )
|
|
|
|
self.txtI[k][i].returnPressed.connect(partial(self.UnSetTextColor, self.txtI[k][i]))
|
|
|
|
self.txtI[k][i].textChanged.connect(partial(self.TextChange, self.txtI[k][i]))
|
|
|
|
|
|
|
|
# #------------ V out
|
|
|
|
if j == 5:
|
|
|
|
self.txtVOut[k][i].setText("{:.2f}".format(outVList[k][i]))
|
|
|
|
self.txtVOut[k][i].setAlignment(Qt.AlignmentFlag.AlignRight)
|
|
|
|
layout_tab.addWidget(self.txtVOut[k][i], 1+i, j)
|
|
|
|
self.txtVOut[k][i].setReadOnly(True)
|
|
|
|
self.txtVOut[k][i].setStyleSheet("background-color: lightgrey; color: black;")
|
|
|
|
|
|
|
|
# #------------ I out
|
|
|
|
if j == 6:
|
|
|
|
self.txtIOut[k][i].setText("{:.2f}".format(outIList[k][i]))
|
|
|
|
self.txtIOut[k][i].setAlignment(Qt.AlignmentFlag.AlignRight)
|
|
|
|
layout_tab.addWidget(self.txtIOut[k][i], 1+i, j)
|
|
|
|
self.txtIOut[k][i].setReadOnly(True)
|
|
|
|
self.txtIOut[k][i].setStyleSheet("background-color: lightgrey; color: black;")
|
|
|
|
|
|
|
|
self.tabWidget.addTab(tab, "Mod-" + str(k))
|
|
|
|
|
|
|
|
|
|
|
|
#=================================
|
|
|
|
def UnSetTextColor(self, qLineEdit : QLineEdit):
|
|
|
|
qLineEdit.setStyleSheet("")
|
|
|
|
|
|
|
|
def TextChange(self, qLineEdit : QLineEdit):
|
|
|
|
qLineEdit.setStyleSheet("color : darkgreen;")
|
|
|
|
|
|
|
|
#---------------------------------
|
|
|
|
def SetOnOff(self, mod, ch):
|
|
|
|
state = self.chkON[mod][ch].checkState()
|
|
|
|
if state == Qt.CheckState.Checked:
|
|
|
|
bd[mod].Channel[ch].SetPowerOnOff(1)
|
|
|
|
else:
|
|
|
|
bd[mod].Channel[ch].SetPowerOnOff(0)
|
|
|
|
|
|
|
|
value = bd[mod].Channel[ch].GetPowerOnOff()
|
|
|
|
OnOffList[mod][ch] = value
|
|
|
|
print("mod : " + str(mod) + ", ch : " + str(ch) + " | " + str(state) + " | " + str(value))
|
|
|
|
self.chkON[mod][ch].setChecked(value == 1)
|
|
|
|
|
|
|
|
#---------------------------------
|
|
|
|
def SetHV(self, mod, ch):
|
|
|
|
value = float(self.txtV[mod][ch].text())
|
|
|
|
print("mod : " + str(mod) + ", ch : " + str(ch) + " | " + str(value))
|
|
|
|
bd[mod].Channel[ch].SetV0Set(value)
|
|
|
|
newValue = bd[mod].Channel[ch].GetV0Set()
|
|
|
|
V0SetList[mod][ch] = newValue
|
|
|
|
self.txtV[mod][ch].setText("{:.1f}".format(newValue))
|
|
|
|
|
|
|
|
#---------------------------------
|
|
|
|
def SetI(self, mod, ch):
|
|
|
|
value = float(self.txtI[mod][ch].text())
|
|
|
|
print("mod : " + str(mod) + ", ch : " + str(ch) + " | " + str(value))
|
|
|
|
bd[mod].Channel[ch].SetI0Set(value)
|
|
|
|
newValue = bd[mod].Channel[ch].GetI0Set()
|
|
|
|
I0SetList[mod][ch] = newValue
|
|
|
|
self.txtI[mod][ch].setText("{:.1f}".format(newValue))
|
|
|
|
|
|
|
|
#---------------------------------
|
|
|
|
def updateTimer(self):
|
|
|
|
self.time += 1
|
|
|
|
print(f'Time: {self.time}')
|
|
|
|
# outVList = mpod.GetAllOutputHV()
|
|
|
|
# outIList = mpod.GetAllLC()
|
|
|
|
# # print(outVList)
|
|
|
|
|
|
|
|
for k in range(2):
|
|
|
|
outVList.append(bd[k].GetPV('VMon'))
|
|
|
|
outIList.append(bd[k].GetPV('IMon'))
|
|
|
|
|
|
|
|
# if self.chkDB.checkState() == Qt.CheckState.Checked:
|
|
|
|
# points = []
|
|
|
|
|
|
|
|
for k in range(0, nMod):
|
|
|
|
for i in range(bd[k].numCh) :
|
|
|
|
self.txtVOut[k][i].setText("{:.2f}".format(outVList[k][i]))
|
|
|
|
self.txtIOut[k][i].setText("{:.2f}".format(outIList[k][i]))
|
|
|
|
|
|
|
|
# if self.chkDB.checkState() == Qt.CheckState.Checked:
|
|
|
|
# points.append(Point("Voltage").tag("Ch",int(chList[i] + 100 * k)).field("value",float(outVList[i])))
|
|
|
|
# points.append(Point("LeakageCurrent").tag("Ch",int(chList[i] + 100 * k)).field("value",float(outIList[i])))
|
|
|
|
|
|
|
|
# if self.chkDB.checkState() == Qt.CheckState.Checked:
|
|
|
|
# write_api.write(bucket=bucket, org=org, record=points)
|
|
|
|
|
|
|
|
|
2024-07-27 14:55:13 -04:00
|
|
|
|
2024-07-27 18:42:57 -04:00
|
|
|
if __name__ == "__main__":
|
|
|
|
app = QApplication(sys.argv)
|
|
|
|
window = MyWindow()
|
|
|
|
window.show()
|
|
|
|
sys.exit(app.exec())
|