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) =>
{
// 更新測試參數