diff --git a/datasheets/MCP3204.pdf b/datasheets/MCP3204.pdf new file mode 100644 index 0000000..4c84f71 Binary files /dev/null and b/datasheets/MCP3204.pdf differ diff --git a/datasheets/Variable phase shifter_01202.pdf b/datasheets/Variable phase shifter_01202.pdf new file mode 100644 index 0000000..30889f4 Binary files /dev/null and b/datasheets/Variable phase shifter_01202.pdf differ diff --git a/src/DEADJOE b/src/DEADJOE deleted file mode 100644 index 98e0f6b..0000000 --- a/src/DEADJOE +++ /dev/null @@ -1,7 +0,0 @@ - -*** These modified files were found in JOE when it aborted on Tue Aug 9 19:43:11 2022 -*** JOE was aborted because the terminal closed - -*** File '(Unnamed)' -_registerAcc -spi_write diff --git a/src/PID.py b/src/PID.py index 60e0828..eb7995e 100644 --- a/src/PID.py +++ b/src/PID.py @@ -113,6 +113,9 @@ class PID: def setOutmax(self,outMax): self.outMax = outMax + + def setOutmin(self,outMin): + self.outMin = outMin def getSetpoint(self): return self.setpoint @@ -186,6 +189,9 @@ def run(pid_obj, freq, num): elif msg[0] == 'set_outmax': pid_obj.setOutmax(msg[1]) server.send_string('ACK') + elif msg[0] == 'set_outmin': + pid_obj.setOutmin(msg[1]) + server.send_string('ACK') elif msg[0] == 'get_setpoint': #out_queue.put(pid_obj.getSetpoint() ) server.send_string(str(pid_obj.getSetpoint())) diff --git a/src/clientthread.py b/src/clientthread.py index 7202b57..dd8e4d4 100644 --- a/src/clientthread.py +++ b/src/clientthread.py @@ -86,6 +86,11 @@ def clientthread(conn): pidclient[tmp[2]].send_string('set_outmax\t%f' % tmp[3]) pidclient[tmp[2]].recv_string() TCP.send_msg(conn, 'I set maximal output voltage for output {:.0f} to {: f}'.format(tmp[2],tmp[3])) + elif tmp[1] == 'SET_OUTMIN': + #out_queue[tmp[2]].put(['set_outmax',tmp[3]]) + pidclient[tmp[2]].send_string('set_outmin\t%f' % tmp[3]) + pidclient[tmp[2]].recv_string() + TCP.send_msg(conn, 'I set minimal output voltage for output {:.0f} to {: f}'.format(tmp[2],tmp[3])) elif tmp[1] == 'GET_SETPOINT': #out_queue[tmp[2]].put(['get_setpoint']) pidclient[tmp[2]].send_string('get_setpoint') diff --git a/src/gui-client/channel.py b/src/gui-client/channel.py index a57a426..0fa7029 100644 --- a/src/gui-client/channel.py +++ b/src/gui-client/channel.py @@ -2,30 +2,27 @@ # Form implementation generated from reading ui file 'channel.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.10.1 # # WARNING! All changes made in this file will be lost! - from PyQt5 import QtCore, QtGui, QtWidgets - class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") - Form.resize(846, 423) + Form.resize(846, 421) self.gridLayout = QtWidgets.QGridLayout(Form) self.gridLayout.setObjectName("gridLayout") - spacerItem = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) - self.gridLayout.addItem(spacerItem, 6, 1, 1, 1) - self.label = QtWidgets.QLabel(Form) - self.label.setObjectName("label") - self.gridLayout.addWidget(self.label, 1, 0, 1, 1) - self.label_2 = QtWidgets.QLabel(Form) - self.label_2.setObjectName("label_2") - self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1) - spacerItem1 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) - self.gridLayout.addItem(spacerItem1, 7, 1, 1, 1) + self.kpBox = QtWidgets.QDoubleSpinBox(Form) + self.kpBox.setMinimum(-99.0) + self.kpBox.setSingleStep(0.01) + self.kpBox.setProperty("value", 1.0) + self.kpBox.setObjectName("kpBox") + self.gridLayout.addWidget(self.kpBox, 1, 1, 1, 1) + self.label_4 = QtWidgets.QLabel(Form) + self.label_4.setObjectName("label_4") + self.gridLayout.addWidget(self.label_4, 0, 0, 1, 1) self.PIDenableButton = QtWidgets.QPushButton(Form) self.PIDenableButton.setStyleSheet("background-color: rgb(255,0,0)") self.PIDenableButton.setCheckable(True) @@ -37,35 +34,20 @@ class Ui_Form(object): self.setpointBox.setProperty("value", 22.0) self.setpointBox.setObjectName("setpointBox") self.gridLayout.addWidget(self.setpointBox, 0, 1, 1, 1) + self.label_3 = QtWidgets.QLabel(Form) + self.label_3.setObjectName("label_3") + self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1) + self.label = QtWidgets.QLabel(Form) + self.label.setObjectName("label") + self.gridLayout.addWidget(self.label, 1, 0, 1, 1) + spacerItem = QtWidgets.QSpacerItem(0, 50, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) + self.gridLayout.addItem(spacerItem, 6, 1, 1, 1) self.kdBox = QtWidgets.QDoubleSpinBox(Form) self.kdBox.setMinimum(-99.0) self.kdBox.setSingleStep(0.01) self.kdBox.setProperty("value", 1.0) self.kdBox.setObjectName("kdBox") self.gridLayout.addWidget(self.kdBox, 3, 1, 1, 1) - self.outputBox = QtWidgets.QDoubleSpinBox(Form) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.outputBox.sizePolicy().hasHeightForWidth()) - self.outputBox.setSizePolicy(sizePolicy) - self.outputBox.setMaximumSize(QtCore.QSize(100, 16777215)) - self.outputBox.setDecimals(3) - self.outputBox.setSingleStep(0.01) - self.outputBox.setObjectName("outputBox") - self.gridLayout.addWidget(self.outputBox, 5, 0, 1, 1) - self.label_4 = QtWidgets.QLabel(Form) - self.label_4.setObjectName("label_4") - self.gridLayout.addWidget(self.label_4, 0, 0, 1, 1) - self.kpBox = QtWidgets.QDoubleSpinBox(Form) - self.kpBox.setMinimum(-99.0) - self.kpBox.setSingleStep(0.01) - self.kpBox.setProperty("value", 1.0) - self.kpBox.setObjectName("kpBox") - self.gridLayout.addWidget(self.kpBox, 1, 1, 1, 1) - self.label_3 = QtWidgets.QLabel(Form) - self.label_3.setObjectName("label_3") - self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1) self.OutputButton = QtWidgets.QPushButton(Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) @@ -75,6 +57,22 @@ class Ui_Form(object): self.OutputButton.setMaximumSize(QtCore.QSize(100, 16777215)) self.OutputButton.setObjectName("OutputButton") self.gridLayout.addWidget(self.OutputButton, 5, 1, 1, 1) + self.outputBox = QtWidgets.QDoubleSpinBox(Form) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.outputBox.sizePolicy().hasHeightForWidth()) + self.outputBox.setSizePolicy(sizePolicy) + self.outputBox.setMaximumSize(QtCore.QSize(100, 16777215)) + self.outputBox.setDecimals(3) + self.outputBox.setMinimum(0.0) + self.outputBox.setMaximum(5.0) + self.outputBox.setSingleStep(0.01) + self.outputBox.setObjectName("outputBox") + self.gridLayout.addWidget(self.outputBox, 5, 0, 1, 1) + self.label_2 = QtWidgets.QLabel(Form) + self.label_2.setObjectName("label_2") + self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1) self.kiBox = QtWidgets.QDoubleSpinBox(Form) self.kiBox.setMinimum(-99.0) self.kiBox.setSingleStep(0.01) @@ -99,8 +97,59 @@ class Ui_Form(object): self.widget_4.setObjectName("widget_4") self.output_layout = QtWidgets.QHBoxLayout(self.widget_4) self.output_layout.setObjectName("output_layout") - self.gridLayout_2.addWidget(self.widget_4, 1, 0, 1, 2) + self.gridLayout_2.addWidget(self.widget_4, 1, 1, 1, 1) + self.groupBox_3 = QtWidgets.QGroupBox(self.widget) + self.groupBox_3.setObjectName("groupBox_3") + self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox_3) + self.gridLayout_4.setObjectName("gridLayout_4") + self.label_5 = QtWidgets.QLabel(self.groupBox_3) + self.label_5.setObjectName("label_5") + self.gridLayout_4.addWidget(self.label_5, 1, 0, 1, 1) + self.zeroVoltage = QtWidgets.QDoubleSpinBox(self.groupBox_3) + self.zeroVoltage.setMinimum(-5.0) + self.zeroVoltage.setMaximum(5.0) + self.zeroVoltage.setSingleStep(0.1) + self.zeroVoltage.setProperty("value", 1.29) + self.zeroVoltage.setObjectName("zeroVoltage") + self.gridLayout_4.addWidget(self.zeroVoltage, 2, 0, 1, 1) + spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.gridLayout_4.addItem(spacerItem1, 3, 0, 1, 1) + self.peltierCheckBox = QtWidgets.QCheckBox(self.groupBox_3) + self.peltierCheckBox.setObjectName("peltierCheckBox") + self.gridLayout_4.addWidget(self.peltierCheckBox, 0, 0, 1, 1) + self.gridLayout_2.addWidget(self.groupBox_3, 1, 0, 1, 1) self.gridLayout.addWidget(self.widget, 0, 2, 8, 1) + self.groupBox = QtWidgets.QGroupBox(Form) + self.groupBox.setMinimumSize(QtCore.QSize(0, 160)) + self.groupBox.setObjectName("groupBox") + self.gridLayout_3 = QtWidgets.QGridLayout(self.groupBox) + self.gridLayout_3.setObjectName("gridLayout_3") + self.doubleSpinBox_3 = QtWidgets.QDoubleSpinBox(self.groupBox) + self.doubleSpinBox_3.setObjectName("doubleSpinBox_3") + self.gridLayout_3.addWidget(self.doubleSpinBox_3, 3, 0, 1, 1) + self.currentBox = QtWidgets.QDoubleSpinBox(self.groupBox) + self.currentBox.setPrefix("") + self.currentBox.setSingleStep(0.1) + self.currentBox.setObjectName("currentBox") + self.gridLayout_3.addWidget(self.currentBox, 0, 0, 1, 1) + self.CurrentButton = QtWidgets.QPushButton(self.groupBox) + self.CurrentButton.setObjectName("CurrentButton") + self.gridLayout_3.addWidget(self.CurrentButton, 0, 1, 1, 1) + self.PhaseButton = QtWidgets.QPushButton(self.groupBox) + self.PhaseButton.setObjectName("PhaseButton") + self.gridLayout_3.addWidget(self.PhaseButton, 3, 1, 1, 1) + self.groupBox_2 = QtWidgets.QGroupBox(self.groupBox) + self.groupBox_2.setObjectName("groupBox_2") + self.horizontalLayout = QtWidgets.QHBoxLayout(self.groupBox_2) + self.horizontalLayout.setObjectName("horizontalLayout") + self.factorBox = QtWidgets.QDoubleSpinBox(self.groupBox_2) + self.factorBox.setObjectName("factorBox") + self.horizontalLayout.addWidget(self.factorBox) + self.FactorButton = QtWidgets.QPushButton(self.groupBox_2) + self.FactorButton.setObjectName("FactorButton") + self.horizontalLayout.addWidget(self.FactorButton) + self.gridLayout_3.addWidget(self.groupBox_2, 1, 0, 1, 2) + self.gridLayout.addWidget(self.groupBox, 7, 0, 1, 2) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) @@ -108,9 +157,22 @@ class Ui_Form(object): def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) - self.label.setText(_translate("Form", "kp")) - self.label_2.setText(_translate("Form", "ki")) - self.PIDenableButton.setText(_translate("Form", "PID enable")) self.label_4.setText(_translate("Form", "Setpoint (°C)")) + self.PIDenableButton.setText(_translate("Form", "PID enable")) self.label_3.setText(_translate("Form", "kd")) + self.label.setText(_translate("Form", "kp")) self.OutputButton.setText(_translate("Form", "Set output")) + self.outputBox.setSuffix(_translate("Form", " V")) + self.label_2.setText(_translate("Form", "ki")) + self.groupBox_3.setTitle(_translate("Form", "Parameter")) + self.label_5.setText(_translate("Form", "Zero voltage")) + self.zeroVoltage.setSuffix(_translate("Form", " V")) + self.peltierCheckBox.setText(_translate("Form", "Peltier? (allow negativ voltages)")) + self.groupBox.setTitle(_translate("Form", "U-I-Wandler")) + self.doubleSpinBox_3.setSuffix(_translate("Form", " °")) + self.currentBox.setSuffix(_translate("Form", " mA")) + self.CurrentButton.setText(_translate("Form", "Set current")) + self.PhaseButton.setText(_translate("Form", "Set phase")) + self.groupBox_2.setTitle(_translate("Form", "Current-phase factor:")) + self.FactorButton.setText(_translate("Form", "Set factor")) + diff --git a/src/gui-client/channel.ui b/src/gui-client/channel.ui index 46cfeea..3989c91 100644 --- a/src/gui-client/channel.ui +++ b/src/gui-client/channel.ui @@ -7,59 +7,33 @@ 0 0 846 - 423 + 421 Form - - - - Qt::Vertical + + + + -99.000000000000000 - - QSizePolicy::Minimum + + 0.010000000000000 - - - 20 - 10 - - - - - - - - kp + + 1.000000000000000 - - + + - ki + Setpoint (°C) - - - - Qt::Vertical - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - @@ -86,6 +60,36 @@ + + + + kd + + + + + + + kp + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 0 + 50 + + + + @@ -99,55 +103,6 @@ - - - - - 0 - 0 - - - - - 100 - 16777215 - - - - 3 - - - 0.010000000000000 - - - - - - - Setpoint (°C) - - - - - - - -99.000000000000000 - - - 0.010000000000000 - - - 1.000000000000000 - - - - - - - kd - - - @@ -167,6 +122,44 @@ + + + + + 0 + 0 + + + + + 100 + 16777215 + + + + V + + + 3 + + + 0.000000000000000 + + + 5.000000000000000 + + + 0.010000000000000 + + + + + + + ki + + + @@ -193,11 +186,134 @@ - + + + + + Parameter + + + + + + Zero voltage + + + + + + + V + + + -5.000000000000000 + + + 5.000000000000000 + + + 0.100000000000000 + + + 1.290000000000000 + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Peltier? (allow negativ voltages) + + + + + + + + + + + + + + 0 + 160 + + + + U-I-Wandler + + + + + + ° + + + + + + + + + + mA + + + 0.100000000000000 + + + + + + + Set current + + + + + + + Set phase + + + + + + + Current-phase factor: + + + + + + + + + Set factor + + + + + + diff --git a/src/gui-client/channelInfoClass.py b/src/gui-client/channelInfoClass.py index f0cc6af..18a65b4 100644 --- a/src/gui-client/channelInfoClass.py +++ b/src/gui-client/channelInfoClass.py @@ -10,10 +10,11 @@ import globalvars from channelInfoWidgetClass import channelInfoWidget class channelInfo(QObject): - def __init__(self, channel_num, temp_field, out_field, enable_field, tabnumber, activTabWidget, parent): + def __init__(self, device_num, channel_num, temp_field, out_field, enable_field, tabnumber, activTabWidget, parent): super(channelInfo,self).__init__(parent) self.widget_obj = channelInfoWidget(self) self.channel_num = channel_num + self.device_num = device_num self.temp_field = temp_field self.out_field = out_field @@ -38,12 +39,16 @@ class channelInfo(QObject): self.widget_obj.kdBox.valueChanged.connect(self.kdChanged) self.widget_obj.PIDenableButton.clicked.connect(self.PIDenableButtonChanged) self.widget_obj.OutputButton.clicked.connect(self.OutputButtonChanged) + + self.widget_obj.peltierCheckBox.stateChanged.connect(self.heaterTypeChanged) + self.widget_obj.CurrentButton.clicked.connect(self.CurrentButtonChanged) + self.widget_obj.PhaseButton.clicked.connect(self.PhaseButton) def update(self): - if globalvars.conStatus: - TCP.send_cmd(globalvars.sock, 'CMD:\tGET_RUN_VALUES\t'+str(self.channel_num)+'\t') - msg = TCP.recv_msg(globalvars.sock) + if globalvars.conStatus[self.device_num]: + TCP.send_cmd(globalvars.sock[self.device_num], 'CMD:\tGET_RUN_VALUES\t'+str(self.channel_num)+'\t') + msg = TCP.recv_msg(globalvars.sock[self.device_num]) #ans = str2num(msg) try: @@ -70,86 +75,114 @@ class channelInfo(QObject): def setpointChanged(self): - if globalvars.conStatus: - TCP.send_cmd(globalvars.sock, 'CMD:\tSET_SETPOINT\t'+str(self.channel_num)+'\t'+str(self.widget_obj.setpointBox.value())+'\t') - ans = TCP.recv_msg(globalvars.sock) + if globalvars.conStatus[self.device_num]: + TCP.send_cmd(globalvars.sock[self.device_num], 'CMD:\tSET_SETPOINT\t'+str(self.channel_num)+'\t'+str(self.widget_obj.setpointBox.value())+'\t') + ans = TCP.recv_msg(globalvars.sock[self.device_num]) print(ans) globalvars.settings["ch{0}".format(self.channel_num)]["setpoint"] = self.widget_obj.setpointBox.value() def kpChanged(self): - if globalvars.conStatus: - TCP.send_cmd(globalvars.sock, 'CMD:\tSET_KP\t'+str(self.channel_num)+'\t'+str(self.widget_obj.kpBox.value())+'\t') - ans = TCP.recv_msg(globalvars.sock) + if globalvars.conStatus[self.device_num]: + TCP.send_cmd(globalvars.sock[self.device_num], 'CMD:\tSET_KP\t'+str(self.channel_num)+'\t'+str(self.widget_obj.kpBox.value())+'\t') + ans = TCP.recv_msg(globalvars.sock[self.device_num]) print(ans) + globalvars.settings["ch{0}".format(self.channel_num)]["kp"] = self.widget_obj.kpBox.value() def kiChanged(self): - if globalvars.conStatus: - TCP.send_cmd(globalvars.sock, 'CMD:\tSET_KI\t'+str(self.channel_num)+'\t'+str(self.widget_obj.kiBox.value())+'\t') - ans = TCP.recv_msg(globalvars.sock) + if globalvars.conStatus[self.device_num]: + TCP.send_cmd(globalvars.sock[self.device_num], 'CMD:\tSET_KI\t'+str(self.channel_num)+'\t'+str(self.widget_obj.kiBox.value())+'\t') + ans = TCP.recv_msg(globalvars.sock[self.device_num]) print(ans) + globalvars.settings["ch{0}".format(self.channel_num)]["ki"] = self.widget_obj.kiBox.value() def kdChanged(self): - if globalvars.conStatus: - TCP.send_cmd(globalvars.sock, 'CMD:\tSET_KD\t'+str(self.channel_num)+'\t'+str(self.widget_obj.kdBox.value())+'\t') - ans = TCP.recv_msg(globalvars.sock) + if globalvars.conStatus[self.device_num]: + TCP.send_cmd(globalvars.sock[self.device_num], 'CMD:\tSET_KD\t'+str(self.channel_num)+'\t'+str(self.widget_obj.kdBox.value())+'\t') + ans = TCP.recv_msg(globalvars.sock[self.device_num]) + globalvars.settings["ch{0}".format(self.channel_num)]["kd"] = self.widget_obj.kdBox.value() print(ans) def PIDenableButtonChanged(self): - if globalvars.conStatus: + if globalvars.conStatus[self.device_num]: if self.widget_obj.PIDenableButton.isChecked(): self.widget_obj.PIDenableButton.setStyleSheet("background-color: rgb(0,255,0)") self.widget_obj.OutputButton.setEnabled(False) - TCP.send_cmd(globalvars.sock, 'CMD:\tLOCK\t'+str(self.channel_num)+'\t') - ans = TCP.recv_msg(globalvars.sock) + TCP.send_cmd(globalvars.sock[self.device_num], 'CMD:\tLOCK\t'+str(self.channel_num)+'\t') + ans = TCP.recv_msg(globalvars.sock[self.device_num]) print(ans) self.enable_field.setStyleSheet("background-color: rgb(0,255,0)") else: self.widget_obj.PIDenableButton.setStyleSheet("background-color: rgb(255,0,0)") self.widget_obj.OutputButton.setEnabled(True) - TCP.send_cmd(globalvars.sock, 'CMD:\tIDLE\t'+str(self.channel_num)+'\t') - ans = TCP.recv_msg(globalvars.sock) + TCP.send_cmd(globalvars.sock[self.device_num], 'CMD:\tIDLE\t'+str(self.channel_num)+'\t') + ans = TCP.recv_msg(globalvars.sock[self.device_num]) print(ans) self.enable_field.setStyleSheet("background-color: rgb(255,0,0)") else: self.widget_obj.PIDenableButton.setChecked(False) def OutputButtonChanged(self): - if globalvars.conStatus: - TCP.send_cmd(globalvars.sock, 'CMD:\tSET_VOLTAGE\t'+str(self.channel_num)+'\t'+str(self.widget_obj.outputBox.value())+'\t') - ans = TCP.recv_msg(globalvars.sock) + if globalvars.conStatus[self.device_num]: + setVoltage = self.widget_obj.zeroVoltage.value()/5 * self.widget_obj.outputBox.value() + self.widget_obj.zeroVoltage.value() + #setVoltage = self.widget_obj.outputBox.value() + TCP.send_cmd(globalvars.sock[self.device_num], 'CMD:\tSET_VOLTAGE\t'+str(1)+'\t'+str(setVoltage)+'\t') + ans = TCP.recv_msg(globalvars.sock[self.device_num]) print(ans) + def CurrentButtonChanged(self): + if globalvars.conStatus[self.device_num]: + setVoltage = 3*self.widget_obj.currentBox.value()/65 + #setVoltage = self.widget_obj.outputBox.value() + TCP.send_cmd(globalvars.sock[self.device_num], 'CMD:\tSET_VOLTAGE\t'+str(0)+'\t'+str(setVoltage)+'\t') + + def PhaseButtonChanged(self): + if globalvars.conStatus[self.device_num]: + setVoltage = self.widget_obj.phaseBox.value() * self.widget_obj.factorBox.value() * 3/65 + TCP.send_cmd(globalvars.sock[self.device_num], 'CMD:\tSET_VOLTAGE\t'+str(0)+'\t'+str(setVoltage)+'\t') + + + def heaterTypeChanged(self): + if self.widget_obj.peltierCheckBox.isChecked(): + self.widget_obj.outputBox.setMinimum(-5) + TCP.send_cmd(globalvars.sock[self.device_num], 'CMD:\tSET_OUTMAX\t'+str(0)+'\t'+str(3)+'\t') + TCP.send_cmd(globalvars.sock[self.device_num], 'CMD:\tSET_OUTMIN\t'+str(0)+'\t'+str(0)+'\t') + + else: + self.widget_obj.outputBox.setMinimum(0) + TCP.send_cmd(globalvars.sock[self.device_num], 'CMD:\tSET_OUTMAX\t'+str(0)+'\t'+str(3)+'\t') + TCP.send_cmd(globalvars.sock[self.device_num], 'CMD:\tSET_OUTMIN\t'+str(0)+'\t'+str(self.widget_obj.zeroVoltage.value())+'\t') + def setEnabled(self, val): self.widget_obj.setEnabled(val) def loadSettings(self): - if globalvars.remoteSettings: - TCP.send_cmd(globalvars.sock,"CMD:\tGET_SETPOINT\t{0}\t".format(self.channel_num)) - setpoint = float(TCP.recv_msg(globalvars.sock)) + if globalvars.remoteSettings[self.device_num]: + TCP.send_cmd(globalvars.sock[self.device_num],"CMD:\tGET_SETPOINT\t{0}\t".format(self.channel_num)) + setpoint = float(TCP.recv_msg(globalvars.sock[self.device_num])) self.widget_obj.setpointBox.blockSignals(True) self.widget_obj.setpointBox.setValue(setpoint) self.widget_obj.setpointBox.blockSignals(False) - TCP.send_cmd(globalvars.sock,"CMD:\tGET_KP\t{0}\t".format(self.channel_num)) - kp = float(TCP.recv_msg(globalvars.sock)) + TCP.send_cmd(globalvars.sock[self.device_num],"CMD:\tGET_KP\t{0}\t".format(self.channel_num)) + kp = float(TCP.recv_msg(globalvars.sock[self.device_num])) self.widget_obj.kpBox.blockSignals(True) self.widget_obj.kpBox.setValue(kp) self.widget_obj.kpBox.blockSignals(False) - TCP.send_cmd(globalvars.sock,"CMD:\tGET_KI\t{0}\t".format(self.channel_num)) - ki = float(TCP.recv_msg(globalvars.sock)) + TCP.send_cmd(globalvars.sock[self.device_num],"CMD:\tGET_KI\t{0}\t".format(self.channel_num)) + ki = float(TCP.recv_msg(globalvars.sock[self.device_num])) self.widget_obj.kiBox.blockSignals(True) self.widget_obj.kiBox.setValue(ki) self.widget_obj.kiBox.blockSignals(False) - TCP.send_cmd(globalvars.sock,"CMD:\tGET_KD\t{0}\t".format(self.channel_num)) - kd = float(TCP.recv_msg(globalvars.sock)) + TCP.send_cmd(globalvars.sock[self.device_num],"CMD:\tGET_KD\t{0}\t".format(self.channel_num)) + kd = float(TCP.recv_msg(globalvars.sock[self.device_num])) self.widget_obj.kdBox.blockSignals(True) self.widget_obj.kdBox.setValue(kd) self.widget_obj.kdBox.blockSignals(False) - TCP.send_cmd(globalvars.sock,"CMD:\tGET_PID_STATUS\t{0}\t".format(self.channel_num)) - enabled = int(TCP.recv_msg(globalvars.sock)) + TCP.send_cmd(globalvars.sock[self.device_num],"CMD:\tGET_PID_STATUS\t{0}\t".format(self.channel_num)) + enabled = int(TCP.recv_msg(globalvars.sock[self.device_num])) print(enabled) self.widget_obj.PIDenableButton.setChecked(enabled) if self.widget_obj.PIDenableButton.isChecked(): @@ -163,8 +196,11 @@ class channelInfo(QObject): else: #Set settings from file and trigger sending to server - self.widget_obj.setpointBox.setValue(float(globalvars.settings["ch{0}".format(self.channel_num)]["setpoint"])) - self.widget_obj.kpBox.setValue(float(globalvars.settings["ch{0}".format(self.channel_num)]["kp"])) - self.widget_obj.kiBox.setValue(float(globalvars.settings["ch{0}".format(self.channel_num)]["ki"])) - self.widget_obj.kdBox.setValue(float(globalvars.settings["ch{0}".format(self.channel_num)]["kd"])) - self.widget_obj.PIDenableButton.setChecked(bool(globalvars.settings["ch{0}".format(self.channel_num)]["PIDenabled"])) + self.widget_obj.setpointBox.setValue(float(globalvars.settings["ch{0}".format(self.device_num)]["setpoint"])) + self.widget_obj.kpBox.setValue(float(globalvars.settings["ch{0}".format(self.device_num)]["kp"])) + self.widget_obj.kiBox.setValue(float(globalvars.settings["ch{0}".format(self.device_num)]["ki"])) + self.widget_obj.kdBox.setValue(float(globalvars.settings["ch{0}".format(self.device_num)]["kd"])) + self.widget_obj.PIDenableButton.setChecked(bool(globalvars.settings["ch{0}".format(self.device_num)]["PIDenabled"])) + + self.widget_obj.peltierCheckBox.setChecked(bool(globalvars.settings["ch{0}".format(self.device_num)]["peltier"])) + self.widget_obj.zeroVoltage.setValue(float(globalvars.settings["ch{0}".format(self.device_num)]["zeroVolt"])) diff --git a/src/gui-client/client.py b/src/gui-client/client.py index bb58001..ccefbbc 100644 --- a/src/gui-client/client.py +++ b/src/gui-client/client.py @@ -44,26 +44,34 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): def __init__(self, ): QMainWindow.__init__(self) self.setupUi(self) + + self.sock = None + self.address = '' + self.port = 0 + + self.sock2 = None + self.address2 = '' + self.port2 = 0 self.tcpqueue = queue.Queue(100) - self.channel = [0] + self.channel = [0,0] - temp_field = [self.temp_ch0] - out_field = [self.out_ch0] - enable_field = [self.enable_ch0] + temp_field = [self.temp_ch0, self.temp_ch1] + out_field = [self.out_ch0, self.out_ch1] + enable_field = [self.enable_ch0, self.enable_ch1] #Open json settings file defined in globalvars self.loadSettingsFile(globalvars.settingsFile) for ch in range(len(self.channel)): - self.channel[ch] = channelInfo(ch,temp_field[ch],out_field[ch],enable_field[ch], ch, self.tabWidget ,self) + self.channel[ch] = channelInfo(ch,0,temp_field[ch],out_field[ch],enable_field[ch], ch, self.tabWidget ,self) self.channel[ch].setEnabled(False) self.layout_ch0.addWidget(self.channel[0].widget_obj) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_0),globalvars.settings["ch0"]["name"]) - #self.layout_ch1.addWidget(self.channel[1].widget_obj) - #self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_1),globalvars.settings["ch1"]["name"]) + self.layout_ch1.addWidget(self.channel[1].widget_obj) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_1),globalvars.settings["ch1"]["name"]) #self.layout_ch2.addWidget(self.channel[2].widget_obj) #self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2),globalvars.settings["ch2"]["name"]) #self.layout_ch3.addWidget(self.channel[3].widget_obj) @@ -71,15 +79,22 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): self.ip_address.setText(globalvars.settings["defaultIP"]) self.portField.setText(str(globalvars.settings["defaultPort"])) + + self.ip_address2.setText(globalvars.settings["defaultIP2"]) + self.portField2.setText(str(globalvars.settings["defaultPort2"])) #Connect radio buttons to functions self.remoteRadioButton.toggled.connect(lambda:self.settingsSelection(self.remoteRadioButton)) self.localRadioButton.toggled.connect(lambda:self.settingsSelection(self.localRadioButton)) + self.remoteRadioButton2.toggled.connect(lambda:self.settingsSelection2(self.remoteRadioButton2)) + self.localRadioButton2.toggled.connect(lambda:self.settingsSelection2(self.localRadioButton2)) + # Close event to save settings app.aboutToQuit.connect(self.closeEvent) # Button functions self.connectButton.clicked.connect(self.connectButtonChange) + self.connectButton2.clicked.connect(self.connectButton2Change) self.refresh_timer = QTimer() self.refresh_timer.timeout.connect(self.refresh) @@ -95,7 +110,7 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): self.sock.connect((self.address,int(self.port))) except Exception as e: print("something's wrong with %s:%s. Exception is %s" % (self.address, self.port, e)) - globalvars.conStatus = False + globalvars.conStatus[0] = False self.connectButton.setChecked(False) return @@ -103,32 +118,75 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): data_recv = self.sock.recv(1024) print(data_recv.decode()) except OSError: - globalvars.conStatus = False + globalvars.conStatus[0] = False self.connectButton.setChecked(False) print('\nSocket broken') return - globalvars.conStatus = True - globalvars.sock = self.sock + globalvars.conStatus[0] = True + globalvars.sock[0] = self.sock print("connect to "+ self.address) - for ch in range(len(self.channel)): - self.channel[ch].loadSettings() + + self.channel[0].loadSettings() self.refresh_timer.start(500) else: - globalvars.conStatus = False + globalvars.conStatus[0] = False self.refresh_timer.stop() time.sleep(0.1) print("disconnect from "+ self.address) self.sock.close() - for ch in range(len(self.channel)): - self.channel[ch].setEnabled(globalvars.conStatus) + self.channel[0].setEnabled(globalvars.conStatus[0]) - self.remoteRadioButton.setEnabled(not globalvars.conStatus) - self.localRadioButton.setEnabled(not globalvars.conStatus) + self.remoteRadioButton.setEnabled(not globalvars.conStatus[0]) + self.localRadioButton.setEnabled(not globalvars.conStatus[0]) + + def connectButton2Change(self): + if self.connectButton2.isChecked(): + #Open connection to server + self.sock2 = socket.socket() + self.address2 = self.ip_address2.text() + self.port2 = self.portField2.text() + + try: + self.sock2.connect((self.address2,int(self.port2))) + except Exception as e: + print("something's wrong with %s:%s. Exception is %s" % (self.address, self.port, e)) + globalvars.conStatus[1] = False + self.connectButton2.setChecked(False) + return + + try: + data_recv = self.sock2.recv(1024) + print(data_recv.decode()) + except OSError: + globalvars.conStatus[1] = False + self.connectButton2.setChecked(False) + print('\nSocket broken') + return + + globalvars.conStatus[1] = True + globalvars.sock[1] = self.sock2 + print("connect to "+ self.address2) + + self.channel[1].loadSettings() + + self.refresh_timer.start(500) + + else: + globalvars.conStatus[1] = False + self.refresh_timer.stop() + time.sleep(0.1) + print("disconnect from "+ self.address2) + self.sock2.close() + + self.channel[1].setEnabled(globalvars.conStatus[1]) + + self.remoteRadioButton.setEnabled(not globalvars.conStatus[1]) + self.localRadioButton.setEnabled(not globalvars.conStatus[1]) def refresh(self): for ch in range(len(self.channel)): @@ -138,22 +196,36 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): def settingsSelection(self,b): if b.objectName() == "remoteRadioButton": if b.isChecked() == True: - globalvars.remoteSettings = True + globalvars.remoteSettings[0] = True else: - globalvars.remoteSettings = False + globalvars.remoteSettings[0] = False if b.objectName() == "localRadioButton": if b.isChecked() == True: - globalvars.remoteSettings = False + globalvars.remoteSettings[0] = False else: - globalvars.remoteSettings = True + globalvars.remoteSettings[0] = True + + def settingsSelection2(self,b): + if b.objectName() == "remoteRadioButton2": + if b.isChecked() == True: + globalvars.remoteSettings[1] = True + else: + globalvars.remoteSettings[1] = False + + if b.objectName() == "localRadioButton2": + if b.isChecked() == True: + globalvars.remoteSettings[1] = False + else: + globalvars.remoteSettings[1] = True def loadSettingsFile(self,path): with open(path) as c: globalvars.settings = json.load(c) def closeEvent(self, event): - globalvars.conStatus = False + globalvars.conStatus[0] = False + globalvars.conStatus[1] = False print("Saving settings... ") with open(globalvars.settingsFile, 'w') as f: @@ -165,6 +237,6 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): if __name__ == '__main__': app = QApplication(sys.argv) main = ApplicationWindow() - main.setWindowTitle("Tempertur-Controller V1") + main.setWindowTitle("Time-Bin-Controller V1") main.show() app.exec_() diff --git a/src/gui-client/globalvars.py b/src/gui-client/globalvars.py index 45abc74..77f80fe 100644 --- a/src/gui-client/globalvars.py +++ b/src/gui-client/globalvars.py @@ -1,6 +1,6 @@ -conStatus = False -sock = 0 +conStatus = [False, False] +sock = [0,0] settings = 0 -remoteSettings = True +remoteSettings = [True, True] settingsFile = './settings.json' diff --git a/src/gui-client/main_window.py b/src/gui-client/main_window.py index 34f646c..ef154c5 100644 --- a/src/gui-client/main_window.py +++ b/src/gui-client/main_window.py @@ -2,14 +2,12 @@ # Form implementation generated from reading ui file 'main_window.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.10.1 # # WARNING! All changes made in this file will be lost! - from PyQt5 import QtCore, QtGui, QtWidgets - class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") @@ -25,37 +23,31 @@ class Ui_MainWindow(object): sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) self.groupBox.setSizePolicy(sizePolicy) self.groupBox.setMinimumSize(QtCore.QSize(220, 0)) - self.groupBox.setMaximumSize(QtCore.QSize(157, 16777215)) + self.groupBox.setMaximumSize(QtCore.QSize(220, 16777215)) self.groupBox.setObjectName("groupBox") self.gridLayout_3 = QtWidgets.QGridLayout(self.groupBox) self.gridLayout_3.setObjectName("gridLayout_3") - self.label_5 = QtWidgets.QLabel(self.groupBox) - self.label_5.setObjectName("label_5") - self.gridLayout_3.addWidget(self.label_5, 0, 1, 1, 1) - self.connectButton = QtWidgets.QPushButton(self.groupBox) - self.connectButton.setCheckable(True) - self.connectButton.setObjectName("connectButton") - self.gridLayout_3.addWidget(self.connectButton, 5, 0, 1, 3) - self.localRadioButton = QtWidgets.QRadioButton(self.groupBox) - self.localRadioButton.setObjectName("localRadioButton") - self.gridLayout_3.addWidget(self.localRadioButton, 4, 0, 1, 3) - self.remoteRadioButton = QtWidgets.QRadioButton(self.groupBox) - self.remoteRadioButton.setChecked(True) - self.remoteRadioButton.setObjectName("remoteRadioButton") - self.gridLayout_3.addWidget(self.remoteRadioButton, 3, 0, 1, 3) - self.label = QtWidgets.QLabel(self.groupBox) - self.label.setObjectName("label") - self.gridLayout_3.addWidget(self.label, 0, 0, 1, 1) self.ip_address = QtWidgets.QLineEdit(self.groupBox) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.ip_address.sizePolicy().hasHeightForWidth()) self.ip_address.setSizePolicy(sizePolicy) + self.ip_address.setMinimumSize(QtCore.QSize(130, 0)) self.ip_address.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.ip_address.setAlignment(QtCore.Qt.AlignCenter) self.ip_address.setObjectName("ip_address") self.gridLayout_3.addWidget(self.ip_address, 1, 0, 1, 1) + self.label_5 = QtWidgets.QLabel(self.groupBox) + self.label_5.setObjectName("label_5") + self.gridLayout_3.addWidget(self.label_5, 0, 1, 1, 1) + self.localRadioButton = QtWidgets.QRadioButton(self.groupBox) + self.localRadioButton.setObjectName("localRadioButton") + self.gridLayout_3.addWidget(self.localRadioButton, 4, 0, 1, 3) + self.connectButton = QtWidgets.QPushButton(self.groupBox) + self.connectButton.setCheckable(True) + self.connectButton.setObjectName("connectButton") + self.gridLayout_3.addWidget(self.connectButton, 5, 0, 1, 3) self.portField = QtWidgets.QLineEdit(self.groupBox) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) @@ -65,8 +57,13 @@ class Ui_MainWindow(object): self.portField.setMaximumSize(QtCore.QSize(50, 16777215)) self.portField.setObjectName("portField") self.gridLayout_3.addWidget(self.portField, 1, 1, 1, 2) - spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.gridLayout_3.addItem(spacerItem, 6, 0, 1, 1) + self.label = QtWidgets.QLabel(self.groupBox) + self.label.setObjectName("label") + self.gridLayout_3.addWidget(self.label, 0, 0, 1, 1) + self.remoteRadioButton = QtWidgets.QRadioButton(self.groupBox) + self.remoteRadioButton.setChecked(True) + self.remoteRadioButton.setObjectName("remoteRadioButton") + self.gridLayout_3.addWidget(self.remoteRadioButton, 3, 0, 1, 3) self.gridLayout_2.addWidget(self.groupBox, 0, 0, 1, 1) self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget) self.groupBox_2.setObjectName("groupBox_2") @@ -127,9 +124,9 @@ class Ui_MainWindow(object): self.enable_ch1.setText("") self.enable_ch1.setObjectName("enable_ch1") self.gridLayout_4.addWidget(self.enable_ch1, 2, 2, 1, 1) - spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.gridLayout_4.addItem(spacerItem1, 5, 0, 1, 1) - self.gridLayout_2.addWidget(self.groupBox_2, 0, 1, 1, 1) + spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.gridLayout_4.addItem(spacerItem, 5, 0, 1, 1) + self.gridLayout_2.addWidget(self.groupBox_2, 0, 1, 2, 1) self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) self.tabWidget.setObjectName("tabWidget") self.tab_0 = QtWidgets.QWidget() @@ -152,10 +149,46 @@ class Ui_MainWindow(object): self.layout_ch3 = QtWidgets.QHBoxLayout(self.tab_3) self.layout_ch3.setObjectName("layout_ch3") self.tabWidget.addTab(self.tab_3, "") - self.gridLayout_2.addWidget(self.tabWidget, 1, 0, 1, 2) + self.gridLayout_2.addWidget(self.tabWidget, 3, 0, 1, 2) + self.groupBox_3 = QtWidgets.QGroupBox(self.centralwidget) + self.groupBox_3.setMinimumSize(QtCore.QSize(220, 0)) + self.groupBox_3.setMaximumSize(QtCore.QSize(220, 16777215)) + self.groupBox_3.setObjectName("groupBox_3") + self.gridLayout = QtWidgets.QGridLayout(self.groupBox_3) + self.gridLayout.setObjectName("gridLayout") + self.label_6 = QtWidgets.QLabel(self.groupBox_3) + self.label_6.setObjectName("label_6") + self.gridLayout.addWidget(self.label_6, 0, 0, 1, 1) + self.label_7 = QtWidgets.QLabel(self.groupBox_3) + self.label_7.setObjectName("label_7") + self.gridLayout.addWidget(self.label_7, 0, 1, 1, 1) + self.localRadioButton2 = QtWidgets.QRadioButton(self.groupBox_3) + self.localRadioButton2.setObjectName("localRadioButton2") + self.gridLayout.addWidget(self.localRadioButton2, 3, 0, 1, 2) + self.remoteRadioButton2 = QtWidgets.QRadioButton(self.groupBox_3) + self.remoteRadioButton2.setChecked(True) + self.remoteRadioButton2.setObjectName("remoteRadioButton2") + self.gridLayout.addWidget(self.remoteRadioButton2, 2, 0, 1, 2) + self.portField2 = QtWidgets.QLineEdit(self.groupBox_3) + self.portField2.setObjectName("portField2") + self.gridLayout.addWidget(self.portField2, 1, 1, 1, 1) + self.ip_address2 = QtWidgets.QLineEdit(self.groupBox_3) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ip_address2.sizePolicy().hasHeightForWidth()) + self.ip_address2.setSizePolicy(sizePolicy) + self.ip_address2.setMinimumSize(QtCore.QSize(130, 0)) + self.ip_address2.setObjectName("ip_address2") + self.gridLayout.addWidget(self.ip_address2, 1, 0, 1, 1) + self.connectButton2 = QtWidgets.QPushButton(self.groupBox_3) + self.connectButton2.setCheckable(True) + self.connectButton2.setObjectName("connectButton2") + self.gridLayout.addWidget(self.connectButton2, 4, 0, 1, 2) + self.gridLayout_2.addWidget(self.groupBox_3, 1, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 881, 22)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 881, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) @@ -169,14 +202,14 @@ class Ui_MainWindow(object): def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.groupBox.setTitle(_translate("MainWindow", "Connection setup")) - self.label_5.setText(_translate("MainWindow", "Port:")) - self.connectButton.setText(_translate("MainWindow", "Connect")) - self.localRadioButton.setText(_translate("MainWindow", "use local settings")) - self.remoteRadioButton.setText(_translate("MainWindow", "use remote settings")) - self.label.setText(_translate("MainWindow", "IP:")) + self.groupBox.setTitle(_translate("MainWindow", "Connection 1 setup")) self.ip_address.setText(_translate("MainWindow", "134.96.13.239")) + self.label_5.setText(_translate("MainWindow", "Port:")) + self.localRadioButton.setText(_translate("MainWindow", "use local settings")) + self.connectButton.setText(_translate("MainWindow", "Connect")) self.portField.setText(_translate("MainWindow", "2000")) + self.label.setText(_translate("MainWindow", "IP:")) + self.remoteRadioButton.setText(_translate("MainWindow", "use remote settings")) self.groupBox_2.setTitle(_translate("MainWindow", "Overview")) self.label_2.setText(_translate("MainWindow", "temperatures (°C)")) self.label_3.setText(_translate("MainWindow", "PID enabled")) @@ -185,3 +218,12 @@ class Ui_MainWindow(object): self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_1), _translate("MainWindow", "Channel 1")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Channel 2")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Channel 3")) + self.groupBox_3.setTitle(_translate("MainWindow", "Connection 2 setup")) + self.label_6.setText(_translate("MainWindow", "IP:")) + self.label_7.setText(_translate("MainWindow", "Port:")) + self.localRadioButton2.setText(_translate("MainWindow", "use local settings")) + self.remoteRadioButton2.setText(_translate("MainWindow", "use remote settings")) + self.portField2.setText(_translate("MainWindow", "2000")) + self.ip_address2.setText(_translate("MainWindow", "134.96.13.250")) + self.connectButton2.setText(_translate("MainWindow", "Connect")) + diff --git a/src/gui-client/main_window.ui b/src/gui-client/main_window.ui index ef194ff..a8b1fcc 100644 --- a/src/gui-client/main_window.ui +++ b/src/gui-client/main_window.ui @@ -31,55 +31,14 @@ - 157 + 220 16777215 - Connection setup + Connection 1 setup - - - - Port: - - - - - - - Connect - - - true - - - - - - - use local settings - - - - - - - use remote settings - - - true - - - - - - - IP: - - - @@ -88,6 +47,12 @@ 0 + + + 130 + 0 + + 16777215 @@ -102,6 +67,30 @@ + + + + Port: + + + + + + + use local settings + + + + + + + Connect + + + true + + + @@ -121,23 +110,27 @@ - - - - Qt::Vertical + + + + IP: - - - 20 - 40 - + + + + + + use remote settings - + + true + + - + Overview @@ -250,7 +243,7 @@ - + 0 @@ -281,6 +274,94 @@ + + + + + 220 + 0 + + + + + 220 + 16777215 + + + + Connection 2 setup + + + + + + IP: + + + + + + + Port: + + + + + + + use local settings + + + + + + + use remote settings + + + true + + + + + + + 2000 + + + + + + + + 0 + 0 + + + + + 130 + 0 + + + + 134.96.13.250 + + + + + + + Connect + + + true + + + + + + @@ -289,7 +370,7 @@ 0 0 881 - 22 + 21 diff --git a/src/gui-client/settings.json b/src/gui-client/settings.json index 6d62712..fca486d 100644 --- a/src/gui-client/settings.json +++ b/src/gui-client/settings.json @@ -1 +1 @@ -{"defaultIP": "134.96.13.250", "defaultPort": 2000, "ch0": {"name": "Encoder", "setpoint": 26.62, "kp": 12.0, "ki": 4.0, "kd": 0, "PIDenabled": 0, "channelEnabled": 1}, "ch1": {"name": "Decoder", "setpoint": 26.62, "kp": 12.0, "ki": 4.0, "kd": 0, "PIDenabled": 0, "channelEnabled": 1}, "ch2": {"name": "Channel 3", "setpoint": 34.05, "kp": 0.0, "ki": 0.0, "kd": 0.0, "PIDenabled": 0, "channelEnabled": 1}, "ch3": {"name": "Channel 4", "setpoint": 21.5, "kp": 0.0, "ki": 0.0, "kd": 0.0, "PIDenabled": 0, "channelEnabled": 1}} \ No newline at end of file +{"defaultIP": "134.96.13.250", "defaultPort": 2000, "defaultIP2": "134.96.13.250", "defaultPort2": 2000, "ch0": {"name": "Encoder", "setpoint": 26.62, "kp": 12.0, "ki": 4.0, "kd": 0, "PIDenabled": 0, "channelEnabled": 1, "peltier": 0, "zeroVolt": 1.29}, "ch1": {"name": "Decoder", "setpoint": 26.62, "kp": 12.0, "ki": 4.0, "kd": 0, "PIDenabled": 0, "channelEnabled": 1, "peltier": 0, "zeroVolt": 1.29}, "ch2": {"name": "Channel 3", "setpoint": 34.05, "kp": 0.0, "ki": 0.0, "kd": 0.0, "PIDenabled": 0, "channelEnabled": 1}, "ch3": {"name": "Channel 4", "setpoint": 21.5, "kp": 0.0, "ki": 0.0, "kd": 0.0, "PIDenabled": 0, "channelEnabled": 1}} \ No newline at end of file