diff --git a/CU/Feeding.py b/CU/Feeding.py index e80bfd2..9ac288b 100644 --- a/CU/Feeding.py +++ b/CU/Feeding.py @@ -17,12 +17,12 @@ class FeedStatus(Enum): FFinished = 7 class FeedLine: - def __init__(self,safe_position:Real_Position,photo_position:Real_Position,feed_position:Real_Position): + def __init__(self,name,safe_position:Real_Position,photo_position:Real_Position,feed_position:Real_Position): self.safe_position = safe_position self.photo_position = photo_position self.feed_position = feed_position self.take_position = None - + self.name = name class FeedingConfig: def __init__(self, num:int, feedLine:FeedLine): diff --git a/Config/FeedLine.ini b/Config/FeedLine.ini index 1f28892..69157a5 100644 --- a/Config/FeedLine.ini +++ b/Config/FeedLine.ini @@ -1,21 +1,57 @@ [FeedLine1] -SafePosition_x=0 -SafePosition_y=0 -SafePosition_z=1 -SafePosition_u=2 -SafePosition_v=3 -SafePosition_w=0 -PhotoPosition_x=0 -PhotoPosition_y=0 -PhotoPosition_z=5 -PhotoPosition_u=4 -PhotoPosition_v=0 -PhotoPosition_w=0 -FeedPosition_x=0 -FeedPosition_y=7 -FeedPosition_z=6 -FeedPosition_u=0 -FeedPosition_v=7 -FeedPosition_w=0 +name = 阿萨德 +safeposition_x = 0.0 +safeposition_y = 0.0 +safeposition_z = 1.0 +safeposition_u = 2.0 +safeposition_v = 3.0 +safeposition_w = 0.0 +photoposition_x = 0.0 +photoposition_y = 0.0 +photoposition_z = 5.0 +photoposition_u = 4.0 +photoposition_v = 0.0 +feedposition_x = 0.0 +feedposition_y = 7.0 +feedposition_z = 6.0 +feedposition_u = 0.0 +feedposition_v = 7.0 +[FeedLine2] +name = 艾师傅 +safeposition_x = 0.0 +safeposition_y = 0.0 +safeposition_z = 0.0 +safeposition_u = 0.0 +safeposition_v = 0.0 +safeposition_w = 0.0 +photoposition_x = 0.0 +photoposition_y = 0.0 +photoposition_z = 0.0 +photoposition_u = 0.0 +photoposition_v = 0.0 +feedposition_x = 0.0 +feedposition_y = 0.0 +feedposition_z = 0.0 +feedposition_u = 0.0 +feedposition_v = 0.0 + +[FeedLine3] +name = 新增 +safeposition_x = 0.0 +safeposition_y = 0.0 +safeposition_z = 0.0 +safeposition_u = 0.0 +safeposition_v = 0.0 +safeposition_w = 0.0 +photoposition_x = 0.0 +photoposition_y = 0.0 +photoposition_z = 0.0 +photoposition_u = 0.0 +photoposition_v = 0.0 +feedposition_x = 0.0 +feedposition_y = 0.0 +feedposition_z = 0.0 +feedposition_u = 0.0 +feedposition_v = 0.0 diff --git a/Constant.py b/Constant.py index fbc4db2..dd07493 100644 --- a/Constant.py +++ b/Constant.py @@ -1,3 +1,8 @@ +import os + position_accuracy = 0.02 manual_adjust_accuracy = 1 -speed = 10 \ No newline at end of file +speed = 10 +feedLine_set_section = 'FeedLine' +feedLine_set_file = f'.{os.sep}Config{os.sep}feedLine.ini' +set_ini = 'Seting.ini' \ No newline at end of file diff --git a/Seting.ini b/Seting.ini index 5fbc247..868333a 100644 --- a/Seting.ini +++ b/Seting.ini @@ -16,7 +16,7 @@ j5_min=-150 j5_max=+150 j6_min=-150 j6_max=+150 -LineCount=1 +LineCount=2 [Camera_Feed] diff --git a/Util/util_ini.py b/Util/util_ini.py new file mode 100644 index 0000000..43796c7 --- /dev/null +++ b/Util/util_ini.py @@ -0,0 +1,26 @@ +import configparser + + +def writeFeedLine_to_ini(feedLine_dirt,file_path:str): + config = configparser.ConfigParser() + for key,value in feedLine_dirt.items(): + config.add_section(key) + config.set(key,'name',value.name) + config.set(key,'SafePosition_x',str(value.safe_position.X)) + config.set(key,'SafePosition_y',str(value.safe_position.Y)) + config.set(key,'SafePosition_z',str(value.safe_position.Z)) + config.set(key,'SafePosition_u',str(value.safe_position.U)) + config.set(key,'SafePosition_v',str(value.safe_position.V)) + config.set(key,'SafePosition_w',str(value.safe_position.W)) + config.set(key,'PhotoPosition_x',str(value.photo_position.X)) + config.set(key,'PhotoPosition_y',str(value.photo_position.Y)) + config.set(key,'PhotoPosition_z',str(value.photo_position.Z)) + config.set(key,'PhotoPosition_u',str(value.photo_position.U)) + config.set(key,'PhotoPosition_v',str(value.photo_position.V)) + config.set(key,'FeedPosition_x',str(value.feed_position.X)) + config.set(key,'FeedPosition_y',str(value.feed_position.Y)) + config.set(key,'FeedPosition_z',str(value.feed_position.Z)) + config.set(key,'FeedPosition_u',str(value.feed_position.U)) + config.set(key,'FeedPosition_v',str(value.feed_position.V)) + config.write(open(file_path,'w',encoding='utf-8')) + return True diff --git a/app.py b/app.py index 1096295..2b750a5 100644 --- a/app.py +++ b/app.py @@ -8,9 +8,9 @@ from PyQt5.uic.properties import QtWidgets from PySide6.QtCore import QThread, Signal, Slot, QObject, QEvent from PySide6.QtGui import QIntValidator, QStandardItemModel, QStandardItem, Qt from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QHeaderView, QTableWidget, \ - QTableWidgetItem, QWidget, QHBoxLayout, QAbstractItemView + QTableWidgetItem, QWidget, QHBoxLayout, QAbstractItemView, QMessageBox from datetime import datetime - +from Util.util_ini import writeFeedLine_to_ini import Constant from CU.Command import FeedCommand from CU.Feeding import FeedLine, FeedingConfig, Feeding, FeedStatus @@ -105,7 +105,7 @@ class MainWindow(QMainWindow,Ui_MainWindow): self.command_quene = Queue() self.main_threading = None - self.configReader.read('Seting.ini') + self.configReader.read(Constant.set_ini) ip = self.configReader.get('Robot_Feed', 'IPAddress') port = int(self.configReader.get('Robot_Feed', 'Port')) @@ -125,14 +125,16 @@ class MainWindow(QMainWindow,Ui_MainWindow): def init_seting_frame(self): - rows = len(self.feedLine_dict.keys())+2 + rows = len(self.feedLine_dict.keys())+1 self.tableWidget_feedSeting.setRowCount(rows) self.tableWidget_feedSeting.setColumnCount(19) # 设置第一重表头的合并 (三列一组) - self.tableWidget_feedSeting.setSpan(0, 1, 1, 6) # 合并前3列 - self.tableWidget_feedSeting.setSpan(0, 7, 1, 6) # 合并后3列 - self.tableWidget_feedSeting.setSpan(0, 13, 1, 6) # 合并后3列 + 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.itemChanged.connect(self.send_tabelFeedSet_itemChanged) btn_safe = QPushButton("获取安全位置") @@ -170,28 +172,34 @@ class MainWindow(QMainWindow,Ui_MainWindow): btn_feed.clicked.connect(self.send_get_feed_position_button_click) # 添加第一重表头项 - self.tableWidget_feedSeting.setCellWidget(0, 1, widget_safe) - self.tableWidget_feedSeting.setCellWidget(0, 7, widget_photo) - self.tableWidget_feedSeting.setCellWidget(0, 13, widget_feed) # 设置在合并的第2组 + 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_photo) + self.tableWidget_feedSeting.setCellWidget(0, 12+self.tableWidget_feedSeting_addtional_col_num, widget_feed) # 设置在合并的第2组 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']) + self.tableWidget_feedSeting.setHorizontalHeaderLabels(['header','线名','X1','Y1','Z1','U1','V1','W1','X2','Y2','Z2','U2','V2','W2','X3','Y3','Z3','U3','V3','W3']) + 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.photo_position) self.set_position_to_tabel(row+1, 2, feed_line.feed_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('Config/FeedLine.ini') + 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() @@ -220,7 +228,8 @@ class MainWindow(QMainWindow,Ui_MainWindow): feed_position.V = float(self.configReader.get(line_str, 'FeedPosition_v', fallback=0)) feed_position.W = float(self.configReader.get(line_str, 'FeedPosition_w', fallback=0)) - self.feedLine_dict[str(i+1)] = FeedLine(safe_position, photo_position, feed_position) + name = self.configReader.get(line_str, 'Name', fallback='未命名') + self.feedLine_dict[f'{Constant.feedLine_set_section}{i+1}'] = FeedLine(name ,safe_position, photo_position, feed_position) self.init_seting_frame() pass @@ -274,7 +283,7 @@ class MainWindow(QMainWindow,Ui_MainWindow): def send_startFeed_button_click(self): num = self.horizontalSlider_feedingNum.maximum() line_index = str(self.comboBox_lineIndex.currentIndex()+1) - self.command_quene.put(FeedCommand(FeedingConfig(num, self.feedLine_dict[line_index]))) + self.command_quene.put(FeedCommand(FeedingConfig(num, self.feedLine_dict[f'{Constant.feedLine_set_section}{1}']))) self.stackedWidget_num.setCurrentIndex(1) def send_num_button_click(self): @@ -426,6 +435,92 @@ class MainWindow(QMainWindow,Ui_MainWindow): self.feedLine_dict[head].feed_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_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() + photo_position = Real_Position() + feed_position = Real_Position() + self.feedLine_dict[head] = FeedLine('新建', safe_position, photo_position, feed_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, photo_position) + self.set_position_to_tabel(self.tableWidget_feedSeting.rowCount() - 1, 2, feed_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_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].photo_position.X = float(value) + elif column == (7+self.tableWidget_feedSeting_addtional_col_num): + self.feedLine_dict[head].photo_position.Y = float(value) + elif column == (8+self.tableWidget_feedSeting_addtional_col_num): + self.feedLine_dict[head].photo_position.Z = float(value) + elif column == (9+self.tableWidget_feedSeting_addtional_col_num): + self.feedLine_dict[head].photo_position.U = float(value) + elif column == (10+self.tableWidget_feedSeting_addtional_col_num): + self.feedLine_dict[head].photo_position.V = float(value) + elif column == (11+self.tableWidget_feedSeting_addtional_col_num): + self.feedLine_dict[head].photo_position.W = float(value) + + elif column==(12+self.tableWidget_feedSeting_addtional_col_num): + self.feedLine_dict[head].feed_position.X = float(value) + elif column == (13+self.tableWidget_feedSeting_addtional_col_num): + self.feedLine_dict[head].feed_position.Y = float(value) + elif column == (14+self.tableWidget_feedSeting_addtional_col_num): + self.feedLine_dict[head].feed_position.Z = float(value) + elif column == (15+self.tableWidget_feedSeting_addtional_col_num): + self.feedLine_dict[head].feed_position.U = float(value) + elif column == (16+self.tableWidget_feedSeting_addtional_col_num): + self.feedLine_dict[head].feed_position.V = float(value) + elif column == (17+self.tableWidget_feedSeting_addtional_col_num): + self.feedLine_dict[head].feed_position.W = float(value) + + + + def run(self): while True: time.sleep(0.2) @@ -477,12 +572,12 @@ class MainWindow(QMainWindow,Ui_MainWindow): 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+1, QTableWidgetItem(str(real_Position.X))) - self.tableWidget_feedSeting.setItem(row_i, position_j*6+1+1, QTableWidgetItem(str(real_Position.Y))) - self.tableWidget_feedSeting.setItem(row_i, position_j*6+2+1, QTableWidgetItem(str(real_Position.Z))) - self.tableWidget_feedSeting.setItem(row_i, position_j*6+3+1, QTableWidgetItem(str(real_Position.U))) - self.tableWidget_feedSeting.setItem(row_i, position_j*6+4+1, QTableWidgetItem(str(real_Position.V))) - self.tableWidget_feedSeting.setItem(row_i, position_j*6+5+1, QTableWidgetItem(str(real_Position.W))) + 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 set_label_status_style(self, connected: bool): if connected: diff --git a/ui_untitled.py b/ui_untitled.py index 2147d8b..ccde248 100644 --- a/ui_untitled.py +++ b/ui_untitled.py @@ -810,7 +810,54 @@ class Ui_MainWindow(object): self.page_7.setObjectName(u"page_7") self.tableWidget_feedSeting = QTableWidget(self.page_7) self.tableWidget_feedSeting.setObjectName(u"tableWidget_feedSeting") - self.tableWidget_feedSeting.setGeometry(QRect(10, 10, 871, 501)) + self.tableWidget_feedSeting.setGeometry(QRect(10, 50, 871, 461)) + self.pushButton_tableFeedSet_addRow = QPushButton(self.page_7) + self.pushButton_tableFeedSet_addRow.setObjectName(u"pushButton_tableFeedSet_addRow") + self.pushButton_tableFeedSet_addRow.setGeometry(QRect(710, 10, 75, 31)) + self.pushButton_tableFeedSet_addRow.setStyleSheet(u"\n" +"*{\n" +"color: #ffffff;\n" +"background-color: rgb(16, 133, 255);\n" +"font: 12pt \"\u6977\u4f53\";\n" +"border: 1px solid #dcdfe6;\n" +"border-radius: 6px;\n" +"}\n" +"*:pressed\n" +"{\n" +"background-color: #499c8a;\n" +"}\n" +"") + self.pushButton_tableFeedSet_deleRow = QPushButton(self.page_7) + self.pushButton_tableFeedSet_deleRow.setObjectName(u"pushButton_tableFeedSet_deleRow") + self.pushButton_tableFeedSet_deleRow.setGeometry(QRect(790, 10, 75, 31)) + self.pushButton_tableFeedSet_deleRow.setStyleSheet(u"*{\n" +"color: #ffffff;\n" +"background-color: #FF5722;\n" +"font: 12pt \"\u6977\u4f53\";\n" +"border: 1px solid #dcdfe6;\n" +"border-radius: 6px;\n" +"}\n" +"*:pressed\n" +"{\n" +"background-color: #499c8a;\n" +"}\n" +"") + self.pushButton_tableFeedSet_save = QPushButton(self.page_7) + self.pushButton_tableFeedSet_save.setObjectName(u"pushButton_tableFeedSet_save") + self.pushButton_tableFeedSet_save.setGeometry(QRect(630, 10, 75, 31)) + self.pushButton_tableFeedSet_save.setStyleSheet(u"\n" +"*{\n" +"color: #ffffff;\n" +"background-color: #1AA094;\n" +"font: 12pt \"\u6977\u4f53\";\n" +"border: 1px solid #dcdfe6;\n" +"border-radius: 6px;\n" +"}\n" +"*:pressed\n" +"{\n" +"background-color: #197971;\n" +"}\n" +"") self.stackedWidget_feed.addWidget(self.page_7) self.tabWidget.addTab(self.tab, "") self.tab_2 = QWidget() @@ -952,6 +999,9 @@ class Ui_MainWindow(object): self.lineEdit_speed.setPlaceholderText(QCoreApplication.translate("MainWindow", u"\u8f93\u5165\u6574\u6570\uff0c\u5207\u52ff\u8d85\u901f", None)) self.label_2.setText(QCoreApplication.translate("MainWindow", u"\u5f53\u524d\u81ea\u52a8\u901f\u5ea6\uff1a", None)) self.pushButton_speed.setText(QCoreApplication.translate("MainWindow", u"PushButton", None)) + self.pushButton_tableFeedSet_addRow.setText(QCoreApplication.translate("MainWindow", u"\u65b0\u589e\u7ebf", None)) + self.pushButton_tableFeedSet_deleRow.setText(QCoreApplication.translate("MainWindow", u"\u5220\u9664\u7ebf", None)) + self.pushButton_tableFeedSet_save.setText(QCoreApplication.translate("MainWindow", u"\u4fdd\u5b58", None)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), QCoreApplication.translate("MainWindow", u"\u6295\u6599", None)) self.pushButton_2.setText(QCoreApplication.translate("MainWindow", u"PushButton", None)) self.pushButton.setText(QCoreApplication.translate("MainWindow", u"PushButton", None)) diff --git a/untitled.ui b/untitled.ui index bb57fad..59ca209 100644 --- a/untitled.ui +++ b/untitled.ui @@ -1761,12 +1761,95 @@ font: 10pt "楷体"; 10 - 10 + 50 871 - 501 + 461 + + + + 710 + 10 + 75 + 31 + + + + +*{ +color: #ffffff; +background-color: rgb(16, 133, 255); +font: 12pt "楷体"; +border: 1px solid #dcdfe6; +border-radius: 6px; +} +*:pressed +{ +background-color: #499c8a; +} + + + + 新增线 + + + + + + 790 + 10 + 75 + 31 + + + + *{ +color: #ffffff; +background-color: #FF5722; +font: 12pt "楷体"; +border: 1px solid #dcdfe6; +border-radius: 6px; +} +*:pressed +{ +background-color: #499c8a; +} + + + + 删除线 + + + + + + 630 + 10 + 75 + 31 + + + + +*{ +color: #ffffff; +background-color: #1AA094; +font: 12pt "楷体"; +border: 1px solid #dcdfe6; +border-radius: 6px; +} +*:pressed +{ +background-color: #197971; +} + + + + 保存 + +