import configparser import json import logging import queue import sys from multiprocessing import Process from PyQt5.uic.properties import QtWidgets from PySide6 import QtCore from PySide6.QtCore import QThread, Signal, Slot, QObject, QEvent from PySide6.QtGui import QIntValidator, QStandardItemModel, QStandardItem, Qt, QMovie, QIcon from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QHeaderView, QTableWidget, \ QTableWidgetItem, QWidget, QHBoxLayout, QAbstractItemView, QMessageBox, QSizePolicy from datetime import datetime import Util.util_pic from Util.util_ini import writeFeedLine_to_ini import Constant from CU.Command import FeedCommand from CU.Feeding import FeedLine, FeedingConfig, Feeding, FeedStatus from Util.util_log import QTextEditLogger from Vision.camera_coordinate_dete import Detection from COM.COM_Robot import RobotClient from Expection import Error_Code from queue import Queue from Model.RobotModel import * import time from queue import Queue from Model.Position import Real_Position, Detection_Position from threading import Thread from CU.Command import Status from Util.util_log import log from Vision.detect_person import DetectionPerson from ui_MainWin import Ui_MainWindow class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self): super(MainWindow, self).__init__() self.setupUi(self) self.setWindowFlags(Qt.WindowType.FramelessWindowHint) self.init_qss() self.init_UI() self.init_Run() self.init_robot_info() self.init_FeedLine() self.start_Runing() # self.init_log() def init_qss(self): self.active_status_Qss = """ background-color: #A2EF4D; color: #ffffff; border-radius: 8px; border: 1px solid #A2EF4D; qproperty-alignment: 'AlignCenter'; """ self.noActive_status_Qss = """ background-color: #FD3251; color: #ffffff; border-radius: 8px; border: 1px solid #FD3251; qproperty-alignment: 'AlignCenter'; """ self.active_label_sign_Qss = """ background-color: rgba(255, 255, 255, 0); font: 700 12pt "Microsoft YaHei UI"; color: red; """ self.active_btn_sign_Qss = """ background-color: rgb(255, 0, 0); font: 9pt "楷体"; border: 1px solid #dcdfe6; border-radius: 5px; """ self.noactive_label_sign_Qss = """ background-color: rgba(255, 255, 255, 0); font: 700 12pt "Microsoft YaHei UI"; color: #7A7A7A; """ self.noactive_btn_sign_Qss = """ background-color: #7A7A7A; font: 9pt "楷体"; border: 1px solid #dcdfe6; border-radius: 5px; """ def init_log(self): log.init_log(self.textEdit_log_info, self.textEdit_log_error, Constant.log_file_path) def init_UI(self): self.pushButton_num1.clicked.connect(self.send_num_button_click) self.pushButton_num2.clicked.connect(self.send_num_button_click) self.pushButton_num3.clicked.connect(self.send_num_button_click) self.pushButton_num4.clicked.connect(self.send_num_button_click) self.pushButton_num5.clicked.connect(self.send_num_button_click) self.pushButton_num6.clicked.connect(self.send_num_button_click) self.pushButton_AddNum.clicked.connect(self.send_addNum_button_click) self.pushButton_SubNum.clicked.connect(self.send_subNum_button_click) self.lineEdit_j1.returnPressed.connect(self.send_position_returnPressed) self.lineEdit_j2.returnPressed.connect(self.send_position_returnPressed) self.lineEdit_j3.returnPressed.connect(self.send_position_returnPressed) self.lineEdit_j4.returnPressed.connect(self.send_position_returnPressed) self.lineEdit_j5.returnPressed.connect(self.send_position_returnPressed) self.lineEdit_j6.returnPressed.connect(self.send_position_returnPressed) self.pushButton_j1_sub.clicked.connect(self.send_subOneAsix_button_click) self.pushButton_j2_sub.clicked.connect(self.send_subOneAsix_button_click) self.pushButton_j3_sub.clicked.connect(self.send_subOneAsix_button_click) self.pushButton_j4_sub.clicked.connect(self.send_subOneAsix_button_click) self.pushButton_j5_sub.clicked.connect(self.send_subOneAsix_button_click) self.pushButton_j6_sub.clicked.connect(self.send_subOneAsix_button_click) self.pushButton_j1_add.clicked.connect(self.send_addOneAsix_button_click) self.pushButton_j2_add.clicked.connect(self.send_addOneAsix_button_click) self.pushButton_j3_add.clicked.connect(self.send_addOneAsix_button_click) self.pushButton_j4_add.clicked.connect(self.send_addOneAsix_button_click) self.pushButton_j5_add.clicked.connect(self.send_addOneAsix_button_click) self.pushButton_j6_add.clicked.connect(self.send_addOneAsix_button_click) self.pushButton_stopFeed.clicked.connect(self.send_stopFeed_button_click) self.pushButton_pauseFeed.clicked.connect(self.send_pauseFeed_button_click) self.pushButton_get_p1.clicked.connect(self.get_p1_button_click) self.pushButton_get_p2.clicked.connect(self.get_p2_button_click) self.pushButton_get_p3.clicked.connect(self.get_p3_button_click) self.pushButton_get_p4.clicked.connect(self.get_p4_button_click) self.pushButton_get_p5.clicked.connect(self.get_p5_button_click) self.pushButton_set_p1.clicked.connect(self.set_p1_button_click) self.pushButton_set_p2.clicked.connect(self.set_p2_button_click) self.pushButton_set_p3.clicked.connect(self.set_p3_button_click) self.pushButton_set_p4.clicked.connect(self.set_p4_button_click) self.pushButton_set_p5.clicked.connect(self.set_p5_button_click) self.pushButton_clearAlarm.clicked.connect(self.send_clear_alarm_command) self.pushButton_reset.clicked.connect(self.send_reset_button_click) self.pushButton_speed.setText(str(Constant.speed)) self.pushButton_saveSeting.clicked.connect(self.send_setSpeed_clicked) self.pushButton_num_confirm.clicked.connect(self.send_custom_num_returnPressed) #self.tabWidget_control.currentChanged.connect(self.send_tabWidget_control_change) self.frame_sys_seting.setVisible(False) self.pushButton_sysseting.clicked.connect(self.send_click_sysmeuExpand) self.pushButton_leftmenu_produce.clicked.connect(lambda _, index=0: self.send_click_change_stackView(index)) self.pushButton_leftmenu_position.clicked.connect(lambda _, index=1: self.send_click_change_stackView(index)) self.pushButton_leftmenu_baseSeting.clicked.connect(lambda _, index=2: self.send_click_change_stackView(index)) self.pushButton_leftmenu_posDebug.clicked.connect(lambda _, index=3: self.send_click_change_stackView(index)) self.pushButton_exit.clicked.connect(self.send_exit_button_click) int_validator = QIntValidator(0, 100, self.lineEdit_num) self.lineEdit_num.setValidator(int_validator) # self.horizontalSlider_J1.sliderReleased self.pushButton_startFeed.clicked.connect(self.send_startFeed_button_click) self.horizontalSlider_feedingNum.blockSignals(True) self.horizontalSlider_feedingNum.setMinimum(0) def init_Run(self): self.robotClient = None self.configReader = configparser.ConfigParser() self.detection = Detection() self.command_position_quene = Queue() self.status_address = DataAddress() self.feedLine_dict = {} self.command_quene = Queue() self.main_threading = None self.detection_person = DetectionPerson() self.configReader.read(Constant.set_ini) ip = self.configReader.get('Robot_Feed', 'IPAddress') port = int(self.configReader.get('Robot_Feed', 'Port')) photo_locs = [(int(self.configReader.get('Robot_Feed', 'photo_x1')), int(self.configReader.get('Robot_Feed', 'photo_y1')), int(self.configReader.get('Robot_Feed', 'photo_z1')), int(self.configReader.get('Robot_Feed', 'photo_u1')),int(self.configReader.get('Robot_Feed', 'photo_v1')),int(self.configReader.get('Robot_Feed', 'photo_w1'))), (int(self.configReader.get('Robot_Feed', 'photo_x2')), int(self.configReader.get('Robot_Feed', 'photo_y2')), int(self.configReader.get('Robot_Feed', 'photo_z2')), int(self.configReader.get('Robot_Feed', 'photo_u2')),int(self.configReader.get('Robot_Feed', 'photo_v2')),int(self.configReader.get('Robot_Feed', 'photo_w2')) ), (int(self.configReader.get('Robot_Feed', 'photo_x3')), int(self.configReader.get('Robot_Feed', 'photo_y3')),int(self.configReader.get('Robot_Feed', 'photo_z3')), int(self.configReader.get('Robot_Feed', 'photo_u3')),int(self.configReader.get('Robot_Feed', 'photo_v3')),int(self.configReader.get('Robot_Feed', 'photo_w3')) ), (int(self.configReader.get('Robot_Feed', 'photo_x4')), int(self.configReader.get('Robot_Feed', 'photo_y4')),int(self.configReader.get('Robot_Feed', 'photo_z4')), int(self.configReader.get('Robot_Feed', 'photo_u4')),int(self.configReader.get('Robot_Feed', 'photo_v4')),int(self.configReader.get('Robot_Feed', 'photo_w4')) ), (int(self.configReader.get('Robot_Feed', 'photo_x5')), int(self.configReader.get('Robot_Feed', 'photo_y5')),int(self.configReader.get('Robot_Feed', 'photo_z5')), int(self.configReader.get('Robot_Feed', 'photo_u5')),int(self.configReader.get('Robot_Feed', 'photo_v5')),int(self.configReader.get('Robot_Feed', 'photo_w5')) ) ] #TODO #dropDelay_time = int(self.configReader.get('Robot_Feed', 'dropDelay_time')) self.robotClient = RobotClient(ip, port, photo_locs, self.command_position_quene, self.status_address) self.feeding = Feeding(self.robotClient, self.detection) # 临时 self.last_time = time.time() self.remain_lineName = self.configReader.get('Robot_Feed', 'remain_lineName') self.remain_Count = int(self.configReader.get('Robot_Feed', 'remain_Count')) try: self.robotClient.CreatConnect() except: self.set_label_status_style(False) return Error_Code.SYS_NETERROR if self.robotClient.connected: return 0 else: return Error_Code.SYS_NETERROR def init_seting_frame(self): rows = len(self.feedLine_dict.keys()) + 1 self.tableWidget_feedSeting.setRowCount(rows) self.tableWidget_feedSeting.setColumnCount(20+2*6) # 设置第一重表头的合并 (三列一组) self.tableWidget_feedSeting_addtional_col_num = 2 self.tableWidget_feedSeting.setSpan(0, 0 + self.tableWidget_feedSeting_addtional_col_num, 1, 6) # 合并前3列 self.tableWidget_feedSeting.setSpan(0, 6 + self.tableWidget_feedSeting_addtional_col_num, 1, 6) # 合并后3列 self.tableWidget_feedSeting.setSpan(0, 12 + self.tableWidget_feedSeting_addtional_col_num, 1, 6) # 合并后3列 self.tableWidget_feedSeting.setSpan(0, 18 + self.tableWidget_feedSeting_addtional_col_num, 1, 6) # 合并后3列 self.tableWidget_feedSeting.setSpan(0, 24 + self.tableWidget_feedSeting_addtional_col_num, 1, 6) # 合并后3列 self.tableWidget_feedSeting.itemChanged.connect(self.send_tabelFeedSet_itemChanged) btn_safe = QPushButton("获取安全位置") widget_safe = QWidget() layout_safe = QHBoxLayout() layout_safe.addWidget(btn_safe) # 调整布局的间距,使之更紧凑 layout_safe.setContentsMargins(0, 0, 0, 0) # 将布局设置到 QWidget 容器中 widget_safe.setLayout(layout_safe) btn_bk1 = QPushButton("获取破袋位置1") widget_bk1 = QWidget() layout_bk1 = QHBoxLayout() layout_bk1.addWidget(btn_bk1) # 调整布局的间距,使之更紧凑 layout_bk1.setContentsMargins(0, 0, 0, 0) # 将布局设置到 QWidget 容器中 widget_bk1.setLayout(layout_bk1) btn_bk2 = QPushButton("获取破袋位置2") widget_bk2 = QWidget() layout_bk2 = QHBoxLayout() layout_bk2.addWidget(btn_bk2) # 调整布局的间距,使之更紧凑 layout_bk2.setContentsMargins(0, 0, 0, 0) # 将布局设置到 QWidget 容器中 widget_bk2.setLayout(layout_bk2) btn_shake = QPushButton("获取摇晃位置") widget_shake = QWidget() layout_shake = QHBoxLayout() layout_shake.addWidget(btn_shake) layout_shake.setContentsMargins(0, 0, 0, 0) widget_shake.setLayout(layout_shake) btn_dropbag = QPushButton("获取丢袋位置") widget_dropbag = QWidget() layout_dropbag = QHBoxLayout() layout_dropbag.addWidget(btn_dropbag) # 调整布局的间距,使之更紧凑 layout_dropbag.setContentsMargins(0, 0, 0, 0) # 将布局设置到 QWidget 容器中 widget_dropbag.setLayout(layout_dropbag) btn_safe.clicked.connect(self.send_get_safe_position_button_click) btn_bk1.clicked.connect(self.send_get_broken1_position_button_click) btn_bk2.clicked.connect(self.send_get_broken2_position_button_click) btn_shake.clicked.connect(self.send_get_shake_position_button_click) btn_dropbag.clicked.connect(self.send_get_dropbag_position_button_click) # 添加第一重表头项 self.tableWidget_feedSeting.setCellWidget(0, 0 + self.tableWidget_feedSeting_addtional_col_num, widget_safe) self.tableWidget_feedSeting.setCellWidget(0, 6 + self.tableWidget_feedSeting_addtional_col_num, widget_bk1) self.tableWidget_feedSeting.setCellWidget(0, 12 + self.tableWidget_feedSeting_addtional_col_num, widget_bk2) self.tableWidget_feedSeting.setCellWidget(0, 18 + self.tableWidget_feedSeting_addtional_col_num, widget_shake) self.tableWidget_feedSeting.setCellWidget(0, 24 + self.tableWidget_feedSeting_addtional_col_num, widget_dropbag) self.tableWidget_feedSeting.setSelectionBehavior(QTableWidget.SelectRows) self.tableWidget_feedSeting.setAutoScroll(True) # 添加第二重表头 self.tableWidget_feedSeting.setHorizontalHeaderLabels( ['header', '线名', 'X1', 'Y1', 'Z1', 'U1', 'V1', 'W1', 'X2', 'Y2', 'Z2', 'U2', 'V2', 'W2', 'X3', 'Y3', 'Z3', 'U3', 'V3', 'W3', 'X4', 'Y4', 'Z4', 'U4', 'V4', 'W4', 'X5', 'Y5', 'Z5', 'U5', 'V5', 'W5']) self.tableWidget_feedSeting.hideColumn(0) # 填充数据行 for row, (feed_line_key, feed_line) in enumerate(self.feedLine_dict.items()): self.tableWidget_feedSeting.setItem(row + 1, 0, QTableWidgetItem(feed_line_key)) self.tableWidget_feedSeting.setItem(row + 1, 1, QTableWidgetItem(feed_line.name)) self.set_position_to_tabel(row + 1, 0, feed_line.safe_position) self.set_position_to_tabel(row + 1, 1, feed_line.broken1_position) self.set_position_to_tabel(row + 1, 2, feed_line.broken2_position) self.set_position_to_tabel(row + 1, 3, feed_line.broken2_position) self.set_position_to_tabel(row + 1, 4, feed_line.drop_bag_position) # 禁用自动表头 self.tableWidget_feedSeting.verticalHeader().setVisible(True) self.pushButton_tableFeedSet_addRow.clicked.connect(self.send_tabelFeedSet_addRow) self.pushButton_tableFeedSet_deleRow.clicked.connect(self.send_tabelFeedSet_delRow) self.pushButton_tableFeedSet_save.clicked.connect(self.send_tabelFeedSet_save) def init_FeedLine(self): line_count = self.configReader.get('Robot_Feed', 'LineCount', fallback=0) self.configReader.read(Constant.feedLine_set_file, encoding='utf-8') for i in range(int(line_count)): line_str = f'FeedLine{i + 1}' safe_position = Real_Position() broken_position1 = Real_Position() broken_position2 = Real_Position() shake_position = Real_Position() dropBag_position = Real_Position() safe_position.X = float(self.configReader.get(line_str, 'SafePosition_x', fallback=0)) safe_position.Y = float(self.configReader.get(line_str, 'SafePosition_y', fallback=0)) safe_position.Z = float(self.configReader.get(line_str, 'SafePosition_z', fallback=0)) safe_position.U = float(self.configReader.get(line_str, 'SafePosition_u', fallback=0)) safe_position.V = float(self.configReader.get(line_str, 'SafePosition_v', fallback=0)) safe_position.W = float(self.configReader.get(line_str, 'SafePosition_w', fallback=0)) broken_position1.X = float(self.configReader.get(line_str, 'BrokenPosition_x', fallback=0)) broken_position1.Y = float(self.configReader.get(line_str, 'BrokenPosition_y', fallback=0)) broken_position1.Z = float(self.configReader.get(line_str, 'BrokenPosition_z', fallback=0)) broken_position1.U = float(self.configReader.get(line_str, 'BrokenPosition_u', fallback=0)) broken_position1.V = float(self.configReader.get(line_str, 'BrokenPosition_v', fallback=0)) broken_position1.W = float(self.configReader.get(line_str, 'BrokenPosition_w', fallback=0)) broken_position2.X = float(self.configReader.get(line_str, 'BrokenPosition2_x', fallback=0)) broken_position2.Y = float(self.configReader.get(line_str, 'BrokenPosition2_y', fallback=0)) broken_position2.Z = float(self.configReader.get(line_str, 'BrokenPosition2_z', fallback=0)) broken_position2.U = float(self.configReader.get(line_str, 'BrokenPosition2_u', fallback=0)) broken_position2.V = float(self.configReader.get(line_str, 'BrokenPosition2_v', fallback=0)) broken_position2.W = float(self.configReader.get(line_str, 'BrokenPosition2_w', fallback=0)) shake_position.X = float(self.configReader.get(line_str, 'ShakePosition_x', fallback=0)) shake_position.Y = float(self.configReader.get(line_str, 'ShakePosition_y', fallback=0)) shake_position.Z = float(self.configReader.get(line_str, 'ShakePosition_z', fallback=0)) shake_position.U = float(self.configReader.get(line_str, 'ShakePosition_u', fallback=0)) shake_position.V = float(self.configReader.get(line_str, 'ShakePosition_v', fallback=0)) shake_position.W = float(self.configReader.get(line_str, 'ShakePosition_w', fallback=0)) dropBag_position.X = float(self.configReader.get(line_str, 'DropBagPosition_x', fallback=0)) dropBag_position.Y = float(self.configReader.get(line_str, 'DropBagPosition_y', fallback=0)) dropBag_position.Z = float(self.configReader.get(line_str, 'DropBagPosition_z', fallback=0)) dropBag_position.U = float(self.configReader.get(line_str, 'DropBagPosition_u', fallback=0)) dropBag_position.V = float(self.configReader.get(line_str, 'DropBagPosition_v', fallback=0)) dropBag_position.W = float(self.configReader.get(line_str, 'DropBagPosition_w', fallback=0)) name = self.configReader.get(line_str, 'Name', fallback='未命名') self.feedLine_dict[f'{Constant.feedLine_set_section}{i + 1}'] = FeedLine(i+1,name, safe_position, broken_position1,broken_position2,shake_position ,dropBag_position) self.init_seting_frame() self.updateUI_Select_Line() pass def init_robot_info(self): j1_min = int(self.configReader.get('Robot_Feed', 'j1_min')) j1_max = int(self.configReader.get('Robot_Feed', 'j1_max')) j2_min = int(self.configReader.get('Robot_Feed', 'j2_min')) j2_max = int(self.configReader.get('Robot_Feed', 'j2_max')) j3_min = int(self.configReader.get('Robot_Feed', 'j3_min')) j3_max = int(self.configReader.get('Robot_Feed', 'j3_max')) j4_min = int(self.configReader.get('Robot_Feed', 'j4_min')) j4_max = int(self.configReader.get('Robot_Feed', 'j4_max')) j5_min = int(self.configReader.get('Robot_Feed', 'j5_min')) j5_max = int(self.configReader.get('Robot_Feed', 'j5_max')) j6_min = int(self.configReader.get('Robot_Feed', 'j6_min')) j6_max = int(self.configReader.get('Robot_Feed', 'j6_max')) self.horizontalSlider_J1.setMinimum(j1_min) self.horizontalSlider_J1.setMaximum(j1_max) self.horizontalSlider_J2.setMinimum(j2_min) self.horizontalSlider_J2.setMaximum(j2_max) self.horizontalSlider_J3.setMinimum(j3_min) self.horizontalSlider_J3.setMaximum(j3_max) self.horizontalSlider_J4.setMinimum(j4_min) self.horizontalSlider_J4.setMaximum(j4_max) self.horizontalSlider_J5.setMinimum(j5_min) self.horizontalSlider_J5.setMaximum(j5_max) self.horizontalSlider_J6.setMinimum(j6_min) self.horizontalSlider_J6.setMaximum(j6_max) self.label_j1_min.setText(j1_min.__str__()) self.label_j1_max.setText(j1_max.__str__()) self.label_j2_min.setText(j2_min.__str__()) self.label_j2_max.setText(j2_max.__str__()) self.label_j3_min.setText(j3_min.__str__()) self.label_j3_max.setText(j3_max.__str__()) self.label_j4_min.setText(j4_min.__str__()) self.label_j4_max.setText(j4_max.__str__()) self.label_j5_min.setText(j5_min.__str__()) self.label_j5_max.setText(j5_max.__str__()) self.label_j6_min.setText(j6_min.__str__()) self.label_j6_max.setText(str(j6_max)) def start_Runing(self): self.main_threading = Thread(target=self.run) self.robot_connect_threading = Thread(target=self.robotClient.run) self.main_threading.start() self.robot_connect_threading.start() self.check_continue() pass def check_continue(self): if self.remain_Count!=0: for key in self.feedLine_dict.keys(): feed_line = self.feedLine_dict[key] if f'FeedLine{self.remain_lineName}' == key: #提示 remain_messageBox = QMessageBox() remain_messageBox.setIcon(QMessageBox.Icon.Warning) remain_messageBox.setText(f'还有{self.remain_Count}袋未投料,是否继续?') remain_messageBox.setStandardButtons(QMessageBox.StandardButton.Ok | QMessageBox.StandardButton.Cancel) result = remain_messageBox.exec() if result == QMessageBox.StandardButton.Cancel: return self.configReader.read(Constant.feedLine_set_file, encoding='utf-8') line_name = self.configReader.get(key, 'name') current_index = self.comboBox_lineIndex.findText(line_name) self.comboBox_lineIndex.setCurrentIndex(current_index) #self.horizontalSlider_feedingNum.setMaximum(self.remain_Count) self.horizontalSlider_feedingNum.setMaximum(self.remain_Count) self.label_maxNum.setText(str(self.remain_Count)) self.horizontalSlider_feedingNum.setValue(0) self.send_startFeed_button_click() else: return def send_startFeed_button_click(self): # 触发自动运行 if self.robotClient.status_model.curMode != 7: self.send_switch_tool_command() log.log_message(logging.INFO, Constant.str_sys_switch_tool) self.send_start_tool_command() log.log_message(logging.INFO, Constant.str_sys_start_tool) msg_box_person = QMessageBox() msg_box_person.setIcon(QMessageBox.Icon.Information) msg_box_person.setText("是否确认生产区域安全继续生产?") msg_box_person.setWindowTitle("提示") msg_box_person.setStandardButtons(QMessageBox.StandardButton.Ok | QMessageBox.StandardButton.Cancel) result = msg_box_person.exec() if result == QMessageBox.StandardButton.Cancel: return log.log_message(logging.INFO, '第一层确认生产') has_person, _ = self.detection_person.get_person() if has_person: # self.feeding.pause = True # self.send_pause_command(True) # # self.show_messagebox_of_person() msg_box_person.setText("检测到安全区域后人是否继续生产?") result = msg_box_person.exec() if result == QMessageBox.StandardButton.Cancel: return log.log_message(logging.ERROR, '人员进入安全区') num = self.horizontalSlider_feedingNum.maximum() line_head = self.comboBox_lineIndex.currentData() self.command_quene.put(FeedCommand(FeedingConfig(num, self.feedLine_dict[line_head], self.feeding.robotClient.photo_locs[:]))) self.stackedWidget_num.setCurrentIndex(1) self.set_run_status_button(True) log.log_message(logging.INFO, f'{self.feedLine_dict[line_head].name}:{Constant.str_feed_start}') def send_num_button_click(self): button = self.sender() if button.text() != "自定义": num = int(button.text()) self.horizontalSlider_feedingNum.setMaximum(num) self.label_maxNum.setText(str(num)) self.horizontalSlider_feedingNum.setValue(0) else: self.lineEdit_num.show() def send_subOneAsix_button_click(self): btn_str = self.sender().objectName() Constant.manual_adjust_accuracy = float(self.lineEdit_manual_adjust_accuracy.text()) x1 = self.horizontalSlider_J1.value() x2 = self.horizontalSlider_J2.value() x3 = self.horizontalSlider_J3.value() x4 = self.horizontalSlider_J4.value() x5 = self.horizontalSlider_J5.value() x6 = self.horizontalSlider_J6.value() if 'j1' in btn_str: x1 = x1 - Constant.manual_adjust_accuracy elif 'j2' in btn_str: x2 = x2 - Constant.manual_adjust_accuracy pass elif 'j3' in btn_str: x3 = x3 - Constant.manual_adjust_accuracy pass elif 'j4' in btn_str: x4 = x4 - Constant.manual_adjust_accuracy pass elif 'j5' in btn_str: x5 = x5 - Constant.manual_adjust_accuracy pass elif 'j6' in btn_str: x6 = x6 - Constant.manual_adjust_accuracy self.send_position_command(x1, x2, x3, x4, x5, x6, MoveType.AXIS) def send_addOneAsix_button_click(self, btn): btn_str = self.sender().objectName() Constant.manual_adjust_accuracy = float(self.lineEdit_manual_adjust_accuracy.text()) x1 = self.horizontalSlider_J1.value() x2 = self.horizontalSlider_J2.value() x3 = self.horizontalSlider_J3.value() x4 = self.horizontalSlider_J4.value() x5 = self.horizontalSlider_J5.value() x6 = self.horizontalSlider_J6.value() if 'j1' in btn_str: x1 = x1 + Constant.manual_adjust_accuracy elif 'j2' in btn_str: x2 = x2 + Constant.manual_adjust_accuracy pass elif 'j3' in btn_str: x3 = x3 + Constant.manual_adjust_accuracy pass elif 'j4' in btn_str: x4 = x4 + Constant.manual_adjust_accuracy pass elif 'j5' in btn_str: x5 = x5 + Constant.manual_adjust_accuracy pass elif 'j6' in btn_str: x6 = x6 + Constant.manual_adjust_accuracy self.send_position_command(x1, x2, x3, x4, x5, x6, move_type=MoveType.AXIS) def send_addNum_button_click(self): self.feeding.feedConfig.num += 1 log.log_message(logging.INFO, Constant.str_sys_feedNum_add) max_num = int(self.label_maxNum.text()) + 1 self.horizontalSlider_feedingNum.setMaximum(max_num) self.label_maxNum.setText(str(max_num)) def send_subNum_button_click(self): if self.feeding.feedConfig.num <= 1: #self.send_stopFeed_button_click() self.feeding.feedStatus = FeedStatus.FNone # 清空运行命令 self.send_clear_auto_command() log.log_message(logging.INFO, Constant.str_feed_stop) return self.feeding.feedConfig.num -= 1 log.log_message(logging.INFO, Constant.str_sys_feedNum_sub) max_num = int(self.label_maxNum.text())-1 self.horizontalSlider_feedingNum.setMaximum(max_num) self.label_maxNum.setText(str(max_num)) def send_custom_num_returnPressed(self): self.horizontalSlider_feedingNum.setMaximum(int(self.lineEdit_num.text())) self.horizontalSlider_feedingNum.setValue(0) self.label_maxNum.setText(self.lineEdit_num.text()) log.log_message(logging.INFO, f'{Constant.str_sys_setFeedNum}:{self.label_maxNum.text()} ') def send_position_button_click(self): # if True: # cmd_command = CMDRequest() # cmd_command.cmdData = ['rewriteData', '800', f'{position_instruction.m0}', 0] # request_command = vars(cmd_command) # self.robotClient.add_sendQuene(request_command) return def send_position_returnPressed(self): log.log_message(logging.INFO, Constant.str_sys_manualPosition) self.send_position_command(float(self.lineEdit_j1.text()), float(self.lineEdit_j2.text()), float(self.lineEdit_j3.text()), float(self.lineEdit_j4.text()), float(self.lineEdit_j5.text()), float(self.lineEdit_j6.text())) def send_setSpeed_label_doubelClick(self): pass def send_setSpeed_clicked(self): Constant.speed = int(self.lineEdit_speed_run.text()) Constant.debug_speed = int(self.lineEdit_speed_debug.text()) self.pushButton_speed.setText(str(Constant.speed)) log.log_message(logging.INFO, Constant.str_sys_setSpeed + str(Constant.speed)+'|'+str(Constant.debug_speed)) pass def send_get_safe_position_button_click(self): real_position = self.robotClient.status_model.getRealPosition() row_i = self.tableWidget_feedSeting.currentRow() head = self.tableWidget_feedSeting.item(row_i, 0).text() self.feedLine_dict[head].safe_position.init_position(real_position.X, real_position.Y, real_position.Z, real_position.U, real_position.V, real_position.W) self.set_position_to_tabel(row_i, 0, real_position) def send_get_broken1_position_button_click(self): real_position = self.robotClient.status_model.getRealPosition() row_i = self.tableWidget_feedSeting.currentRow() head = self.tableWidget_feedSeting.item(row_i, 0).text() self.feedLine_dict[head].broken1_position.init_position(real_position.X, real_position.Y, real_position.Z, real_position.U, real_position.V, real_position.W) self.set_position_to_tabel(row_i, 1, real_position) def send_get_broken2_position_button_click(self): real_position = self.robotClient.status_model.getRealPosition() row_i = self.tableWidget_feedSeting.currentRow() head = self.tableWidget_feedSeting.item(row_i, 0).text() self.feedLine_dict[head].broken2_position.init_position(real_position.X, real_position.Y, real_position.Z, real_position.U, real_position.V, real_position.W) self.set_position_to_tabel(row_i, 2, real_position) def send_get_shake_position_button_click(self): real_position = self.robotClient.status_model.getRealPosition() row_i = self.tableWidget_feedSeting.currentRow() head = self.tableWidget_feedSeting.item(row_i, 0).text() self.feedLine_dict[head].shake_position.init_position(real_position.X, real_position.Y, real_position.Z, real_position.U, real_position.V, real_position.W) self.set_position_to_tabel(row_i, 3, real_position) def send_get_dropbag_position_button_click(self): real_position = self.robotClient.status_model.getRealPosition() row_i = self.tableWidget_feedSeting.currentRow() head = self.tableWidget_feedSeting.item(row_i, 0).text() self.feedLine_dict[head].drop_bag_position.init_position(real_position.X, real_position.Y, real_position.Z, real_position.U, real_position.V, real_position.W) self.set_position_to_tabel(row_i, 4, real_position) def send_get_zipbag_position_button_click(self): real_position = self.robotClient.status_model.getRealPosition() row_i = self.tableWidget_feedSeting.currentRow() head = self.tableWidget_feedSeting.item(row_i, 0).text() self.feedLine_dict[head].zip_bag_position.init_position(real_position.X, real_position.Y, real_position.Z, real_position.U, real_position.V, real_position.W) self.set_position_to_tabel(row_i, 6, real_position) def send_tabelFeedSet_addRow(self): for i in range(1, 20): head = f'{Constant.feedLine_set_section}{i}' if head not in self.feedLine_dict: row_position = self.tableWidget_feedSeting.rowCount() # 当前行数 self.tableWidget_feedSeting.insertRow(row_position) safe_position = Real_Position() break_1_position = Real_Position() break_2_position = Real_Position() shake_position = Real_Position() drop_bag_position = Real_Position() self.feedLine_dict[head] = FeedLine('新建', safe_position, break_1_position, break_2_position,shake_position,drop_bag_position) self.tableWidget_feedSeting.setItem(self.tableWidget_feedSeting.rowCount() - 1, 0, QTableWidgetItem(head)) self.tableWidget_feedSeting.setItem(self.tableWidget_feedSeting.rowCount() - 1, 1, QTableWidgetItem('新建')) self.set_position_to_tabel(self.tableWidget_feedSeting.rowCount() - 1, 0, safe_position) self.set_position_to_tabel(self.tableWidget_feedSeting.rowCount() - 1, 1, break_1_position) self.set_position_to_tabel(self.tableWidget_feedSeting.rowCount() - 1, 2, break_2_position) self.set_position_to_tabel(self.tableWidget_feedSeting.rowCount() - 1, 3, shake_position) self.set_position_to_tabel(self.tableWidget_feedSeting.rowCount() - 1, 4, drop_bag_position) break def send_tabelFeedSet_delRow(self): selectRow = self.tableWidget_feedSeting.currentRow() if selectRow >= 0: for feed_line_key, feed_line in self.feedLine_dict.items(): if feed_line_key == self.tableWidget_feedSeting.item(selectRow, 0).text(): self.feedLine_dict.pop(feed_line_key) self.tableWidget_feedSeting.removeRow(selectRow) break else: QMessageBox.information(self, "提示", "请选择要删除的行") def send_tabelFeedSet_save(self): count = len(self.feedLine_dict.keys()) self.configReader.read(Constant.set_ini) self.configReader.set('Robot_Feed', 'LineCount', str(count)) writeFeedLine_to_ini(self.feedLine_dict, Constant.feedLine_set_file) pass def send_stopFeed_button_click(self): # 清空状态 self.feeding.feedStatus = FeedStatus.FNone # 清空运行命令 self.send_clear_auto_command() log.log_message(logging.INFO, Constant.str_feed_stop) def send_pauseFeed_button_click(self): if self.pushButton_pauseFeed.text() == '暂停': icon9 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.SystemReboot)) self.pushButton_pauseFeed.setIcon(icon9) self.pushButton_pauseFeed.setText('继续') log.log_message(logging.INFO, Constant.str_feed_pause) self.send_pause_command(True) self.feeding.pause = True else: icon9 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.MediaPlaybackPause)) self.pushButton_pauseFeed.setIcon(icon9) self.pushButton_pauseFeed.setText('暂停') self.send_pause_command(False) log.log_message(logging.INFO, Constant.str_feed_continue) self.send_start_tool_command() log.log_message(logging.INFO, Constant.str_sys_start_tool) self.feeding.pause = False pass def send_tabWidget_control_change(self): if self.robotClient.status_model.curMode != 7: self.send_switch_tool_command() log.log_message(logging.INFO, Constant.str_sys_switch_tool) self.send_start_tool_command() def send_reset_button_click(self): line_head = self.comboBox_lineIndex.currentData() safe_position = self.feedLine_dict[line_head].safe_position self.send_position_command(safe_position.X, safe_position.Y, safe_position.Z, safe_position.U, safe_position.V, safe_position.W,move_type=MoveType.WORLD) def send_tabelFeedSet_itemChanged(self, item): row = item.row() column = item.column() value = item.text() head = self.tableWidget_feedSeting.item(row, 0).text() if column == 1: self.feedLine_dict[head].name = value elif column == (0 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].safe_position.X = float(value) elif column == (1 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].safe_position.Y = float(value) elif column == (2 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].safe_position.Z = float(value) elif column == (3 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].safe_position.U = float(value) elif column == (4 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].safe_position.V = float(value) elif column == (5 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].safe_position.W = float(value) # elif column == 7: elif column == (6 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].broken1_position.X = float(value) elif column == (7 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].broken1_position.Y = float(value) elif column == (8 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].broken1_position.Z = float(value) elif column == (9 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].broken1_position.U = float(value) elif column == (10 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].broken1_position.V = float(value) elif column == (11 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].broken1_position.W = float(value) elif column == (12 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].broken2_position.X = float(value) elif column == (13 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].broken2_position.Y = float(value) elif column == (14 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].broken2_position.Z = float(value) elif column == (15 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].broken2_position.U = float(value) elif column == (16 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].broken2_position.V = float(value) elif column == (17 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].broken2_position.W = float(value) elif column == (18 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].shake_position.X = float(value) elif column == (19 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].shake_position.Y = float(value) elif column == (20 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].shake_position.Z = float(value) elif column == (21 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].shake_position.U = float(value) elif column == (22 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].shake_position.V = float(value) elif column == (23 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].shake_position.W = float(value) elif column == (24 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].drop_bag_position.X = float(value) elif column == (25 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].drop_bag_position.Y = float(value) elif column == (26 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].drop_bag_position.Z = float(value) elif column == (27 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].drop_bag_position.U = float(value) elif column == (28 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].drop_bag_position.V = float(value) elif column == (29 + self.tableWidget_feedSeting_addtional_col_num): self.feedLine_dict[head].drop_bag_position.W = float(value) def run(self): while True: time.sleep(0.1) if not self.command_quene.empty(): command = self.command_quene.get() if isinstance(command, FeedCommand) and command.status == Status.Prepareing: if self.feeding.feedStatus == FeedStatus.FNone: self.feeding.feedConfig = command.feed_config self.feeding.feedStatus = FeedStatus.FStart command.status = Status.Runing try: self.feeding.run() except: print(Error_Code.SYS_NONEPoint) self.updateUI() # pass #主线程 def updateUI(self): if self.robotClient.connected: self.set_label_status_style(True) else: self.set_label_status_style(False) if self.feeding.feedStatus != FeedStatus.FNone: self.horizontalSlider_feedingNum.setValue( self.horizontalSlider_feedingNum.maximum() - self.feeding.feedConfig.num) self.label_remain_num.setText(str(self.feeding.feedConfig.num)) try: self.configReader.read(Constant.set_ini) self.configReader.set('Robot_Feed', 'remain_linename', str(self.feeding.feedConfig.feedLine.id)) self.configReader.set('Robot_Feed', 'remain_count', str(self.feeding.feedConfig.num)) self.configReader.write(open(Constant.set_ini, 'w', encoding='utf-8')) except: log.log_message(logging.ERROR, Constant.str_sys_log_feedNum) else: self.set_run_status_button(False) if self.feeding.feedStatus == FeedStatus.FNone: self.stackedWidget_num.setCurrentIndex(0) else: self.stackedWidget_num.setCurrentIndex(1) self.label_date.setText(datetime.now().strftime("%Y-%m-%d")) self.label_time.setText(datetime.now().strftime("%H:%M:%S")) self.updateUI_Position() self.updateUI_label_detection() self.updateUI_label_status() self.updateUI_frame_sign(self.feeding.feedStatus) def updateUI_label_detection(self): backgroud_img = Util.util_pic.cv2_to_qpixmap(self.feeding.detection_image) backgroud_img = backgroud_img.scaled(self.label_showDetection.size().width(),self.label_showDetection.size().height(), Qt.AspectRatioMode.IgnoreAspectRatio,Qt.TransformationMode.SmoothTransformation) self.label_showDetection.setPixmap(backgroud_img) def updateUI_Select_Line(self): self.comboBox_lineIndex.clear() for key, value in self.feedLine_dict.items(): self.comboBox_lineIndex.addItem(value.name, key) def updateUI_label_status(self): if self.robotClient.status_model.isMoving==1: self.label_move_sign.show() if self.label_move_sign.text() == '正在移动.': self.label_move_sign.setText('正在移动..') else: self.label_move_sign.setText('正在移动.') else: self.label_move_sign.hide() if self.robotClient.status_model.curMode >= 0: try: self.label_status_model.setText(Constant.mode_array[self.robotClient.status_model.curMode]) except: self.label_status_model.setText('未知模式') self.label_status_remoteCmdLen.setText(str(self.robotClient.status_model.RemoteCmdLen)) def updateUI_Position(self): self.horizontalSlider_J1.setValue(self.status_address.axis_0) self.horizontalSlider_J2.setValue(self.status_address.axis_1) self.horizontalSlider_J3.setValue(self.status_address.axis_2) self.horizontalSlider_J4.setValue(self.status_address.axis_3) self.horizontalSlider_J5.setValue(self.status_address.axis_4) self.horizontalSlider_J6.setValue(self.status_address.axis_5) self.label_j1.setText(str(self.status_address.axis_0)) self.label_j2.setText(str(self.status_address.axis_1)) self.label_j3.setText(str(self.status_address.axis_2)) self.label_j4.setText(str(self.status_address.axis_3)) self.label_j5.setText(str(self.status_address.axis_4)) self.label_j6.setText(str(self.status_address.axis_5)) def set_position_to_tabel(self, row_i, position_j, real_Position: Real_Position): self.tableWidget_feedSeting.setItem(row_i, position_j * 6 + self.tableWidget_feedSeting_addtional_col_num, QTableWidgetItem(str(real_Position.X))) self.tableWidget_feedSeting.setItem(row_i, position_j * 6 + 1 + self.tableWidget_feedSeting_addtional_col_num, QTableWidgetItem(str(real_Position.Y))) self.tableWidget_feedSeting.setItem(row_i, position_j * 6 + 2 + self.tableWidget_feedSeting_addtional_col_num, QTableWidgetItem(str(real_Position.Z))) self.tableWidget_feedSeting.setItem(row_i, position_j * 6 + 3 + self.tableWidget_feedSeting_addtional_col_num, QTableWidgetItem(str(real_Position.U))) self.tableWidget_feedSeting.setItem(row_i, position_j * 6 + 4 + self.tableWidget_feedSeting_addtional_col_num, QTableWidgetItem(str(real_Position.V))) self.tableWidget_feedSeting.setItem(row_i, position_j * 6 + 5 + self.tableWidget_feedSeting_addtional_col_num, QTableWidgetItem(str(real_Position.W))) def updateUI_frame_sign(self,sign:FeedStatus): # print("start") if sign == FeedStatus.FNone: self.set_sign_status(self.label_sign_go, self.pushButton_sign_go, False) self.set_sign_status(self.label_sign_photo, self.pushButton_sign_photo, False) self.set_sign_status(self.label_sign_take, self.pushButton_sign_take, False) self.set_sign_status(self.label_sign_feed, self.pushButton_sign_feed, False) return if sign < FeedStatus.FPhoto: self.set_sign_status(self.label_sign_go,self.pushButton_sign_go,True) self.set_sign_status(self.label_sign_photo, self.pushButton_sign_photo, False) self.set_sign_status(self.label_sign_take, self.pushButton_sign_take, False) self.set_sign_status(self.label_sign_feed, self.pushButton_sign_feed, False) return if sign <= FeedStatus.FPhoto: self.set_sign_status(self.label_sign_go, self.pushButton_sign_go, False) self.set_sign_status(self.label_sign_photo,self.pushButton_sign_photo,True) self.set_sign_status(self.label_sign_take, self.pushButton_sign_take, False) self.set_sign_status(self.label_sign_feed, self.pushButton_sign_feed, False) return if sign <= FeedStatus.FTake: self.set_sign_status(self.label_sign_go, self.pushButton_sign_go, False) self.set_sign_status(self.label_sign_photo, self.pushButton_sign_photo, False) self.set_sign_status(self.label_sign_take, self.pushButton_sign_take, True) self.set_sign_status(self.label_sign_feed, self.pushButton_sign_feed, False) return if sign <= FeedStatus.FBroken: self.set_sign_status(self.label_sign_go, self.pushButton_sign_go, False) self.set_sign_status(self.label_sign_photo, self.pushButton_sign_photo, False) self.set_sign_status(self.label_sign_take, self.pushButton_sign_take, False) self.set_sign_status(self.label_sign_feed, self.pushButton_sign_feed, True) return pass def set_label_status_style(self, connected: bool): if connected: if self.label_connect_status.styleSheet().strip() != self.active_status_Qss: self.label_connect_status.setStyleSheet(self.active_status_Qss) self.active_status_Qss = self.label_connect_status.styleSheet().strip() else: if self.label_connect_status.styleSheet().strip() != self.noActive_status_Qss: self.label_connect_status.setStyleSheet(self.noActive_status_Qss) self.noActive_status_Qss = self.label_connect_status.styleSheet().strip() def set_sign_status(self,label,btn,signed:bool): try : if signed: if label.styleSheet().strip() != self.active_label_sign_Qss: label.setStyleSheet(self.active_label_sign_Qss) self.active_label_sign_Qss = label.styleSheet().strip() if btn.styleSheet().strip() != self.active_btn_sign_Qss: btn.setStyleSheet(self.active_btn_sign_Qss) self.active_btn_sign_Qss = btn.styleSheet().strip() else: if label.styleSheet().strip() != self.noactive_label_sign_Qss: label.setStyleSheet(self.noactive_label_sign_Qss) self.noactive_label_sign_Qss = label.styleSheet().strip() if btn.styleSheet().strip() != self.noactive_btn_sign_Qss: btn.setStyleSheet(self.noactive_btn_sign_Qss) self.noactive_btn_sign_Qss = btn.styleSheet().strip() except Exception as e: print(e) def set_run_status_button(self, isRuning: bool): self.pushButton_pauseFeed.setText("暂停") # if isRuning: # self.pushButton_pauseFeed.show() # self.pushButton_stopFeed.show() # self.pushButton_startFeed.hide() # else: # self.pushButton_pauseFeed.hide() # self.pushButton_stopFeed.hide() # self.pushButton_startFeed.show() def send_clear_auto_command(self): clear_command = CMDInstructRequest() io_instruction= Instruction() io_instruction.IO = True io_instruction.point=0 #{"dsID":"HCRemoteCommand","reqType":"AddRCC","emptyList":"1","instructions":[{"oneshot":"1","action":"200","type":"0","io_status":"1","point":"15","delay":"0"}]} io_instruction.delay=1 clear_command.dsID = 'HCRemoteCommand' clear_command.instructions.append(io_instruction) request_command = clear_command.toString() log.log_message(logging.INFO, Constant.str_sys_clearAlarm) self.command_quene.put(request_command) def send_position_command(self, x1, x2, x3, x4, x5, x6, move_type: MoveType = MoveType.WORLD): position_instruction = Instruction() position_instruction.m0 = float(x1) position_instruction.m1 = float(x2) position_instruction.m2 = float(x3) position_instruction.m3 = float(x4) position_instruction.m4 = float(x5) position_instruction.m5 = float(x6) position_instruction.action = move_type.value position_instruction.speed=Constant.debug_speed instruction_command = CMDInstructRequest() instruction_command.instructions.append(position_instruction) request_command = instruction_command.toString() log_str = f'移动到位置:{"自由路径" if move_type == MoveType.AXIS else "姿势直线"}:' \ f'm0:{position_instruction.m0}-' \ f'm2:{position_instruction.m1}-' \ f'm3:{position_instruction.m2}-' \ f'm4:{position_instruction.m3}-' \ f'm5:{position_instruction.m4}-' \ f'm6:{position_instruction.m5}' log.log_message(logging.INFO,log_str) self.robotClient.add_sendQuene(request_command) def send_pause_command(self, pause: bool): pause_command = CMDRequest() pause_command.cmdData.append("actionPause") if pause: pause_command.cmdData.append("1") else: pause_command.cmdData.append("0") request_command = pause_command.toString() print(request_command) self.robotClient.add_sendQuene(request_command) def send_clear_alarm_command(self, pause: bool): switch_command = CMDRequest() switch_command.cmdData.append("modifyGSPD") switch_command.cmdData.append("2") request_command = switch_command.toString() print(request_command) self.robotClient.add_sendQuene(request_command) pause_command = CMDRequest() pause_command.cmdData.append("clearAlarmContinue") pause_command.cmdData.append("1") request_command = pause_command.toString() print(request_command) log_str = f'暂停:{pause}' self.robotClient.add_sendQuene(request_command) def send_switch_tool_command(self): switch_command = CMDRequest() switch_command.cmdData.append("switchTool") switch_command.cmdData.append("2") request_command = switch_command.toString() print(request_command) self.robotClient.add_sendQuene(request_command) def send_start_tool_command(self): switch_command = CMDRequest() switch_command.cmdData.append("startButton") switch_command.cmdData.append("1") request_command = switch_command.toString() print(request_command) self.robotClient.add_sendQuene(request_command) def show_messagebox_of_person(self): msg_box = QMessageBox(self) msg_box.setWindowTitle("提示") msg_box.setText("当前有人是否继续") msg_box.setIcon(QMessageBox.Question) msg_box.setStandardButtons(QMessageBox.Yes) msg_box.setDefaultButton(QMessageBox.Yes) result = msg_box.exec() if result == QMessageBox.Yes: self.feeding.pause = False self.send_pause_command(False) ### 设置界面 def get_p1_button_click(self): realPosition = self.robotClient.status_model.getRealPosition() self.lineEdit_x1.setText(str(realPosition.X)) self.lineEdit_y1.setText(str(realPosition.Y)) self.lineEdit_z1.setText(str(realPosition.Z)+"1") self.lineEdit_u1.setText(str(realPosition.U)) self.lineEdit_v1.setText(str(realPosition.V)) self.lineEdit_w1.setText(str(realPosition.W)) def get_p2_button_click(self): realPosition = self.robotClient.status_model.getRealPosition() self.lineEdit_x2.setText(str(realPosition.X)) self.lineEdit_y2.setText(str(realPosition.Y)) self.lineEdit_z2.setText(str(realPosition.Z)+"2") self.lineEdit_u2.setText(str(realPosition.U)) self.lineEdit_v2.setText(str(realPosition.V)) self.lineEdit_w2.setText(str(realPosition.W)) def get_p3_button_click(self): realPosition = self.robotClient.status_model.getRealPosition() self.lineEdit_x3.setText(str(realPosition.X)) self.lineEdit_y3.setText(str(realPosition.Y)) self.lineEdit_z3.setText(str(realPosition.Z)+"3") self.lineEdit_u3.setText(str(realPosition.U)) self.lineEdit_v3.setText(str(realPosition.V)) self.lineEdit_w3.setText(str(realPosition.W)) def get_p4_button_click(self): realPosition = self.robotClient.status_model.getRealPosition() self.lineEdit_x4.setText(str(realPosition.X)) self.lineEdit_y4.setText(str(realPosition.Y)) self.lineEdit_z4.setText(str(realPosition.Z)+"4") self.lineEdit_u4.setText(str(realPosition.U)) self.lineEdit_v4.setText(str(realPosition.V)) self.lineEdit_w4.setText(str(realPosition.W)) def get_p5_button_click(self): realPosition = self.robotClient.status_model.getRealPosition() self.lineEdit_x5.setText(str(realPosition.X)) self.lineEdit_y5.setText(str(realPosition.Y)) self.lineEdit_z5.setText(str(realPosition.Z)+"5") self.lineEdit_u5.setText(str(realPosition.U)) self.lineEdit_v5.setText(str(realPosition.V)) self.lineEdit_w5.setText(str(realPosition.W)) def set_p1_button_click(self): try: x1 = float(self.lineEdit_x1.text()) y1 = float(self.lineEdit_y1.text()) z1 = float(self.lineEdit_z1.text()) u1 = float(self.lineEdit_u1.text()) v1 = float(self.lineEdit_v1.text()) w1 = float(self.lineEdit_w1.text()) self.robotClient.photo_locs[0] = (x1, y1, z1,u1,v1,w1) self.configReader.read(Constant.set_ini) self.configReader.set('Robot_Feed', 'photo_x1', str(x1)) self.configReader.set('Robot_Feed', 'photo_y1', str(y1)) self.configReader.set('Robot_Feed', 'photo_z1', str(z1)) self.configReader.set('Robot_Feed', 'photo_u1', str(u1)) self.configReader.set('Robot_Feed', 'photo_v1', str(v1)) self.configReader.set('Robot_Feed', 'photo_w1', str(w1)) log.log_message(logging.INFO, f'设置拍照点1:{x1},{y1},{z1}') except: self.show_infomessage_box("设置拍照点1失败") def set_p2_button_click(self): try: x2 = float(self.lineEdit_x2.text()) y2 = float(self.lineEdit_y2.text()) z2 = float(self.lineEdit_z2.text()) u2 = float(self.lineEdit_u2.text()) v2 = float(self.lineEdit_v2.text()) w2 = float(self.lineEdit_w2.text()) self.robotClient.photo_locs[1] = (x2, y2, z2,u2,v2,w2) self.configReader.read(Constant.set_ini) self.configReader.set('Robot_Feed', 'photo_x2', str(x2)) self.configReader.set('Robot_Feed', 'photo_y2', str(y2)) self.configReader.set('Robot_Feed', 'photo_z2', str(z2)) self.configReader.set('Robot_Feed', 'photo_u2', str(u2)) self.configReader.set('Robot_Feed', 'photo_v2', str(v2)) self.configReader.set('Robot_Feed', 'photo_w2', str(w2)) log.log_message(logging.INFO, f'设置拍照点2:{x2},{y2},{z2}') except: self.show_infomessage_box("设置拍照点2失败") def set_p3_button_click(self): try: x3 = float(self.lineEdit_x3.text()) y3 = float(self.lineEdit_y3.text()) z3 = float(self.lineEdit_z3.text()) u3 = float(self.lineEdit_u3.text()) v3 = float(self.lineEdit_v3.text()) w3 = float(self.lineEdit_w3.text()) self.robotClient.photo_locs[2] = (x3, y3, z3,u3,v3,w3) self.configReader.read(Constant.set_ini) self.configReader.set('Robot_Feed', 'photo_x3', str(x3)) self.configReader.set('Robot_Feed', 'photo_y3', str(y3)) self.configReader.set('Robot_Feed', 'photo_z3', str(z3)) self.configReader.set('Robot_Feed', 'photo_u3', str(u3)) self.configReader.set('Robot_Feed', 'photo_v3', str(v3)) self.configReader.set('Robot_Feed', 'photo_w3', str(w3)) log.log_message(logging.INFO, f'设置拍照点3:{x3},{y3},{z3}') except: self.show_infomessage_box("设置拍照点3失败") def set_p4_button_click(self): try: x4 = float(self.lineEdit_x4.text()) y4 = float(self.lineEdit_y4.text()) z4 = float(self.lineEdit_z4.text()) u4 = float(self.lineEdit_u4.text()) v4 = float(self.lineEdit_v4.text()) w4 = float(self.lineEdit_w4.text()) self.robotClient.photo_locs[3] = (x4, y4, z4,u4,v4,w4) self.configReader.read(Constant.set_ini) self.configReader.set('Robot_Feed', 'photo_x4', str(x4)) self.configReader.set('Robot_Feed', 'photo_y4', str(y4)) self.configReader.set('Robot_Feed', 'photo_z4', str(z4)) self.configReader.set('Robot_Feed', 'photo_u4', str(u4)) self.configReader.set('Robot_Feed', 'photo_v4', str(v4)) self.configReader.set('Robot_Feed', 'photo_w4', str(w4)) log.log_message(logging.INFO, f'设置拍照点4:{x4},{y4},{z4}') except: self.show_infomessage_box("设置拍照点4失败") def set_p5_button_click(self): try: x5 = float(self.lineEdit_x5.text()) y5 = float(self.lineEdit_y5.text()) z5 = float(self.lineEdit_z5.text()) u5 = float(self.lineEdit_u5.text()) v5 = float(self.lineEdit_v5.text()) w5 = float(self.lineEdit_w5.text()) self.robotClient.photo_locs[4] = (x5, y5, z5,u5,v5,w5) self.configReader.read(Constant.set_ini) self.configReader.set('Robot_Feed', 'photo_x5', str(x5)) self.configReader.set('Robot_Feed', 'photo_y5', str(y5)) self.configReader.set('Robot_Feed', 'photo_z5', str(z5)) self.configReader.set('Robot_Feed', 'photo_u5', str(u5)) self.configReader.set('Robot_Feed', 'photo_v5', str(v5)) self.configReader.set('Robot_Feed', 'photo_w5', str(w5)) log.log_message(logging.INFO, f'设置拍照点5:{x5},{y5},{z5}') except: self.show_infomessage_box("设置拍照点5失败") def updateUI_Photo_Set(self): self.lineEdit_x1.setText(str(self.robotClient.photo_locs[0][0])) self.lineEdit_y1.setText(str(self.robotClient.photo_locs[0][1])) self.lineEdit_z1.setText(str(self.robotClient.photo_locs[0][2])) self.lineEdit_x2.setText(str(self.robotClient.photo_locs[1][0])) self.lineEdit_y2.setText(str(self.robotClient.photo_locs[1][1])) self.lineEdit_z2.setText(str(self.robotClient.photo_locs[1][2])) self.lineEdit_x3.setText(str(self.robotClient.photo_locs[2][0])) self.lineEdit_y3.setText(str(self.robotClient.photo_locs[2][1])) self.lineEdit_z3.setText(str(self.robotClient.photo_locs[2][2])) pass def updateUI_Base_Set(self): self.lineEdit_speed_run.setText(str(Constant.speed)) self.lineEdit_speed_debug.setText(str(Constant.shake_speed)) def show_infomessage_box(self,message): msg_box = QMessageBox(self) msg_box.setWindowTitle("提示") msg_box.setText(message) msg_box.setIcon(QMessageBox.Icon.Information) msg_box.setStandardButtons(QMessageBox.StandardButton.Ok) def send_click_change_stackView(self,index): self.stackedWidget_view.setCurrentIndex(index) if index == 0: self.updateUI_Select_Line() if index == 1: self.updateUI_Photo_Set() if index == 2: self.updateUI_Base_Set() def send_exit_button_click(self): QApplication.quit() sys.exit(app.exec()) def send_click_sysmeuExpand(self): self.frame_sys_seting.setVisible(not self.frame_sys_seting.isVisible()) if self.frame_2.sizePolicy().verticalPolicy() == QSizePolicy.Policy.Fixed: self.frame_2.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) else: self.frame_2.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec())