浏览代码

feat(d2-02): 红线电机钳位 MotorClamp + 单测

huangjie 2 天之前
父节点
当前提交
ae80804d7c

+ 31 - 0
ivf_tl_operate_2.0/control/IvfTl.ControlHost.Tests/MotorClampTests.cs

@@ -0,0 +1,31 @@
+using IvfTl.ControlHost.Debug;
+using Xunit;
+namespace IvfTl.ControlHost.Tests
+{
+    public class MotorClampTests
+    {
+        [Theory]
+        [InlineData(0, true)]
+        [InlineData(125000, true)]
+        [InlineData(90000, true)]
+        [InlineData(-1, false)]
+        [InlineData(125001, false)]
+        public void Vertical_InRange(int pulse, bool ok)
+            => Assert.Equal(ok, MotorClamp.IsVerticalInRange(pulse));
+
+        [Theory]
+        [InlineData(0, true)]
+        [InlineData(220000, true)]
+        [InlineData(220001, false)]
+        [InlineData(-5, false)]
+        public void Horizontal_InRange(int pulse, bool ok)
+            => Assert.Equal(ok, MotorClamp.IsHorizontalInRange(pulse));
+
+        [Fact]
+        public void Relative_Target_Computed()
+        {
+            Assert.Equal(90000, MotorClamp.RelativeTarget(80000, 10000));
+            Assert.False(MotorClamp.IsVerticalInRange(MotorClamp.RelativeTarget(120000, 10000)));
+        }
+    }
+}

+ 13 - 0
ivf_tl_operate_2.0/control/ivf_tl_ControlHost/Debug/MotorClamp.cs

@@ -0,0 +1,13 @@
+namespace IvfTl.ControlHost.Debug
+{
+    /// <summary>红线电机钳位(spec §10)。水平[0,220000]、垂直Z[0,125000]。纯函数,无副作用。</summary>
+    public static class MotorClamp
+    {
+        public const int HorMin = 0, HorMax = 220000;
+        public const int VerMin = 0, VerMax = 125000;
+        public static bool IsHorizontalInRange(int pulse) => pulse >= HorMin && pulse <= HorMax;
+        public static bool IsVerticalInRange(int pulse) => pulse >= VerMin && pulse <= VerMax;
+        /// <summary>当前位 + 增量 = 目标绝对位(forward 传正、backward 传负)。</summary>
+        public static int RelativeTarget(int current, int delta) => current + delta;
+    }
+}