Compare commits

..

No commits in common. "785dd86de52b6333698ed88692009146469da2a7" and "1aa750d6191f50f82d92e5e435c4262178283f17" have entirely different histories.

2 changed files with 31 additions and 151 deletions

View File

@ -63,14 +63,28 @@ for k in range(0, nMod):
nChannel = len(chList) nChannel = len(chList)
updateTime = 1 #sec updateTime = 1 #sec
# print(onOffList) print(onOffList)
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QCheckBox, QLineEdit, QLabel, QVBoxLayout, QWidget, QTabWidget, QGridLayout, QMessageBox, QFileDialog, QProgressBar from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QCheckBox, QLineEdit, QLabel, QVBoxLayout, QWidget, QTabWidget, QGridLayout
from PyQt6.QtCore import Qt, QThread, QTimer, QObject, pyqtSignal from PyQt6.QtCore import Qt, QThread, QTimer, QObject, pyqtSignal
from functools import partial from functools import partial
ColStrList = ["Name", "Ch", 'On/Off', "Set V [V]", "Set I [mA]", "Out V [V]", "Out I [uA]"] ColStrList = ["Name", "Ch", 'On/Off', "Set V [V]", "Set I [mA]", "Out V [V]", "Out I [uA]"]
# class TimerThread(QThread):
# timeout = pyqtSignal()
# waitTime = int(1)
# def SetTime(self, time_in_sec):
# self.waitTime = time_in_sec
# def run(self):
# timer = QTimer(self)
# timer.setInterval(self.waitTime) # 1 second
# timer.timeout.connect(self.timeout.emit)
# timer.start()
class MyWindow(QMainWindow): class MyWindow(QMainWindow):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
@ -90,40 +104,15 @@ class MyWindow(QMainWindow):
self.txtIOut = [[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.chkON = [[QCheckBox() for _ in range(rows)] for rows in nChPerMod]
# timer = TimerThread()
# timer.timeout.connect(self.on_timeout)
# timer.start()
self.timer = QTimer(self) self.timer = QTimer(self)
self.timer.timeout.connect(self.updateTimer) self.timer.timeout.connect(self.updateTimer)
# self.time = 0 self.time = 0
self.timer.start(updateTime*1000) self.timer.start(updateTime*1000)
#=========== database and refresh time
gLayout = QGridLayout()
layout.addLayout(gLayout)
lbIP = QLabel("Database IP : ", self)
lbIP.setAlignment(Qt.AlignmentFlag.AlignRight)
gLayout.addWidget(lbIP, 0, 0)
self.txtIP = QLineEdit(self)
self.txtIP.setText("128.186.111.107")
self.txtIP.textChanged.connect(partial(self.TextChange, self.txtIP))
self.txtIP.returnPressed.connect(partial(self.UnSetTextColor, self.txtIP))
gLayout.addWidget(self.txtIP, 0, 1)
self.chkDB = QCheckBox("Enable", self)
gLayout.addWidget(self.chkDB, 0, 2)
lb1 = QLabel("Refresh period [sec] :", self)
lb1.setAlignment(Qt.AlignmentFlag.AlignRight)
gLayout.addWidget(lb1, 1, 0)
self.txtRefresh = QLineEdit(self)
self.txtRefresh.setText(str(updateTime))
self.txtRefresh.textChanged.connect(partial(self.TextChange, self.txtRefresh))
self.txtRefresh.returnPressed.connect(self.SetTimer)
self.txtRefresh.returnPressed.connect(partial(self.UnSetTextColor, self.txtRefresh))
gLayout.addWidget(self.txtRefresh, 1, 1)
#=========== set tab #=========== set tab
self.tabWidget = QTabWidget(self) self.tabWidget = QTabWidget(self)
layout.addWidget(self.tabWidget) layout.addWidget(self.tabWidget)
@ -169,9 +158,6 @@ class MyWindow(QMainWindow):
layout_tab.addWidget(self.txtV[k][i], 1+i, j) 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.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 #------------ I set
if j == 4: if j == 4:
self.txtI[k][i].setText("{:.2f}".format(iList[sum(nChPerMod[:k]) + i]*1000)) self.txtI[k][i].setText("{:.2f}".format(iList[sum(nChPerMod[:k]) + i]*1000))
@ -179,9 +165,6 @@ class MyWindow(QMainWindow):
layout_tab.addWidget(self.txtI[k][i], 1+i, j) 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.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 #------------ V out
if j == 5: if j == 5:
self.txtVOut[k][i].setText("{:.2f}".format(outVList[sum(nChPerMod[:k]) + i])) self.txtVOut[k][i].setText("{:.2f}".format(outVList[sum(nChPerMod[:k]) + i]))
@ -199,134 +182,31 @@ class MyWindow(QMainWindow):
self.txtIOut[k][i].setStyleSheet("background-color: lightgrey;") self.txtIOut[k][i].setStyleSheet("background-color: lightgrey;")
self.tabWidget.addTab(tab, "Mod-" + str(k)) self.tabWidget.addTab(tab, "Mod-" + str(k))
#============= Save setting
sLayout = QGridLayout()
layout.addLayout(sLayout)
bLoad = QPushButton("Load", self)
bLoad.clicked.connect(self.LoadSetting)
sLayout.addWidget(bLoad, 0, 0)
self.txtFile = QLineEdit(self)
sLayout.addWidget(self.txtFile, 0, 1)
bSave = QPushButton("Save", self)
bSave.clicked.connect(self.SaveSetting)
sLayout.addWidget(bSave, 0, 3)
#============= General Setting #TODO
######################################################### slots
def SaveSetting(self):
fileName = self.txtFile.text()
if fileName == "" :
return
outfile = open(fileName, "w")
csv_writer = csv.writer(outfile)
for k in range(0, nMod):
for i, a in enumerate(modChList[k]) :
papap = [self.txtName[k][i].text(), "u"+str(modChList[k][i]), self.txtV[k][i].text(),self.txtI[k][i].text()]
csv_writer.writerow( papap )
outfile.close()
self.txtFile.setText( fileName + " (Saved)")
msg_box = QMessageBox()
msg_box.setWindowTitle("Information")
msg_box.setText("Setting saved to " + fileName + "as a csv file.")
msg_box.setIcon(QMessageBox.Icon.Information)
msg_box.setStandardButtons(QMessageBox.StandardButton.Ok)
msg_box.exec()
def LoadSetting(self):
file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "CSV Files (*.csv);;All Files (*)")
if file_path:
infile = open(file_path, "r")
csv_reader = csv.reader(infile)
row_count = sum(1 for row in csv_reader)
infile.seek(0)
count = 0
for row in csv_reader:
ch = row[1]
if ch.startswith('u') and ch[1:].isdigit():
chID = int(ch[1:]) % 100
modID = int(int(ch[1:]) / 100)
# print(str(modID) + "," + str(chID))
self.txtName[modID][chID].setText(row[0])
self.txtV[modID][chID].setText(row[2])
self.txtI[modID][chID].setText(row[3])
# print("Setting " + row[1] )
mpod.SetHV(int(ch[1:]), float(row[2]))
time.sleep(0.01)
mpod.SetCurrent(int(ch[1:]), float(row[3])/1000)
time.sleep(0.01)
count = count+1
self.txtFile.setText("Loading Setting, %d/%d ." % (count, row_count))
self.repaint()
self.txtFile.setText(file_path + " (Loaded)")
def UnSetTextColor(self, qLineEdit : QLineEdit):
qLineEdit.setStyleSheet("")
def TextChange(self, qLineEdit : QLineEdit):
qLineEdit.setStyleSheet("color : darkgreen;")
def SetTimer(self):
sec = float(self.txtRefresh.text())
self.timer.stop()
self.timer.start(int(sec * 1000))
def SetHV(self, mod, ch): def SetHV(self, mod, ch):
value = float(self.txtV[mod][ch].text()) value = float(self.txtV[mod][ch].text())
print("mod : " + str(mod) + ", ch : " + str(ch) + " | " + str(value)) print("mod : " + str(mod) + ", ch : " + str(ch) + " | " + str(value))
mpod.SetHV( mod*100 + ch, value) mpod.SetHV( mod*100 + ch, value)
newValue = mpod.GetHV(mod*100+ch)
self.txtV[mod][ch].setText("{:.1f}".format(newValue))
def SetI(self, mod, ch): def SetI(self, mod, ch):
value = float(self.txtI[mod][ch].text()) value = float(self.txtI[mod][ch].text())
print("mod : " + str(mod) + ", ch : " + str(ch) + " | " + str(value)) print("mod : " + str(mod) + ", ch : " + str(ch) + " | " + str(value))
mpod.SetCurrent( mod*100 + ch, value/1000.) mpod.SetCurrent( mod*100 + ch, value/1000.)
newValue = mpod.GetCurrent(mod*100+ch)
self.txtI[mod][ch].setText("{:.1f}".format(newValue))
def SetOnOff(self, mod, ch): def SetOnOff(self, mod, ch):
state = self.chkON[mod][ch].checkState() state = self.chkON[mod][ch].checkState()
if state == Qt.CheckState.Checked: print("mod : " + str(mod) + ", ch : " + str(ch) + " | " + str(state))
if onOffList[sum(nChPerMod[:mod]) + ch] == 3 : if state == Qt.Checked :
mpod.SwitchOnHV(mod*100 + ch, 2) mpod.SwitchOnHV( mod*100 + ch, True)
mpod.SwitchOnHV( mod*100 + ch, 1)
onOffList[sum(nChPerMod[:mod]) + ch] = 1
else: else:
mpod.SwitchOnHV( mod*100 + ch, 0) mpod.SwitchOnHV( mod*100 + ch, False)
onOffList[sum(nChPerMod[:mod]) + ch] = 0
def on_timeout(self):
print("Timer timed out!")
value = mpod.IsHVOn(mod*100 + ch)
# print("mod : " + str(mod) + ", ch : " + str(ch) + " | " + str(state) + " | " + str(onOffList[sum(nChPerMod[:mod]) + ch]) + " | " + str(value))
if value == 0 :
self.chkON[mod][ch].setChecked(False)
self.chkON[mod][ch].setStyleSheet("")
if value == 1 :
self.chkON[mod][ch].setChecked(True)
self.chkON[mod][ch].setStyleSheet("")
if value == 3 :
self.chkON[mod][ch].setChecked(False)
self.chkON[mod][ch].setStyleSheet("background-color: red;")
def updateTimer(self): def updateTimer(self):
# self.time += 1 self.time += 1
# print(f'Time: {self.time}') print(f'Time: {self.time}')
outVList = mpod.GetAllOutputHV()
outIList = mpod.GetAllLC()
# print(outVList)
for k in range(0, nMod):
for i, a in enumerate(modChList[k]) :
self.txtVOut[k][i].setText("{:.2f}".format(outVList[sum(nChPerMod[:k]) + i]))
self.txtIOut[k][i].setText("{:.2f}".format(outIList[sum(nChPerMod[:k]) + i]))
if __name__ == "__main__": if __name__ == "__main__":
app = QApplication(sys.argv) app = QApplication(sys.argv)

View File

@ -88,7 +88,7 @@ class Mpod:
def IsHVOn(self, ch): def IsHVOn(self, ch):
if (self.isConnected == False ) : return 0 if (self.isConnected == False ) : return 0
return extract_number_between_parentheses(self.SendCmd(0, "outputSwitch.u"+str(ch))) return self.SendCmd(0, "outputSwitch.u"+str(ch))
def GetHVRiseRate(self, ch): def GetHVRiseRate(self, ch):
if (self.isConnected == False ) : return 0 if (self.isConnected == False ) : return 0