修改运行时显示

This commit is contained in:
ywb
2026-05-29 13:37:02 +08:00
parent a556a0858b
commit f64068475f
6 changed files with 229 additions and 37 deletions
+61 -1
View File
@@ -219,6 +219,27 @@ class MissionExecutorV3:
"photos_back": 0,
})
# 初始化点位状态和机器状态(实时推送给前端)
self.report["point_status"] = {}
for _pr in range(rows + 1):
for _c in range(cols):
pk = f"{_pr}_{_c}"
has_f = _pr < rows and MissionExecutorV3._has_machine(grid, _pr, _c)
has_b = _pr > 0 and MissionExecutorV3._has_machine(grid, _pr - 1, _c)
self.report["point_status"][pk] = "pending" if (has_f or has_b) else "skipped"
self.report["machine_status"] = {}
for _r in range(rows):
for _c in range(cols):
if MissionExecutorV3._has_machine(grid, _r, _c):
self.report["machine_status"][f"{_r}_{_c}"] = {
"has_machine": True,
"qr": "pending", "qr_val": None,
"front": "pending", "front_cnt": 0,
"back": "pending", "back_cnt": 0,
"status": "pending", "step": "等待",
}
self._log(f"📍 点位蛇形路径: {len(path)} 个点位, {total_machines} 台机器")
# 任务步骤控制开关
@@ -300,12 +321,19 @@ class MissionExecutorV3:
except Exception as e:
self._log(f" ⚠️ 机械臂初始化失败: {e}")
# 更新点位状态:开始导航
pk = f"{pr}_{c}"
if pk in self.report.get("point_status", {}):
self.report["point_status"][pk] = "active"
# 导航到该点位的坐标
nav_ok = False
if opt_agv_move:
# 找该点位的任意有效坐标(正面/背面坐标相同)
pos = MissionExecutorV3._find_any_position(positions, pr, c)
if pos and MissionExecutorV3._has_coords(pos):
if not self._navigate(pos, f"点位({pr},{c})"):
nav_ok = self._navigate(pos, f"点位({pr},{c})")
if not nav_ok:
self._log(f"⚠️ 导航失败,尝试继续")
choice = self._wait_error(f"点位({pr},{c})导航失败")
if choice == "abort":
@@ -314,11 +342,21 @@ class MissionExecutorV3:
self._log(f"⚠️ 点位({pr},{c})无有效坐标")
else:
self._log(" ⏭️ 跳过AGV移动")
nav_ok = True # 无移动视为到达
# 更新点位状态:到达
if pk in self.report.get("point_status", {}):
self.report["point_status"][pk] = "done"
# --- 正面操作(机器 pr,c 的正面) ---
qr_value = None
if has_front and not self._stop.is_set():
self._wait_pause()
# 更新机器状态:正面开始
mk = f"{pr}_{c}"
if mk in self.report.get("machine_status", {}):
self.report["machine_status"][mk]["status"] = "active"
self.report["machine_status"][mk]["step"] = "正面扫码"
if opt_qr_scan:
qr_value = self._scan_qr_with_poses(qr_configs)
if self._stop.is_set():
@@ -326,6 +364,12 @@ class MissionExecutorV3:
else:
self._log(" ⏭️ 跳过二维码识别(正面)")
qr_cache[(pr, c)] = qr_value
# 更新机器状态:扫码完成
mk2 = f"{pr}_{c}"
if mk2 in self.report.get("machine_status", {}):
self.report["machine_status"][mk2]["qr"] = "done" if qr_value else "skipped"
self.report["machine_status"][mk2]["qr_val"] = qr_value
self.report["machine_status"][mk2]["step"] = "正面拍照"
task = self._get_task(pr, c)
if task and qr_value:
@@ -345,11 +389,20 @@ class MissionExecutorV3:
else:
self._log(" ⏭️ 跳过正面拍照")
completed_actions += 1
# 更新机器状态:正面拍照完成
mk3 = f"{pr}_{c}"
if mk3 in self.report.get("machine_status", {}):
self.report["machine_status"][mk3]["front"] = "done" if opt_front_photo else "skipped"
self.report["machine_status"][mk3]["front_cnt"] = self.report["machine_status"][mk3].get("front_cnt", 0) + 1
# --- 背面操作(机器 pr-1,c 的背面) ---
if has_back and not self._stop.is_set():
self._wait_pause()
back_qr = qr_cache.get((pr - 1, c), "unknown")
# 更新机器状态:背面开始
mk_b = f"{pr-1}_{c}"
if mk_b in self.report.get("machine_status", {}):
self.report["machine_status"][mk_b]["step"] = "背面拍照"
task = self._get_task(pr - 1, c)
if task:
@@ -367,6 +420,13 @@ class MissionExecutorV3:
else:
self._log(" ⏭️ 跳过背面拍照")
completed_actions += 1
# 更新机器状态:背面完成
mk_b2 = f"{pr-1}_{c}"
if mk_b2 in self.report.get("machine_status", {}):
self.report["machine_status"][mk_b2]["back"] = "done" if opt_back_photo else "skipped"
self.report["machine_status"][mk_b2]["back_cnt"] = self.report["machine_status"][mk_b2].get("back_cnt", 0) + 1
self.report["machine_status"][mk_b2]["status"] = "completed"
self.report["machine_status"][mk_b2]["step"] = "完成"
if task:
task["status"] = "completed"
task["step"] = "完成"