Files
StandardSence/StandardScene会话14交接摘要.md
T

242 lines
12 KiB
Markdown
Raw Normal View History

2026-06-14 11:19:15 +08:00
# 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` 为准。*