diff --git a/CSI-H238M/CSI-H238M/Models/AppConfig.cs b/CSI-H238M/CSI-H238M/Models/AppConfig.cs
index f423c0d..0a166f1 100644
--- a/CSI-H238M/CSI-H238M/Models/AppConfig.cs
+++ b/CSI-H238M/CSI-H238M/Models/AppConfig.cs
@@ -162,6 +162,10 @@ namespace COFTester.Models
// === 傳感器數據寄存器(只讀)===
public ushort ForceRegister { get; set; } = 0; // 力值寄存器(2個寄存器,Float)
public ushort DisplacementRegister { get; set; } = 2; // 位移寄存器(2個寄存器,Float)
+ public ushort FrictionForceRegister { get; set; } = 1314; // D1314 摩擦力(只讀)曲線圖力值(2個寄存器,Float)
+ public ushort CurveDisplacementRegister { get; set; } = 360; // D360 水平手動位移 曲線圖位移值(2個寄存器,Float)
+ public ushort VerticalPositionRegister { get; set; } = 12; // D12 升降位置(只讀)(2個寄存器,Float)
+ public ushort HorizontalPositionRegister { get; set; } = 16; // D16 水平位置(只讀)(2個寄存器,Float)
// === 控制寄存器(讀寫)===
public ushort ControlRegister { get; set; } = 10; // 控制命令:0=停止,1=開始,2=重置
@@ -174,6 +178,15 @@ namespace COFTester.Models
public ushort TestStrokeRegister { get; set; } = 26; // 測試行程 (mm),Float,2個寄存器
public ushort SamplingRateRegister { get; set; } = 28; // 採樣頻率 (Hz),Float,2個寄存器
+ // === 手動控制參數寄存器(讀寫)===
+ public ushort HorizontalManualSpeedRegister { get; set; } = 350; // D350 水平手動速度 (mm/s),Float,2個寄存器
+ public ushort VerticalManualSpeedRegister { get; set; } = 310; // D310 升降手動速度 (mm/s),Float,2個寄存器
+ public ushort VerticalManualDisplacementRegister { get; set; } = 320; // D320 升降手動位移 (mm),Float,2個寄存器
+ public ushort VerticalLimitRegister { get; set; } = 290; // D290 升降極限 (mm),Float,2個寄存器
+ public ushort HorizontalLimitRegister { get; set; } = 292; // D292 水平極限 (mm),Float,2個寄存器
+ public ushort ForceCoefficientRegister { get; set; } = 1320; // D1320 拉力系數 (N/V),Float,2個寄存器
+ public ushort ForceProtectionRegister { get; set; } = 1322; // D1322 拉力保護 (N),Float,2個寄存器
+
// === 校準寄存器(寫入)===
public ushort CalibrationRegister { get; set; } = 1300; // 校準命令寄存器 M1300
@@ -199,6 +212,10 @@ namespace COFTester.Models
// === 傳感器數據寄存器(只讀)===
public ushort ForceRegister { get; set; } = 0; // 力值寄存器(2個寄存器,Float)
public ushort DisplacementRegister { get; set; } = 2; // 位移寄存器(2個寄存器,Float)
+ public ushort FrictionForceRegister { get; set; } = 1314; // D1314 摩擦力(只讀)曲線圖力值(2個寄存器,Float)
+ public ushort CurveDisplacementRegister { get; set; } = 360; // D360 水平手動位移 曲線圖位移值(2個寄存器,Float)
+ public ushort VerticalPositionRegister { get; set; } = 12; // D12 升降位置(只讀)(2個寄存器,Float)
+ public ushort HorizontalPositionRegister { get; set; } = 16; // D16 水平位置(只讀)(2個寄存器,Float)
// === 控制寄存器(讀寫)===
public ushort ControlRegister { get; set; } = 10; // 控制命令:0=停止,1=開始,2=重置
@@ -211,6 +228,15 @@ namespace COFTester.Models
public ushort TestStrokeRegister { get; set; } = 26; // 測試行程 (mm),Float,2個寄存器
public ushort SamplingRateRegister { get; set; } = 28; // 採樣頻率 (Hz),Float,2個寄存器
+ // === 手動控制參數寄存器(讀寫)===
+ public ushort HorizontalManualSpeedRegister { get; set; } = 350; // D350 水平手動速度 (mm/s),Float,2個寄存器
+ public ushort VerticalManualSpeedRegister { get; set; } = 310; // D310 升降手動速度 (mm/s),Float,2個寄存器
+ public ushort VerticalManualDisplacementRegister { get; set; } = 320; // D320 升降手動位移 (mm),Float,2個寄存器
+ public ushort VerticalLimitRegister { get; set; } = 290; // D290 升降極限 (mm),Float,2個寄存器
+ public ushort HorizontalLimitRegister { get; set; } = 292; // D292 水平極限 (mm),Float,2個寄存器
+ public ushort ForceCoefficientRegister { get; set; } = 1320; // D1320 拉力系數 (N/V),Float,2個寄存器
+ public ushort ForceProtectionRegister { get; set; } = 1322; // D1322 拉力保護 (N),Float,2個寄存器
+
// === 校準寄存器(寫入)===
public ushort CalibrationRegister { get; set; } = 1300; // 校準命令寄存器 M1300
diff --git a/CSI-H238M/CSI-H238M/Models/Model.cs b/CSI-H238M/CSI-H238M/Models/Model.cs
index 61dfddb..2918b70 100644
--- a/CSI-H238M/CSI-H238M/Models/Model.cs
+++ b/CSI-H238M/CSI-H238M/Models/Model.cs
@@ -361,6 +361,16 @@ namespace COFTester.Models
/// true=开始移动, false=停止移动
void DirectionControl(string direction, bool start);
+ ///
+ /// 开始指定方向的测试 - 写入1到对应寄存器
+ ///
+ void StartDirectionTest(string direction);
+
+ ///
+ /// 停止指定方向的测试 - 写入0到对应寄存器
+ ///
+ void StopDirectionTest(string direction);
+
bool IsConnected { get; }
}
diff --git a/CSI-H238M/CSI-H238M/Services/ModbusService.cs b/CSI-H238M/CSI-H238M/Services/ModbusService.cs
index a0fec9f..0a1afa5 100644
--- a/CSI-H238M/CSI-H238M/Services/ModbusService.cs
+++ b/CSI-H238M/CSI-H238M/Services/ModbusService.cs
@@ -310,6 +310,63 @@ namespace COFTester.Services
OnErrorOccurred($"方向控制失敗: {ex.Message}");
}
}
+
+ ///
+ /// 开始指定方向的测试 - 写入1到对应寄存器
+ /// M0=上升, M1=下降, M2=向右, M3=向左
+ ///
+ public virtual void StartDirectionTest(string direction)
+ {
+ try
+ {
+ if (_modbusMaster != null && _isConnected)
+ {
+ ModbusDirectionRegister register = direction.ToUpper() switch
+ {
+ "UP" => ModbusDirectionRegister.Up,
+ "DOWN" => ModbusDirectionRegister.Down,
+ "RIGHT" => ModbusDirectionRegister.Right,
+ "LEFT" => ModbusDirectionRegister.Left,
+ _ => throw new ArgumentException($"未知方向: {direction}")
+ };
+
+ System.Diagnostics.Debug.WriteLine($"[Modbus] 开始测试: {direction} - 寫入寄存器 M{(ushort)register} = 1");
+ WriteDirectionRegisterAsync((ushort)register, 1).Wait();
+ }
+ }
+ catch (Exception ex)
+ {
+ OnErrorOccurred($"开始测试失败: {ex.Message}");
+ }
+ }
+
+ ///
+ /// 停止指定方向的测试 - 写入0到对应寄存器
+ ///
+ public virtual void StopDirectionTest(string direction)
+ {
+ try
+ {
+ if (_modbusMaster != null && _isConnected)
+ {
+ ModbusDirectionRegister register = direction.ToUpper() switch
+ {
+ "UP" => ModbusDirectionRegister.Up,
+ "DOWN" => ModbusDirectionRegister.Down,
+ "RIGHT" => ModbusDirectionRegister.Right,
+ "LEFT" => ModbusDirectionRegister.Left,
+ _ => throw new ArgumentException($"未知方向: {direction}")
+ };
+
+ System.Diagnostics.Debug.WriteLine($"[Modbus] 停止测试: {direction} - 寫入寄存器 M{(ushort)register} = 0");
+ WriteDirectionRegisterAsync((ushort)register, 0).Wait();
+ }
+ }
+ catch (Exception ex)
+ {
+ OnErrorOccurred($"停止测试失败: {ex.Message}");
+ }
+ }
protected abstract Task AcquisitionLoopAsync(TestParameters parameters, CancellationToken token);
protected abstract Task ReadSensorDataAsync();
@@ -650,6 +707,9 @@ namespace COFTester.Services
System.Diagnostics.Debug.WriteLine($" 測試時長: {parameters.TestDuration}s → 寄存器[{_config.TestDurationRegister}]");
System.Diagnostics.Debug.WriteLine($" 測試行程: {parameters.TestStroke}mm → 寄存器[{_config.TestStrokeRegister}]");
System.Diagnostics.Debug.WriteLine($" 採樣頻率: {parameters.SamplingRate}Hz → 寄存器[{_config.SamplingRateRegister}]");
+
+ // 寫入手動控制參數
+ await WriteManualControlParametersAsync(parameters);
}
catch (Exception ex)
{
@@ -657,6 +717,97 @@ namespace COFTester.Services
throw;
}
}
+
+ ///
+ /// 寫入手動控制參數到 PLC 寄存器
+ /// D350 水平手動速度, D310 升降手動速度, D320 升降手動位移
+ /// D290 升降極限, D292 水平極限, D1320 拉力系數, D1322 拉力保護
+ ///
+ protected virtual async Task WriteManualControlParametersAsync(TestParameters parameters)
+ {
+ if (_modbusMaster == null) return;
+
+ try
+ {
+ // D350 水平手動速度
+ var hSpeedRegs = ConvertFloatToRegisters((float)parameters.HorizontalManualSpeed);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.HorizontalManualSpeedRegister, hSpeedRegs);
+
+ // D310 升降手動速度
+ var vSpeedRegs = ConvertFloatToRegisters((float)parameters.VerticalManualSpeed);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalManualSpeedRegister, vSpeedRegs);
+
+ // D320 升降手動位移
+ var vDispRegs = ConvertFloatToRegisters((float)parameters.VerticalManualDisplacement);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalManualDisplacementRegister, vDispRegs);
+
+ // D290 升降極限
+ var vLimitRegs = ConvertFloatToRegisters((float)parameters.VerticalLimit);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalLimitRegister, vLimitRegs);
+
+ // D292 水平極限
+ var hLimitRegs = ConvertFloatToRegisters((float)parameters.HorizontalLimit);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.HorizontalLimitRegister, hLimitRegs);
+
+ // D1320 拉力系數
+ var forceCoefRegs = ConvertFloatToRegisters((float)parameters.ForceCoefficient);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.ForceCoefficientRegister, forceCoefRegs);
+
+ // D1322 拉力保護
+ var forceProtRegs = ConvertFloatToRegisters((float)parameters.ForceProtection);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.ForceProtectionRegister, forceProtRegs);
+
+ System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 手動控制參數寫入完成:");
+ System.Diagnostics.Debug.WriteLine($" 水平手動速度: {parameters.HorizontalManualSpeed}mm/s → D{_config.HorizontalManualSpeedRegister}");
+ System.Diagnostics.Debug.WriteLine($" 升降手動速度: {parameters.VerticalManualSpeed}mm/s → D{_config.VerticalManualSpeedRegister}");
+ System.Diagnostics.Debug.WriteLine($" 升降手動位移: {parameters.VerticalManualDisplacement}mm → D{_config.VerticalManualDisplacementRegister}");
+ System.Diagnostics.Debug.WriteLine($" 升降極限: {parameters.VerticalLimit}mm → D{_config.VerticalLimitRegister}");
+ System.Diagnostics.Debug.WriteLine($" 水平極限: {parameters.HorizontalLimit}mm → D{_config.HorizontalLimitRegister}");
+ System.Diagnostics.Debug.WriteLine($" 拉力系數: {parameters.ForceCoefficient} → D{_config.ForceCoefficientRegister}");
+ System.Diagnostics.Debug.WriteLine($" 拉力保護: {parameters.ForceProtection}N → D{_config.ForceProtectionRegister}");
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 手動控制參數寫入失敗: {ex.Message}");
+ throw;
+ }
+ }
+
+ ///
+ /// 讀取位置數據(升降位置和水平位置)
+ /// D12 升降位置(只讀), D16 水平位置(只讀)
+ ///
+ protected virtual async Task<(double verticalPos, double horizontalPos)> ReadPositionDataAsync()
+ {
+ if (_modbusMaster == null) return (0, 0);
+
+ try
+ {
+ // 讀取 D12 升降位置(2個寄存器)
+ var vPosRegs = await _modbusMaster.ReadHoldingRegistersAsync(
+ _config.SlaveId, _config.VerticalPositionRegister, 2);
+ var verticalPos = ConvertRegistersToFloat(vPosRegs, 0);
+
+ // 讀取 D16 水平位置(2個寄存器)
+ var hPosRegs = await _modbusMaster.ReadHoldingRegistersAsync(
+ _config.SlaveId, _config.HorizontalPositionRegister, 2);
+ var horizontalPos = ConvertRegistersToFloat(hPosRegs, 0);
+
+ return (verticalPos, horizontalPos);
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 讀取位置數據失敗: {ex.Message}");
+ return (0, 0);
+ }
+ }
///
/// 讀取設備狀態
@@ -956,6 +1107,9 @@ namespace COFTester.Services
System.Diagnostics.Debug.WriteLine($" 測試時長: {parameters.TestDuration}s → 寄存器[{_config.TestDurationRegister}]");
System.Diagnostics.Debug.WriteLine($" 測試行程: {parameters.TestStroke}mm → 寄存器[{_config.TestStrokeRegister}]");
System.Diagnostics.Debug.WriteLine($" 採樣頻率: {parameters.SamplingRate}Hz → 寄存器[{_config.SamplingRateRegister}]");
+
+ // 寫入手動控制參數
+ await WriteManualControlParametersAsync(parameters);
}
catch (Exception ex)
{
@@ -963,6 +1117,78 @@ namespace COFTester.Services
throw;
}
}
+
+ ///
+ /// 寫入手動控制參數到 PLC 寄存器
+ ///
+ protected virtual async Task WriteManualControlParametersAsync(TestParameters parameters)
+ {
+ if (_modbusMaster == null) return;
+
+ try
+ {
+ var hSpeedRegs = ConvertFloatToRegisters((float)parameters.HorizontalManualSpeed);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.HorizontalManualSpeedRegister, hSpeedRegs);
+
+ var vSpeedRegs = ConvertFloatToRegisters((float)parameters.VerticalManualSpeed);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalManualSpeedRegister, vSpeedRegs);
+
+ var vDispRegs = ConvertFloatToRegisters((float)parameters.VerticalManualDisplacement);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalManualDisplacementRegister, vDispRegs);
+
+ var vLimitRegs = ConvertFloatToRegisters((float)parameters.VerticalLimit);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalLimitRegister, vLimitRegs);
+
+ var hLimitRegs = ConvertFloatToRegisters((float)parameters.HorizontalLimit);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.HorizontalLimitRegister, hLimitRegs);
+
+ var forceCoefRegs = ConvertFloatToRegisters((float)parameters.ForceCoefficient);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.ForceCoefficientRegister, forceCoefRegs);
+
+ var forceProtRegs = ConvertFloatToRegisters((float)parameters.ForceProtection);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.ForceProtectionRegister, forceProtRegs);
+
+ System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 手動控制參數寫入完成");
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 手動控制參數寫入失敗: {ex.Message}");
+ throw;
+ }
+ }
+
+ ///
+ /// 讀取位置數據
+ ///
+ protected virtual async Task<(double verticalPos, double horizontalPos)> ReadPositionDataAsync()
+ {
+ if (_modbusMaster == null) return (0, 0);
+
+ try
+ {
+ var vPosRegs = await _modbusMaster.ReadHoldingRegistersAsync(
+ _config.SlaveId, _config.VerticalPositionRegister, 2);
+ var verticalPos = ConvertRegistersToFloat(vPosRegs, 0);
+
+ var hPosRegs = await _modbusMaster.ReadHoldingRegistersAsync(
+ _config.SlaveId, _config.HorizontalPositionRegister, 2);
+ var horizontalPos = ConvertRegistersToFloat(hPosRegs, 0);
+
+ return (verticalPos, horizontalPos);
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 讀取位置數據失敗: {ex.Message}");
+ return (0, 0);
+ }
+ }
///
/// 讀取設備狀態
@@ -1232,6 +1458,9 @@ namespace COFTester.Services
_config.SlaveId, _config.SledMassRegister, allRegisters);
System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 參數寫入完成");
+
+ // 寫入手動控制參數
+ await WriteManualControlParametersAsync(parameters);
}
catch (Exception ex)
{
@@ -1239,6 +1468,78 @@ namespace COFTester.Services
throw;
}
}
+
+ ///
+ /// 寫入手動控制參數到 PLC 寄存器
+ ///
+ protected virtual async Task WriteManualControlParametersAsync(TestParameters parameters)
+ {
+ if (_modbusMaster == null) return;
+
+ try
+ {
+ var hSpeedRegs = ConvertFloatToRegisters((float)parameters.HorizontalManualSpeed);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.HorizontalManualSpeedRegister, hSpeedRegs);
+
+ var vSpeedRegs = ConvertFloatToRegisters((float)parameters.VerticalManualSpeed);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalManualSpeedRegister, vSpeedRegs);
+
+ var vDispRegs = ConvertFloatToRegisters((float)parameters.VerticalManualDisplacement);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalManualDisplacementRegister, vDispRegs);
+
+ var vLimitRegs = ConvertFloatToRegisters((float)parameters.VerticalLimit);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalLimitRegister, vLimitRegs);
+
+ var hLimitRegs = ConvertFloatToRegisters((float)parameters.HorizontalLimit);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.HorizontalLimitRegister, hLimitRegs);
+
+ var forceCoefRegs = ConvertFloatToRegisters((float)parameters.ForceCoefficient);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.ForceCoefficientRegister, forceCoefRegs);
+
+ var forceProtRegs = ConvertFloatToRegisters((float)parameters.ForceProtection);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.ForceProtectionRegister, forceProtRegs);
+
+ System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 手動控制參數寫入完成");
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 手動控制參數寫入失敗: {ex.Message}");
+ throw;
+ }
+ }
+
+ ///
+ /// 讀取位置數據
+ ///
+ protected virtual async Task<(double verticalPos, double horizontalPos)> ReadPositionDataAsync()
+ {
+ if (_modbusMaster == null) return (0, 0);
+
+ try
+ {
+ var vPosRegs = await _modbusMaster.ReadHoldingRegistersAsync(
+ _config.SlaveId, _config.VerticalPositionRegister, 2);
+ var verticalPos = ConvertRegistersToFloat(vPosRegs, 0);
+
+ var hPosRegs = await _modbusMaster.ReadHoldingRegistersAsync(
+ _config.SlaveId, _config.HorizontalPositionRegister, 2);
+ var horizontalPos = ConvertRegistersToFloat(hPosRegs, 0);
+
+ return (verticalPos, horizontalPos);
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 讀取位置數據失敗: {ex.Message}");
+ return (0, 0);
+ }
+ }
protected override async Task ReadDeviceStatusAsync()
{
@@ -1449,6 +1750,61 @@ namespace COFTester.Services
OnErrorOccurred($"方向控制失败: {ex.Message}");
}
}
+
+ ///
+ /// 开始指定方向的测试 - 写入1到对应寄存器
+ /// M0=上升, M1=下降, M2=向右, M3=向左
+ ///
+ public void StartDirectionTest(string direction)
+ {
+ try
+ {
+ if (_serialPort != null && _isConnected)
+ {
+ string command = direction.ToUpper() switch
+ {
+ "UP" => "TEST_UP_START", // 向M0写入1
+ "DOWN" => "TEST_DOWN_START", // 向M1写入1
+ "RIGHT" => "TEST_RIGHT_START", // 向M2写入1
+ "LEFT" => "TEST_LEFT_START", // 向M3写入1
+ _ => throw new ArgumentException($"未知方向: {direction}")
+ };
+ _serialPort.WriteLine(command);
+ System.Diagnostics.Debug.WriteLine($"[ModbusService] 开始测试: {direction} -> {command}");
+ }
+ }
+ catch (Exception ex)
+ {
+ OnErrorOccurred($"开始测试失败: {ex.Message}");
+ }
+ }
+
+ ///
+ /// 停止指定方向的测试 - 写入0到对应寄存器
+ ///
+ public void StopDirectionTest(string direction)
+ {
+ try
+ {
+ if (_serialPort != null && _isConnected)
+ {
+ string command = direction.ToUpper() switch
+ {
+ "UP" => "TEST_UP_STOP", // 向M0写入0
+ "DOWN" => "TEST_DOWN_STOP", // 向M1写入0
+ "RIGHT" => "TEST_RIGHT_STOP", // 向M2写入0
+ "LEFT" => "TEST_LEFT_STOP", // 向M3写入0
+ _ => throw new ArgumentException($"未知方向: {direction}")
+ };
+ _serialPort.WriteLine(command);
+ System.Diagnostics.Debug.WriteLine($"[ModbusService] 停止测试: {direction} -> {command}");
+ }
+ }
+ catch (Exception ex)
+ {
+ OnErrorOccurred($"停止测试失败: {ex.Message}");
+ }
+ }
private async Task AcquisitionLoopAsync(TestParameters parameters, CancellationToken token)
{
diff --git a/CSI-H238M/CSI-H238M/Services/Services.cs b/CSI-H238M/CSI-H238M/Services/Services.cs
index bb5db79..e763624 100644
--- a/CSI-H238M/CSI-H238M/Services/Services.cs
+++ b/CSI-H238M/CSI-H238M/Services/Services.cs
@@ -536,5 +536,17 @@ namespace COFTester.Services
string action = start ? "開始" : "停止";
System.Diagnostics.Debug.WriteLine($"[Simulated] 方向控制: {direction} {action}");
}
+
+ public void StartDirectionTest(string direction)
+ {
+ // 模擬开始测试(無實際操作)
+ System.Diagnostics.Debug.WriteLine($"[Simulated] 开始测试: {direction}");
+ }
+
+ public void StopDirectionTest(string direction)
+ {
+ // 模擬停止测试(無實際操作)
+ System.Diagnostics.Debug.WriteLine($"[Simulated] 停止测试: {direction}");
+ }
}
}
diff --git a/CSI-H238M/config.json b/CSI-H238M/config.json
index 892a603..f147143 100644
--- a/CSI-H238M/config.json
+++ b/CSI-H238M/config.json
@@ -8,6 +8,10 @@
"ConnectTimeout": 5000,
"ForceRegister": 0,
"DisplacementRegister": 2,
+ "FrictionForceRegister": 1314,
+ "CurveDisplacementRegister": 360,
+ "VerticalPositionRegister": 12,
+ "HorizontalPositionRegister": 16,
"ControlRegister": 10,
"StatusRegister": 12,
"SledMassRegister": 20,
@@ -15,6 +19,13 @@
"TestDurationRegister": 24,
"TestStrokeRegister": 26,
"SamplingRateRegister": 28,
+ "HorizontalManualSpeedRegister": 350,
+ "VerticalManualSpeedRegister": 310,
+ "VerticalManualDisplacementRegister": 320,
+ "VerticalLimitRegister": 290,
+ "HorizontalLimitRegister": 292,
+ "ForceCoefficientRegister": 1320,
+ "ForceProtectionRegister": 1322,
"CalibrationRegister": 1300,
"RetryCount": 3,
"RetryDelay": 500
@@ -31,6 +42,10 @@
"WriteTimeout": 1000,
"ForceRegister": 0,
"DisplacementRegister": 2,
+ "FrictionForceRegister": 1314,
+ "CurveDisplacementRegister": 360,
+ "VerticalPositionRegister": 12,
+ "HorizontalPositionRegister": 16,
"ControlRegister": 10,
"StatusRegister": 12,
"SledMassRegister": 20,
@@ -38,6 +53,13 @@
"TestDurationRegister": 24,
"TestStrokeRegister": 26,
"SamplingRateRegister": 28,
+ "HorizontalManualSpeedRegister": 350,
+ "VerticalManualSpeedRegister": 310,
+ "VerticalManualDisplacementRegister": 320,
+ "VerticalLimitRegister": 290,
+ "HorizontalLimitRegister": 292,
+ "ForceCoefficientRegister": 1320,
+ "ForceProtectionRegister": 1322,
"CalibrationRegister": 1300,
"RetryCount": 3,
"RetryDelay": 500