Exemplo n.º 1
0
    def initUI(self):
        self.grid = QGridLayout(self)
        self.setLayout(self.grid)

        self.loadSettings()
        self.inputLabels = [QLabel(l) for l in self.Inputs]
        self.inputBoxes = []
        for i, iL in enumerate(self.inputLabels):
            self.grid.addWidget(iL, i, 0)

            sp = QDoubleSpinBox(self)
            sp.setRange(-1e10, 1e10)
            sp.setKeyboardTracking(False)
            self.grid.addWidget(sp, i, 1)
            self.inputBoxes.append(sp)

        for val, iB in zip(self.inputValues, self.inputBoxes):
            iB.setValue(val)
        self.connectSpinBoxes()

        self.outputValues = [0.0]*len(self.Outputs)
        self.outputLabels = [QLabel(l) for l in self.Outputs]
        self.outputValueLabels = [QLabel('0.0') for l in self.Outputs]

        sI = len(self.inputLabels)
        for i, oL in enumerate(self.outputLabels):
            self.grid.addWidget(oL, sI + i, 0)
            self.grid.addWidget(self.outputValueLabels[i], sI + i, 1)
Exemplo n.º 2
0
 def createDoubleSpinner(self, minimum, maximum):
     spinner = QDoubleSpinBox()
     spinner.setEnabled(False)
     spinner.setMinimumWidth(75)
     spinner.setRange(minimum, maximum)
     spinner.setKeyboardTracking(False)
     spinner.editingFinished.connect(self.spinning)
     spinner.valueChanged.connect(self.spinning)
     return spinner
Exemplo n.º 3
0
    def createDoubleSpinner(self, minimum, maximum):
        spinner = QDoubleSpinBox()
        spinner.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
        spinner.setMinimumWidth(105)
        spinner.setRange(minimum, maximum)
        spinner.setKeyboardTracking(False)
        spinner.setDecimals(8)

        spinner.editingFinished.connect(self.plotScaleChanged)
        spinner.valueChanged.connect(self.plotScaleChanged)

        return spinner
Exemplo n.º 4
0
    def createDoubleSpinner(self, minimum, maximum):
        spinner = QDoubleSpinBox()
        spinner.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
        spinner.setMinimumWidth(105)
        spinner.setRange(minimum, maximum)
        spinner.setKeyboardTracking(False)
        spinner.setDecimals(8)

        spinner.editingFinished.connect(self.plotScaleChanged)
        spinner.valueChanged.connect(self.plotScaleChanged)

        return spinner
Exemplo n.º 5
0
    def populateGuessBoxes(self):
        self.guessBox = []
        self.fitBox = []
        sI = 1  # TODO: do something smart about this
        for i, n in enumerate(self.fitter.parameterNames):
            spGuess = QDoubleSpinBox(self)
            spGuess.setRange(-1e10, 1e10)
            spGuess.setKeyboardTracking(False)
            spFit = QLabel('0.0')
            self.parmGrid.addWidget(QLabel(n, parent=self), i+sI+1, 0)
            self.parmGrid.addWidget(spGuess, i+sI+1, 1)
            self.parmGrid.addWidget(spFit, i+sI+1, 2)

            self.guessBox.append(spGuess)
            self.fitBox.append(spFit)

        self.connectGuessBoxes()
