Files
StandardSence/StandardScene会话14交接摘要.md
T
2026-06-14 11:19:15 +08:00

12 KiB
Raw Blame History

StandardScene 插件化拆分 — 会话14 交接摘要

用途:供其他 AI 会话快速读取上下文,继续推进 StandardScene 大改或 SimpleLite 内核改造。
工作目录E:\Work\Core\Simple-FR\StandardSence
主交付物StandardScene拆分计划.mdv2,已落盘)
上游设计E:\Work\Core\Simple-FR\配置向导与导航场景插件化设计.md(第 5 节 StandardScene 拆分、第 11.3 节 Phase C
新宿主 API 文档E:\Work\Core\Simple-FR\Simple\SimpleLite\Docs\MIGU-API.md
整理时间2026-06-09


1. 本会话做了什么

阶段 内容 状态
启动 用户要求用 wuxianChat 建立「会话14」 曾尝试 MCP,一度因执行后端不可用失败
精读代码 StandardSence 约 110 个 .cs 做逐模块走查(车型、Mission、设备、WebApi、VDA5050 等) 完成
产出 v1 计划 写入 StandardScene拆分计划.md:目录规划、功能归属矩阵、抽离清单、技术难点、分阶段路线 完成
用户评审反馈 宿主改 SimpleLite、net8.0、设备独立 dll+热插拔、删除 FactoryTest/松灵、WebApi 暂留后期废弃 已纳入
阅读 SimpleLite 确认 SimpleLite.csproj = net8.0 / CycleGUI / EmbedIO;阅读 MIGU-API 做 WebApi 迁移索引 完成
产出 v2 计划 全文更新 StandardScene拆分计划.md 完成
代码改动 (本会话仅分析与文档,未改业务代码)

2. 用户原始诉求(按时间)

2.1 第一轮

整个仓库需要大改。参考 配置向导与导航场景插件化设计.md 中关于 StandardScene 的「导航场景插件化」部分;精细化读当前代码,抽离标准功能,做好仓库目录规划与功能规划,先把 plan 做出来到 StandardScene 本地 md 文件。

2.2 第二轮(评审反馈,已写入 v2)

  1. 设备驱动需要独立 dll,并且支持热卸载和加载
  2. StandardScene 依赖 SimpleLite.dll,老 SimpleComposer 废弃另一个 AI 对话窗口正在改相关引用)。
  3. 目标框架统一 net8.0WinForms 场景需 net8.0-windows 的说明在评审中被修正:SimpleLite 本身是纯 net8.0 + CycleGUI,故 StandardScene 应去 WinForms)。
  4. FactoryTest、松灵残留不纳入 Core直接删除
  5. WebApi.cs 是针对老平台的 Nancy 接口:整理后暂时保留在 Core,后期废弃,改用 SimpleLite 接口能力(MIGU-API.md);此版本先保留

2.3 第三轮

把以上会话整理成 md 文件,分享给另一个会话读取。
→ 即本文档。


3. 核心结论(另一会话必须知道的)

3.1 架构修正:导航 ≠ 车型

上游设计隐含「按车型/导航整包切 dll」,与代码事实不符

  • 导航由 轨道/站点 fields + TrackCoder 决定,与车型正交
  • 例:Kiva 同一类上同时挂 磁导航 coder二维码 coder激光避障 coder(非 SLAM 定位)。
  • 正确拆法StandardScene.Core 保留车型本体 + 任务/充电/互锁等;导航能力抽到 Magnetic / QrCode / Laser 等 dll,以可插拔 coder 形式挂载。

3.2 激光:避障 vs 导航定位

能力 代表 归属
激光避障 LidarAreaSwitchLidarArea、各车型通用 Core
激光 SLAM 定位/地图 LidarMapgetLidarMap、拉 127.0.0.1:4321 Laser dll

