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 public class TestParameters : INotifyPropertyChanged
{ {
private string _standard = "GB 10006"; private string _standard = "GB 10006";
private double _sledMass = 200.0; private double _sledMass = 0.0; // 不设置默认值,从寄存器读取
private double _testSpeed = 100.0; private double _testSpeed = 0.0; // 不设置默认值,从寄存器读取
private double _testDuration = 40.0; private double _testDuration = 0.0; // 不设置默认值,从寄存器读取
private double _testStroke = 80.0; private double _testStroke = 0.0; // 不设置默认值,从寄存器读取
private double _staticCalcStart = 0.0; private double _staticCalcStart = 0.0;
private double _staticCalcEnd = 5.0; private double _staticCalcEnd = 5.0;
private double _kineticCalcStart = 10.0; private double _kineticCalcStart = 10.0;
private double _kineticCalcEnd = 75.0; private double _kineticCalcEnd = 75.0;
private double _sampleWidth = 25.0; // 試樣寬度 (mm),用於剝離強度計算 private double _sampleWidth = 25.0; // 試樣寬度 (mm),用於剝離強度計算
// 手动控制参数 // 手动控制参数 - 不设置默认值,从寄存器读取
private double _horizontalManualSpeed = 10.0; // 水平手动速度 (mm/s) private double _horizontalManualSpeed = 0.0;
private double _horizontalManualDisplacement = 5.0; // 水平手动位移 (mm) private double _horizontalManualDisplacement = 0.0;
private double _verticalManualSpeed = 5.0; // 升降手动速度 (mm/s) private double _verticalManualSpeed = 0.0;
private double _verticalManualDisplacement = 2.0; // 升降手动位移 (mm) private double _verticalManualDisplacement = 0.0;
private double _verticalLimit = 100.0; // 升降极限 (mm) private double _verticalLimit = 0.0;
private double _horizontalLimit = 200.0; // 水平极限 (mm) private double _horizontalLimit = 0.0;
private double _forceCoefficient = 1.0; // 拉力系数 (N/V) private double _forceCoefficient = 0.0;
private double _forceProtection = 500.0; // 拉力保护 (N) private double _forceProtection = 0.0;
// 方向控制 // 方向控制
private bool _directionUp = true; 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 MaterialType { get; set; } = "Plastic Film"; // 材料類型
public string Operator { get; set; } = "Default"; // 操作員 public string Operator { get; set; } = "Default"; // 操作員

View File

@@ -481,6 +481,13 @@ namespace COFTester.Services
/// <returns>元組 (升降位置, 水平位置)</returns> /// <returns>元組 (升降位置, 水平位置)</returns>
protected abstract Task<(double verticalPos, double horizontalPos)> ReadPositionDataAsync(); 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> /// <summary>
/// 寫入校準命令到 M1300 寄存器 /// 寫入校準命令到 M1300 寄存器
/// </summary> /// </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() public override void Dispose()
{ {
base.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() public override void Dispose()
{ {
base.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() public override void Dispose()
{ {
base.Dispose(); base.Dispose();

View File

@@ -3,9 +3,11 @@ using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Linq; using System.Linq;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using System.Windows.Input; using System.Windows.Input;
using COFTester.Models; using COFTester.Models;
using COFTester.Resources; using COFTester.Resources;
using COFTester.Services;
namespace COFTester.ViewModels namespace COFTester.ViewModels
{ {
@@ -14,35 +16,39 @@ namespace COFTester.ViewModels
private TestStandard? _selectedStandard; private TestStandard? _selectedStandard;
private TestParameters _configParams; private TestParameters _configParams;
private bool _showKineticWarning; 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 _configParams = new TestParameters
{ {
// 基本測試參數 // 基本測試參數 - 初始化為 0空值
Standard = currentParams.Standard, Standard = currentParams.Standard, // 保留標準選擇
SledMass = currentParams.SledMass, SledMass = 0.0,
TestSpeed = currentParams.TestSpeed, TestSpeed = 0.0,
TestDuration = currentParams.TestDuration, TestDuration = 0.0,
TestStroke = currentParams.TestStroke, TestStroke = 0.0,
StaticCalcStart = currentParams.StaticCalcStart, StaticCalcStart = currentParams.StaticCalcStart, // 保留計算區間
StaticCalcEnd = currentParams.StaticCalcEnd, StaticCalcEnd = currentParams.StaticCalcEnd,
KineticCalcStart = currentParams.KineticCalcStart, KineticCalcStart = currentParams.KineticCalcStart,
KineticCalcEnd = currentParams.KineticCalcEnd, KineticCalcEnd = currentParams.KineticCalcEnd,
SampleWidth = currentParams.SampleWidth, SampleWidth = currentParams.SampleWidth, // 保留試樣寬度
// 手動控制參數 // 手動控制參數 - 初始化為 0空值
HorizontalManualSpeed = currentParams.HorizontalManualSpeed, HorizontalManualSpeed = 0.0,
HorizontalManualDisplacement = currentParams.HorizontalManualDisplacement, HorizontalManualDisplacement = 0.0,
VerticalManualSpeed = currentParams.VerticalManualSpeed, VerticalManualSpeed = 0.0,
VerticalManualDisplacement = currentParams.VerticalManualDisplacement, VerticalManualDisplacement = 0.0,
VerticalLimit = currentParams.VerticalLimit, VerticalLimit = 0.0,
HorizontalLimit = currentParams.HorizontalLimit, HorizontalLimit = 0.0,
ForceCoefficient = currentParams.ForceCoefficient, ForceCoefficient = 0.0,
ForceProtection = currentParams.ForceProtection, ForceProtection = 0.0,
// 方向控制 // 方向控制 - 保留當前選擇
DirectionUp = currentParams.DirectionUp, DirectionUp = currentParams.DirectionUp,
DirectionDown = currentParams.DirectionDown, DirectionDown = currentParams.DirectionDown,
DirectionRight = currentParams.DirectionRight, DirectionRight = currentParams.DirectionRight,
@@ -64,6 +70,12 @@ namespace COFTester.ViewModels
// 監聽語言切換事件 // 監聽語言切換事件
LanguageResources.Instance.PropertyChanged += OnLanguageChanged; LanguageResources.Instance.PropertyChanged += OnLanguageChanged;
// 如果設備已連接,從寄存器讀取當前值
if (_daqService != null && _daqService.IsConnected)
{
_ = LoadParametersFromDeviceAsync();
}
} }
private void OnLanguageChanged(object? sender, PropertyChangedEventArgs e) private void OnLanguageChanged(object? sender, PropertyChangedEventArgs e)
@@ -72,6 +84,76 @@ namespace COFTester.ViewModels
OnPropertyChanged(nameof(Lang)); 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 LanguageResources Lang => LanguageResources.Instance;
public List<TestStandard> Standards { get; } public List<TestStandard> Standards { get; }

View File

@@ -1077,7 +1077,7 @@ namespace COFTester.ViewModels
private void OpenConfig() private void OpenConfig()
{ {
var configViewModel = new ConfigViewModel(Parameters); var configViewModel = new ConfigViewModel(Parameters, _daqService);
configViewModel.ConfigApplied += (s, newParams) => configViewModel.ConfigApplied += (s, newParams) =>
{ {
// 更新測試參數 // 更新測試參數