Exemplo n.º 6
0
class QFellesController(QFellesWidgetBaseClass):
    """
    @brief: Widget representing a PID controller
    """
    proportional = pyqtSignal(float)
    integral = pyqtSignal(float)
    derivative = pyqtSignal(float)
    MV_sp = pyqtSignal(float)
    CV_sp = pyqtSignal(float)

    def initUi(self, parent=None):
        """ Generates the user interface """
        #Update widget meta data
        self.meta["type"] = "Controller"
        self.meta["name"] = "foobar"
        self.meta["unit"] = "--"

        self.label = QLabel(parent)
        self.label.setObjectName("PID Controller")

        #Group box
        group_box = QGroupBox('Controller Settings')
        #Spin button Labels
        gain = "K<sub>c</sub>"
        Kc = gain.decode('utf-8')
        self.gain_label = QLabel(Kc)
        self.gain_label.setStyleSheet("font:25pt")
        time1 = "&#964;<sub>i</sub>"
        taui = time1.decode('utf-8')
        self.taui_label = QLabel(taui)
        self.taui_label.setStyleSheet("font:25pt ")
        time2 = "&#964;<sub>d</sub>"
        taud = time2.decode('utf-8')
        self.taud_label = QLabel(taud)
        self.taud_label.setStyleSheet("font:25pt")

        #Spin buttons
        self.gain = QDoubleSpinBox()  #Controller gain
        self.taui = QDoubleSpinBox()  #Controller integral time constant
        self.taud = QDoubleSpinBox()  #Controller derivative time constant
        self.GAIN_0 = self.gain.value()
        self.TAUI_0 = self.taui.value()
        self.TAUD_0 = self.taud.value()
        self.gain.setKeyboardTracking(False)
        self.taui.setKeyboardTracking(False)
        self.taud.setKeyboardTracking(False)
        #self.gain.setRange(minimum, maximum)
        self.gain_label.setBuddy(self.gain)
        self.taui_label.setBuddy(self.taui)
        self.taud_label.setBuddy(self.taud)
        self.gain.valueChanged.connect(self.controllersettings)
        self.taui.valueChanged.connect(self.controllersettings)
        self.taud.valueChanged.connect(self.controllersettings)
        self.setpoint = QDoubleSpinBox()  #Controlled variable setpoint
        self.setpoint.setHidden(True)
        self.setpoint_label = QLabel('CV Setpoint')
        self.setpoint_label.setBuddy(self.setpoint)
        self.setpoint.valueChanged.connect(self.CVSetPoint)

        #On-Off Buttons
        self.on = QRadioButton("Controller On")
        self.on.setChecked(False)  #Default to have controller off
        self.on.toggled.connect(self.btnstate)

        #Slider
        self.MV_manual = QSlider(Qt.Horizontal)
        self.MV_manual_label = QLabel('MV Setpoint')
        self.MV_manual.sliderReleased.connect(self.mv_state)
        #self.MV_manual.setRange(minimum, maximum)

        #Layout
        controlsLayout = QGridLayout()
        controlsLayout.addWidget(self.gain_label, 0, 0)
        controlsLayout.addWidget(self.gain, 0, 1)
        controlsLayout.addWidget(self.setpoint_label, 0, 2)
        controlsLayout.addWidget(self.setpoint, 0, 3)
        controlsLayout.addWidget(self.taui_label, 1, 0)
        controlsLayout.addWidget(self.taui, 1, 1)
        controlsLayout.addWidget(self.MV_manual_label, 1, 2)
        controlsLayout.addWidget(self.MV_manual, 1, 3)
        controlsLayout.addWidget(self.taud_label, 2, 0)
        controlsLayout.addWidget(self.taud, 2, 1)
        controlsLayout.addWidget(self.on, 2, 2)
        controlsLayout.setRowStretch(3, 1)

        layout = QHBoxLayout()
        layout.addLayout(controlsLayout)
        self.setLayout(layout)

    @pyqtSlot()
    def CVSetPoint(self, event=None):
        self.setpoint_value = self.setpoint.value()
        self.CV_sp.emit(self.setpoint_value)

    #print self.setpoint_value

    @pyqtSlot()
    def controllersettings(self, event=None):
        if self.gain.value() != self.GAIN_0:
            self.GAIN_0 = self.gain.value()
            self.gain_value = self.gain.value()
            self.proportional.emit(self.gain_value)  #Emitting Gain value
        #print self.gain_value
        elif self.taui.value() != self.TAUI_0:
            self.TAUI_0 = self.taui.value()
            self.taui_value = self.taui.value()
            self.integral.emit(self.taui_value)
        #print self.taui_value
        elif self.taud.value() != self.TAUD_0:
            self.TAUD_0 = self.taud.value()
            self.taud_value = self.taud.value()
            self.derivative.emit(self.taud_value)

    #print self.taud_value

    @pyqtSlot()
    def btnstate(self, event=None):
        if self.on.isChecked() == True:
            self.setpoint.setHidden(False)
            self.MV_manual.setHidden(True)
            #print "Controller is on"
        else:
            self.setpoint.setHidden(True)
            self.MV_manual.setHidden(False)
            #print "Controller is off"

    @pyqtSlot()
    def mv_state(self, event=None):
        MV_setpoint = self.MV_manual.value()
        self.MV_sp.emit(MV_setpoint)
        #print MV_setpoint

    def closeEvent(self, event=None):
        print("Shutting down %s" % self.__class__.__name__)
        self.onQuit()
Exemplo n.º 7
0
class ControllerWidget(QWidget):

    proportional = pyqtSignal(float)
    integral = pyqtSignal(float)
    derivative = pyqtSignal(float)
    MV_sp = pyqtSignal(float)
    CV_sp = pyqtSignal(float)

    def __init__(self, parent):
        super(ControllerWidget, self).__init__()
        #        self._controllerstate = 1 #default off
        self.initUI()
        self.on.toggled.connect(self.btnstate)
        self.setpoint.valueChanged[str].connect(self.CVSetPoint)
        self.gain.valueChanged[str].connect(self.controllersettings)
        self.taui.valueChanged[str].connect(self.controllersettings)
        self.taud.valueChanged[str].connect(self.controllersettings)
        self.MV_manual.sliderReleased.connect(self.mv_state)


