给接手本任务的 Claude:先完整读这一篇,再按下面「阅读顺序」去读仓库里的详细文档。本篇是总入口,不重复抄细节——细节都在被指向的文档里。 同一仓库,你能直接读到下面提到的所有文档与代码。仓库根:
aivfo-tl-3.0/。
时差培养箱(IVF 胚胎培养)软件系统。一句话:培养箱 7×24 自动培养胚胎,定时拍照记录胚胎发育延时影像,数据上传服务器供医生查看打分。
系统有三个 C# / .NET 6 桌面程序 + 一套 Java 微服务后端:
| 程序 | 目录 | 角色 | 跑在哪 |
|---|---|---|---|
| operate | ivf_tl_operate_2.0/ |
培养箱本机操作界面(舱室/调试/对焦/配置/监控) | 培养箱机器上 |
| control | ivf_tl_operate_2.0/control/(现为类库,被 operate 进程内托管) |
机器驱动大脑:串口控制下位机、拍照、换气补气、自动对焦、图片上传 | 培养箱机器上 |
| front | aivfo-front-manament-2.0/ |
管理端/医生工作站:患者管理、胚胎打分、出报告 | 医生办公电脑 |
| Java 微服务 | aivfo-gateway/、aivof-tl-control/、aivfo-business-manage/、aivfo-data-transmission/、aivfo-oplog/ 等 |
网关/业务/数据传输/操作日志 | 服务器(本机开发时跑在 108 + 本机) |
历史:做过一次"三项目合并"(M0–M8)。被合并进
ivf_tl_operate_2.0解决方案的三个原始项目是:operate(→ivf_tl_Operate)+ control(→control/子树)+ AutoFocusTool 自动对焦工具(→control/IvfTl.AutoFocus对焦库);合并把 control 的代码塞进了 operate 进程内托管运行,把 AutoFocusTool 重构成 control 的对焦类库。注意:front 不在本次合并内——它始终是独立的第四个桌面程序(aivfo-front-manament-2.0/),只是同属一个产品。合并代码完成,但真机验收整体未做、且有 operate 侧功能降级遗留(见进度/待验证清单.mdM-01~M-07 与需求文档/操作端逻辑与配置全景.md§八);旧文档在重建时清空归档。
operate / control 双进程拆分。
把 control 从 operate 进程内剥离回独立常驻进程,核心诉求:
为什么要拆:合并成一个进程后,operate 关 UI 进程退不掉(control 的常驻线程撑着→残留进程)、重开又起一套 control 抢串口;监控页只能同进程直读、内容不全;调试时串口被 control 占用。这些都是单进程塞两个生命周期相反的东西导致的。
范围红线:只动 operate / control,front 完全不动。control 的采集/换气/对焦/上传业务逻辑零改动,只动"进程边界 + 进程间本地通信"。
127.0.0.1:38080,.NET 自带 HttpListener),operate 调它的接口读状态/借串口/停止。/serial/pause+/serial/resume,复用现有 HouseGate 闸门(现是同进程内,改成跨进程喊),control 不死、其他舱照常、调完自动恢复。tl13579)→ /shutdown 安全停机。/status,补三块:各舱实时活动(拍照/对焦/换气)、后台线程健康/心跳、串口借用/占用状态。项目文档/进度/进度状态.yaml —— 轻断点:现在干到哪、下一步、阶段概览。项目文档/进度/工作计划表.md —— 阶段真实状态 + 续接指南。项目文档/需求文档/specs/2026-06-22-operate-control-双进程拆分-design.md —— 架构设计全文(9 章:背景/决策/拓扑图/HTTP 接口契约/生命周期/监控补全/老壳处置/分阶段/风险)。动手前必读。项目文档/开发计划/2026-06-22-阶段1-control独立进程骨架.md —— 阶段1 实现计划:7 个 bite-sized 任务,每步带完整代码/命令/预期。照着做。项目文档/需求文档/control-逻辑与配置全景.md —— 现状基线/接手全图:control 全部逻辑(采集主循环/服务器双向交互/启动硬件层/缓冲瓶/数据库)+ 全部配置参数,均标 file:line。改 control 前查它。项目文档/进度/交接卡.md 末尾 —— 最近一次工作细节。项目文档/进度/待验证清单.md —— 真机门控项。CLAUDE.md(仓库根)—— 项目铁律:全程中文、用 codegraph 检索、回写协议、编译/重启自己执行等。net6.0-windows)/ WPF。MVVM(CommunityToolkit.Mvvm)。JSON 用 Newtonsoft.Json。单测用 xUnit(见 control/IvfTl.AutoFocus.Tests)。dotnet build;JDK11 + Maven3.9.9 @ C:\TLData\tools(Java 微服务用)。operate/control 解决方案:ivf_tl_operate_2.0/ivf_tl_Operate.sln 与 control/ivf_tl_Control.sln。.codegraph/)。理解/定位代码优先用 codegraph(codegraph_explore / codegraph_node,或 shell codegraph explore "..."),别上来就 grep/读文件。增删文件后跑 codegraph sync。127.0.0.1:10010)登录、连 108 的 MySQL/Kafka/MQTT/Nacos。起微服务集群:bash 项目文档/开发环境/start-all.sh。详见 开发环境/。requireAdministrator(串口/相机/盘符)。AppData.cs:91-111 有 #if DEBUG 块顺序覆盖服务器地址,最终生效写死成测试网关 test-gateway.aivfo.com:36000 / 211.149.139.131(中途出现的 192.168.0.207 等会被后续行覆盖,既非最终值也不是公网)——真机/本机验证必须用 Release 版(走 App.config 的 127.0.0.1/108)。DependFile(SQLite 库/相机原生 DLL)、App.config(连接+换气参数)。拆独立进程部署时这些要随 control.exe 到位,否则 StartRun 失败。清单见 control 全景文档 §八。ivf_tl_Entity/ComEntitys + HAL 包装栈 IvfTl.Hardware),是迁移期现状,排障要分清当前走哪条。详见全景文档 §六。aivfoTL.db 须预置文件;但 house_autofocus_calibration 一表例外,由 DBService 启动时 CodeFirst.InitTables 自动建(CREATE TABLE IF NOT EXISTS),勿当缺表 bug 排查。ivf_tl_ControlTest:是合并前 control 的独立 exe,但混了测试代码、命名乱(三命名空间)、已被 operate 旁置不引用。别改造它;新 control 启动器基于干净的 ivf_tl_Control 类库新建(阶段1),老壳阶段3 退役删。临时文件/相关参数.html,其余下位机控制无风险)。进度状态.yaml(断点)+ 交接卡.md(追加)+ 工作计划表 + 进度数据.js。提交边界 = 文档已同步。