更新20260615

This commit is contained in:
GukSang.Jin
2026-06-15 14:32:45 +08:00
parent ffdaf36dd9
commit 57b423fef1

View File

@@ -218,6 +218,7 @@ public sealed class MainWindowViewModel : ObservableObject
private bool _isSpeedTorqueRunning;
private bool _isSpeedTorqueCompletionArmed;
private bool _hasLoggedStaleSpeedTorqueDone;
private bool _wasSpeedTorqueStable;
private bool _isReadingRealtime;
private bool _isWritingAxialForceMode;
private bool _isReadingParameterConfig;
@@ -2630,6 +2631,7 @@ public sealed class MainWindowViewModel : ObservableObject
_isSpeedTorqueRunning = true;
_isSpeedTorqueCompletionArmed = true;
_hasLoggedStaleSpeedTorqueDone = false;
_wasSpeedTorqueStable = false;
SpeedTorqueTestButtonText = "测试中";
_hasShownSpeedTorqueEndWarnings = false;
_finalSpeed = null;
@@ -3749,9 +3751,91 @@ public sealed class MainWindowViewModel : ObservableObject
AppendSample(_activeDisplacementRun, sample);
AppendSample(_activeSpeedTorqueRun, sample);
AppendSample(_activeNoLoadSpeedRun, sample);
TrackStableTorqueSample(sample);
UpdateDataCaptureStatus();
}
private void TrackStableTorqueSample(RealtimeSamplePayload sample)
{
if (_activeSpeedTorqueRun is null)
{
_wasSpeedTorqueStable = false;
return;
}
double elapsedSeconds = Math.Max(0, (sample.SampledAt - _activeSpeedTorqueRun.StartedAt).TotalSeconds);
if (sample.SpeedTorqueStable)
{
if (!_wasSpeedTorqueStable)
{
Log.Information(
"转速/扭矩稳定保持段开始:运行 {RunId}M{StableCoil}=1时间 {SampledAt:yyyy-MM-dd HH:mm:ss.fff},已运行 {ElapsedSeconds:F3} s保持扭矩设置 {HoldTorque:F6} {TorqueUnit},保持时间设置 {HoldTime:F3} s",
_activeSpeedTorqueRun.RunId,
SpeedTorqueStableCoil,
sample.SampledAt,
elapsedSeconds,
_activeSpeedTorqueRun.ParameterSnapshot.HoldTorque,
TorqueUnit,
_activeSpeedTorqueRun.ParameterSnapshot.TorqueHoldTime);
}
Log.Information(
"转速/扭矩稳定保持采样:运行 {RunId},序号 {Sequence}M{StableCoil}=1时间 {SampledAt:yyyy-MM-dd HH:mm:ss.fff},已运行 {ElapsedSeconds:F3} sD{TorqueRegister}扭矩 {Torque:F6} {TorqueUnit},转速 {Speed:F3} r/min压力 {Pressure:F3} kPa",
_activeSpeedTorqueRun.RunId,
sample.Sequence,
SpeedTorqueStableCoil,
sample.SampledAt,
elapsedSeconds,
TorqueDisplayRegister,
sample.RealtimeTorqueMilliNewtonMeters,
TorqueUnit,
sample.RealtimeSpeedRpm,
sample.RealtimePressureKpa);
}
else if (_wasSpeedTorqueStable)
{
LogStableTorqueSummary(_activeSpeedTorqueRun, "M87稳定标志退出");
}
_wasSpeedTorqueStable = sample.SpeedTorqueStable;
}
private static void LogStableTorqueSummary(TestRunPayload run, string reason)
{
TorqueCurvePayload curve = CreateTorqueCurvePayload(run);
if (curve.EvaluationSampleCount < 2)
{
Log.Warning(
"转速/扭矩稳定保持段汇总不足:运行 {RunId},原因 {Reason},保持段采样数 {SampleCount},判定 {Result}",
run.RunId,
reason,
curve.EvaluationSampleCount,
curve.Result);
return;
}
Log.Information(
"转速/扭矩稳定保持段汇总:运行 {RunId},原因 {Reason},数据源 M{StableCoil}/D{TorqueRegister},保持段 {StartSeconds:F3}-{EndSeconds:F3} s采样数 {SampleCount},扭矩最小 {MinTorque:F6} {TorqueUnit},最大 {MaxTorque:F6} {TorqueUnit},平均 {AverageTorque:F6} {TorqueUnit},波动 {Fluctuation:F6} {TorqueUnit},转速最小 {MinSpeed:F3} r/min最大 {MaxSpeed:F3} r/min平均 {AverageSpeed:F3} r/min",
run.RunId,
reason,
SpeedTorqueStableCoil,
TorqueDisplayRegister,
curve.EvaluationStartSeconds,
curve.EvaluationEndSeconds,
curve.EvaluationSampleCount,
curve.MinTorqueMilliNewtonMeters,
TorqueUnit,
curve.MaxTorqueMilliNewtonMeters,
TorqueUnit,
curve.AverageTorqueMilliNewtonMeters,
TorqueUnit,
curve.FluctuationMilliNewtonMeters,
TorqueUnit,
curve.MinSpeedRpm,
curve.MaxSpeedRpm,
curve.AverageSpeedRpm);
}
private static void AppendSample(TestRunPayload? run, RealtimeSamplePayload sample)
{
if (run is null || run.Samples.LastOrDefault()?.Sequence == sample.Sequence)
@@ -3807,6 +3891,8 @@ public sealed class MainWindowViewModel : ObservableObject
AppendLatestSample(_activeSpeedTorqueRun);
_cachedTorqueCurve = CreateTorqueCurvePayload(_activeSpeedTorqueRun);
LogStableTorqueSummary(_activeSpeedTorqueRun, $"测试结束:{status}");
_wasSpeedTorqueStable = false;
_activeSpeedTorqueRun.CompletedAt = DateTime.Now;
_activeSpeedTorqueRun.CompletionStatus = status;
_activeSpeedTorqueRun.FinalDisplacementMm = _finalSpeedTorqueDisplacement ?? _speedTorqueDisplacement;