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

242 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# StandardScene 插件化拆分 — 会话14 交接摘要
> **用途**:供其他 AI 会话快速读取上下文,继续推进 StandardScene 大改或 SimpleLite 内核改造。
> **工作目录**`E:\Work\Core\Simple-FR\StandardSence`
> **主交付物**`StandardScene拆分计划.md`**v2**,已落盘)
> **上游设计**`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.0`**WinForms 场景需 `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 导航定位
| 能力 | 代表 | 归属 |
|---|---|---|
| 激光避障 | `LidarArea``SwitchLidarArea`、各车型通用 | **Core** |
| 激光 SLAM 定位/地图 | `LidarMap``getLidarMap`、拉 `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;后期 **EmbedIO**MIGU-API |
**SimpleLite 事实**(来自 `SimpleLite.csproj`):`TargetFramework=net8.0``OutputType=Exe`UI 用 CycleGUIWebApi 用 EmbedIO,引用 `SimpleCore`
### 3.6 老 WebApi 处置
- `WebApi.cs` ~123KB40+ 端点,**与导航弱相关**(导航相关主要是 `QrMap``getLidarMap`)。
- **本版**:整理为 `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/apply``active-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.RCS``SimpleLite.RCS` 等(**另一会话进行中**)。
- 所有 WinForms 窗体迁 **CycleGUI** 或平台 Web`MessageBox` 改 CycleGUI 弹窗。
- 涉及窗体:`DeliveryViewer``LoopViewer``TrafficInterlockViewer``VehicleMonitor`、各 `Charge/*Form``DoorMonitor``ButtonBoxManager``VDACar/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 引用改造、`SimpleComposer``SimpleLite` 命名空间与程序集引用 | StandardScene C1 依赖其进度 |
| **平台 / 配置向导** | `WizardController``data/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` | 插件契约、`CustomOperationsBeforeLoading``NoReflectionApi` |
| `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 所列文件;合并磁循迹器;提取 `StandardCarBase``AMRScene1` 命名空间收敛。
3. 与 **SimpleLite 改造会话**对齐:引用是否已可编译、coder 注册表 API 是否就绪。
4. **不要**在未确认前大规模改 WebApi 或 WinForms——C1 才系统性处理。
若继续 **SimpleLite / SimpleCore 改造**
1. 优先落实 **TrackCoder 运行期注册**、**插件 OnActivate/OnDeactivate**、**/plugins 热卸载** 与 StandardScene 计划 §7 对齐。
2. 评估 MIGU-API 是否需补 **QrMap**、**getLidarMap** 等价端点。
3. 确认 `SimpleComposer.RCS``SimpleLite.RCS` 迁移范围,避免 StandardScene 引用断裂。
---
## 12. 变更记录
| 版本 | 日期 | 说明 |
|---|---|---|
| v1 | 2026-06-09 | 初版拆分计划(代码精读结论) |
| v2 | 2026-06-09 | 纳入 SimpleLite/net8.0/去 WinForms、设备热插拔、删除项、WebApi 暂留+迁移索引 |
| 交接摘要 | 2026-06-09 | 本会话整理,供跨会话阅读 |
---
*本文档为会话级摘要;实施细节、完整类级归属与 WebApi 端点映射以 `StandardScene拆分计划.md` 为准。*