Bläddra i källkod

feat(calib): 新增扫描范围参数与电机限位钳位方法

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
huangjie 1 vecka sedan
förälder
incheckning
ac9867ce98
1 ändrade filer med 42 tillägg och 0 borttagningar
  1. 42 0
      Calib/CalibrationEngine.cs

+ 42 - 0
Calib/CalibrationEngine.cs

@@ -42,12 +42,54 @@ namespace AutoFocusTool.Calib
         public Action<byte[], string> DebugSave;     // 诊断存图(帧,文件名前缀),可选
         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)
         {
             _motor = motor; _cam = cam;
             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>
         System.Drawing.Rectangle CenterRoi40()
         {