From 8e683372ee7c521caf853e585d539500a4766a2c Mon Sep 17 00:00:00 2001 From: "GukSang.Jin" Date: Tue, 9 Jun 2026 14:45:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DentistryHandpieces/MainWindow.xaml | 43 +---- DentistryHandpieces/MainWindowViewModel.cs | 185 ++++++--------------- 2 files changed, 54 insertions(+), 174 deletions(-) diff --git a/DentistryHandpieces/MainWindow.xaml b/DentistryHandpieces/MainWindow.xaml index 5e3ec02..c739edf 100644 --- a/DentistryHandpieces/MainWindow.xaml +++ b/DentistryHandpieces/MainWindow.xaml @@ -384,7 +384,6 @@ - - @@ -408,7 +400,6 @@ - - @@ -683,25 +669,11 @@ Foreground="#0F766E" VerticalAlignment="Center" /> - - - - - - - - + Foreground="#52616F" /> @@ -981,7 +953,6 @@ - @@ -1007,16 +978,6 @@ Style="{StaticResource MutedText}" Margin="0,16,0,0" VerticalAlignment="Center" /> - - - diff --git a/DentistryHandpieces/MainWindowViewModel.cs b/DentistryHandpieces/MainWindowViewModel.cs index 4e247af..0b71078 100644 --- a/DentistryHandpieces/MainWindowViewModel.cs +++ b/DentistryHandpieces/MainWindowViewModel.cs @@ -204,10 +204,6 @@ public sealed class MainWindowViewModel : ObservableObject private bool _isDisplacementResetting; private bool _isSpeedTorqueResetting; private bool _hasShownSpeedTorqueEndWarnings; - private bool _isAxialResetEnabled; - private bool _isAxialResetDone; - private bool _isSpeedTorqueResetEnabled; - private bool _isSpeedTorqueResetDone; private DateTime _lastParameterReadFailureLogAt = DateTime.MinValue; private string _relativeDisplacementText = "0.000 mm"; private string _axialAxisPositionText = "0.000 mm"; @@ -217,15 +213,12 @@ public sealed class MainWindowViewModel : ObservableObject private string _finalDisplacementText = "--"; private string _axialForceText = "0.00 N"; private string _finalAxialForceText = "--"; - private string _displacementStatusText = "状态:待复位"; private string _realtimeSpeedText = "0 r/min"; private string _realtimeTorqueText = $"0.00 {TorqueUnit}"; private string _realtimePressureText = "0.000 MPa"; private string _noLoadSpeedRecordText = "0 r/min"; private string _noLoadSpeedErrorRateText = "0.00 %"; - private string _noLoadSpeedStatusText = "状态:待记录"; private string _noLoadSpeedSettingInput = "0"; - private string _speedTorqueStatusText = "状态:待启动"; private string _finalSpeedTorqueText = "最终:-- / --"; private string _speedTorqueAxisPositionText = "0.000 mm"; private string _speedTorqueDisplacementText = "0.000 mm"; @@ -277,8 +270,8 @@ public sealed class MainWindowViewModel : ObservableObject _parameterConfig = LoadParameterConfig(); ApplyParameterConfigToInputs(); - UpdateDisplacementDisplay("状态:待复位"); - UpdateSpeedTorqueDisplay("状态:待启动"); + UpdateDisplacementDisplay(); + UpdateSpeedTorqueDisplay(); RefreshOverallResult(); UpdateDataCaptureStatus(); @@ -401,9 +394,7 @@ public sealed class MainWindowViewModel : ObservableObject if (!TryReadNonNegative(value, GetActiveAxialForceSetpointName(), out double axialForceSetpoint, out string error)) { - SetTestPageInputStatus( - _parameterConfig.UseAxialPullForceSetpoint ? TestPageInputParameter.AxialPullForceSetpoint : TestPageInputParameter.AxialJumpForceSetpoint, - error); + SetTestPageInputStatus(error); return; } @@ -553,12 +544,6 @@ public sealed class MainWindowViewModel : ObservableObject private set => SetProperty(ref _finalAxialForceText, value); } - public string DisplacementStatusText - { - get => _displacementStatusText; - private set => SetProperty(ref _displacementStatusText, value); - } - public string RealtimeSpeedText { get => _realtimeSpeedText; @@ -589,18 +574,6 @@ public sealed class MainWindowViewModel : ObservableObject private set => SetProperty(ref _noLoadSpeedErrorRateText, value); } - public string NoLoadSpeedStatusText - { - get => _noLoadSpeedStatusText; - private set => SetProperty(ref _noLoadSpeedStatusText, value); - } - - public string SpeedTorqueStatusText - { - get => _speedTorqueStatusText; - private set => SetProperty(ref _speedTorqueStatusText, value); - } - public string FinalSpeedTorqueText { get => _finalSpeedTorqueText; @@ -738,8 +711,8 @@ public sealed class MainWindowViewModel : ObservableObject await StopSpeedTorqueTestAsync("状态:已完成"); } - UpdateDisplacementDisplay(ResolveDisplacementStatus(DisplacementStatusText)); - UpdateSpeedTorqueDisplay(ResolveSpeedTorqueStatus(SpeedTorqueStatusText)); + UpdateDisplacementDisplay(); + UpdateSpeedTorqueDisplay(); UpdateNoLoadSpeedDisplay(); await AutoStopIfSetpointReachedAsync(); await AutoStopIfSpeedTorqueProtectionReachedAsync(); @@ -747,7 +720,6 @@ public sealed class MainWindowViewModel : ObservableObject if (_lastRealtimeReadFailed) { StatusText = "实时数据已恢复"; - NoLoadSpeedStatusText = "状态:实时数据已恢复"; _lastRealtimeReadFailed = false; Log.Information("PLC实时数据读取已恢复"); } @@ -757,7 +729,6 @@ public sealed class MainWindowViewModel : ObservableObject if (!_lastRealtimeReadFailed) { StatusText = $"实时数据读取失败:{ex.Message}"; - NoLoadSpeedStatusText = "状态:实时数据读取失败"; _lastRealtimeReadFailed = true; Log.Warning(ex, "PLC实时数据读取失败,后续相同故障将等待恢复后再记录"); } @@ -849,8 +820,8 @@ public sealed class MainWindowViewModel : ObservableObject ApplyParameterConfigToInputs(); NoLoadSpeedSettingInput = FormatConfigNumber(noLoadSpeedSetting); NotifyParameterInputsChanged(); - UpdateDisplacementDisplay(DisplacementStatusText); - UpdateSpeedTorqueDisplay(SpeedTorqueStatusText); + UpdateDisplacementDisplay(); + UpdateSpeedTorqueDisplay(); _hasLoadedParameterConfigFromPlc = true; _parameterRetryTimer.Stop(); ParameterStatusText = "通信读取成功"; @@ -1850,8 +1821,8 @@ public sealed class MainWindowViewModel : ObservableObject _parameterConfig = config; SaveParameterConfig(); UpdateParameterSummaries(); - UpdateDisplacementDisplay(_isDisplacementRunning ? "状态:测试中" : _finalDisplacement.HasValue ? "状态:已停止" : "状态:待启动"); - UpdateSpeedTorqueDisplay(_isSpeedTorqueRunning ? "状态:测试中" : _finalSpeed.HasValue ? "状态:已停止" : "状态:待启动"); + UpdateDisplacementDisplay(); + UpdateSpeedTorqueDisplay(); await AutoStopIfSetpointReachedAsync(); await AutoStopIfSpeedTorqueProtectionReachedAsync(); _hasLoadedParameterConfigFromPlc = true; @@ -2055,7 +2026,7 @@ public sealed class MainWindowViewModel : ObservableObject return; } - await MoveSpeedTorqueDisplacementAsync("状态:前进"); + await MoveSpeedTorqueDisplacementAsync(); } private async Task BackwardSpeedTorqueAsync() @@ -2065,7 +2036,7 @@ public sealed class MainWindowViewModel : ObservableObject return; } - await MoveSpeedTorqueDisplacementAsync("状态:后退"); + await MoveSpeedTorqueDisplacementAsync(); } private async Task TriggerVentValveAsync() @@ -2085,7 +2056,7 @@ public sealed class MainWindowViewModel : ObservableObject if (!TryReadNonNegative(input, fieldName, out double value, out string error)) { - SetTestPageInputStatus(parameter, error); + SetTestPageInputStatus(error); return; } @@ -2102,7 +2073,7 @@ public sealed class MainWindowViewModel : ObservableObject if (!TryReadNonNegative(input, fieldName, out double value, out string error) || !CanScaleTenthsToPlc(value, fieldName, out error)) { - SetTestPageInputStatus(parameter, error); + SetTestPageInputStatus(error); return; } @@ -2126,7 +2097,7 @@ public sealed class MainWindowViewModel : ObservableObject } catch (Exception ex) { - SetTestPageInputStatus(parameter, $"{fieldName}自动写入 D{registerAddress} 失败:{ex.Message}"); + SetTestPageInputStatus($"{fieldName}自动写入 D{registerAddress} 失败:{ex.Message}"); Log.Error(ex, "{FieldName}自动写入失败,D{RegisterAddress}={Value}", fieldName, registerAddress, value); } finally @@ -2149,7 +2120,7 @@ public sealed class MainWindowViewModel : ObservableObject } catch (Exception ex) { - SetTestPageInputStatus(parameter, $"{fieldName}自动写入 D{registerAddress} 失败:{ex.Message}"); + SetTestPageInputStatus($"{fieldName}自动写入 D{registerAddress} 失败:{ex.Message}"); Log.Error(ex, "{FieldName}自动写入失败,D{RegisterAddress}={Value}", fieldName, registerAddress, value); } finally @@ -2176,7 +2147,7 @@ public sealed class MainWindowViewModel : ObservableObject UpdateTorqueCurveStatus(); } - SetTestPageInputStatus(parameter, $"{fieldName}已自动写入并回读确认 D{registerAddress}={FormatConfigNumber(confirmedValue)}"); + SetTestPageInputStatus($"{fieldName}已自动写入并回读确认 D{registerAddress}={FormatConfigNumber(confirmedValue)}"); Log.Information("{FieldName}自动写入并回读成功,D{RegisterAddress}={Value}", fieldName, registerAddress, confirmedValue); if (parameter is TestPageInputParameter.AxialPullForceSetpoint or TestPageInputParameter.AxialJumpForceSetpoint) @@ -2235,24 +2206,17 @@ public sealed class MainWindowViewModel : ObservableObject } } - private void SetTestPageInputStatus(TestPageInputParameter parameter, string message) + private void SetTestPageInputStatus(string message) { ParameterStatusText = message; - if (parameter == TestPageInputParameter.NoLoadSpeedSetting) - { - NoLoadSpeedStatusText = $"状态:{message}"; - } - else - { - StatusText = message; - } + StatusText = message; } private async Task SaveNoLoadSpeedSettingAsync() { if (!TryReadNonNegative(NoLoadSpeedSettingInput, "空载转速设置", out double setting, out string error)) { - NoLoadSpeedStatusText = $"状态:{error}"; + StatusText = error; Log.Warning("空载转速设置被阻止:{ValidationError}", error); return; } @@ -2268,20 +2232,18 @@ public sealed class MainWindowViewModel : ObservableObject { if (_activeNoLoadSpeedRun is not null) { - NoLoadSpeedStatusText = "状态:空载转速正在记录,请稍候"; + StatusText = "空载转速正在记录,请稍候。"; return; } if (!await PulsePlcAsync(NoLoadSpeedRecordCoil, "记录空载转速")) { - NoLoadSpeedStatusText = "状态:记录指令发送失败"; return; } PrepareSessionForNewRun(); _activeNoLoadSpeedRun = CreateTestRun("空载转速测试"); _noLoadCaptureDeadline = DateTime.Now.Add(NoLoadCaptureDuration); - NoLoadSpeedStatusText = $"状态:已触发 M{NoLoadSpeedRecordCoil},正在完整记录 PLC 更新"; UpdateDataCaptureStatus(); } @@ -2289,7 +2251,7 @@ public sealed class MainWindowViewModel : ObservableObject { if (_isSpeedTorqueRunning) { - UpdateSpeedTorqueDisplay("状态:测试已在运行"); + UpdateSpeedTorqueDisplay(); return; } @@ -2300,7 +2262,7 @@ public sealed class MainWindowViewModel : ObservableObject if (!TryGetRealtimeSpeed(out _) || !TryGetRealtimeTorque(out _)) { - UpdateSpeedTorqueDisplay("状态:读数无效"); + UpdateSpeedTorqueDisplay(); return; } @@ -2315,7 +2277,7 @@ public sealed class MainWindowViewModel : ObservableObject ClearTorqueSamples(); AppendTorqueSample(GetScaledTorque(), _speedTorqueStartedAt.Value); _maxSpeedTorqueDisplacement = Math.Max(_maxSpeedTorqueDisplacement, Math.Abs(_speedTorqueDisplacement)); - UpdateSpeedTorqueDisplay("状态:测试中"); + UpdateSpeedTorqueDisplay(); Log.Information("转速/扭矩测试已启动,起始转速 {Speed},起始扭矩 {Torque},起始位移 {Displacement}", _realtimeSpeed, GetScaledTorque(), _speedTorqueDisplacement); await AutoStopIfSpeedTorqueProtectionReachedAsync(); } @@ -2334,7 +2296,7 @@ public sealed class MainWindowViewModel : ObservableObject { _isSpeedTorqueResetting = true; SpeedTorqueResetButtonText = "复位中"; - UpdateSpeedTorqueDisplay("状态:复位中"); + UpdateSpeedTorqueDisplay(); try { @@ -2349,7 +2311,7 @@ public sealed class MainWindowViewModel : ObservableObject "转速/扭矩复位", UpdateSpeedTorqueResetState)) { - UpdateSpeedTorqueDisplay("状态:复位完成未确认"); + UpdateSpeedTorqueDisplay(); return; } @@ -2367,7 +2329,7 @@ public sealed class MainWindowViewModel : ObservableObject _speedTorqueStartedAt = null; _hasShownSpeedTorqueEndWarnings = false; ClearTorqueSamples(); - UpdateSpeedTorqueDisplay("状态:已复位"); + UpdateSpeedTorqueDisplay(); Log.Information("转速/扭矩复位完成,零点 {ZeroPosition}", _speedTorqueZero); } finally @@ -2384,7 +2346,7 @@ public sealed class MainWindowViewModel : ObservableObject return; } - await MoveAxialDisplacementAsync("状态:前进"); + await MoveAxialDisplacementAsync(); } private async Task BackwardDisplacementAsync() @@ -2394,14 +2356,14 @@ public sealed class MainWindowViewModel : ObservableObject return; } - await MoveAxialDisplacementAsync("状态:后退"); + await MoveAxialDisplacementAsync(); } private async Task StartDisplacementAsync() { if (_isDisplacementRunning) { - UpdateDisplacementDisplay("状态:测试已在运行"); + UpdateDisplacementDisplay(); return; } @@ -2412,7 +2374,7 @@ public sealed class MainWindowViewModel : ObservableObject if (!TryGetDialValue(out _) || !TryGetAxialForceValue(out _)) { - UpdateDisplacementDisplay("状态:读数无效"); + UpdateDisplacementDisplay(); return; } @@ -2422,7 +2384,7 @@ public sealed class MainWindowViewModel : ObservableObject _finalDisplacement = null; _finalAxialForce = null; _maxDisplacement = Math.Abs(_relativeDisplacement); - UpdateDisplacementDisplay("状态:测试中"); + UpdateDisplacementDisplay(); Log.Information("轴向测试已启动,起始位移 {Displacement},起始轴向力 {AxialForce}", _relativeDisplacement, GetScaledAxialForce()); await AutoStopIfSetpointReachedAsync(); } @@ -2441,7 +2403,7 @@ public sealed class MainWindowViewModel : ObservableObject { _isDisplacementResetting = true; DisplacementResetButtonText = "复位中"; - UpdateDisplacementDisplay("状态:复位中"); + UpdateDisplacementDisplay(); try { @@ -2456,7 +2418,7 @@ public sealed class MainWindowViewModel : ObservableObject "轴向复位", UpdateAxialResetState)) { - UpdateDisplacementDisplay("状态:复位完成未确认"); + UpdateDisplacementDisplay(); return; } @@ -2464,7 +2426,7 @@ public sealed class MainWindowViewModel : ObservableObject PersistCurrentPayloadSnapshot("轴向复位前"); if (!TryGetDialValue(out double currentDial)) { - UpdateDisplacementDisplay("状态:读数无效"); + UpdateDisplacementDisplay(); return; } @@ -2475,7 +2437,7 @@ public sealed class MainWindowViewModel : ObservableObject _finalAxialForce = null; await UpdateAxialForceFromInputAsync(); _isDisplacementRunning = false; - UpdateDisplacementDisplay("状态:已复位"); + UpdateDisplacementDisplay(); Log.Information("轴向复位完成,千分表零点 {DialZero}", _dialZero); } finally @@ -2547,7 +2509,7 @@ public sealed class MainWindowViewModel : ObservableObject return false; } - await MoveAxialDisplacementAsync($"状态:{actionName.Replace("轴向", string.Empty)}"); + await MoveAxialDisplacementAsync(); return true; } @@ -2558,7 +2520,7 @@ public sealed class MainWindowViewModel : ObservableObject return false; } - await MoveSpeedTorqueDisplacementAsync($"状态:{actionName.Replace("转速/扭矩", string.Empty)}"); + await MoveSpeedTorqueDisplacementAsync(); return true; } @@ -2578,11 +2540,11 @@ public sealed class MainWindowViewModel : ObservableObject } } - private async Task MoveSpeedTorqueDisplacementAsync(string status) + private async Task MoveSpeedTorqueDisplacementAsync() { if (_parameterConfig.SpeedTorqueManualDisplacement <= 0) { - UpdateSpeedTorqueDisplay("状态:手动位移为 0"); + UpdateSpeedTorqueDisplay(); return; } @@ -2592,15 +2554,15 @@ public sealed class MainWindowViewModel : ObservableObject _finalSpeedTorqueDisplacement = null; } - UpdateSpeedTorqueDisplay(_isSpeedTorqueRunning ? "状态:测试中" : status); + UpdateSpeedTorqueDisplay(); await AutoStopIfSpeedTorqueProtectionReachedAsync(); } - private async Task MoveAxialDisplacementAsync(string status) + private async Task MoveAxialDisplacementAsync() { if (_parameterConfig.AxialManualDisplacement <= 0) { - UpdateDisplacementDisplay("状态:手动位移为 0"); + UpdateDisplacementDisplay(); return; } @@ -2611,7 +2573,7 @@ public sealed class MainWindowViewModel : ObservableObject _finalAxialForce = null; } - UpdateDisplacementDisplay(_isDisplacementRunning ? "状态:测试中" : status); + UpdateDisplacementDisplay(); await AutoStopIfSetpointReachedAsync(); } @@ -2623,7 +2585,7 @@ public sealed class MainWindowViewModel : ObservableObject } _axialForce = force; - UpdateDisplacementDisplay(_isDisplacementRunning ? "状态:测试中" : _finalDisplacement.HasValue ? "状态:已停止" : "状态:待启动"); + UpdateDisplacementDisplay(); await AutoStopIfSetpointReachedAsync(); } @@ -2677,7 +2639,7 @@ public sealed class MainWindowViewModel : ObservableObject { if (!_isDisplacementRunning && _finalDisplacement.HasValue) { - UpdateDisplacementDisplay(status); + UpdateDisplacementDisplay(); return; } @@ -2686,7 +2648,7 @@ public sealed class MainWindowViewModel : ObservableObject _finalAxialForce = GetScaledAxialForce(); FinalizeDisplacementRun(status); PersistCurrentPayloadSnapshot("轴向测试停止"); - UpdateDisplacementDisplay(status); + UpdateDisplacementDisplay(); Log.Information("轴向测试停止:{Status},最终位移 {FinalDisplacement},最终轴向力 {FinalAxialForce}", status, _finalDisplacement, _finalAxialForce); } @@ -2715,7 +2677,7 @@ public sealed class MainWindowViewModel : ObservableObject } _realtimeSpeed = speed; - UpdateSpeedTorqueDisplay(_isSpeedTorqueRunning ? "状态:测试中" : _finalSpeed.HasValue ? "状态:已停止" : "状态:待启动"); + UpdateSpeedTorqueDisplay(); } private async Task UpdateRealtimeTorqueFromInputAsync() @@ -2726,7 +2688,7 @@ public sealed class MainWindowViewModel : ObservableObject } _realtimeTorque = torque; - UpdateSpeedTorqueDisplay(_isSpeedTorqueRunning ? "状态:测试中" : _finalTorque.HasValue ? "状态:已停止" : "状态:待启动"); + UpdateSpeedTorqueDisplay(); await AutoStopIfSpeedTorqueProtectionReachedAsync(); } @@ -2772,7 +2734,7 @@ public sealed class MainWindowViewModel : ObservableObject { if (!TryGetRealtimeSpeed(out double speed) || !TryGetRealtimeTorque(out double torque)) { - UpdateSpeedTorqueDisplay("状态:读数无效"); + UpdateSpeedTorqueDisplay(); return; } @@ -2784,7 +2746,7 @@ public sealed class MainWindowViewModel : ObservableObject _finalSpeedTorqueDisplacement = _speedTorqueDisplacement; FinalizeSpeedTorqueRun(status); PersistCurrentPayloadSnapshot("转速/扭矩测试停止"); - UpdateSpeedTorqueDisplay(status); + UpdateSpeedTorqueDisplay(); Log.Information("转速/扭矩测试停止:{Status},最终位移 {FinalDisplacement},最终转速 {FinalSpeed},最终扭矩 {FinalTorque}", status, _finalSpeedTorqueDisplacement, _finalSpeed, _finalTorque); await ShowSpeedTorqueEndWarningsAsync(); } @@ -2867,60 +2829,20 @@ public sealed class MainWindowViewModel : ObservableObject private void UpdateAxialResetState(bool enabled, bool done) { - _isAxialResetEnabled = enabled; - _isAxialResetDone = done; DisplacementResetButtonText = _isDisplacementResetting || enabled ? "复位中" : "复位"; } private void UpdateSpeedTorqueResetState(bool enabled, bool done) { - _isSpeedTorqueResetEnabled = enabled; - _isSpeedTorqueResetDone = done; SpeedTorqueResetButtonText = _isSpeedTorqueResetting || enabled ? "复位中" : "复位"; } - private string ResolveDisplacementStatus(string fallback) - { - if (_isDisplacementResetting || _isAxialResetEnabled) - { - return "状态:复位中"; - } - - if (!_isDisplacementRunning && _isAxialResetDone && IsResetOrIdleStatus(fallback)) - { - return "状态:已复位"; - } - - return fallback; - } - - private string ResolveSpeedTorqueStatus(string fallback) - { - if (_isSpeedTorqueResetting || _isSpeedTorqueResetEnabled) - { - return "状态:复位中"; - } - - if (!_isSpeedTorqueRunning && _isSpeedTorqueResetDone && IsResetOrIdleStatus(fallback)) - { - return "状态:已复位"; - } - - return fallback; - } - - private static bool IsResetOrIdleStatus(string status) - { - return status.Contains("复位", StringComparison.Ordinal) - || status.Contains("待启动", StringComparison.Ordinal); - } - private static bool ReadCoilValue(IReadOnlyDictionary coilValues, ushort address) { return coilValues.TryGetValue(address, out bool value) && value; } - private void UpdateDisplacementDisplay(string status) + private void UpdateDisplacementDisplay() { RelativeDisplacementText = $"{FormatDisplacement(_relativeDisplacement)} mm"; AxialAxisPositionText = $"{FormatDisplacement(_axialAxisPosition)} mm"; @@ -2930,10 +2852,9 @@ public sealed class MainWindowViewModel : ObservableObject FinalDisplacementText = _finalDisplacement.HasValue ? $"{FormatDisplacement(_finalDisplacement.Value)} mm" : "--"; AxialForceText = $"{FormatForce(GetScaledAxialForce())} N"; FinalAxialForceText = _finalAxialForce.HasValue ? $"{FormatForce(_finalAxialForce.Value)} N" : "--"; - DisplacementStatusText = status; } - private void UpdateSpeedTorqueDisplay(string status) + private void UpdateSpeedTorqueDisplay() { RealtimeSpeedText = $"{FormatSpeed(_realtimeSpeed)} r/min"; RealtimeTorqueText = $"{FormatTorque(GetScaledTorque())} {TorqueUnit}"; @@ -2946,7 +2867,6 @@ public sealed class MainWindowViewModel : ObservableObject SpeedTorquePeakTorqueText = $"{FormatTorque(_speedTorquePeakTorque)} {TorqueUnit}"; SpeedTorqueMaxDisplacementText = $"{FormatDisplacement(_maxSpeedTorqueDisplacement)} mm"; SpeedTorqueFinalDisplacementText = _finalSpeedTorqueDisplacement.HasValue ? $"{FormatDisplacement(_finalSpeedTorqueDisplacement.Value)} mm" : "--"; - SpeedTorqueStatusText = status; UpdateTorqueCurveStatus(); } @@ -3260,7 +3180,6 @@ public sealed class MainWindowViewModel : ObservableObject _completedRuns.Add(_activeNoLoadSpeedRun); _activeNoLoadSpeedRun = null; _noLoadCaptureDeadline = null; - NoLoadSpeedStatusText = "状态:空载转速完整记录已保存"; PersistCurrentPayloadSnapshot("空载转速记录完成"); UpdateDataCaptureStatus(); }