This commit is contained in:
GukSang.Jin
2026-06-09 14:45:12 +08:00
parent d9fe314e84
commit 8e683372ee
2 changed files with 54 additions and 174 deletions

View File

@@ -384,7 +384,6 @@
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="实时千分表" Style="{StaticResource MetricTitle}" />
<TextBlock Grid.Row="1"
@@ -393,13 +392,6 @@
Style="{StaticResource MetricValue}"
Foreground="#0F766E"
VerticalAlignment="Center" />
<TextBlock Grid.Row="2"
x:Name="DisplacementStatusText"
Text="{Binding DisplacementStatusText}"
FontSize="22"
FontWeight="SemiBold"
HorizontalAlignment="Center"
Foreground="#52616F" />
</Grid>
</Border>
@@ -408,7 +400,6 @@
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="实时轴向力" Style="{StaticResource MetricTitle}" />
<TextBlock Grid.Row="1"
@@ -417,11 +408,6 @@
Style="{StaticResource MetricValue}"
Foreground="#1D4ED8"
VerticalAlignment="Center" />
<TextBlock Grid.Row="2"
Text="达到设定力自动停止"
FontSize="18"
HorizontalAlignment="Center"
Foreground="#52616F" />
</Grid>
</Border>
</Grid>
@@ -683,25 +669,11 @@
Foreground="#0F766E"
VerticalAlignment="Center" />
<Border Grid.Row="2" Style="{StaticResource InfoStrip}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock x:Name="SpeedTorqueStatusText"
Text="{Binding SpeedTorqueStatusText}"
FontSize="19"
FontWeight="SemiBold"
HorizontalAlignment="Center"
Foreground="#334155" />
<TextBlock Grid.Row="1"
x:Name="RealtimePressureText"
<TextBlock x:Name="RealtimePressureText"
Text="{Binding RealtimePressureText}"
FontSize="16"
HorizontalAlignment="Center"
Foreground="#52616F"
Margin="0,4,0,0" />
</Grid>
Foreground="#52616F" />
</Border>
</Grid>
</Border>
@@ -981,7 +953,6 @@
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="210" />
@@ -1007,16 +978,6 @@
Style="{StaticResource MutedText}"
Margin="0,16,0,0"
VerticalAlignment="Center" />
<Border Grid.Row="2"
Grid.ColumnSpan="3"
Style="{StaticResource InfoStrip}"
Margin="0,16,0,0">
<TextBlock Text="{Binding NoLoadSpeedStatusText}"
FontSize="18"
FontWeight="SemiBold"
HorizontalAlignment="Center"
Foreground="#334155" />
</Border>
</Grid>
</Border>
</Grid>

View File

@@ -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;
}
}
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<ushort, bool> 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();
}