def reloadValues(self): if self.device.deviceStatus: self.enableDeviceButton.setText('Disable Device') self.enableDeviceButton.setIcon(GUIToolKit.getIconByName('reddot')) else: self.enableDeviceButton.setText('Enable Device') self.enableDeviceButton.setIcon( GUIToolKit.getIconByName('greendot'))
def connectionStateChanged(self, isConnected): if isConnected: self.connectDisconnectButton.setIcon( GUIToolKit.getIconByName('disconnect')) self.connectDisconnectButton.setText('Disconnect') else: self.connectDisconnectButton.setIcon( GUIToolKit.getIconByName('connect')) self.connectDisconnectButton.setText('Connect')
def __init__(self, parent=None): super().__init__(parent) self.device = SimpleFOCDevice.getInstance() self.setObjectName('joggingControl') self.setTitle('Jogging control') self.horizontalLayout = QtWidgets.QHBoxLayout(self) self.horizontalLayout.setObjectName('generalControlHL') self.fastFordwardButton = QtWidgets.QPushButton() self.fastFordwardButton.setObjectName('fastbackward') self.fastFordwardButton.setIcon( GUIToolKit.getIconByName('fastbackward')) self.fastFordwardButton.clicked.connect(self.joggingFastBackward) self.horizontalLayout.addWidget(self.fastFordwardButton) self.backwardButton = QtWidgets.QPushButton() self.backwardButton.setObjectName('backward') self.backwardButton.setIcon(GUIToolKit.getIconByName('backward')) self.backwardButton.clicked.connect(self.joggingBackward) self.horizontalLayout.addWidget(self.backwardButton) self.stopButton = QtWidgets.QPushButton() self.stopButton.setObjectName('stopbutton') self.stopButton.setIcon(GUIToolKit.getIconByName('stopjogging')) self.stopButton.clicked.connect(self.joggingStop) self.horizontalLayout.addWidget(self.stopButton) self.fordwardButton = QtWidgets.QPushButton() self.fordwardButton.setObjectName('fordward') self.fordwardButton.setIcon(GUIToolKit.getIconByName('fordward')) self.fordwardButton.clicked.connect(self.joggingFordward) self.horizontalLayout.addWidget(self.fordwardButton) self.fastBackwardButton = QtWidgets.QPushButton() self.fastBackwardButton.setObjectName('fastfordward') self.fastBackwardButton.setIcon( GUIToolKit.getIconByName('fastfordward')) self.fastBackwardButton.clicked.connect(self.joggingfastFordward) self.horizontalLayout.addWidget(self.fastBackwardButton) self.incrementLabel = QtWidgets.QLabel("Increment:") self.horizontalLayout.addWidget(self.incrementLabel) onlyFloat = QtGui.QRegExpValidator( QtCore.QRegExp("[+-]?([0-9]*[.])?[0-9]+")) self.incrementEdit = QtWidgets.QLineEdit() self.incrementEdit.setValidator(onlyFloat) self.incrementEdit.setAlignment(QtCore.Qt.AlignCenter) self.incrementEdit.setText('1.0') self.incrementEdit.setObjectName('incrementEdit') self.horizontalLayout.addWidget(self.incrementEdit) self.disableUI() self.device.addConnectionStateListener(self)
def __init__(self, parent=None): super().__init__(parent) self.device = SimpleFOCDevice.getInstance() self.setObjectName('groupBox') self.setTitle('Command Line interface') self.cmlVerticalLayout = QtWidgets.QVBoxLayout(self) self.cmlVerticalLayout.setObjectName('cmlVerticalLayout') self.commandLineDisplay = QtWidgets.QTextEdit(self) self.commandLineDisplay.setObjectName('commandLineDisplay') self.cmlVerticalLayout.addWidget(self.commandLineDisplay) self.commandLineDisplay.setReadOnly(True) self.commandLineDisplay.setTextColor(QtGui.QColor(68, 117, 68, 255)) self.cmlWidget = QtWidgets.QWidget(self) self.cmlWidget.setObjectName('cmlWidget') self.cmlHorizontalLayout = QtWidgets.QHBoxLayout(self.cmlWidget) self.cmlHorizontalLayout.setObjectName('cmlHorizontalLayout') self.commandLineEdit = QtWidgets.QLineEdit(self.cmlWidget) self.commandLineEdit.setObjectName('commandLineEdit') self.cmlHorizontalLayout.addWidget(self.commandLineEdit) self.commandLineEdit.returnPressed.connect(self.sendAction) self.sendButton = QtWidgets.QPushButton(self.cmlWidget) self.sendButton.setObjectName('sendButton') self.sendButton.setText('Send') self.sendButton.setIcon(GUIToolKit.getIconByName('send')) self.sendButton.clicked.connect(self.sendAction) self.cmlHorizontalLayout.addWidget(self.sendButton) self.clearButton = QtWidgets.QPushButton(self.cmlWidget) self.clearButton.setObjectName('clearButton') self.cmlHorizontalLayout.addWidget(self.clearButton) self.clearButton.setIcon(GUIToolKit.getIconByName('delete')) self.clearButton.clicked.connect(self.clearAction) self.clearButton.setText('Clear') self.listDevices = QtWidgets.QPushButton(self.cmlWidget) self.listDevices.setObjectName('listDevices') self.cmlHorizontalLayout.addWidget(self.listDevices) self.listDevices.setIcon(GUIToolKit.getIconByName('list')) self.listDevices.clicked.connect(self.sendListDevices) self.listDevices.setText('List Devices') self.cmlVerticalLayout.addWidget(self.cmlWidget) self.device.addConnectionStateListener(self) self.setEnabled(False)
def pauseContinuePlotAction(self): if self.controlledPlot.currentStatus is self.controlledPlot.connectedPausedState: # Continue pressed self.pauseContinueButton.setText('Pause') self.pauseContinueButton.setIcon(GUIToolKit.getIconByName('pause')) self.controlledPlot.currentStatus = self.controlledPlot.connectedPlottingStartedState else: # Pause pressed self.pauseContinueButton.setText('Continue') self.pauseContinueButton.setIcon( GUIToolKit.getIconByName('continue')) self.controlledPlot.currentStatus = self.controlledPlot.connectedPausedState
def __init__(self, icon_name, text, final_stretch=True, hyperlink=None, link_label='More info'): super(QWidget, self).__init__() layout = QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) self.setLayout(layout) icon = QLabel() icon.setPixmap( GUIToolKit.getIconByName(icon_name).pixmap(self.IconSize)) layout.addWidget(icon) a = QLabel(text) f = a.font() f.setPointSize(self.FontSize) f.setBold(True) a.setFont(f) layout.addWidget(a) if hyperlink is not None: link = QLabel() link.setText('<a href="' + hyperlink + '">' + link_label + '</a>') link.setOpenExternalLinks(True) layout.addWidget(link) if final_stretch: layout.addStretch(1)
def __init__(self, parent=None): super().__init__(parent) self.device = SimpleFOCDevice.getInstance() self.setObjectName('connectionControl') self.setTitle('Connection control') self.horizontalLayout = QtWidgets.QHBoxLayout(self) self.horizontalLayout.setObjectName('generalControlHL') self.devCommandIDLabel = QtWidgets.QLabel("Command:") self.horizontalLayout.addWidget(self.devCommandIDLabel) self.devCommandIDLetter = QtWidgets.QLineEdit() self.devCommandIDLetter.setObjectName('devCommandIDLetter') self.devCommandIDLetter.editingFinished.connect( self.changeDevicedevCommandID) self.horizontalLayout.addWidget(self.devCommandIDLetter) self.pullConfig = QtWidgets.QPushButton() self.pullConfig.setObjectName('pullConfig') self.pullConfig.setIcon(GUIToolKit.getIconByName('pull')) self.pullConfig.setText(' Pull Params') self.pullConfig.clicked.connect(self.device.pullConfiguration) self.horizontalLayout.addWidget(self.pullConfig) self.connectDisconnectButton = QtWidgets.QPushButton(self) self.connectDisconnectButton.setIcon( GUIToolKit.getIconByName('connect')) self.connectDisconnectButton.setObjectName('connectDeviceButton') self.connectDisconnectButton.setText('Connect') self.connectDisconnectButton.clicked.connect( self.connectDisconnectDeviceAction) self.horizontalLayout.addWidget(self.connectDisconnectButton) self.configureDeviceButton = QtWidgets.QPushButton(self) self.configureDeviceButton.setIcon( GUIToolKit.getIconByName('configure')) self.configureDeviceButton.setObjectName('configureDeviceButton') self.configureDeviceButton.setText('Configure') self.configureDeviceButton.clicked.connect(self.configureDeviceAction) self.horizontalLayout.addWidget(self.configureDeviceButton) self.device.addConnectionStateListener(self) self.connectionStateChanged(self.device.isConnected)
def __init__(self, parent=None): super().__init__(parent) # self.setMaximumWidth(300) onlyFloat = QtGui.QRegExpValidator( QtCore.QRegExp("[+-]?([0-9]*[.])?[0-9]+")) self.device = SimpleFOCDevice.getInstance() self.setTitle('General Controls') self.setObjectName('generalControls') self.gcGridLayout = QtWidgets.QGridLayout(self) self.gcGridLayout.setObjectName('gcGridLayout') self.enableDeviceButton = QtWidgets.QPushButton(self) self.enableDeviceButton.setObjectName('enButton') self.enableDeviceButton.setText('Enable Device') self.enableDeviceButton.setIcon(GUIToolKit.getIconByName('greendot')) self.enableDeviceButton.clicked.connect(self.toggleEnable) self.gcGridLayout.addWidget(self.enableDeviceButton, 1, 0, 1, 1) self.sensorZeroButton = QtWidgets.QPushButton(self) self.sensorZeroButton.setObjectName('homeButton') self.sensorZeroButton.setText('Sensor Zero') self.sensorZeroButton.setIcon(GUIToolKit.getIconByName('home')) self.sensorZeroButton.clicked.connect(self.setSensorZero) self.gcGridLayout.addWidget(self.sensorZeroButton, 1, 1, 1, 1) self.setZeroTarget = QtWidgets.QPushButton(self) self.setZeroTarget.setObjectName('zeroButton') self.setZeroTarget.setText('Zero Target') self.setZeroTarget.setIcon(GUIToolKit.getIconByName('stop')) self.setZeroTarget.clicked.connect(self.setTargetZero) self.gcGridLayout.addWidget(self.setZeroTarget, 1, 2, 1, 1) self.reloadValues() self.device.addConnectionStateListener(self) self.device.commProvider.commandDataReceived.connect( self.commandResponseReceived) self.connectionStateChanged(self.device.isConnected)
def initCustomCommand(sefl, command): customCommand = QtWidgets.QTreeWidgetItem() customCommand.isCustomCommand = True customCommand.setText(0, command.cmdName) customCommand.setText(1, command.cmd) customCommand.setIcon(0, GUIToolKit.getIconByName('gear')) customCommand.setFlags(customCommand.flags() | QtCore.Qt.ItemIsEditable) sefl.customComands.addChild(customCommand)
def __init__(self, main_window, devicesTabedWidget, parent=None): super().__init__(parent) self.addDeviceAction = QtWidgets.QToolButton(main_window) self.addDeviceAction.setIcon(GUIToolKit.getIconByName('add_motor')) self.addDeviceAction.setObjectName('addDeviceAction') self.addDeviceAction.setPopupMode(QtWidgets.QToolButton.InstantPopup) self.addDeviceMenu = QtWidgets.QMenu(self.addDeviceAction) self.addDeviceTreeView = QtWidgets.QAction("Tree View", self.addDeviceMenu) self.addDeviceTreeView.setIcon(GUIToolKit.getIconByName('tree')) self.addDeviceTreeView.triggered.connect( devicesTabedWidget.addDeviceTree) self.addDeviceFormView = QtWidgets.QAction("Form View", self.addDeviceMenu) self.addDeviceFormView.setIcon(GUIToolKit.getIconByName('form')) self.addDeviceFormView.triggered.connect( devicesTabedWidget.addDeviceForm) self.addDeviceMenu.addAction(self.addDeviceTreeView) self.addDeviceMenu.addAction(self.addDeviceFormView) self.addDeviceAction.setMenu(self.addDeviceMenu) self.addWidget(self.addDeviceAction) self.openDeviceAction = QtWidgets.QAction(main_window) self.openDeviceAction.setIcon(GUIToolKit.getIconByName('open')) self.openDeviceAction.setObjectName('openDeviceAction') self.openDeviceAction.triggered.connect(devicesTabedWidget.openDevice) self.addAction(self.openDeviceAction) self.saveDeviceAction = QtWidgets.QAction(main_window) self.saveDeviceAction.setIcon(GUIToolKit.getIconByName('save')) self.saveDeviceAction.setObjectName('saveDeviceAction') self.saveDeviceAction.triggered.connect(devicesTabedWidget.saveDevice) self.addAction(self.saveDeviceAction) self.generateCodeAction = QtWidgets.QAction(main_window) self.generateCodeAction.setIcon(GUIToolKit.getIconByName('gen')) self.generateCodeAction.setObjectName('genertecode') self.generateCodeAction.triggered.connect( devicesTabedWidget.generateCode) self.addAction(self.generateCodeAction) self.addSeparator() self.openConsoleToolAction = QtWidgets.QAction(main_window) self.openConsoleToolAction.setIcon( GUIToolKit.getIconByName('consoletool')) self.openConsoleToolAction.setToolTip('Open Serial Cosole tool') self.openConsoleToolAction.setObjectName('openconsoletool') self.openConsoleToolAction.triggered.connect( devicesTabedWidget.openConsoleTool) self.addAction(self.openConsoleToolAction) self.addSeparator()
def addCustomCommand(sefl, selectedItem): customCommand = QtWidgets.QTreeWidgetItem() customCommand.isCustomCommand = True customCommand.setText(0, 'Command') customCommand.setIcon(0, GUIToolKit.getIconByName('gear')) customCommand.setFlags(customCommand.flags() | QtCore.Qt.ItemIsEditable) selectedItem.addChild(customCommand) sefl.device.customCommands.customCommandsList.append( Command('Command', ''))
def connectionStateChanged(self, isConnectedFlag): if isConnectedFlag: self.connectDisconnectButton.setText('Disconnect') self.connectDisconnectButton.setIcon( GUIToolKit.getIconByName('disconnect')) else: self.connectDisconnectButton.setText('Connect') self.connectDisconnectButton.setIcon( GUIToolKit.getIconByName('connect')) self.portNameLabel.setEnabled(not isConnectedFlag) self.portNameComboBox.setEnabled(not isConnectedFlag) self.bitRateLabel.setEnabled(not isConnectedFlag) self.bitRatelineEdit.setEnabled(not isConnectedFlag) self.parityLabel.setEnabled(not isConnectedFlag) self.parityComboBox.setEnabled(not isConnectedFlag) self.byteSizeLabel.setEnabled(not isConnectedFlag) self.byteSizeComboBox.setEnabled(not isConnectedFlag) self.stopBitsLabel.setEnabled(not isConnectedFlag) self.stopBitsComboBox.setEnabled(not isConnectedFlag)
def startStoPlotAction(self): if self.controlledPlot.currentStatus is self.controlledPlot.initialConnectedState: # Start pressed self.startStopButton.setText('Stop') self.startStopButton.setIcon(GUIToolKit.getIconByName('stop')) self.controlledPlot.currentStatus = \ self.controlledPlot.connectedPlottingStartedState self.pauseContinueButton.setEnabled(True) self.device.sendMonitorDownsample(int(self.downampleValue.text())) self.updateMonitorVariables() else: # Stop pressed self.startStopButton.setText('Start') self.startStopButton.setIcon(GUIToolKit.getIconByName('start')) self.pauseContinueButton.setText('Pause') self.pauseContinueButton.setIcon(GUIToolKit.getIconByName('pause')) self.pauseContinueButton.setEnabled(False) self.stopAndResetPlot() self.device.sendMonitorDownsample(0) self.device.sendMonitorClearVariables()
def addPIDSubtree(self, parent, label): pidConfiguration = QtWidgets.QTreeWidgetItem() pidConfiguration.setText(0, label) pidConfiguration.setIcon(0, GUIToolKit.getIconByName('pidconfig')) parent.addChild(pidConfiguration) proportionalGain = QtWidgets.QTreeWidgetItem(pidConfiguration) proportionalGain.setText(0, 'Proportional gain') proportionalGain.setIcon(0, GUIToolKit.getIconByName('gear')) proportionalGain.setText(1, '') proportionalGain.setFlags(proportionalGain.flags() | QtCore.Qt.ItemIsEditable) integralGain = QtWidgets.QTreeWidgetItem(pidConfiguration) integralGain.setText(0, 'Integral gain') integralGain.setIcon(0, GUIToolKit.getIconByName('gear')) integralGain.setText(1, '') integralGain.setFlags(integralGain.flags() | QtCore.Qt.ItemIsEditable) derivativeGain = QtWidgets.QTreeWidgetItem(pidConfiguration) derivativeGain.setText(0, 'Derivative gain') derivativeGain.setIcon(0, GUIToolKit.getIconByName('gear')) derivativeGain.setText(1, '') derivativeGain.setFlags(derivativeGain.flags() | QtCore.Qt.ItemIsEditable) voltageRamp = QtWidgets.QTreeWidgetItem(pidConfiguration) voltageRamp.setText(0, 'Output Ramp') voltageRamp.setIcon(0, GUIToolKit.getIconByName('gear')) voltageRamp.setText(1, '') voltageRamp.setFlags(voltageRamp.flags() | QtCore.Qt.ItemIsEditable) limit = QtWidgets.QTreeWidgetItem(pidConfiguration) limit.setText(0, 'Output Limit') limit.setIcon(0, GUIToolKit.getIconByName('gear')) limit.setText(1, '') limit.setFlags(limit.flags() | QtCore.Qt.ItemIsEditable) lpfTf = QtWidgets.QTreeWidgetItem(pidConfiguration) lpfTf.setText(0, 'Low pass filter') lpfTf.setIcon(0, GUIToolKit.getIconByName('gear')) lpfTf.setText(1, '') lpfTf.setFlags(lpfTf.flags() | QtCore.Qt.ItemIsEditable) return pidConfiguration
def getTabIcon(self): return GUIToolKit.getIconByName('consoletool')
def getTabIcon(self): return GUIToolKit.getIconByName('gen')
def __init__(self, parent=None): super().__init__(parent=parent) self.setWindowTitle("Generate Code") self.setWindowIcon(GUIToolKit.getIconByName('gen')) self.checkBoxMotionControl = QtWidgets.QCheckBox(self) self.checkBoxMotionControl.setObjectName('motion') self.checkBoxMotionControl.setText("Torque/Motion control") self.checkBoxMotionControl.setIcon(GUIToolKit.getIconByName('motor')) self.checkBoxMotionControl.setChecked(True) self.checkBoxPidVel = QtWidgets.QCheckBox(self) self.checkBoxPidVel.setObjectName('pidVel') self.checkBoxPidVel.setText("PID velocity") self.checkBoxPidVel.setIcon(GUIToolKit.getIconByName('pidconfig')) self.checkBoxPidVel.setChecked(True) self.checkBoxPidAngle = QtWidgets.QCheckBox(self) self.checkBoxPidAngle.setObjectName('pidAngle') self.checkBoxPidAngle.setText("PID angle") self.checkBoxPidAngle.setIcon(GUIToolKit.getIconByName('pidconfig')) self.checkBoxPidAngle.setChecked(True) self.checkBoxPidCq = QtWidgets.QCheckBox(self) self.checkBoxPidCq.setObjectName('pidCq') self.checkBoxPidCq.setText("PID current q") self.checkBoxPidCq.setIcon(GUIToolKit.getIconByName('pidconfig')) self.checkBoxPidCq.setChecked(True) self.checkBoxPidCd = QtWidgets.QCheckBox(self) self.checkBoxPidCd.setObjectName('pidCq') self.checkBoxPidCd.setText("PID current d") self.checkBoxPidCd.setIcon(GUIToolKit.getIconByName('pidconfig')) self.checkBoxPidCd.setChecked(True) self.checkBoxLimits = QtWidgets.QCheckBox(self) self.checkBoxLimits.setObjectName('limits') self.checkBoxLimits.setText("Limits") self.checkBoxLimits.setIcon(GUIToolKit.getIconByName('statistics')) self.checkBoxLimits.setChecked(True) self.checkBoxPhaseRes = QtWidgets.QCheckBox(self) self.checkBoxPhaseRes.setObjectName('phaseRes') self.checkBoxPhaseRes.setText("Phase Resistance") self.checkBoxPhaseRes.setIcon(GUIToolKit.getIconByName('res')) self.checkBoxPhaseRes.setChecked(True) self.checkBoxModulation = QtWidgets.QCheckBox(self) self.checkBoxModulation.setObjectName('modulation') self.checkBoxModulation.setText("PWM Modulation") self.checkBoxModulation.setIcon(GUIToolKit.getIconByName('gear')) self.checkBoxModulation.setChecked(True) self.sensorOffset = QtWidgets.QCheckBox(self) self.sensorOffset.setObjectName('sensorOffset') self.sensorOffset.setText("Sensor Offset") self.sensorOffset.setIcon(GUIToolKit.getIconByName('gear')) self.sensorOffset.setChecked(True) self.sensorElOffset = QtWidgets.QCheckBox(self) self.sensorElOffset.setObjectName('sensorOffset') self.sensorElOffset.setToolTip( 'Be careful!<br> Only for absolute sensors') self.sensorElOffset.setText("Sensor Electrical Offset") self.sensorElOffset.setIcon(GUIToolKit.getIconByName('gear')) self.sensorElOffset.setChecked(False) QBtn = QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel self.buttonBox = QtWidgets.QDialogButtonBox(QBtn) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) text = "<h1>Arduino Code Generation</h1>" text += "Arduino code generation for the motor parameters currently used in the <i>Simple<b>FOC</b>Studio</i> <br>" text += "Once you are happy with the performance of your system you can generate the arduino code of the parameters you have tuned.<br>" text += "The generated code you can just copy/paste in your <code>setup()</code> function, just before calling the <code>motor.init()</code><br>" text += "<h4>Choose the parameter sets to be generated:</h4>" self.layout = QtWidgets.QVBoxLayout() message1 = QtWidgets.QLabel(text) self.layout.addWidget(message1) self.layout.addWidget(self.checkBoxMotionControl) self.layout.addWidget(self.checkBoxPidVel) self.layout.addWidget(self.checkBoxPidAngle) self.layout.addWidget(self.checkBoxPidCq) self.layout.addWidget(self.checkBoxPidCd) self.layout.addWidget(self.checkBoxLimits) self.layout.addWidget(self.checkBoxPhaseRes) self.layout.addWidget(self.checkBoxModulation) self.layout.addWidget(self.sensorOffset) self.layout.addWidget(self.sensorElOffset) self.layout.addWidget(self.buttonBox) self.setLayout(self.layout)
def icon(self, parameter): if isinstance(parameter, QtCore.QFileInfo): info = parameter if info.suffix() == "ino": return GUIToolKit.getIconByName('ard') return super(FileIconProvider, self).icon(parameter)
def __init__(self, parent=None, controllerPlotWidget=None): '''Constructor for ToolsWidget''' super().__init__(parent) self.device = SimpleFOCDevice.getInstance() self.controlledPlot = controllerPlotWidget self.verticalLayout = QtWidgets.QVBoxLayout(self) self.setLayout(self.verticalLayout) self.horizontalLayout1 = QtWidgets.QHBoxLayout() self.horizontalLayout1.setObjectName('horizontalLayout') self.startStopButton = QtWidgets.QPushButton(self) self.startStopButton.setText('Start') self.startStopButton.setObjectName('Start') self.startStopButton.clicked.connect(self.startStoPlotAction) self.startStopButton.setIcon(GUIToolKit.getIconByName('start')) self.horizontalLayout1.addWidget(self.startStopButton) self.pauseContinueButton = QtWidgets.QPushButton(self) self.pauseContinueButton.setObjectName('pauseButton') self.pauseContinueButton.setText('Pause') self.pauseContinueButton.setIcon(GUIToolKit.getIconByName('pause')) self.pauseContinueButton.clicked.connect(self.pauseContinuePlotAction) self.horizontalLayout1.addWidget(self.pauseContinueButton) self.zoomAllButton = QtWidgets.QPushButton(self) self.zoomAllButton.setObjectName('zoomAllButton') self.zoomAllButton.setText('View all') self.zoomAllButton.setIcon(GUIToolKit.getIconByName('zoomall')) self.zoomAllButton.clicked.connect(self.zoomAllPlot) self.horizontalLayout1.addWidget(self.zoomAllButton) self.signalCheckBox = [] for i in range(len(self.controlledPlot.signals)): checkBox = QtWidgets.QCheckBox(self) checkBox.setObjectName('signalCheckBox' + str(i)) checkBox.setToolTip(self.controlledPlot.signal_tooltip[i]) checkBox.setText(self.controlledPlot.signals[i]) checkBox.setIcon( GUIToolKit.getIconByName(self.controlledPlot.signalIcons[i])) checkBox.setChecked(True) self.signalCheckBox.append(checkBox) self.horizontalLayout1.addWidget(checkBox) spacerItem = QtWidgets.QSpacerItem(100, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Maximum) self.horizontalLayout1.addItem(spacerItem) self.horizontalLayout1.addItem(spacerItem) self.downsampleLabel = QtWidgets.QLabel(self) self.downsampleLabel.setText('Downsample') self.downampleValue = QtWidgets.QLineEdit(self.downsampleLabel) self.downampleValue.setText("100") self.downampleValue.editingFinished.connect(self.changeDownsampling) self.horizontalLayout1.addWidget(self.downsampleLabel) self.horizontalLayout1.addWidget(self.downampleValue) self.verticalLayout.addLayout(self.horizontalLayout1)
def __init__(self, parent=None): super().__init__(parent) self.device = SimpleFOCDevice.getInstance() self.sFOCDevice = QtWidgets.QTreeWidgetItem(self) self.sFOCDevice.setText(0, 'sFOC Device') self.sFOCDevice.setIcon(0, GUIToolKit.getIconByName('motor')) self.setColumnCount(2) self.motionControl = QtWidgets.QTreeWidgetItem(self.sFOCDevice) self.motionControl.setText(0, 'Motion config') self.motionControl.setIcon(0, GUIToolKit.getIconByName('pidconfig')) self.sFOCDevice.addChild(self.motionControl) self.controller = QtWidgets.QTreeWidgetItem(self.motionControl) self.controller.setText(0, 'Motion Control Type') self.controller.setIcon(0, GUIToolKit.getIconByName('gear')) self.selectorControlLoop = QtWidgets.QComboBox(self) self.selectorControlLoop.addItems([ 'Torque', 'Velocity', 'Angle', 'Velocity openloop', 'Angle openloop' ]) self.selectorControlLoop.currentIndexChanged.connect( self.changeControlLoop) self.setItemWidget(self.controller, 1, self.selectorControlLoop) self.torque = QtWidgets.QTreeWidgetItem(self.motionControl) self.torque.setText(0, 'Torque Control Type') self.torque.setIcon(0, GUIToolKit.getIconByName('gear')) self.selectorTorque = QtWidgets.QComboBox(self) self.selectorTorque.addItems(['Voltage', 'DC Curret', 'FOC Current']) self.selectorTorque.currentIndexChanged.connect(self.changeTorque) self.setItemWidget(self.torque, 1, self.selectorTorque) self.motionDownsample = QtWidgets.QTreeWidgetItem(self.motionControl) self.motionDownsample.setText(0, 'Motion Downsample') self.motionDownsample.setIcon(0, GUIToolKit.getIconByName('gear')) self.motionDownsample.setText(1, '') self.motionDownsample.setFlags(self.motionDownsample.flags() | QtCore.Qt.ItemIsEditable) self.PIDVelocityConfig = self.addPIDSubtree(self.motionControl, 'Velocity PID') self.PIDAngleConfig = self.addPIDSubtree(self.motionControl, 'Angle PID') self.PIDCurrentQConfig = self.addPIDSubtree(self.motionControl, 'Current q PID') self.PIDCurrentDConfig = self.addPIDSubtree(self.motionControl, 'Current d PID') self.limitsConfig = QtWidgets.QTreeWidgetItem(self.sFOCDevice) self.limitsConfig.setText(0, 'Limits') self.limitsConfig.setIcon(0, GUIToolKit.getIconByName('statistics')) self.sFOCDevice.addChild(self.limitsConfig) self.velocityLimit = QtWidgets.QTreeWidgetItem(self.limitsConfig) self.velocityLimit.setText(0, 'Velocity limit') self.velocityLimit.setIcon(0, GUIToolKit.getIconByName('gear')) self.velocityLimit.setText(1, '') self.velocityLimit.setFlags(self.velocityLimit.flags() | QtCore.Qt.ItemIsEditable) self.voltageLimit = QtWidgets.QTreeWidgetItem(self.limitsConfig) self.voltageLimit.setText(0, 'Voltage limit') self.voltageLimit.setIcon(0, GUIToolKit.getIconByName('gear')) self.voltageLimit.setText(1, '') self.voltageLimit.setFlags(self.voltageLimit.flags() | QtCore.Qt.ItemIsEditable) self.currentLimit = QtWidgets.QTreeWidgetItem(self.limitsConfig) self.currentLimit.setText(0, 'Current limit') self.currentLimit.setIcon(0, GUIToolKit.getIconByName('gear')) self.currentLimit.setText(1, '') self.currentLimit.setFlags(self.currentLimit.flags() | QtCore.Qt.ItemIsEditable) self.statesConfig = QtWidgets.QTreeWidgetItem(self.sFOCDevice) self.statesConfig.setText(0, 'States') self.statesConfig.setIcon(0, GUIToolKit.getIconByName('statistics')) self.sFOCDevice.addChild(self.statesConfig) self.satateTarget = QtWidgets.QTreeWidgetItem(self.statesConfig) self.satateTarget.setText(0, 'Target') self.satateTarget.setIcon(0, GUIToolKit.getIconByName('gear')) self.satateTarget.setText(1, '') self.stateVq = QtWidgets.QTreeWidgetItem(self.statesConfig) self.stateVq.setText(0, 'Voltage q') self.stateVq.setIcon(0, GUIToolKit.getIconByName('gear')) self.stateVd = QtWidgets.QTreeWidgetItem(self.statesConfig) self.stateVd.setText(0, 'Voltage d') self.stateVd.setIcon(0, GUIToolKit.getIconByName('gear')) self.stateCq = QtWidgets.QTreeWidgetItem(self.statesConfig) self.stateCq.setText(0, 'Current q') self.stateCq.setIcon(0, GUIToolKit.getIconByName('gear')) self.stateCd = QtWidgets.QTreeWidgetItem(self.statesConfig) self.stateCd.setText(0, 'Current d') self.stateCd.setIcon(0, GUIToolKit.getIconByName('gear')) self.stateVel = QtWidgets.QTreeWidgetItem(self.statesConfig) self.stateVel.setText(0, 'Velocity') self.stateVel.setIcon(0, GUIToolKit.getIconByName('gear')) self.stateVel.setText(1, '') self.stateAngle = QtWidgets.QTreeWidgetItem(self.statesConfig) self.stateAngle.setText(0, 'Angle') self.stateAngle.setIcon(0, GUIToolKit.getIconByName('gear')) self.stateAngle.setText(1, '') self.sensorConfig = QtWidgets.QTreeWidgetItem(self.sFOCDevice) self.sensorConfig.setText(0, 'Sensor config') self.sensorConfig.setIcon(0, GUIToolKit.getIconByName('sensor')) self.sFOCDevice.addChild(self.sensorConfig) self.sensorZeroOffset = QtWidgets.QTreeWidgetItem(self.sensorConfig) self.sensorZeroOffset.setText(0, 'Zero Angle Offset') self.sensorZeroOffset.setIcon(0, GUIToolKit.getIconByName('gear')) self.sensorZeroOffset.setText(1, '') self.sensorZeroOffset.setFlags(self.sensorZeroOffset.flags() | QtCore.Qt.ItemIsEditable) self.sensorZeroElecOffset = QtWidgets.QTreeWidgetItem( self.sensorConfig) self.sensorZeroElecOffset.setText(0, 'Electrical Zero Offset') self.sensorZeroElecOffset.setIcon(0, GUIToolKit.getIconByName('gear')) self.sensorZeroElecOffset.setText(1, '') self.sensorZeroElecOffset.setFlags(self.sensorZeroElecOffset.flags() | QtCore.Qt.ItemIsEditable) self.generalSettings = QtWidgets.QTreeWidgetItem(self.sFOCDevice) self.generalSettings.setText(0, 'General settings') self.generalSettings.setIcon( 0, GUIToolKit.getIconByName('generalsettings')) self.sFOCDevice.addChild(self.generalSettings) self.phaseRes = QtWidgets.QTreeWidgetItem(self.generalSettings) self.phaseRes.setText(0, 'Phase Resistance') self.phaseRes.setIcon(0, GUIToolKit.getIconByName('res')) self.phaseRes.setText(1, '') self.phaseRes.setFlags(self.phaseRes.flags() | QtCore.Qt.ItemIsEditable) self.deviceStatus = QtWidgets.QTreeWidgetItem(self.generalSettings) self.deviceStatus.setText(0, 'Motor Status') self.deviceStatus.setIcon(0, GUIToolKit.getIconByName('gear')) self.selectStatus = QtWidgets.QComboBox(self) self.selectStatus.addItems(['Disabled', 'Enabled']) self.selectStatus.currentIndexChanged.connect(self.changeStatus) self.setItemWidget(self.deviceStatus, 1, self.selectStatus) self.modulationType = QtWidgets.QTreeWidgetItem(self.generalSettings) self.modulationType.setText(0, 'PWM modulation') self.modulationType.setIcon(0, GUIToolKit.getIconByName('gear')) self.selectModulation = QtWidgets.QComboBox(self) self.selectModulation.addItems([ 'Sine PWM', 'Space Vector PWM', 'Trapezoidal 120', 'Trapezoidal 150' ]) self.selectModulation.currentIndexChanged.connect(self.changeModType) self.setItemWidget(self.modulationType, 1, self.selectModulation) self.modulationCenter = QtWidgets.QTreeWidgetItem(self.generalSettings) self.modulationCenter.setText(0, 'Modulation center') self.modulationCenter.setIcon(0, GUIToolKit.getIconByName('gear')) self.selectModCenter = QtWidgets.QComboBox(self) self.selectModCenter.addItems(['Disabled', 'Enabled']) self.selectModCenter.currentIndexChanged.connect(self.changeModCenter) self.setItemWidget(self.modulationCenter, 1, self.selectModCenter) self.customComands = QtWidgets.QTreeWidgetItem(self.sFOCDevice) self.customComands.setText(0, 'Custom commands') self.customComands.setIcon(0, GUIToolKit.getIconByName('customcommands')) self.sFOCDevice.addChild(self.customComands) for customCommand in self.device.customCommands.customCommandsList: self.initCustomCommand(customCommand) self.installEventFilter(self) self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.customCommandsMenu) self.header().resizeSection(0, 230) self.setAlternatingRowColors(True) self.header().hide() self.expandItem(self.sFOCDevice) self.expandItem(self.motionControl) self.device.addConnectionStateListener(self) self.device.commProvider.commandDataReceived.connect( self.commandResponseReceived) self.device.commProvider.stateMonitorReceived.connect( self.stateResponseReceived) self.itemChanged.connect(self.treeItemEdited) self.setEnabled(self.device.isConnected)
def getTabIcon(self): return GUIToolKit.getIconByName('motor')
def __init__(self, parent=None): super().__init__(parent) self.device = SimpleFOCDevice.getInstance() self.setTitle('Configure serial connection') self.setObjectName('configureConnection') self.configCoonLayout = QtWidgets.QHBoxLayout(self) self.configCoonLayout.setObjectName( 'configureConnectionorizontalLayout') self.portNameLabel = QtWidgets.QLabel(self) self.portNameLabel.setObjectName('portNameLabel') self.configCoonLayout.addWidget(self.portNameLabel) self.portNameComboBox = SerialPortComboBox(self) self.portNameComboBox.setObjectName('portNameComboBox') self.portNameComboBox.setMinimumWidth(250) self.configCoonLayout.addWidget(self.portNameComboBox) self.bitRateLabel = QtWidgets.QLabel(self) self.bitRateLabel.setObjectName('bitRateLabel') self.configCoonLayout.addWidget(self.bitRateLabel) self.bitRatelineEdit = QtWidgets.QLineEdit(self) self.bitRatelineEdit.setObjectName('bitRatelineEdit') self.bitRatelineEdit.setValidator( QtGui.QRegExpValidator(QtCore.QRegExp("^[0-9]*$"))) self.bitRatelineEdit.setText('115200') self.configCoonLayout.addWidget(self.bitRatelineEdit) self.parityLabel = QtWidgets.QLabel(self) self.parityLabel.setObjectName('parityLabel') self.configCoonLayout.addWidget(self.parityLabel) self.parityComboBox = QtWidgets.QComboBox(self) self.parityComboBox.setObjectName('parityComboBox') self.parityComboBox.addItems(serial.PARITY_NAMES.values()) self.configCoonLayout.addWidget(self.parityComboBox) serial.PARITY_NAMES.values() self.byteSizeLabel = QtWidgets.QLabel(self) self.byteSizeLabel.setObjectName('byteSizeLabel') self.configCoonLayout.addWidget(self.byteSizeLabel) self.byteSizeComboBox = QtWidgets.QComboBox(self) self.byteSizeComboBox.setObjectName('byteSizeComboBox') byteSizeList = [ str(serial.EIGHTBITS), str(serial.FIVEBITS), str(serial.SIXBITS), str(serial.SEVENBITS) ] self.byteSizeComboBox.addItems(byteSizeList) self.configCoonLayout.addWidget(self.byteSizeComboBox) self.stopBitsLabel = QtWidgets.QLabel(self) self.stopBitsLabel.setObjectName('stopBitsLabel') self.configCoonLayout.addWidget(self.stopBitsLabel) self.stopBitsComboBox = QtWidgets.QComboBox(self) byteStopBitsList = [ str(serial.STOPBITS_ONE), str(serial.STOPBITS_ONE_POINT_FIVE), str(serial.STOPBITS_TWO) ] self.stopBitsComboBox.addItems(byteStopBitsList) self.stopBitsComboBox.setObjectName('stopBitsComboBox') self.configCoonLayout.addWidget(self.stopBitsComboBox) self.connectDisconnectButton = QtWidgets.QPushButton(self) self.connectDisconnectButton.setIcon( GUIToolKit.getIconByName('connect')) self.connectDisconnectButton.setObjectName('connectDeviceButton') self.connectDisconnectButton.setText('Connect') self.connectDisconnectButton.clicked.connect( self.connectDisconnectDeviceAction) self.configCoonLayout.addWidget(self.connectDisconnectButton) self.portNameLabel.setText('Port Name') self.bitRateLabel.setText('Bit rate') self.parityLabel.setText('Parity') self.byteSizeLabel.setText('Byte size') self.stopBitsLabel.setText('Stop bits') self.device.addConnectionStateListener(self) self.connectionStateChanged(self.device.isConnected)
def __init__(self, parent=None): super().__init__(parent=parent) self.setWindowTitle("Generate minimal strcture") self.setWindowIcon(GUIToolKit.getIconByName('gen')) self.motorSelsctionLayout = QVBoxLayout() self.motorLable = IconLabel( 'add', 'Motors', hyperlink='https://docs.simplefoc.com/motors_config', link_label='Docs') self.checkBoxBLDCMotor = QtWidgets.QCheckBox() self.checkBoxBLDCMotor.setObjectName('BLDC_motor') self.checkBoxBLDCMotor.setText("BLDC Motor") self.checkBoxStepperMotor = QtWidgets.QCheckBox() self.checkBoxStepperMotor.setObjectName('Stepper_motor') self.checkBoxStepperMotor.setText("Stepper Motor") self.motorSelsctionLayout.addWidget(self.motorLable) self.motorSelsctionLayout.addWidget(self.checkBoxBLDCMotor) self.motorSelsctionLayout.addWidget(self.checkBoxStepperMotor) self.motorSelsctionLayout.addStretch() self.driverSelsctionLayout = QVBoxLayout() self.driverLabel = IconLabel( 'add', 'Drivers', hyperlink='https://docs.simplefoc.com/drivers_config', link_label='Docs') self.checkBoxBLDCDriver3PWM = QtWidgets.QCheckBox() self.checkBoxBLDCDriver3PWM.setObjectName('BLDC_Driver_3PWM') self.checkBoxBLDCDriver3PWM.setText("BLDC Driver 3PWM") self.checkBoxBLDCDriver6PWM = QtWidgets.QCheckBox() self.checkBoxBLDCDriver6PWM.setObjectName('BLDC_Driver_6PWM') self.checkBoxBLDCDriver6PWM.setText("BLDC Driver 6PWM") self.checkBoxStepperDriver2PWM = QtWidgets.QCheckBox() self.checkBoxStepperDriver2PWM.setObjectName('Stepper_Driver_2PWM') self.checkBoxStepperDriver2PWM.setText("Stepper Driver 2PWM") self.checkBoxStepperDriver4PWM = QtWidgets.QCheckBox() self.checkBoxStepperDriver4PWM.setObjectName('Stepper_Driver_4PWM') self.checkBoxStepperDriver4PWM.setText("Stepper Driver 2PWM") self.driverSelsctionLayout.addWidget(self.driverLabel) self.driverSelsctionLayout.addWidget(self.checkBoxBLDCDriver3PWM) self.driverSelsctionLayout.addWidget(self.checkBoxBLDCDriver6PWM) self.driverSelsctionLayout.addWidget(self.checkBoxStepperDriver2PWM) self.driverSelsctionLayout.addWidget(self.checkBoxStepperDriver4PWM) self.driverSelsctionLayout.addStretch() self.sensorSelsctionLayout = QVBoxLayout() self.sensorLabel = IconLabel( 'add', 'Position Sensors', hyperlink='https://docs.simplefoc.com/sensors', link_label='Docs') self.checkBoxEncoder = QtWidgets.QCheckBox() self.checkBoxEncoder.setObjectName('Encoder') self.checkBoxEncoder.setText("Encoder") self.checkBoxHallSensor = QtWidgets.QCheckBox() self.checkBoxHallSensor.setObjectName('Hall_Sensor') self.checkBoxHallSensor.setText("Hall Sensor") self.checkBoxMagneticSPI = QtWidgets.QCheckBox() self.checkBoxMagneticSPI.setObjectName('MagSPI') self.checkBoxMagneticSPI.setText("Magnetic SPI") self.checkBoxMagneticI2C = QtWidgets.QCheckBox() self.checkBoxMagneticI2C.setObjectName('MagI2C') self.checkBoxMagneticI2C.setText("Magnetic I2C") self.checkBoxMagneticPWM = QtWidgets.QCheckBox() self.checkBoxMagneticPWM.setObjectName('MagPWM') self.checkBoxMagneticPWM.setText("Magnetic PWM") self.checkBoxMagneticAnalog = QtWidgets.QCheckBox() self.checkBoxMagneticAnalog.setObjectName('MagAnalog') self.checkBoxMagneticAnalog.setText("Magnetic Analog") self.sensorSelsctionLayout.addWidget(self.sensorLabel) self.sensorSelsctionLayout.addWidget(self.checkBoxEncoder) self.sensorSelsctionLayout.addWidget(self.checkBoxHallSensor) self.sensorSelsctionLayout.addWidget(self.checkBoxMagneticSPI) self.sensorSelsctionLayout.addWidget(self.checkBoxMagneticI2C) self.sensorSelsctionLayout.addWidget(self.checkBoxMagneticPWM) self.sensorSelsctionLayout.addWidget(self.checkBoxMagneticAnalog) self.sensorSelsctionLayout.addStretch() self.csSelsctionLayout = QVBoxLayout() self.csLable = IconLabel( 'add', 'Current Senses', hyperlink='https://docs.simplefoc.com/current_sense', link_label='Docs') self.checkBoxCSInline = QtWidgets.QCheckBox() self.checkBoxCSInline.setObjectName('Inline') self.checkBoxCSInline.setText("In-line") self.checkBoxCSLowside = QtWidgets.QCheckBox() self.checkBoxCSLowside.setObjectName('lowside') self.checkBoxCSLowside.setText("Low-Side") self.csSelsctionLayout.addWidget(self.csLable) self.csSelsctionLayout.addWidget(self.checkBoxCSInline) self.csSelsctionLayout.addWidget(self.checkBoxCSLowside) self.csSelsctionLayout.addStretch() self.commSelsctionLayout = QVBoxLayout() self.csLable = IconLabel( 'add', 'Communications', hyperlink='https://docs.simplefoc.com/communication', link_label='Docs') self.checkBoxCommander = QtWidgets.QCheckBox() self.checkBoxCommander.setObjectName('Commander') self.checkBoxCommander.setText("Commander") self.checkBoxCommStepDir = QtWidgets.QCheckBox() self.checkBoxCommStepDir.setObjectName('Step-Dir') self.checkBoxCommStepDir.setText("Step-Dir") self.commSelsctionLayout.addWidget(self.csLable) self.commSelsctionLayout.addWidget(self.checkBoxCommander) self.commSelsctionLayout.addWidget(self.checkBoxCommStepDir) self.commSelsctionLayout.addStretch() self.pathLable = IconLabel('gear', 'Project settings') self.folderPath = SimplePathWidget() self.projectNameLabel = QLabel('Project Name') self.projectNameEdit = QLineEdit('minimal_project') self.projectNameLayout = QHBoxLayout() self.projectNameLayout.addWidget(self.projectNameLabel) self.projectNameLayout.addWidget(self.projectNameEdit) self.mcuLable = IconLabel( 'sensor', 'Microcontroller type', hyperlink='https://docs.simplefoc.com/microcontrollers', link_label='Supported mcus') self.dropDownMCU = QComboBox() for family in supportedMCUS: self.dropDownMCU.addItem(supportedMCUS[family], family) QBtn = QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel self.buttonBox = QtWidgets.QDialogButtonBox(QBtn) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) text = "<h1>Arduino Minimal Project Code Generation</h1>" text += "Generating minimal arduino project using the <i>Simple<b>FOC</b>Studio</i>, based on the <i>Simple<b>FOC</b>library</i> <small>v2.2</small> <br><br>" text += "This code will generate a minimal stand alone arduino project which can help you reduce the overall library footprint and isolate only<br> the library code that you actually use in your application.<br>" text += "<h4>Choose the library components that you need:</h4>" self.layout = QtWidgets.QVBoxLayout() message1 = QtWidgets.QLabel(text) self.layout.addWidget(message1) layoutCheck = QtWidgets.QHBoxLayout() layoutCheck.addLayout(self.motorSelsctionLayout) layoutCheck.addLayout(self.driverSelsctionLayout) layoutCheck.addLayout(self.sensorSelsctionLayout) layoutCheck.addLayout(self.csSelsctionLayout) layoutCheck.addLayout(self.commSelsctionLayout) self.layout.addLayout(layoutCheck) self.layout.addWidget(self.mcuLable) self.layout.addWidget(self.dropDownMCU) self.layout.addWidget(self.pathLable) self.layout.addWidget(self.folderPath) self.layout.addLayout(self.projectNameLayout) self.layout.addWidget(self.buttonBox) self.setLayout(self.layout)