更新
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user