diff --git a/db/jtDB.db b/db/jtDB.db index b23c4db..8744e45 100644 Binary files a/db/jtDB.db and b/db/jtDB.db differ diff --git a/from pymodbus.py b/from pymodbus.py index 237b659..8ec234a 100644 --- a/from pymodbus.py +++ b/from pymodbus.py @@ -2,7 +2,7 @@ from pymodbus.client import ModbusTcpClient import time client = ModbusTcpClient('localhost', port=5020) client.connect() -client.write_registers(address=11, values=[14322]) +client.write_registers(address=11, values=[11322]) # client.write_registers(address=3, values=[0]) # time.sleep(2) # client.write_registers(address=0, values=[0]) @@ -15,7 +15,7 @@ client.write_registers(address=11, values=[14322]) # client.write_registers(address=2, values=[0]) # client.write_registers(address=13, values=[1]) # time.sleep(2) -client.write_registers(address=13, values=[1]) +client.write_registers(address=13, values=[0]) diff --git a/widgets/main_window.py b/widgets/main_window.py index 6ae64cf..87468ee 100644 --- a/widgets/main_window.py +++ b/widgets/main_window.py @@ -2204,6 +2204,66 @@ class MainWindow(MainWindowUI): logging.warning("工程号为空") return + # 检查轴重要求范围 + if "轴重要求" in self.info_values and self.info_values["轴重要求"] is not None: + try: + zzyq_value = self.info_values["轴重要求"].text().strip() + if zzyq_value and "-" in zzyq_value: + # 解析轴重要求范围,格式如 "12.5-13.5" + parts = zzyq_value.split("-") + if len(parts) == 2: + min_weight = float(parts[0].strip()) + max_weight = float(parts[1].strip()) + + # 检查称重值是否在范围内 + if weight_kg < min_weight or weight_kg > max_weight: + # 显示自动关闭的警告提示框 + self.warning_msg = QMessageBox(self) + self.warning_msg.setIcon(QMessageBox.Warning) + self.warning_msg.setWindowTitle('重量超出范围') + self.warning_msg.setText(f"称重值 {weight_kg:.3f}kg 不在轴重要求范围内 ({min_weight:.1f} - {max_weight:.1f}kg)") + self.warning_msg.setStandardButtons(QMessageBox.NoButton) + self.warning_msg.setModal(False) # 确保非模态 + self.warning_msg.setWindowFlags(self.warning_msg.windowFlags() | Qt.WindowStaysOnTopHint) # 置顶显示 + + # 使用 show 而非 exec_ 保持非阻塞 + self.warning_msg.show() + + # 强制关闭方法1:使用多种定时器策略 + def force_close_weight_warning(): + try: + if hasattr(self, 'warning_msg') and self.warning_msg: + if self.warning_msg.isVisible(): + self.warning_msg.close() + self.warning_msg.deleteLater() + logging.debug("重量警告弹框已强制关闭") + else: + logging.debug("重量警告弹框已不可见,跳过关闭") + except Exception as e: + logging.warning(f"强制关闭重量警告弹框时出错: {str(e)}") + finally: + # 清理引用 + if hasattr(self, 'warning_msg'): + delattr(self, 'warning_msg') + + # 使用多个定时器确保关闭 + QTimer.singleShot(5000, force_close_weight_warning) # 5秒后关闭 + QTimer.singleShot(6000, force_close_weight_warning) # 6秒后再次尝试 + + # 阻止继续执行,等待用户处理 + logging.warning(f"称重值 {weight_kg:.3f}kg 超出轴重要求范围,已阻止保存,等待用户处理") + return + else: + logging.info(f"称重值 {weight_kg:.3f}kg 在轴重要求范围内 ({min_weight:.1f} - {max_weight:.1f}kg)") + else: + logging.debug(f"轴重要求格式不正确: '{zzyq_value}'") + else: + logging.debug(f"轴重要求格式不正确或为空,跳过范围检查: '{zzyq_value}'") + except (ValueError, AttributeError) as e: + logging.warning(f"解析轴重要求失败,跳过范围检查: {str(e)}") + else: + logging.debug("轴重要求字段不存在或为空,跳过范围检查") + # 暂时断开信号连接,避免触发cellChanged信号 try: self.process_table.cellChanged.disconnect(self.handle_inspection_cell_changed) @@ -3216,18 +3276,42 @@ class MainWindow(MainWindowUI): self.set_inspection_value('xj', xj_config, final_value) logging.info(f"已将稳定的线径值 {final_value:.3f} 保存到工程号 {gc_note} (行 {data_row})") else: - reply = QMessageBox.question( - self, - '确认保存', - f"线径 {final_value:.3f} 不在公差范围内 ({bccd} - {tccd}),\n是否继续保存?", - QMessageBox.Yes | QMessageBox.No, - QMessageBox.No - ) - if reply == QMessageBox.Yes: - self.set_inspection_value('xj', xj_config, final_value) - logging.info(f"已将超出公差范围的线径值 {final_value:.3f} 保存到工程号 {gc_note} (行 {data_row})") - else: - logging.info(f"用户取消保存超出范围的线径值: {final_value:.3f}") + # 显示自动关闭的警告提示框 + self.diameter_warning_msg = QMessageBox(self) + self.diameter_warning_msg.setIcon(QMessageBox.Warning) + self.diameter_warning_msg.setWindowTitle('线径超出范围') + self.diameter_warning_msg.setText(f"线径 {final_value:.3f} 不在公差范围内 ({bccd} - {tccd})") + self.diameter_warning_msg.setStandardButtons(QMessageBox.NoButton) # 不显示按钮 + self.diameter_warning_msg.setModal(False) # 确保非模态 + self.diameter_warning_msg.setWindowFlags(self.diameter_warning_msg.windowFlags() | Qt.WindowStaysOnTopHint) # 置顶显示 + + # 显示提示框(非模态) + self.diameter_warning_msg.show() + + # 强制关闭方法:使用多种定时器策略 + def force_close_diameter_warning(): + try: + if hasattr(self, 'diameter_warning_msg') and self.diameter_warning_msg: + if self.diameter_warning_msg.isVisible(): + self.diameter_warning_msg.close() + self.diameter_warning_msg.deleteLater() + logging.debug("线径警告弹框已强制关闭") + else: + logging.debug("线径警告弹框已不可见,跳过关闭") + except Exception as e: + logging.warning(f"强制关闭线径警告弹框时出错: {str(e)}") + finally: + # 清理引用 + if hasattr(self, 'diameter_warning_msg'): + delattr(self, 'diameter_warning_msg') + + # 使用多个定时器确保关闭 + QTimer.singleShot(2000, force_close_diameter_warning) # 1秒后关闭 + QTimer.singleShot(3000, force_close_diameter_warning) # 2秒后再次尝试 + + # 阻止继续执行,等待用户处理 + logging.warning(f"线径值 {final_value:.3f} 超出公差范围,已阻止保存,等待用户处理") + return else: # 无公差范围,直接保存 self.set_inspection_value('xj', xj_config, final_value)