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
+
+
+
+
+
+
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