feat: 修改电源自动启动设置为false,优化主窗口输入框处理逻辑,调整重量计算精度及警告提示信息

This commit is contained in:
zhu-mengmeng 2025-07-22 11:27:03 +08:00
parent cbdc25545e
commit b61f2cc70b
3 changed files with 19 additions and 32 deletions

View File

@ -120,7 +120,7 @@
} }
}, },
"electricity": { "electricity": {
"auto_start": true, "auto_start": false,
"interval_minutes": 30 "interval_minutes": 30
} }
} }

Binary file not shown.

View File

@ -657,8 +657,8 @@ class MainWindow(MainWindowUI):
# 如果用户确认,则执行上料操作 # 如果用户确认,则执行上料操作
if result == QDialog.Accepted: if result == QDialog.Accepted:
# 从对话框中获取订单号和托盘号,并更新到主窗口 # 从对话框中获取订单号和托盘号,并更新到主窗口
order_code = dialog.order_input.text() order_code = dialog.order_input.text().strip()
tray_code = dialog.tray_input.text() tray_code = dialog.tray_input.text().strip()
self._current_order_code = order_code self._current_order_code = order_code
self.tray_edit.setCurrentText(tray_code) self.tray_edit.setCurrentText(tray_code)
@ -2041,7 +2041,7 @@ class MainWindow(MainWindowUI):
Returns: Returns:
float: 重量千克 float: 重量千克
""" """
return round(weight_in_g / 1000.0, 3) # 保留3位小数 return round(weight_in_g / 1000.0, 2) # 保留2位小数
@Slot(int) @Slot(int)
def handle_weight_data(self, weight_in_g): def handle_weight_data(self, weight_in_g):
@ -2136,48 +2136,23 @@ class MainWindow(MainWindowUI):
max_retries: 最大重试次数 max_retries: 最大重试次数
""" """
retry_count = 0 retry_count = 0
success = False
last_error = None last_error = None
modbus = ModbusUtils() modbus = ModbusUtils()
client = None client = None
try: try:
# 获取Modbus客户端现在使用连接池不会每次都创建新连接 # 获取Modbus客户端现在使用连接池不会每次都创建新连接
client = modbus.get_client() client = modbus.get_client()
if not client: if not client:
logging.error("无法获取Modbus客户端连接") logging.error("无法获取Modbus客户端连接")
return return
# 这里不再写入D10=1全部交由_process_stable_weight处理
# 重试机制写入寄存器
while retry_count < max_retries and not success:
try:
# 称重稳定后,给寄存器 D10 为 1 表示已经称重完成
success = modbus.write_register_until_success(client, 10, 1)
if success:
logging.info(f"成功写入D10寄存器值为1表示称重完成")
break
except Exception as e:
last_error = e
retry_count += 1
if retry_count < max_retries:
delay = 0.5 * (2 ** retry_count) # 指数退避
logging.warning(f"写入D10寄存器失败尝试第{retry_count}次重试,等待{delay:.1f}秒: {str(e)}")
time.sleep(delay)
if not success:
logging.error(f"写入D10寄存器失败已尝试{max_retries}次: {str(last_error)}")
return
# 处理稳定重量
self._process_stable_weight(weight_kg) self._process_stable_weight(weight_kg)
# 调用打印方法 # 调用打印方法
self._print_weight_label(weight_kg) self._print_weight_label(weight_kg)
# 设置已处理标记和上次处理的重量 # 设置已处理标记和上次处理的重量
self._weight_processed = True self._weight_processed = True
self._last_processed_weight = weight_kg self._last_processed_weight = weight_kg
logging.info(f"已标记重量 {weight_kg}kg 为已处理") logging.info(f"已标记重量 {weight_kg}kg 为已处理")
except Exception as e: except Exception as e:
logging.error(f"处理稳定重量时发生错误: {str(e)}") logging.error(f"处理稳定重量时发生错误: {str(e)}")
finally: finally:
@ -2280,7 +2255,7 @@ class MainWindow(MainWindowUI):
self.warning_msg = QMessageBox(self) self.warning_msg = QMessageBox(self)
self.warning_msg.setIcon(QMessageBox.Warning) self.warning_msg.setIcon(QMessageBox.Warning)
self.warning_msg.setWindowTitle('重量超出范围') self.warning_msg.setWindowTitle('重量超出范围')
self.warning_msg.setText(f"称重值 {net_weight_kg:.3f}kg 不在轴重要求范围内 ({min_weight:.1f} - {max_weight:.1f}kg)") self.warning_msg.setText(f"称重值 {net_weight_kg:.2f}kg 不在轴重要求范围内 ({min_weight:.1f} - {max_weight:.1f}kg)")
self.warning_msg.setStandardButtons(QMessageBox.NoButton) self.warning_msg.setStandardButtons(QMessageBox.NoButton)
self.warning_msg.setModal(False) # 确保非模态 self.warning_msg.setModal(False) # 确保非模态
self.warning_msg.setWindowFlags(self.warning_msg.windowFlags() | Qt.WindowStaysOnTopHint) # 置顶显示 self.warning_msg.setWindowFlags(self.warning_msg.windowFlags() | Qt.WindowStaysOnTopHint) # 置顶显示
@ -2314,6 +2289,12 @@ class MainWindow(MainWindowUI):
return return
else: else:
logging.info(f"称重值 {weight_kg:.3f}kg 在轴重要求范围内 ({min_weight:.1f} - {max_weight:.1f}kg)") logging.info(f"称重值 {weight_kg:.3f}kg 在轴重要求范围内 ({min_weight:.1f} - {max_weight:.1f}kg)")
# 只有在范围内才写入D10=1
modbus = ModbusUtils()
client = modbus.get_client()
modbus.write_register_until_success(client, 10, 1)
modbus.close_client(client)
logging.info("已写入D10=1通知PLC称重合格")
else: else:
logging.debug(f"轴重要求格式不正确: '{zzyq_value}'") logging.debug(f"轴重要求格式不正确: '{zzyq_value}'")
else: else:
@ -2322,6 +2303,12 @@ class MainWindow(MainWindowUI):
logging.warning(f"解析轴重要求失败,跳过范围检查: {str(e)}") logging.warning(f"解析轴重要求失败,跳过范围检查: {str(e)}")
else: else:
logging.debug("轴重要求字段不存在或为空,跳过范围检查") logging.debug("轴重要求字段不存在或为空,跳过范围检查")
# 没有轴重要求时直接写入D10=1
modbus = ModbusUtils()
client = modbus.get_client()
modbus.write_register_until_success(client, 10, 1)
modbus.close_client(client)
logging.info("无轴重要求已写入D10=1通知PLC称重合格")
# 暂时断开信号连接避免触发cellChanged信号 # 暂时断开信号连接避免触发cellChanged信号
try: try:
@ -3761,7 +3748,7 @@ class MainWindow(MainWindowUI):
self.update_info_table(order_info) self.update_info_table(order_info)
# 订单号输入框回显 mo 字段 # 订单号输入框回显 mo 字段
if order_info: if order_info:
self.order_no_input.setText(order_info.get('mo', '')) self.order_no_input.setText(order_info.get('mo', '').strip())
def on_report(self): def on_report(self):
"""报表按钮点击处理""" """报表按钮点击处理"""