feat: 修改轴重和线径超出范围时的警告提示逻辑,添加自动关闭功能
This commit is contained in:
parent
7dbf1c1efc
commit
fa36263c61
BIN
db/jtDB.db
BIN
db/jtDB.db
Binary file not shown.
@ -2,7 +2,7 @@ from pymodbus.client import ModbusTcpClient
|
|||||||
import time
|
import time
|
||||||
client = ModbusTcpClient('localhost', port=5020)
|
client = ModbusTcpClient('localhost', port=5020)
|
||||||
client.connect()
|
client.connect()
|
||||||
client.write_registers(address=11, values=[14322])
|
client.write_registers(address=11, values=[11322])
|
||||||
# client.write_registers(address=3, values=[0])
|
# client.write_registers(address=3, values=[0])
|
||||||
# time.sleep(2)
|
# time.sleep(2)
|
||||||
# client.write_registers(address=0, values=[0])
|
# 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=2, values=[0])
|
||||||
# client.write_registers(address=13, values=[1])
|
# client.write_registers(address=13, values=[1])
|
||||||
# time.sleep(2)
|
# time.sleep(2)
|
||||||
client.write_registers(address=13, values=[1])
|
client.write_registers(address=13, values=[0])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2204,6 +2204,66 @@ class MainWindow(MainWindowUI):
|
|||||||
logging.warning("工程号为空")
|
logging.warning("工程号为空")
|
||||||
return
|
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信号
|
# 暂时断开信号连接,避免触发cellChanged信号
|
||||||
try:
|
try:
|
||||||
self.process_table.cellChanged.disconnect(self.handle_inspection_cell_changed)
|
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)
|
self.set_inspection_value('xj', xj_config, final_value)
|
||||||
logging.info(f"已将稳定的线径值 {final_value:.3f} 保存到工程号 {gc_note} (行 {data_row})")
|
logging.info(f"已将稳定的线径值 {final_value:.3f} 保存到工程号 {gc_note} (行 {data_row})")
|
||||||
else:
|
else:
|
||||||
reply = QMessageBox.question(
|
# 显示自动关闭的警告提示框
|
||||||
self,
|
self.diameter_warning_msg = QMessageBox(self)
|
||||||
'确认保存',
|
self.diameter_warning_msg.setIcon(QMessageBox.Warning)
|
||||||
f"线径 {final_value:.3f} 不在公差范围内 ({bccd} - {tccd}),\n是否继续保存?",
|
self.diameter_warning_msg.setWindowTitle('线径超出范围')
|
||||||
QMessageBox.Yes | QMessageBox.No,
|
self.diameter_warning_msg.setText(f"线径 {final_value:.3f} 不在公差范围内 ({bccd} - {tccd})")
|
||||||
QMessageBox.No
|
self.diameter_warning_msg.setStandardButtons(QMessageBox.NoButton) # 不显示按钮
|
||||||
)
|
self.diameter_warning_msg.setModal(False) # 确保非模态
|
||||||
if reply == QMessageBox.Yes:
|
self.diameter_warning_msg.setWindowFlags(self.diameter_warning_msg.windowFlags() | Qt.WindowStaysOnTopHint) # 置顶显示
|
||||||
self.set_inspection_value('xj', xj_config, final_value)
|
|
||||||
logging.info(f"已将超出公差范围的线径值 {final_value:.3f} 保存到工程号 {gc_note} (行 {data_row})")
|
# 显示提示框(非模态)
|
||||||
|
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:
|
else:
|
||||||
logging.info(f"用户取消保存超出范围的线径值: {final_value:.3f}")
|
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:
|
else:
|
||||||
# 无公差范围,直接保存
|
# 无公差范围,直接保存
|
||||||
self.set_inspection_value('xj', xj_config, final_value)
|
self.set_inspection_value('xj', xj_config, final_value)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user