Files
FT546-WCS/javaTest

FT546 WCS 中心调度与交通管制 Demo

这是一个独立的 Java 8 Maven Demo。它保留 FT546 WCS 的 LEGACY 调度模拟,并旁路提供 P0-B1 离线 SHADOW 交通决策内核。

安全边界

  • 仅使用内存车辆、任务、队列和地图。
  • 不启动 Spring,不连接 SQL Server、PLC 或 WMS。
  • 不发送真实设备命令。
  • 不修改生产 ruoyi-* 模块。
  • SHADOW 仅在离线内存中计算、记录和回放,写端口会直接拒绝调用。
  • 不启用现场 SHADOW、HIL、LIMITED_ACTIVE、ACTIVE 或 PRODUCTION。
  • 不把离线模拟结果作为现场证据。

已覆盖行为

  • 每个调度周期只执行一次业务任务准入。
  • 在线、自动、空闲、允许下发且电量大于 30 的车辆才可参与分配。
  • 同层、楼层差、Y 距离、X 距离、车辆编号的稳定选车规则。
  • 其他车辆剩余路径和离线车辆当前位置锁定。
  • 同通道阻挡、高优先级避让任务和避让去重。
  • 模拟协议失败、下一周期重试。
  • 队列 0/1 → 1/3 → 1/4 状态流转、完成归档和占用释放。
  • 无路可达时返回 HOLD,而不是抛出空指针。

P0-B1 离线 SHADOW 覆盖

  • 带版本、区域确认和基础地图校验和的不可变交通地图。
  • NODE、规范化无向 EDGE 和显式 CONFLICT 资源及容量。
  • SOFT/COMMIT_GUARD/HARD/UNKNOWN_HARD/RELEASED 资源保护契约。
  • 区段 Prepare/Commit 状态机及非法跳转拒绝。
  • 带 plcBootId/heartbeatSeq/snapshotSeq 的不可变复合快照。
  • 陈旧、序号倒退、PLC 重启、失联和人工模式的 fail-closed 检查。
  • 确定性 GRANT/HOLD/YIELD、等待图环拒绝及安全让行点门禁。
  • 匹配反馈逐步释放;重复、跳点、版本错配和 ACK 未知不释放。
  • SHADOW PLC、业务状态和权威预约三类禁写端口。
  • JSON 黄金决策事件、SHA-256 输入哈希和离线回放。
  • 固定种子 546001 至 546010 的容量、无环和确定性不变量回归。
  • shadow-simulation-60.json 提供 60 条独立模拟数据,覆盖 12 类资源、决策、快照和反馈场景;每条数据由参数化测试独立计数。
  • shadow/history 保存从 FT546-wcs.dbo.wcs_srgv_queue_finish 只读抽取的 240 条真实队列历史样本,并独立保存 dbo.wcs_srgv_map 的 2,552 行完整网格快照;任务历史路径不用于构建地图。
  • 真实历史数据覆盖车辆 1/2/3 和任务类型 1/2/3;数据库全量扫描口径为 17,136 条,其中 11,943 条带有非空路径。
  • 历史回放使用 [create_date, finish_date) 推导潜在并发窗口;数据库“已完成”事实与当前 SHADOW 的 GRANT/HOLD/INSUFFICIENT_DATA 推演结果分栏记录。

com.ft546.wcs.demo 是 LEGACY 演示;新增能力位于 com.ft546.wcs.shadow,交通区段状态不会写入 LEGACY 业务队列。

运行测试

mvn clean test

测试必须由 Maven Surefire 实际发现并执行;验收标准为测试数大于 0、Failures 为 0、Errors 为 0。

真实历史专项测试:

mvn -Dtest=HistoricalQueueDatabaseReplayTest test

生成真实历史离线回放证据:

mvn compile exec:java \
  -Dexec.mainClass=com.ft546.wcs.shadow.history.HistoricalReplayApplication \
  -Dexec.args="outputs/wcs-shadow-history-replay-local"

输出包括 summary.json、replay-results.csv、data-quality-issues.csv 和 manifest.sha256。报告保留数据库原始业务编号,方便回查。

这些结果是“真实历史队列离线回放”,不是现场 SHADOW 验收。历史队列表没有保存 当时每一轮 PLC 快照、资源账本或 LEGACY 决策,因此不能把最终完成状态当作算法正确率。

运行真实历史负载全链路调度仿真

240 条历史记录按 create_date 生成到达事件,默认按 100x 加速。调度中心重新选车和 规划路径,经过 SHADOW 交通裁决、模拟 PLC/ACK、逐节点移动、资源释放、完成归档和 幂等 WMS 回调。历史 agv_id/path_info/finish_date/完成状态 仅用于对照。

mvn compile exec:java \
  -Dexec.mainClass=com.ft546.wcs.shadow.history.simulation.HistoricalDispatchSimulationApplication \
  -Dexec.args="outputs/wcs-history-driven-center-dispatch-local 100"

第二个参数只允许 10 或 100。Java 原始证据包括 summary.json、task-results.csv、 tick-events.csv、invariant-results.json 和 manifest.sha256,回答完成/等待/失败、 每车完成数、车辆和路径差异、资源安全、平均/P95/P99、HOLD/重试原因、历史耗时差异、 归档和 WMS 幂等情况。正式验收证据目录另包含由这些原始证据生成的 readable-report.xlsx,并纳入 manifest.sha256。 每个已完成任务会注入一次重复 WMS 投递,用于验证接收端幂等;报告分别记录 wmsDuplicateDeliveryAttempts 和 wmsDuplicateBusinessEffects,验收要求后者为 0。

这是“真实历史负载驱动纯内存仿真”,不是现场 SHADOW、HIL 或 ACTIVE 验收。 历史表不含独立的仿真起始时刻车辆位置/状态快照,因此车辆 1/2/3 分别从完整地图中的 固定站点 010701/010702/010703 初始化;历史 agv_id 仅用于对照,不参与初始位置或选车约束。

运行控制台模拟

mvn exec:java

输出事件包括:

  • CYCLE:调度周期开始
  • ASSIGN:任务选车和裁决理由
  • PATH:规划成功的路径
  • AVOID:创建避让队列
  • HOLD:交通或协议原因导致等待
  • SEND:模拟协议下发成功
  • MOVE:模拟车辆推进
  • COMPLETE:队列完成并归档
  • SUMMARY:最终周期、活动队列、历史和协议尝试次数
  • SHADOW-SUMMARY:离线 SHADOW 的 GRANT/HOLD 数量和零写入声明

未覆盖的生产门槛

本项目不包含 SQL Server 事务与 Outbox、真实 PLC Prepare/Commit、CRC 与寄存器布局、提升机物理信号、深位真实执行、硬件在环、现场 SHADOW 样本或区域 ACTIVE 回退。相关能力仍以 docs/WCS算法优化 的外部签字和验收门禁为准。