From 4638e4c09475b5ed8c37a4ab2309ddf6c6fafef6 Mon Sep 17 00:00:00 2001 From: "GukSang.Jin" Date: Thu, 29 Jan 2026 15:17:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CSI-H238M/CSI-H238M/Models/AppConfig.cs | 26 ++ CSI-H238M/CSI-H238M/Models/Model.cs | 10 + CSI-H238M/CSI-H238M/Services/ModbusService.cs | 356 ++++++++++++++++++ CSI-H238M/CSI-H238M/Services/Services.cs | 12 + CSI-H238M/config.json | 22 ++ 5 files changed, 426 insertions(+) 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