This commit is contained in:
GukSang.Jin
2026-01-30 11:35:32 +08:00
parent 3edf2b4e39
commit bb77f9ca11
4 changed files with 395 additions and 35 deletions

View File

@@ -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"; // 操作員

View File

@@ -481,6 +481,13 @@ namespace COFTester.Services
/// <returns>元組 (升降位置, 水平位置)</returns>
protected abstract Task<(double verticalPos, double horizontalPos)> ReadPositionDataAsync();
/// <summary>
/// 讀取手動控制參數從 PLC 寄存器
/// D350 水平手動速度, D360 水平手動位移, D310 升降手動速度, D320 升降手動位移
/// D290 升降極限, D292 水平極限, D1320 拉力系數, D1322 拉力保護
/// </summary>
public abstract Task<TestParameters?> ReadManualControlParametersAsync();
/// <summary>
/// 寫入校準命令到 M1300 寄存器
/// </summary>
@@ -874,6 +881,115 @@ namespace COFTester.Services
}
}
/// <summary>
/// 讀取手動控制參數從 PLC 寄存器
/// </summary>
public override async Task<TestParameters?> 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()
{
base.Dispose();
@@ -1243,6 +1359,87 @@ namespace COFTester.Services
}
}
/// <summary>
/// 讀取手動控制參數從 PLC 寄存器
/// </summary>
public override async Task<TestParameters?> 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()
{
base.Dispose();
@@ -1591,6 +1788,87 @@ namespace COFTester.Services
}
}
/// <summary>
/// 讀取手動控制參數從 PLC 寄存器
/// </summary>
public override async Task<TestParameters?> 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()
{
base.Dispose();

View File

@@ -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)
@@ -72,6 +84,76 @@ namespace COFTester.ViewModels
OnPropertyChanged(nameof(Lang));
}
/// <summary>
/// 從設備讀取手動控制參數
/// </summary>
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;
public List<TestStandard> Standards { get; }

View File

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