|
@@ -42,12 +42,54 @@ namespace AutoFocusTool.Calib
|
|
|
public Action<byte[], string> DebugSave; // 诊断存图(帧,文件名前缀),可选
|
|
public Action<byte[], string> DebugSave; // 诊断存图(帧,文件名前缀),可选
|
|
|
public int CenterScanExposure = 60;
|
|
public int CenterScanExposure = 60;
|
|
|
|
|
|
|
|
|
|
+ // ── 行程限位(所有电机移动前钳到该区间)──
|
|
|
|
|
+ /// <summary>水平电机行程下/上限脉冲(旧工程自检值 70000)。</summary>
|
|
|
|
|
+ public int HMin = 0, HMax = 70000;
|
|
|
|
|
+ /// <summary>垂直电机行程下/上限脉冲(旧工程软上限 125000)。</summary>
|
|
|
|
|
+ public int ZMin = 0, ZMaxPulse = 125000;
|
|
|
|
|
+
|
|
|
|
|
+ // ── 水平全行程粗扫定位 ──
|
|
|
|
|
+ /// <summary>水平全行程粗扫起点/终点/步距。命中完整圆即停。</summary>
|
|
|
|
|
+ public int HCoarseStart = 0;
|
|
|
|
|
+ public int HCoarseEnd = 70000;
|
|
|
|
|
+ public int HCoarseStep = 2000;
|
|
|
|
|
+
|
|
|
|
|
+ // ── Z 全范围粗对焦(固定中心大窗口)──
|
|
|
|
|
+ /// <summary>Z 粗对焦固定中心(实测焦面集中区间 60000~120000 的中点)。</summary>
|
|
|
|
|
+ public int ZCoarseCenter = 90000;
|
|
|
|
|
+ /// <summary>Z 粗对焦半幅 → 区间 60000~120000。</summary>
|
|
|
|
|
+ public int ZCoarseHalf = 30000;
|
|
|
|
|
+ /// <summary>Z 粗对焦步距 → 约 31 层。</summary>
|
|
|
|
|
+ public int ZCoarseStep = 2000;
|
|
|
|
|
+
|
|
|
|
|
+ // ── Z 精对焦(围绕粗峰)──
|
|
|
|
|
+ /// <summary>精对焦半幅(覆盖粗扫 ±2000 峰定位误差并留余量)。</summary>
|
|
|
|
|
+ public int FineZHalf = 6000;
|
|
|
|
|
+ /// <summary>精对焦步距 → 约 24 层(精度优先)。</summary>
|
|
|
|
|
+ public int FineZStep = 500;
|
|
|
|
|
+
|
|
|
public CalibrationEngine(HouseMotor motor, SerialCamera cam)
|
|
public CalibrationEngine(HouseMotor motor, SerialCamera cam)
|
|
|
{
|
|
{
|
|
|
_motor = motor; _cam = cam;
|
|
_motor = motor; _cam = cam;
|
|
|
W = cam.Width; H = cam.Height;
|
|
W = cam.Width; H = cam.Height;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /// <summary>水平脉冲钳到 [HMin,HMax],越界写 Log。</summary>
|
|
|
|
|
+ int ClampH(int p)
|
|
|
|
|
+ {
|
|
|
|
|
+ int c = Math.Max(HMin, Math.Min(HMax, p));
|
|
|
|
|
+ if (c != p) Log?.Invoke($" ⚠ 水平脉冲 {p} 越界,钳到 {c} [{HMin},{HMax}]");
|
|
|
|
|
+ return c;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /// <summary>垂直脉冲钳到 [ZMin,ZMaxPulse],越界写 Log。</summary>
|
|
|
|
|
+ int ClampZ(int p)
|
|
|
|
|
+ {
|
|
|
|
|
+ int c = Math.Max(ZMin, Math.Min(ZMaxPulse, p));
|
|
|
|
|
+ if (c != p) Log?.Invoke($" ⚠ 垂直脉冲 {p} 越界,钳到 {c} [{ZMin},{ZMaxPulse}]");
|
|
|
|
|
+ return c;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/// <summary>中央40% ROI(精对焦/粗对焦圆未检出时的降级,避免背景边缘带偏)。</summary>
|
|
/// <summary>中央40% ROI(精对焦/粗对焦圆未检出时的降级,避免背景边缘带偏)。</summary>
|
|
|
System.Drawing.Rectangle CenterRoi40()
|
|
System.Drawing.Rectangle CenterRoi40()
|
|
|
{
|
|
{
|