3.3 三个正交维度

  1. 导航:磁 / 二维码 / 激光(SLAM
  2. 车型:Kiva、叉车、多舵轮顶升、机械臂、仿真车等
  3. 设备驱动:充电桩(FL/MuXing/PCB)、门(Modbus)、按钮盒(Leeg/Azowie

设备驱动必须 独立 Devices.* dll + 热插拔SimpleLite /plugins + collectible ALC)。

3.4 VDA5050

  • CarTypes/VDACar/ 是完整 MQTT 协议栈,建议独立 StandardScene.Protocol.VDA5050 dll。
  • 耦合点:ArmCar 引用 VDA5050SiteField,拆分时需解耦。

3.5 宿主与框架(v2 已定)

宿主 SimpleComposer.exe (.NET 4.8) SimpleLite (net8.0)
契约 RefSimpleCore.dll + Composer 程序集 SimpleCore + SimpleLite
UI WinForms(大量窗体) CycleGUI / 平台 Web(去 WinForms
对外 API WebApi.cs (Nancy 1.4.5) 暂留 Core;后期 EmbedIOMIGU-API

SimpleLite 事实(来自 SimpleLite.csproj):TargetFramework=net8.0OutputType=ExeUI 用 CycleGUIWebApi 用 EmbedIO,引用 SimpleCore

3.6 老 WebApi 处置

  • WebApi.cs ~123KB40+ 端点,与导航弱相关(导航相关主要是 QrMapgetLidarMap)。
  • 本版:整理为 WebApi.Core.cs 暂留 Core,标 [Obsolete] / deprecated。
  • 后期:按 StandardScene拆分计划.md §4.7 映射到 SimpleLite /api/sl/projection/*
  • 缺口:二维码地图下发、激光 SLAM 取图在 MIGU-API 暂无直接对应,迁移前需在 SimpleLite 或场景插件侧补接口。

3.7 必须删除的文件(不进 Core/Customer

文件 原因
FactoryTest.cs 产测专用
根目录 SongLingDeliveryViewer.Designer.cs 松灵客户残留,无主文件、未编入 csproj
根目录 MultiWheelLifterCar.cs CarTypes/MultiWheelLifterCar.cs 重名死文件,未编入 csproj
CarTypes/UselessCar.cs [CarType] 已注释,测试残留

4. 目标 dll 结构(摘要)

StandardScene.Core/                 net8.0 基座(alwaysLoad
StandardScene.Magnetic/             磁导航
StandardScene.QrCode/               二维码导航 + SyncQrMap
StandardScene.Laser/                SLAM / LidarMap
StandardScene.Protocol.VDA5050/     VDA5050 MQTT 栈
StandardScene.Devices.Charge/       充电桩驱动(热插拔)
StandardScene.Devices.Door/         门控驱动(热插拔)
StandardScene.Devices.ButtonBox/    按钮盒驱动(热插拔)

各可激活导航/设备 dll 配 scene.json,对接 SimpleLite POST /api/sl/projection/scenes/applyactive-scenes.json

详细文件级归属矩阵StandardScene拆分计划.md §4,勿在本摘要重复展开。


5. 可抽离的重复代码(C0 优先)

重复项 现状位置 目标
磁循迹器 Kiva.AllCarMagTrackCoder + MultiWheelLifterCar.MagTrackCoder 合并为 Magnetic.MagneticTrackCoder
newReset / newTrafficReset Kiva、Forklift、MultiWheelLifterCar 各一份 上提 StandardCarBase
SetDisplayInfo、远程急停/复位 HTTP 多车型雷同 Core 基类默认实现
GetCarStatus Commons 与 MultiWheelForkLifter 各一份 统一 Commons
避障/IO/纠偏 coder 模板 各车型粘贴 Core 通用 coder 模板集

6. 技术难点(需与内核会话协同)

6.1 TrackCoder 运行期注册(最关键)

  • 现状[TemplateTrackCoderSettings] / [ProgramTrackCoderSettings] 编译期硬绑定在车型类上。
  • 目标:导航 dll 加载时为车型注册 coder,卸载时移除。
  • 方案:优先在 SimpleCore 增加 coder 注册表;导航 dll 在 INavigationProfile.OnActivate 注册。
  • 兜底:Core 暂保留全量 coder,导航 dll 只承载 API/地图/清单(保证不回归)。

6.2 net4.8 → net8.0 + 去 WinForms

  • 引用从 SimpleComposer.exe 切到 SimpleLite / SimpleCore
  • 命名空间 SimpleComposer.RCSSimpleLite.RCS 等(另一会话进行中)。
  • 所有 WinForms 窗体迁 CycleGUI 或平台 WebMessageBox 改 CycleGUI 弹窗。
  • 涉及窗体:DeliveryViewerLoopViewerTrafficInterlockViewerVehicleMonitor、各 Charge/*FormDoorMonitorButtonBoxManagerVDACar/TextViewer 等。

6.3 热插拔清理

设备/导航 dll 卸载前须 OnDeactivate:清理 coder 注册、MQTT/TCP 连接、全局回调;配合 collectible ALC,确保无存活 Car/Mission 实例。


7. 分阶段实施(当前均未启动代码)

阶段 内容 状态
C0 删除残留 + 去重沉淀 + 命名空间收敛 + 与 SimpleCore 内核对齐 待启动
C1 新建 StandardScene.Core(net8.0),换宿主,去 WinForms,整理 WebApi.Core
C2 Magnetic / QrCode / Laser 三导航 dll
C3 Devices.Charge / Door / ButtonBox(热插拔)
C4 Protocol.VDA5050
C5 联调 + WebApi 迁 SimpleLite + 文档收尾

8. 待确认项(评审未拍板)

  1. SimpleCore 是否提供 TrackCoder 运行期注册 API?(决定 C2 用注册表还是兜底方案)
  2. UI 迁移节奏:一次性迁 CycleGUI,还是按 dll 分批;哪些仅保留平台 Web?
  3. VDA5050 是否确认独立 dll?(计划推荐独立)
  4. 二维码地图下发 / 激光 SLAM 取图 在 SimpleLite 侧由谁补接口、何时补?
  5. 是否存在车型仅支持单一导航的硬约束?

9. 跨会话分工(重要)

会话/方向 负责内容 与本计划关系
本会话(会话14 StandardScene 代码精读 + 拆分计划 v1/v2 主文档已落盘
另一 AI 会话(用户提及) SimpleLite / SimpleCore 引用改造、SimpleComposerSimpleLite 命名空间与程序集引用 StandardScene C1 依赖其进度
平台 / 配置向导 WizardControllerdata/config-deployment.json 通过 /scenes/apply 驱动插件加载

协作接口建议

  • StandardScene 侧等待:SimpleCore 的 coder 注册表插件生命周期OnActivate/OnDeactivate)、Collectible ALC 约定。
  • 内核侧等待:StandardScene 的 scene.json 清单NavKind 枚举、各 dll 的 provides 字段(见拆分计划 §9)。

10. 关键文件索引

路径 说明
E:\Work\Core\Simple-FR\StandardSence\StandardScene拆分计划.md 主计划(v2,含归属矩阵、§4.7 WebApi 迁移表、分阶段、风险
E:\Work\Core\Simple-FR\StandardSence\StandardScene会话14交接摘要.md 本文档,会话级交接
E:\Work\Core\Simple-FR\配置向导与导航场景插件化设计.md 上游框架设计
E:\Work\Core\Simple-FR\Simple\SimpleLite\Docs\MIGU-API.md SimpleLite 新 APIWebApi 迁移目标)
E:\Work\Core\Simple-FR\Simple\SimpleLite\SimpleLite.csproj 宿主:net8.0 / CycleGUI / EmbedIO
E:\Work\Core\Simple-FR\StandardSence\StandardScene.csproj 现状:net4.8 单体插件
E:\Work\Core\Simple-FR\StandardSence\Commons.cs 插件契约、CustomOperationsBeforeLoadingNoReflectionApi
E:\Work\Core\Simple-FR\StandardSence\WebApi.cs 老 Nancy API(待 deprecated
E:\Work\Core\Simple-FR\StandardSence\CarTypes\Kiva.cs 导航与车型耦合的典型样本
E:\Work\Core\Simple-FR\StandardSence\CarTypes\BasicFields.cs TagValue 等轨道/站点字段定义

11. 给下一会话的推荐起手式

若继续 StandardScene 实施

  1. 先读 StandardScene拆分计划.md §0(TL;DR)和 §4(归属矩阵)。
  2. C0 开始:删除 §3.7 所列文件;合并磁循迹器;提取 StandardCarBaseAMRScene1 命名空间收敛。
  3. SimpleLite 改造会话对齐:引用是否已可编译、coder 注册表 API 是否就绪。
  4. 不要在未确认前大规模改 WebApi 或 WinForms——C1 才系统性处理。

若继续 SimpleLite / SimpleCore 改造

  1. 优先落实 TrackCoder 运行期注册插件 OnActivate/OnDeactivate/plugins 热卸载 与 StandardScene 计划 §7 对齐。
  2. 评估 MIGU-API 是否需补 QrMapgetLidarMap 等价端点。
  3. 确认 SimpleComposer.RCSSimpleLite.RCS 迁移范围,避免 StandardScene 引用断裂。

12. 变更记录

版本 日期 说明
v1 2026-06-09 初版拆分计划(代码精读结论)
v2 2026-06-09 纳入 SimpleLite/net8.0/去 WinForms、设备热插拔、删除项、WebApi 暂留+迁移索引
交接摘要 2026-06-09 本会话整理,供跨会话阅读

本文档为会话级摘要;实施细节、完整类级归属与 WebApi 端点映射以 StandardScene拆分计划.md 为准。