From fddb83dccee6d3d0766c60a5e49dc3df747a10d3 Mon Sep 17 00:00:00 2001 From: zhu-mengmeng <15588200382@163.com> Date: Wed, 11 Jun 2025 17:00:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=87=AA=E5=8A=A8=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=E8=B4=B4=E6=A0=87=E4=BF=A1=E5=8F=B7=E5=90=8E=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=9B=9E=E5=A1=AB=E5=88=B0=E5=8C=85=E8=A3=85=E5=8C=BA?= =?UTF-8?q?=E5=9F=9F=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/jtDB.db | Bin 40960 -> 40960 bytes from pymodbus.py | 7 +- utils/register_handlers.py | 4 +- widgets/main_window.py | 252 +++++++++++++++++++++++-------------- 4 files changed, 163 insertions(+), 100 deletions(-) diff --git a/db/jtDB.db b/db/jtDB.db index e7baf46c93198cdde0e85ae430b15810cd5ce5f3..12c64cc8bcb42740b7f61e03fc84b2e4d469cead 100644 GIT binary patch delta 3423 zcmb7{O>7%Q6vub%b-ea^?LyiJ6HpSN9w6AA+1;^sS5d0)Aw_K{sHH$tw@pk#oDaJ} zfdb;NogR=N6t&DH0#tE;TMLw^C!{Kz5CS0~Zk#xQsM{`e)E6- zH@}&AGkb13b#6O#ahRXI^uXi%?6o;-KYx4cm;Ga-7RPZ4*WpSZm!^xiitiPH{G&|d zqlJG89~CC0f2D2dnfzb*>-n?!dhVNCD>p9Q7O#ra*_+ub*><)%@a@3zKqd2g=JU(} z;g;~3a7F;>@6xO3eW^cE*HSb59sUdcW!|y)iQ}4hrO55&`H?-cT2{;A@YB}eCn^e1 zPz69ml74-A^S2K-VMSe=UtjP3U8_Ji3Tvijn6S3~#`-G@Z6=`By8$Y1;8oXUu;&sm zDHI^A`{}L!lV34H`6uwQn_rggS#X>^i$MN#nkmn#o0d0$mwY*j>QkwHdK0(EpUd}I zQ0X_affo}&KnH~GgXnS4O;wBKtecu1;9zaSCVt7y?=Pnh0{W||+>ML9%rM}x2`BJ^ zk1IfH$=NfI!R?pd!+knd@5&k4jNHU8c4@;1ZDwQxHxp?Chqe*Jp>AqPv;hsc^Kfa; zC(;H!ZFrY1C_;NKmX=E!Ftq*hd$do*>K)pEq0PumeA1yk4nc%AGqQnCbZL|M#lacF z=Bt31nJcEI#O`LrM6{jI%A2^+#p@)rjGcidrd3TCTsCL>9!~-S42Gwd_uxXi2Xr=B z&j9uGJ-LaG*+9#W7!jV#zy^LHz*Dz*s&PDl2|+ARU`D!R6F(o|sqf5lhqNfVL7z+H zp))+ayg{Bvll2TwPaoj8Xc%*mg?+ zYL0repPH;Kf0b+CL)7}~Mb{bta$zNGjZCDQPz{~^Hh#+0A!6%>Bx&X`#}3pWgf*aO zS_OcblV~tp1+e#$Mm|~DNSpY81BV=18Y641k(8>EORe!?4fd`Sx~bcEnmXBMZ3u;| zkOmR7t;ogJqZwO@Ao+A@gZ$7sN%pOt7&wL}i`+wmU))2gZHo+bCds?2r^ubo9C^QU zoE$uJom_3teYqy=8ZC-9xYGHOP<*Q>${Vs=cvHG5HS<5`kL143Jt^MUx@Xr1qJ@Q` zyqDvKN2d6x@>E$2Ugor1`cqNE6StovYQ2gS6+!fBQb?t@SyJ3m=^|i3PO1Y&>WI1c zVO2p;uh-8qKF|#rfF7f0+_LXmM{5Au4zW;3sslvoV6Q}gssJcz9lRFt(M=lC>08Z< zTl9Iy48VevPzNyj)ZsMYDzw){L9cs0)TS4z(dk-=1L$K1XY#a;RAheuy-yv$M5tn4W+7TN=?%{;f#K$7VF5yaY=L? z5py&Exw0WzaSbBu>Gp;yvQJ1IolXkru{Vk@_2Rgc4V7d0M-?E-BT$mpNKnuhnQlv| dY5=KPeJm*yM<^(*IbQ^6`&(p7zVP?G{{gSep`-u+ delta 967 zcmaKp-Aj{E9LLYbv+a4=d8TcSEwg+{32W;-=Xvqj5S{2n6ct$)362yJY;!NL)Qp8b zT?Azd#}7g%Ea=9Y2;E&bNq5~uQTNr2fnq5A13mNE($ICz)%ktC=fjtC=GN?UYxadk zTYK?XzpZ^`WVYA#rS!eGrMaIwgMzLNgkO7>Jr~3Uam)Q!^y3Wny3ev7xgBnm%dlCF z3fsbpkQPq!zxX$NmJPW!9G%r&s;^sTpmQ?LIG0cywr2wHYI2D|h5OmsLUH9MNi!M9`(NK$kVJxT~j6G@II$ca$YI1ei~1Mn%)+7>g; z)l{m2Q1P_F`(&PRZ=zVyki;Qlpn9j{j z;(lT_wFn21L>`_`#Nl)51|wp0s%V^a4jDZnYJ;701Nc(2@G>*PiPsQ^$_pUXW4qN=kNlHo_e>)#)imE273_E;*<|4%H3BQn*9c8J(QI<#cG0ZVL6 zBE%AV82c2|7mjQCzoiI`Dted_T~lPP7E&pUPWpU%SyisoWzD+Hhd5;^Od|@_rGrij t$y6#k{id@zpw*_fyN5O= 2 else 2 # 使用第一个数据行(索引为2) + + # 确保行存在 + if data_row >= self.process_table.rowCount(): + logging.warning(f"选中的行 {data_row} 超出了表格范围") + return + + # 获取工程号 + order_id_item = self.process_table.item(data_row, 1) + if not order_id_item: + logging.warning("无法获取工程号") + return + + order_id = order_id_item.text().strip() + if not order_id: + logging.warning("工程号为空") + return + + # 获取托盘号 + tray_id = self.tray_edit.currentText() + + # 获取启用的检验配置 + enabled_configs = self.inspection_manager.get_enabled_configs() + + # 计算贴标列索引 - 贴标位置在检验列之后的第一列 + label_col = 2 + len(enabled_configs) + + # 生成贴标号(托盘号+序号) + label_value = f"{tray_id}-{self.init_seq[tray_id]}" + + # 断开单元格变更信号,避免程序自动写入时触发 + try: + self.process_table.cellChanged.disconnect(self.handle_inspection_cell_changed) + except: + logging.warning("断开单元格变更信号失败,可能信号未连接") + + # 创建并设置贴标单元格 + label_item = QTableWidgetItem(label_value) + label_item.setTextAlignment(Qt.AlignCenter) + + # 写入单元格 + self.process_table.setItem(data_row, label_col, label_item) + logging.info(f"已将贴标数据 {label_value} 写入表格单元格 [{data_row}, {label_col}]") + + # 保存贴标数据到数据库 + from dao.inspection_dao import InspectionDAO + inspection_dao = InspectionDAO() + + # 构建数据 + data = [{ + 'position': 11, # 贴标位置是11 + 'config_id': 11, + 'value': label_value, + 'status': 'pass', + 'remark': '', + 'tray_id': tray_id + }] + + # 保存到数据库 + inspection_dao.save_inspection_data(order_id, data) + + # 调用加载到包装记录的方法 + self.load_finished_record_to_package_record(order_id, tray_id) + logging.info(f"贴标完成,已将工程号 {order_id} 的记录加载到包装记录") + + # 删除当前处理的行 + self.process_table.removeRow(data_row) + logging.info(f"已删除处理完成的行 {data_row}") + + # 重新连接单元格变更信号 + self.process_table.cellChanged.connect(self.handle_inspection_cell_changed) + + # 更新托盘号对应的序号 + self.init_seq[tray_id] += 1 + except Exception as e: + logging.error(f"处理贴标完成信号失败: {str(e)}") + # 确保信号重新连接 + try: + self.process_table.cellChanged.connect(self.handle_inspection_cell_changed) + except: + pass @Slot(bool, str) def handle_modbus_status(self, is_connected, message): @@ -1550,15 +1598,29 @@ class MainWindow(MainWindowUI): def handle_loading_feedback(self, status, desc): """处理上料信息反馈""" logging.info(f"[处理] 上料信息: {desc}") - # 在这里添加业务逻辑 - pass + + # 如果上料完成(status=2),显示状态信息 + if status == 2: + self.show_operation_status("上料完成", "input", desc) + QMessageBox.information(self, "上料操作", f"上料操作已完成: {desc}") + # 如果上料错误(status=3),显示错误信息 + elif status == 3: + self.show_operation_status("上料错误", "input", desc) + QMessageBox.warning(self, "上料操作", f"上料操作出错: {desc}") @Slot(int, str) def handle_unloading_feedback(self, status, desc): """处理下料信息反馈""" logging.info(f"[处理] 下料信息: {desc}") - # 在这里添加业务逻辑 - pass + + # 如果下料完成(status=2),显示状态信息 + if status == 2: + self.show_operation_status("下料完成", "output", desc) + QMessageBox.information(self, "下料操作", f"下料操作已完成: {desc}") + # 如果下料错误(status=3),显示错误信息 + elif status == 3: + self.show_operation_status("下料错误", "output", desc) + QMessageBox.warning(self, "下料操作", f"下料操作出错: {desc}") def _update_error_status(self): """更新故障状态显示"""