9.4 KiB
WCS 完整地图中心调度历史任务仿真设计
1. 目标与强制结果
把固化的 240 条 dbo.wcs_srgv_queue_finish 历史记录只作为任务负载输入,
由调度中心基于独立完整地图重新选车、重新规划路径并执行全生命周期。
最终真实负载验收必须同时满足:
- 输入 240 条,完成 240 条,等待 0 条,失败 0 条。
- 每条任务均实际经历到达、排队、选车、寻路、资源裁决、PLC/ACK、逐节点移动、 逐段释放、归档和 WMS 完成回调。
- 节点双占、资源超容量、对向换边、重复归档和重复 WMS 业务效果均为 0。
- 不能读取历史完成状态直接完成任务,不能把历史
path_info作为地图或规划结果。
这是纯内存确定性仿真,不连接真实 PLC/WMS,不修改 ruoyi-* 生产模块,不替代
SHADOW、HIL 或 ACTIVE 现场验收。
2. 方案选择
方案 A:继续从历史 path_info 生成拓扑
拒绝。path_info 是调度中心规划后的历史输出,用它生成地图会形成循环验证,
无法证明新算法独立规划。
方案 B:启动生产 Spring 服务并连接实时数据库
不采用。它更接近现场,但受实时车辆、队列、设备和数据库状态影响,无法生成可重复的 自动化验收证据,还会扩大测试对生产模块的依赖。
方案 C:完整权威地图快照驱动纯内存中心调度
采用。只读固化 dbo.wcs_srgv_map 的完整非敏感投影,按生产地图规则构建网格;
任务与地图完全独立,调度结果可重复,同时仍复用当前中心调度、交通资源账本和协议模拟。
3. 权威输入
3.1 历史任务快照
沿用已经 SHA-256 校验的 240 条任务记录。字段口径如下:
task_no/guid/task_type/start_site/end_site/priority/create_date:真实业务输入。agv_id:历史车辆对照,不参与选车约束。path_info:历史规划结果对照,不参与地图、可达性、寻路或交通裁决。finish_date:历史耗时对照,不控制仿真结束。- 历史完成状态:只说明该任务曾完成,不产生仿真状态迁移。
3.2 完整地图快照
新增完整 dbo.wcs_srgv_map 快照,至少保留:
site_id, x, y, z, value, axy, warehouse, space_area
只读核验基线:
- 全表 2,552 个网格单元,覆盖
x=1..29、y=1..11、z=1..8。 value IN (1,2)的可通行单元 1,175 个,且都有唯一非空site_id。- 240 条样本所在 1~3 层共有 445 个可通行站点。
- 完整地图及 manifest 均计算 SHA-256,测试运行不再连接数据库。
快照不包含连接串、设备地址、凭据或其他敏感字段。
4. 地图编译与端点解析
地图编译遵循生产 RoadCacheServiceImpl 与 PathFinder 的网格语义:
- 仅
value=1/2的单元可通行。 - 同一层中曼哈顿距离为 1 的可通行单元建立无向边。
- 每个节点和边的交通容量为 1。
- 站点坐标直接来自地图快照,不从任务历史路径推断。
- 地图编译后必须校验站点 ID 唯一、坐标唯一、边端点存在和每层连通分量。
业务端点按生产规则解析:
- 普通站点直接使用
wcs_srgv_map.site_id。 tsj映射到任务所在层的07050{floor}。- 优先使用起点地图层作为任务物理层;历史
the_floor只在业务别名解析时使用并交叉校验。 - 解析后的物理起终点必须存在且位于同一可达连通分量,否则真实负载验收立即失败,
不降级使用
path_info。
只读验证已经证明上述规则下 240 条任务的起终点均存在,且不读取 path_info 时
240 对起终点全部可达。
5. 中心调度数据流
create_date 到达事件
-> 饥饿保护优先队列
-> 健康空闲车辆候选
-> 中心选车
-> 完整地图重新规划 vehicle->source->target
-> 路线/走廊预约
-> SHADOW 下一段资源裁决
-> 模拟 PLC 发送与 ACK
-> 车辆移动一个节点
-> 释放旧节点和已通过边
-> 到达后唯一归档
-> WMS 幂等完成回调
规划器必须在每次初始分配、故障恢复、协议重试耗尽和避让完成后重新计算路径。
报告保存新规划路径,并在任务结束后才与历史 path_info 比较。
6. 交通预约与确定性解锁
当前活锁的根因是:一个车辆的剩余路线被空闲车辆占用,其他任务又被整条路线反向冲突 门禁阻塞。新调度器采用以下规则:
6.1 路线预约
- 每个活动任务保存当前规划路径和剩余无向边集合。
- 路线重叠但方向一致时可以并行准入,具体移动仍由下一段资源账本串行化。
- 路线存在反向共享边时,按有效优先级、等待年龄、到达时间、任务 ID 决定唯一方向所有者。
- 方向所有者到达冲突区出口前不可被新任务反向抢占;释放出口后重新裁决。
6.2 阻塞车辆迁移
- 若方向所有者的剩余路径被空闲车辆当前位置占用,中心调度生成内部
CLEARANCE_MOVE,而不是让业务任务无限 HOLD。 - 清障目标必须是完整地图中的真实可通行节点,且不在方向所有者剩余路径、其他车辆位置 或已预约资源中。
- 目标按最短路径长度、非主干优先、站点 ID 稳定排序选择;迁移本身也经过规划、 SHADOW 裁决、PLC/ACK、逐节点移动和资源释放,严禁瞬移。
- 清障完成后原业务任务重新规划。内部迁移不计入 240 条业务任务完成数,但完整写入事件证据。
6.3 进展保证
- 每个冲突连通分量同时只有一个方向所有者。
- 连续 HOLD 达阈值时保留原到达时间和老化优先级,不把任务放回队尾。
- 无冲突任务可在其他地图区域继续并行。
- watchdog 监视“业务终态增加、车辆沿授权路线前进、清障迁移完成”三类有效进展; 重复 HOLD 和重复分配不算进展。
- 真实负载出现 watchdog 或 tick 上限即测试失败,不再作为可接受的 WAITING 报告。
7. 优先级与饥饿保护
- 排序键:有效优先级、
create_date、task_no、guid、稳定序号。 - 数值越小优先级越高。
- 每等待 30 仿真秒提升一级,有效优先级最低提升到 0。
- 清障迁移继承被保障业务任务的方向所有权,但不能改变业务任务自身优先级。
- 低优先级任务一旦成为方向所有者,必须获得至少一个可验证移动进展后才允许重新竞争。
8. 故障和恢复
模拟 PLC 发送失败、ACK 超时/丢失、断线、PLC 重启、低电量和车辆故障继续使用固定故障计划。
- 故障车辆停止接收新任务并释放未执行的下一段资源。
- 活动业务任务保留原到达时间后重新调度。
- 旧 boot ID 的 ACK 拒绝生效。
- 低电量或故障恢复后车辆重新进入候选池。
- 故障不能把真实负载任务转为 FAILED;达到重试阈值后必须换车或延后重试。
- 只有地图快照自身违反结构契约时才允许启动失败,不能把单条真实任务关闭来满足总数。
9. 归档与 WMS
- 只有车辆逐节点抵达物理终点才能完成业务任务。
- 每个任务 ID 只允许一条归档记录。
- 仿真主动对每个完成任务投递两次 WMS 完成通知,业务接收器只产生一次业务效果。
- 最终必须满足归档数 240、WMS 投递尝试 480、WMS 业务效果 240。
10. TDD 与验收测试
实现必须先添加并运行以下失败测试:
- 修改同一任务的历史
path_info不改变新规划路径。 - 删除
path_info后,只要业务输入和完整地图有效,任务仍能规划和完成。 - 完整地图按
value和坐标生成连边,不能使用历史相邻节点生成边。 tsj在 1~3 层正确映射到070501/070502/070503。- 三车走廊阻塞场景生成实际清障移动并最终完成,不出现换边或双占。
- 对向路线按优先级和老化确定方向所有者,低优先级最终通行。
- 240 条真实任务运行两次均得到完全相同结果。
最终自动验收断言:
inputCount == 240
completedCount == 240
waitingCount == 0
failedCount == 0
archiveCount == 240
wmsDeliveryAttempts == 480
wmsBusinessEffects == 240
deadlocks == 0
totalSafetyViolations == 0
此外,现有故障矩阵、60 条安全场景和全部 Maven 测试必须继续通过。
11. 报告与证据
生成新的独立证据目录,不覆盖旧运行:
outputs/wcs-history-driven-center-dispatch-<runId>/
summary.json
task-results.csv
tick-events.csv
invariant-results.json
readable-report.xlsx
manifest.sha256
报告必须新增:
- 地图快照行数、可通行节点数、地图 SHA 和规划算法版本。
path_infoUsedForPlanning=false。- 每条任务的业务端点、解析后物理端点、历史路径和中心新规划路径。
- 方向预约、清障任务、HOLD、重试和重新选车明细。
- 240/0/0 状态、每车完成数、耗时分位数和安全不变量。
首页继续标明:真实历史负载驱动纯内存仿真,不是现场 SHADOW/HIL/ACTIVE 验收。
12. 明确边界
本设计证明完整静态地图上的中心调度功能、确定性、故障恢复和资源安全;它不证明实时地图与 现场一致、真实 PLC 时序、SQL 事务、WMS 网络交付或生产吞吐能力。完整地图快照发生变化时, 必须生成新版本和新证据,不能沿用旧结论。