import os
from PyQt5 import QtWidgets
from serial_axis_api import ThreadAxisAPI
[docs]
def getPassword():
"""
Get password from input dialog.
"""
passwd, ok = QtWidgets.QInputDialog.getText(
None, "Authentication", "Sudo Password?", QtWidgets.QLineEdit.Password)
if ok and passwd != '':
return passwd
[docs]
class AxisController(object):
def __init__(self, Parent):
"""
Axis controller class.
Args:
Parent (): The main class of this application
"""
self.parent = Parent
self.position = 0
self.__threadAxisAPI = None
self.__speed = 500
self.parent.ui.set_speed.setValue(self.__speed)
self.parent.ui.set_speed.setEnabled(False)
self.parent.ui.abs_move.setEnabled(False)
self.parent.ui.btn_ctrl_axis.clicked.connect(self.open_axis_controller)
self.parent.ui.btn_connect.clicked.connect(self.go_connect_serial)
self.parent.ui.btn_disconnect.clicked.connect(
self.go_disconnect_serial)
self.parent.ui.help_axis.clicked.connect(self.help_axis_controller)
self.parent.ui.btn_reset.clicked.connect(self.go_reset)
self.parent.ui.prev_speed.clicked.connect(self.go_related_moving_backward)
self.parent.ui.next_speed.clicked.connect(self.go_related_moving_forward)
self.parent.ui.abs_move.valueChanged.connect(self.go_absolute_moving)
self.parent.ui.set_speed.valueChanged.connect(self.set_speed_axis)
[docs]
def open_axis_controller(self):
"""
Open the widget on user interface to control the axis.
"""
if self.parent.axis_controller is False:
self.parent.ui.frame_axis.show()
self.parent.axis_controller = True
else:
self.parent.ui.frame_axis.hide()
self.parent.axis_controller = False
if self.__threadAxisAPI is not None:
self.__threadAxisAPI.disconnect_serial()
self.parent.ui.set_speed.setEnabled(False)
self.parent.ui.abs_move.setEnabled(False)
self.__threadAxisAPI = None
[docs]
def set_speed_axis(self):
"""
Set the speed axis from the value given by user.
"""
if self.__threadAxisAPI is not None:
self.__speed = self.parent.ui.set_speed.value()
self.__threadAxisAPI.set_speed(self.__speed)
[docs]
def go_connect_serial(self):
"""
Connect the serial port into the system.
"""
passwd = getPassword()
if passwd:
os.system("echo " + passwd + "| sudo -S chmod a+rw /dev/ttyUSB*")
try:
self.__threadAxisAPI = ThreadAxisAPI()
self.__threadAxisAPI.connect_serial(serial_port="/dev/ttyUSB0")
QtWidgets.QMessageBox.information(
None, "Info !!", "Serial port connected!!")
self.parent.ui.set_speed.setEnabled(True)
self.parent.ui.abs_move.setEnabled(True)
except OSError as err:
self.__threadAxisAPI.logger.error(err)
QtWidgets.QMessageBox.warning(
None,
"Error",
"Make sure you have connect the serial port to the computer\nOr typing the correct "
"password!!\n\nError: " +
str(err))
[docs]
def go_disconnect_serial(self):
"""
Disconnect the serial port with the system.
"""
if self.__threadAxisAPI is not None:
self.__threadAxisAPI.disconnect_serial()
QtWidgets.QMessageBox.information(
None, "Info !!", "Serial port Disconnected!!")
self.parent.ui.set_speed.setEnabled(False)
self.parent.ui.abs_move.setEnabled(False)
self.__threadAxisAPI = None
[docs]
def go_reset(self):
"""
Reset the axis controller, speed and position.
"""
if self.__threadAxisAPI is not None:
self.position = 0
self.__speed = 500
self.__threadAxisAPI.reset()
self.parent.ui.label_6.setText("0 mm")
self.parent.ui.set_speed.setValue(self.__speed)
QtWidgets.QMessageBox.information(
None, "Info !!", "Serial configuration has been reset!!")
[docs]
def go_absolute_moving(self):
"""
axis will move with absolute moving.
"""
if self.__threadAxisAPI is not None:
position = self.parent.ui.abs_move.value()
self.__threadAxisAPI.absolute_moving(position)
[docs]
def help_axis_controller(self):
"""
Open prompt for axis controller help.
"""
QtWidgets.QMessageBox.about(
self.parent, "Help", "Please Contact MOIL LAB")