ソースを参照

docs(d2-02-t3): 进度勾Task2.1/2.2+记中心DB优先硬件兜底决策

huangjie 2 日 前
コミット
67e1a5dc08

+ 8 - 0
项目文档/进度/D2-02-第三阶段-自动对焦重构-特殊情况记录.md

@@ -53,3 +53,11 @@
 - 情况2:编译时 operate.exe 在跑(PID 20268,32K疑似挂起)→ 没编 operate 大sln(避免MSB3021锁DLL),改单工程验证语法。control.sln 独立子树已0错。
 - 影响面/闭环核对:control读写范围全链(服务器DTO↔运行态↔本地SQLite)闭环;operate调试页存范围走HTTP不经这些映射。
 - 待用户回头确认:无。**⚠ Phase 3(operate调试页重构)开工前需先清掉挂起的 operate.exe,否则编不了 operate sln。**
+
+#### [Task 2.2] 采集对焦中心改取DB,补"DB优先+硬件EEPROM兜底"防静默失败  — 2026-06-25
+- 情况:path B 改成中心取 DB(horizontalMotorPosition/eepromClearPosition)后,若某 well 的 DB 清晰位=0/未同步(path A 代码 HouseBin.cs:1519 用 `eepromClearPosition>0` 守,证明 0 是真实可能状态),会把 ZCoarseCenter=0、Z粗扫落[0,6000]而真实焦面~88000 → 该 well 对焦静默失败。老 path B 读硬件 EEPROM 不会有此问题=回归。
+- 决策/处理:path B 拿 range 后,**中心≤0 时回退硬件 EEPROM 回读**(ReadWellHorizontalPosWait/ReadWellFocusZeroWait),即"DB优先+硬件兜底",回退时记日志。既守需求"中心用DB现有列"、又保老健壮性。
+- 依据:path A 既有 `eepromClearPosition>0` 守卫 + 老 path B 硬件回读行为。
+- 影响面/闭环核对:保证"未标定/未同步的 well 也能对上焦",采集闭环不因 DB 空值断;eepromZ 第3参引擎实际未用,垂直中心靠 ZCoarseCenter 字段(已核 CalibrationEngine)。
+- 待用户回头确认:无。
+- 引擎语义留存(防后续踩坑):`CalibrateWell(well, eepromHPos, eepromZ)` 中 **eepromHPos=水平居中扫描中心(在用)、eepromZ=引擎当前未引用(死参)**;Z 粗扫中心只认字段 `ZCoarseCenter`。改对焦务必记得垂直中心走字段不走第3参。

+ 2 - 2
项目文档/进度/D2-02-第三阶段-自动对焦重构-进度.md

@@ -38,8 +38,8 @@
 - [x] 1.6 control/operate C# DBEntity + ConvertHelper 手映射同步 — commit 500f476,control.sln Release 0错,grep核验6列全贯通(9承载类+6映射段)
 
 ### Phase 2 — control 采集对焦  🔶 进行中
-- [ ] 2.1 FocusRangeResolver 纯逻辑 + 单测(TDD)
-- [ ] 2.2 ReadWellFocusRange 公用方法 + path B 注入引擎
+- [x] 2.1 FocusRangeResolver 纯逻辑 + 单测(TDD)— commit 1362ca7,5测全过,引擎默认2000/6000已核实
+- [x] 2.2 ReadWellFocusRange 公用方法 + path B 注入引擎 — commit a4a3573 + 健壮性补丁23bb089(DB优先+硬件兜底),Release 0错,我亲读核对
 - [ ] 2.3 本地 PhotoLayerCalculator 为拍层权威(calCCDPosition 退兜底)
 
 ### Phase 3 — control 标定协作 + operate 调试页重构  ⬜(开工前详化)