diff --git a/CSI-H238M/CSI-H238M/Models/Model.cs b/CSI-H238M/CSI-H238M/Models/Model.cs index 448d8f6..30cecb3 100644 --- a/CSI-H238M/CSI-H238M/Models/Model.cs +++ b/CSI-H238M/CSI-H238M/Models/Model.cs @@ -33,25 +33,25 @@ namespace COFTester.Models public class TestParameters : INotifyPropertyChanged { private string _standard = "GB 10006"; - private double _sledMass = 200.0; - private double _testSpeed = 100.0; - private double _testDuration = 40.0; - private double _testStroke = 80.0; + private double _sledMass = 0.0; // 不设置默认值,从寄存器读取 + private double _testSpeed = 0.0; // 不设置默认值,从寄存器读取 + private double _testDuration = 0.0; // 不设置默认值,从寄存器读取 + private double _testStroke = 0.0; // 不设置默认值,从寄存器读取 private double _staticCalcStart = 0.0; private double _staticCalcEnd = 5.0; private double _kineticCalcStart = 10.0; private double _kineticCalcEnd = 75.0; private double _sampleWidth = 25.0; // 試樣寬度 (mm),用於剝離強度計算 - // 手动控制参数 - private double _horizontalManualSpeed = 10.0; // 水平手动速度 (mm/s) - private double _horizontalManualDisplacement = 5.0; // 水平手动位移 (mm) - private double _verticalManualSpeed = 5.0; // 升降手动速度 (mm/s) - private double _verticalManualDisplacement = 2.0; // 升降手动位移 (mm) - private double _verticalLimit = 100.0; // 升降极限 (mm) - private double _horizontalLimit = 200.0; // 水平极限 (mm) - private double _forceCoefficient = 1.0; // 拉力系数 (N/V) - private double _forceProtection = 500.0; // 拉力保护 (N) + // 手动控制参数 - 不设置默认值,从寄存器读取 + private double _horizontalManualSpeed = 0.0; + private double _horizontalManualDisplacement = 0.0; + private double _verticalManualSpeed = 0.0; + private double _verticalManualDisplacement = 0.0; + private double _verticalLimit = 0.0; + private double _horizontalLimit = 0.0; + private double _forceCoefficient = 0.0; + private double _forceProtection = 0.0; // 方向控制 private bool _directionUp = true; @@ -230,7 +230,7 @@ namespace COFTester.Models } } - public double SamplingRate { get; set; } = 100.0; // 採樣頻率 (Hz) + public double SamplingRate { get; set; } = 0.0; // 採樣頻率 (Hz) - 从寄存器读取 public string MaterialType { get; set; } = "Plastic Film"; // 材料類型 public string Operator { get; set; } = "Default"; // 操作員 diff --git a/CSI-H238M/CSI-H238M/Services/ModbusService.cs b/CSI-H238M/CSI-H238M/Services/ModbusService.cs index 52a3d34..21995e6 100644 --- a/CSI-H238M/CSI-H238M/Services/ModbusService.cs +++ b/CSI-H238M/CSI-H238M/Services/ModbusService.cs @@ -481,6 +481,13 @@ namespace COFTester.Services /// 元組 (升降位置, 水平位置) protected abstract Task<(double verticalPos, double horizontalPos)> ReadPositionDataAsync(); + /// + /// 讀取手動控制參數從 PLC 寄存器 + /// D350 水平手動速度, D360 水平手動位移, D310 升降手動速度, D320 升降手動位移 + /// D290 升降極限, D292 水平極限, D1320 拉力系數, D1322 拉力保護 + /// + public abstract Task ReadManualControlParametersAsync(); + /// /// 寫入校準命令到 M1300 寄存器 /// @@ -873,6 +880,115 @@ namespace COFTester.Services return (0, 0); } } + + /// + /// 讀取手動控制參數從 PLC 寄存器 + /// + public override async Task ReadManualControlParametersAsync() + { + if (_modbusMaster == null || !_isConnected) + { + System.Diagnostics.Debug.WriteLine("[ModbusTCP] 無法讀取參數:設備未連接"); + return null; + } + + try + { + var parameters = new TestParameters(); + + // === 讀取基本測試參數 === + // D20 滑塊質量 + var sledMassRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.SledMassRegister, 2); + parameters.SledMass = ConvertRegistersToFloat(sledMassRegs, 0); + + // D22 測試速度 + var testSpeedRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.TestSpeedRegister, 2); + parameters.TestSpeed = ConvertRegistersToFloat(testSpeedRegs, 0); + + // D24 測試時長 + var testDurationRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.TestDurationRegister, 2); + parameters.TestDuration = ConvertRegistersToFloat(testDurationRegs, 0); + + // D26 測試行程 + var testStrokeRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.TestStrokeRegister, 2); + parameters.TestStroke = ConvertRegistersToFloat(testStrokeRegs, 0); + + // D28 採樣頻率 + var samplingRateRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.SamplingRateRegister, 2); + parameters.SamplingRate = ConvertRegistersToFloat(samplingRateRegs, 0); + + // === 讀取手動控制參數 === + // D350 水平手動速度 + var hSpeedRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.HorizontalManualSpeedRegister, 2); + parameters.HorizontalManualSpeed = ConvertRegistersToFloat(hSpeedRegs, 0); + + // D360 水平手動位移 + var hDispRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.HorizontalManualDisplacementRegister, 2); + parameters.HorizontalManualDisplacement = ConvertRegistersToFloat(hDispRegs, 0); + + // D310 升降手動速度 + var vSpeedRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.VerticalManualSpeedRegister, 2); + parameters.VerticalManualSpeed = ConvertRegistersToFloat(vSpeedRegs, 0); + + // D320 升降手動位移 + var vDispRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.VerticalManualDisplacementRegister, 2); + parameters.VerticalManualDisplacement = ConvertRegistersToFloat(vDispRegs, 0); + + // D290 升降極限 + var vLimitRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.VerticalLimitRegister, 2); + parameters.VerticalLimit = ConvertRegistersToFloat(vLimitRegs, 0); + + // D292 水平極限 + var hLimitRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.HorizontalLimitRegister, 2); + parameters.HorizontalLimit = ConvertRegistersToFloat(hLimitRegs, 0); + + // D1320 拉力系數 + var forceCoefRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.ForceCoefficientRegister, 2); + parameters.ForceCoefficient = ConvertRegistersToFloat(forceCoefRegs, 0); + + // D1322 拉力保護 + var forceProtRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.ForceProtectionRegister, 2); + parameters.ForceProtection = ConvertRegistersToFloat(forceProtRegs, 0); + + System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 所有參數讀取完成:"); + System.Diagnostics.Debug.WriteLine($" === 基本測試參數 ==="); + System.Diagnostics.Debug.WriteLine($" 滑塊質量: {parameters.SledMass} g"); + System.Diagnostics.Debug.WriteLine($" 測試速度: {parameters.TestSpeed} mm/min"); + System.Diagnostics.Debug.WriteLine($" 測試時長: {parameters.TestDuration} s"); + System.Diagnostics.Debug.WriteLine($" 測試行程: {parameters.TestStroke} mm"); + System.Diagnostics.Debug.WriteLine($" 採樣頻率: {parameters.SamplingRate} Hz"); + System.Diagnostics.Debug.WriteLine($" === 手動控制參數 ==="); + System.Diagnostics.Debug.WriteLine($" 水平手動速度: {parameters.HorizontalManualSpeed} mm/min"); + System.Diagnostics.Debug.WriteLine($" 水平手動位移: {parameters.HorizontalManualDisplacement} mm"); + System.Diagnostics.Debug.WriteLine($" 升降手動速度: {parameters.VerticalManualSpeed} mm/min"); + System.Diagnostics.Debug.WriteLine($" 升降手動位移: {parameters.VerticalManualDisplacement} mm"); + System.Diagnostics.Debug.WriteLine($" 升降極限: {parameters.VerticalLimit} mm"); + System.Diagnostics.Debug.WriteLine($" 水平極限: {parameters.HorizontalLimit} mm"); + System.Diagnostics.Debug.WriteLine($" 拉力系數: {parameters.ForceCoefficient} N/V"); + System.Diagnostics.Debug.WriteLine($" 拉力保護: {parameters.ForceProtection} N"); + + return parameters; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 讀取參數失敗: {ex.Message}"); + OnErrorOccurred($"讀取參數失敗: {ex.Message}"); + return null; + } + } public override void Dispose() { @@ -1242,6 +1358,87 @@ namespace COFTester.Services return (0, 0); } } + + /// + /// 讀取手動控制參數從 PLC 寄存器 + /// + public override async Task ReadManualControlParametersAsync() + { + if (_modbusMaster == null || !_isConnected) + { + System.Diagnostics.Debug.WriteLine("[ModbusRTU] 無法讀取參數:設備未連接"); + return null; + } + + try + { + var parameters = new TestParameters(); + + // === 讀取基本測試參數 === + var sledMassRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.SledMassRegister, 2); + parameters.SledMass = ConvertRegistersToFloat(sledMassRegs, 0); + + var testSpeedRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.TestSpeedRegister, 2); + parameters.TestSpeed = ConvertRegistersToFloat(testSpeedRegs, 0); + + var testDurationRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.TestDurationRegister, 2); + parameters.TestDuration = ConvertRegistersToFloat(testDurationRegs, 0); + + var testStrokeRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.TestStrokeRegister, 2); + parameters.TestStroke = ConvertRegistersToFloat(testStrokeRegs, 0); + + var samplingRateRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.SamplingRateRegister, 2); + parameters.SamplingRate = ConvertRegistersToFloat(samplingRateRegs, 0); + + // === 讀取手動控制參數 === + var hSpeedRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.HorizontalManualSpeedRegister, 2); + parameters.HorizontalManualSpeed = ConvertRegistersToFloat(hSpeedRegs, 0); + + var hDispRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.HorizontalManualDisplacementRegister, 2); + parameters.HorizontalManualDisplacement = ConvertRegistersToFloat(hDispRegs, 0); + + var vSpeedRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.VerticalManualSpeedRegister, 2); + parameters.VerticalManualSpeed = ConvertRegistersToFloat(vSpeedRegs, 0); + + var vDispRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.VerticalManualDisplacementRegister, 2); + parameters.VerticalManualDisplacement = ConvertRegistersToFloat(vDispRegs, 0); + + var vLimitRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.VerticalLimitRegister, 2); + parameters.VerticalLimit = ConvertRegistersToFloat(vLimitRegs, 0); + + var hLimitRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.HorizontalLimitRegister, 2); + parameters.HorizontalLimit = ConvertRegistersToFloat(hLimitRegs, 0); + + var forceCoefRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.ForceCoefficientRegister, 2); + parameters.ForceCoefficient = ConvertRegistersToFloat(forceCoefRegs, 0); + + var forceProtRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.ForceProtectionRegister, 2); + parameters.ForceProtection = ConvertRegistersToFloat(forceProtRegs, 0); + + System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 所有參數讀取完成"); + + return parameters; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 讀取參數失敗: {ex.Message}"); + OnErrorOccurred($"讀取參數失敗: {ex.Message}"); + return null; + } + } public override void Dispose() { @@ -1590,6 +1787,87 @@ namespace COFTester.Services return (0, 0); } } + + /// + /// 讀取手動控制參數從 PLC 寄存器 + /// + public override async Task ReadManualControlParametersAsync() + { + if (_modbusMaster == null || !_isConnected) + { + System.Diagnostics.Debug.WriteLine("[ModbusASCII] 無法讀取參數:設備未連接"); + return null; + } + + try + { + var parameters = new TestParameters(); + + // === 讀取基本測試參數 === + var sledMassRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.SledMassRegister, 2); + parameters.SledMass = ConvertRegistersToFloat(sledMassRegs, 0); + + var testSpeedRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.TestSpeedRegister, 2); + parameters.TestSpeed = ConvertRegistersToFloat(testSpeedRegs, 0); + + var testDurationRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.TestDurationRegister, 2); + parameters.TestDuration = ConvertRegistersToFloat(testDurationRegs, 0); + + var testStrokeRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.TestStrokeRegister, 2); + parameters.TestStroke = ConvertRegistersToFloat(testStrokeRegs, 0); + + var samplingRateRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.SamplingRateRegister, 2); + parameters.SamplingRate = ConvertRegistersToFloat(samplingRateRegs, 0); + + // === 讀取手動控制參數 === + var hSpeedRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.HorizontalManualSpeedRegister, 2); + parameters.HorizontalManualSpeed = ConvertRegistersToFloat(hSpeedRegs, 0); + + var hDispRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.HorizontalManualDisplacementRegister, 2); + parameters.HorizontalManualDisplacement = ConvertRegistersToFloat(hDispRegs, 0); + + var vSpeedRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.VerticalManualSpeedRegister, 2); + parameters.VerticalManualSpeed = ConvertRegistersToFloat(vSpeedRegs, 0); + + var vDispRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.VerticalManualDisplacementRegister, 2); + parameters.VerticalManualDisplacement = ConvertRegistersToFloat(vDispRegs, 0); + + var vLimitRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.VerticalLimitRegister, 2); + parameters.VerticalLimit = ConvertRegistersToFloat(vLimitRegs, 0); + + var hLimitRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.HorizontalLimitRegister, 2); + parameters.HorizontalLimit = ConvertRegistersToFloat(hLimitRegs, 0); + + var forceCoefRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.ForceCoefficientRegister, 2); + parameters.ForceCoefficient = ConvertRegistersToFloat(forceCoefRegs, 0); + + var forceProtRegs = await _modbusMaster.ReadHoldingRegistersAsync( + _config.SlaveId, _config.ForceProtectionRegister, 2); + parameters.ForceProtection = ConvertRegistersToFloat(forceProtRegs, 0); + + System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 所有參數讀取完成"); + + return parameters; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 讀取參數失敗: {ex.Message}"); + OnErrorOccurred($"讀取參數失敗: {ex.Message}"); + return null; + } + } public override void Dispose() { diff --git a/CSI-H238M/CSI-H238M/ViewModels/ConfigViewModel.cs b/CSI-H238M/CSI-H238M/ViewModels/ConfigViewModel.cs index 849b959..32552fc 100644 --- a/CSI-H238M/CSI-H238M/ViewModels/ConfigViewModel.cs +++ b/CSI-H238M/CSI-H238M/ViewModels/ConfigViewModel.cs @@ -3,9 +3,11 @@ using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; +using System.Threading.Tasks; using System.Windows.Input; using COFTester.Models; using COFTester.Resources; +using COFTester.Services; namespace COFTester.ViewModels { @@ -14,35 +16,39 @@ namespace COFTester.ViewModels private TestStandard? _selectedStandard; private TestParameters _configParams; private bool _showKineticWarning; + private readonly IDataAcquisitionService? _daqService; - public ConfigViewModel(TestParameters currentParams) + public ConfigViewModel(TestParameters currentParams, IDataAcquisitionService? daqService = null) { - // 複製當前參數(包括所有手動控制參數) + _daqService = daqService; + + // 初始化參數為空值(0),不使用 currentParams 的值 + // 只有從寄存器讀取後才會顯示實際值 _configParams = new TestParameters { - // 基本測試參數 - Standard = currentParams.Standard, - SledMass = currentParams.SledMass, - TestSpeed = currentParams.TestSpeed, - TestDuration = currentParams.TestDuration, - TestStroke = currentParams.TestStroke, - StaticCalcStart = currentParams.StaticCalcStart, + // 基本測試參數 - 初始化為 0(空值) + Standard = currentParams.Standard, // 保留標準選擇 + SledMass = 0.0, + TestSpeed = 0.0, + TestDuration = 0.0, + TestStroke = 0.0, + StaticCalcStart = currentParams.StaticCalcStart, // 保留計算區間 StaticCalcEnd = currentParams.StaticCalcEnd, KineticCalcStart = currentParams.KineticCalcStart, KineticCalcEnd = currentParams.KineticCalcEnd, - SampleWidth = currentParams.SampleWidth, + SampleWidth = currentParams.SampleWidth, // 保留試樣寬度 - // 手動控制參數 - HorizontalManualSpeed = currentParams.HorizontalManualSpeed, - HorizontalManualDisplacement = currentParams.HorizontalManualDisplacement, - VerticalManualSpeed = currentParams.VerticalManualSpeed, - VerticalManualDisplacement = currentParams.VerticalManualDisplacement, - VerticalLimit = currentParams.VerticalLimit, - HorizontalLimit = currentParams.HorizontalLimit, - ForceCoefficient = currentParams.ForceCoefficient, - ForceProtection = currentParams.ForceProtection, + // 手動控制參數 - 初始化為 0(空值) + HorizontalManualSpeed = 0.0, + HorizontalManualDisplacement = 0.0, + VerticalManualSpeed = 0.0, + VerticalManualDisplacement = 0.0, + VerticalLimit = 0.0, + HorizontalLimit = 0.0, + ForceCoefficient = 0.0, + ForceProtection = 0.0, - // 方向控制 + // 方向控制 - 保留當前選擇 DirectionUp = currentParams.DirectionUp, DirectionDown = currentParams.DirectionDown, DirectionRight = currentParams.DirectionRight, @@ -64,6 +70,12 @@ namespace COFTester.ViewModels // 監聽語言切換事件 LanguageResources.Instance.PropertyChanged += OnLanguageChanged; + + // 如果設備已連接,從寄存器讀取當前值 + if (_daqService != null && _daqService.IsConnected) + { + _ = LoadParametersFromDeviceAsync(); + } } private void OnLanguageChanged(object? sender, PropertyChangedEventArgs e) @@ -71,6 +83,76 @@ namespace COFTester.ViewModels // 當語言資源變化時,通知 UI 更新 Lang 屬性 OnPropertyChanged(nameof(Lang)); } + + /// + /// 從設備讀取手動控制參數 + /// + private async Task LoadParametersFromDeviceAsync() + { + try + { + System.Diagnostics.Debug.WriteLine("[ConfigViewModel] 開始從設備讀取參數..."); + + // 檢查是否為 ModbusServiceBase 類型 + if (_daqService is ModbusServiceBase modbusService) + { + var deviceParams = await modbusService.ReadManualControlParametersAsync(); + + if (deviceParams != null) + { + // 更新基本測試參數 + ConfigParams.SledMass = deviceParams.SledMass; + ConfigParams.TestSpeed = deviceParams.TestSpeed; + ConfigParams.TestDuration = deviceParams.TestDuration; + ConfigParams.TestStroke = deviceParams.TestStroke; + ConfigParams.SamplingRate = deviceParams.SamplingRate; + + // 更新手動控制參數 + ConfigParams.HorizontalManualSpeed = deviceParams.HorizontalManualSpeed; + ConfigParams.HorizontalManualDisplacement = deviceParams.HorizontalManualDisplacement; + ConfigParams.VerticalManualSpeed = deviceParams.VerticalManualSpeed; + ConfigParams.VerticalManualDisplacement = deviceParams.VerticalManualDisplacement; + ConfigParams.VerticalLimit = deviceParams.VerticalLimit; + ConfigParams.HorizontalLimit = deviceParams.HorizontalLimit; + ConfigParams.ForceCoefficient = deviceParams.ForceCoefficient; + ConfigParams.ForceProtection = deviceParams.ForceProtection; + + // 通知 UI 更新 + OnPropertyChanged(nameof(ConfigParams)); + + System.Diagnostics.Debug.WriteLine("[ConfigViewModel] 參數讀取成功"); + System.Diagnostics.Debug.WriteLine($" === 基本測試參數 ==="); + System.Diagnostics.Debug.WriteLine($" 滑塊質量: {deviceParams.SledMass} g"); + System.Diagnostics.Debug.WriteLine($" 測試速度: {deviceParams.TestSpeed} mm/min"); + System.Diagnostics.Debug.WriteLine($" 測試時長: {deviceParams.TestDuration} s"); + System.Diagnostics.Debug.WriteLine($" 測試行程: {deviceParams.TestStroke} mm"); + System.Diagnostics.Debug.WriteLine($" 採樣頻率: {deviceParams.SamplingRate} Hz"); + System.Diagnostics.Debug.WriteLine($" === 手動控制參數 ==="); + System.Diagnostics.Debug.WriteLine($" 水平手動速度: {deviceParams.HorizontalManualSpeed} mm/min"); + System.Diagnostics.Debug.WriteLine($" 水平手動位移: {deviceParams.HorizontalManualDisplacement} mm"); + System.Diagnostics.Debug.WriteLine($" 升降手動速度: {deviceParams.VerticalManualSpeed} mm/min"); + System.Diagnostics.Debug.WriteLine($" 升降手動位移: {deviceParams.VerticalManualDisplacement} mm"); + System.Diagnostics.Debug.WriteLine($" 升降極限: {deviceParams.VerticalLimit} mm"); + System.Diagnostics.Debug.WriteLine($" 水平極限: {deviceParams.HorizontalLimit} mm"); + System.Diagnostics.Debug.WriteLine($" 拉力系數: {deviceParams.ForceCoefficient} N/V"); + System.Diagnostics.Debug.WriteLine($" 拉力保護: {deviceParams.ForceProtection} N"); + } + else + { + System.Diagnostics.Debug.WriteLine("[ConfigViewModel] 從設備讀取參數失敗,使用當前值"); + } + } + else + { + System.Diagnostics.Debug.WriteLine("[ConfigViewModel] 當前服務不支持參數讀取(非 Modbus 服務)"); + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"[ConfigViewModel] 讀取參數異常: {ex.Message}"); + // 讀取失敗時保持當前值,不影響用戶操作 + } + } public LanguageResources Lang => LanguageResources.Instance; diff --git a/CSI-H238M/CSI-H238M/ViewModels/ViewModel.cs b/CSI-H238M/CSI-H238M/ViewModels/ViewModel.cs index 4365c51..195c009 100644 --- a/CSI-H238M/CSI-H238M/ViewModels/ViewModel.cs +++ b/CSI-H238M/CSI-H238M/ViewModels/ViewModel.cs @@ -1077,7 +1077,7 @@ namespace COFTester.ViewModels private void OpenConfig() { - var configViewModel = new ConfigViewModel(Parameters); + var configViewModel = new ConfigViewModel(Parameters, _daqService); configViewModel.ConfigApplied += (s, newParams) => { // 更新測試參數