日期:2026-06-16 背景:4 号舱对焦失败排查中发现需要更好的诊断与可观测性。本设计涵盖三个独立子系统。
| # | 子系统 | 目标 |
|---|---|---|
| 1 | 诊断工具 + 测试数据目录规范 | 扩展 WellSpacing 支持 Z 清晰度曲线扫描;所有诊断输出统一到 TestData/ |
| 2 | UI 数据显示调整 | 删除 CalibWindow 底部冗余孔位数据;预览画面参数显示更详细 |
| 3 | 操作日志系统 | 界面所有点击操作落盘记录,便于事后分析定位 |
三者相对独立,可分别实现。下面分述。
TestData/(加入主工程 csproj 的 Compile Remove 排除,避免被编译)。TestData/<工具名>_<时间戳>/。calib_result/ 仅保留程序正式标定产物(house*_well*_标定后.bmp + calibration 存图),不再混入诊断文件。现状:WellSpacing 已能逐 well 移动+拍照+检测+存图(固定 Z)。 新增一个模式:对指定 well 做 Z 清晰度曲线扫描,定位真实焦面。
WellSpacing.exe zcurve <COM> <相机idx> <well号> [zLo=20000] [zHi=120000] [zStep=2000] [曝光=60]TestData/zcurve_w<well>_<时间戳>/z<值>_s<分数>.bmpz=<值> 原始梯度=<sumSq/n> 亮度均值=<mean> 归一化分=<score>保留 WellSpacing 现有的"逐 well 拍照"模式(默认无 zcurve 参数时跑原逻辑),只是输出目录改到 TestData/。
CalibWindow.xaml:29-34 的底部 Border(TxtCurParams / TxtCurStep)。CalibWindow.xaml.cs 中对这两个控件的引用(SetCurrentInfo 里对 TxtCurParams.Text/TxtCurStep.Text 的赋值)。Height="120")一并移除,网格区(well 4x4)占满下方空间。现状:SetCurrentInfo(param, step) 把"步骤+偏移"写到当前 well 格的标题(cap)上。
增强:每个 well 格标题在标定中实时显示更完整参数,至少包含:
实现:扩展 SetCurrentInfo 的入参,或新增重载传入结构化数据(well/z/h/exp/score/offsetX/offsetY/complete),在 well 格标题用多行格式显示。调用方 MainWindow.Calib.cs 的 OnStep 回调补齐这些字段。
主窗口 MainWindow.xaml 预览浮层(TxtScore/TxtZ/TxtFps)保留——那是手动测试用,不在本次删除范围。
MainWindow.Log() 增加落盘能力。Click 处理函数开头加一行 LogAction(...),显式记录"操作名 + 关键参数"。Logs/(加入 csproj 排除)。Logs/<yyyy-MM-dd_HHmmss>.log,程序启动时创建,本次运行所有日志写入同一文件。纯文本,每行一条,制表分隔,便于阅读和事后 grep:
HH:mm:ss.fff [级别] [类别] 消息
示例:
16:45:30.123 [ACTION] [UI] 点击"一键全自动初始化" wells=[1,2,3] 舱=4
16:45:31.456 [DATA] [MOTOR] well1 读EEPROM 水平=71500 Z零点=...
16:45:33.789 [DATA] [CALIB] well1 粗对焦 coarseZ=90000 峰比=1.04
16:45:40.012 [WARN] [CALIB] well1 对焦峰弱(ratio=1.04)
FileLogger 类(静态或单例):启动时按时间戳建文件,提供 Info/Action/Data/Warn/Error(category, msg) 方法,线程安全(lock 写入),自动 flush。MainWindow.Log(msg) 内部同时:① 追加到界面 TxtLog(现有行为)② 调 FileLogger 落盘。Click 开头加 LogAction;关键数据点(移动结果、标定参数、异常)加 LogData/LogWarn。CalibrationEngine 已有的 Log?.Invoke(...) 回调天然会流入 FileLogger(因为它接的就是 MainWindow.Log),标定过程数据自动入库。界面所有按钮:扫描、连接/断开、转well、开/关光源、抓帧、实时预览、存图、设曝光/增益、Z 正反转/复位/绝对移动、水平正反转/复位、Z扫描、停止、全选/全不选、一键自动初始化。 每条记录"点击了什么 + 当时的输入参数 + 执行结果/产生的数据"。