#    @property
#    def controllerstate(self):
#        return self._controllerstate
#
#    @controllerstate.setter
#    def controllerstate(self, value):
#        self._controllerstate = value

    def initUI(self):
        #Group box
        group_box = QGroupBox('Controller Settings')

        #Spin button Labels
        gain = "K<sub>c</sub>"
        Kc = gain.decode('utf-8')
        self.gain_label = QLabel(Kc)
        self.gain_label.setStyleSheet("font:25pt")
        time1 = "&#964;<sub>i</sub>"
        taui = time1.decode('utf-8')
        self.taui_label = QLabel(taui)
        self.taui_label.setStyleSheet("font:25pt ")
        time2 = "&#964;<sub>d</sub>"
        taud = time2.decode('utf-8')
        self.taud_label = QLabel(taud)
        self.taud_label.setStyleSheet("font:25pt")

        #Spin buttons
        self.gain = QDoubleSpinBox()  #Controller gain
        self.taui = QDoubleSpinBox()  #Controller integral time constant
        self.taud = QDoubleSpinBox()  #Controller derivative time constant
        self.GAIN_0 = self.gain.value()
        self.TAUI_0 = self.taui.value()
        self.TAUD_0 = self.taud.value()
        self.gain.setKeyboardTracking(False)
        self.taui.setKeyboardTracking(False)
        self.taud.setKeyboardTracking(False)
        #self.gain.setRange(minimum, maximum)
        self.gain_label.setBuddy(self.gain)
        self.taui_label.setBuddy(self.taui)
        self.taud_label.setBuddy(self.taud)
        self.setpoint = QDoubleSpinBox()  #Controlled variable setpoint
        self.setpoint.setHidden(True)
        self.setpoint_label = QLabel('CV Setpoint')
        self.setpoint_label.setBuddy(self.setpoint)

        #On-Off Buttons
        self.on = QRadioButton("Controller On")
        self.on.setChecked(False)  #Default to have controller off

        #Slider
        self.MV_manual = QSlider(Qt.Horizontal)
        self.MV_manual_label = QLabel('MV Setpoint')
        #self.MV_manual.setRange(minimum, maximum)

        #Layout
        controlsLayout = QGridLayout()
        controlsLayout.addWidget(self.gain_label, 0, 0)
        controlsLayout.addWidget(self.gain, 0, 1)
        controlsLayout.addWidget(self.setpoint_label, 0, 2)
        controlsLayout.addWidget(self.setpoint, 0, 3)
        controlsLayout.addWidget(self.taui_label, 1, 0)
        controlsLayout.addWidget(self.taui, 1, 1)
        controlsLayout.addWidget(self.MV_manual_label, 1, 2)
        controlsLayout.addWidget(self.MV_manual, 1, 3)
        controlsLayout.addWidget(self.taud_label, 2, 0)
        controlsLayout.addWidget(self.taud, 2, 1)
        controlsLayout.addWidget(self.on, 2, 2)
        controlsLayout.setRowStretch(3, 1)

        layout = QHBoxLayout()
        layout.addLayout(controlsLayout)
        self.setLayout(layout)

    @pyqtSlot()
    def CVSetPoint(self, event=None):
        self.setpoint_value = self.setpoint.value()
        self.CV_sp.emit(self.setpoint_value)
        #print self.setpoint_value

    @pyqtSlot()
    def controllersettings(self, event=None):
        if self.gain.value() != self.GAIN_0:
            self.GAIN_0 = self.gain.value()
            self.gain_value = self.gain.value()
            self.proportional.emit(self.gain_value)  #emitting Gain value
            #print self.gain_value
        elif self.taui.value() != self.TAUI_0:
            self.TAUI_0 = self.taui.value()
            self.taui_value = self.taui.value()
            self.integral.emit(self.taui_value)
            #print self.taui_value
        elif self.taud.value() != self.TAUD_0:
            self.TAUD_0 = self.taud.value()
            self.taud_value = self.taud.value()
            self.derivative.emit(self.taud_value)
            #print self.taud_value

    @pyqtSlot()
    def btnstate(self, event=None):
        if self.on.isChecked() == True:
            self.setpoint.setHidden(False)
            self.MV_manual.setHidden(True)
            #print "Controller is on"
        else:
            self.setpoint.setHidden(True)
            self.MV_manual.setHidden(False)
            #print "Controller is off"

    @pyqtSlot()
    def mv_state(self, event=None):
        MV_setpoint = self.MV_manual.value()
        self.MV_sp.emit(MV_setpoint)