diff --git a/ConeCalorimeter/ViewModels/CValueCalibrationViewModel.cs b/ConeCalorimeter/ViewModels/CValueCalibrationViewModel.cs index feda720..4ce328d 100644 --- a/ConeCalorimeter/ViewModels/CValueCalibrationViewModel.cs +++ b/ConeCalorimeter/ViewModels/CValueCalibrationViewModel.cs @@ -688,9 +688,12 @@ public sealed class CValueCalibrationViewModel : PageViewModel CValueCalibrationActionViewModel actionViewModel) { var calibrationDataStatus = RefreshDeviceValues(); + var shutdownSummary = action == CalibrationStartAction + ? CloseCalibrationActuatorsAfterCompletion() + : string.Empty; LastAction = action == CalibrationStartAction && !calibrationDataStatus.HasAllValues - ? $"{waitState.CompletedText},{calibrationDataStatus.MissingSummary}" - : waitState.CompletedText; + ? AppendActionSummary(waitState.CompletedText, calibrationDataStatus.MissingSummary, shutdownSummary) + : AppendActionSummary(waitState.CompletedText, shutdownSummary); waitState.End(); try @@ -703,6 +706,50 @@ public sealed class CValueCalibrationViewModel : PageViewModel } } + private string CloseCalibrationActuatorsAfterCompletion() + { + var failedActions = new List(2); + + CloseHoldActionAfterCompletion(MethaneValveAction, MethaneValveCoil, failedActions); + CloseHoldActionAfterCompletion(SamplingPumpAction, SamplingPumpCoil, failedActions); + + return failedActions.Count == 0 + ? "已关闭甲烷阀和取样泵" + : $"{string.Join("、", failedActions)}关闭失败"; + } + + private void CloseHoldActionAfterCompletion( + string action, + ushort coilAddress, + List failedActions) + { + if (_tcpDeviceConnectionService.TryWriteCoil(coilAddress, false)) + { + if (!UpdateActionStatus(action, coilAddress) && _actionsByLabel.TryGetValue(action, out var actionViewModel)) + { + actionViewModel.UpdateStatus(false); + } + + return; + } + + failedActions.Add(action); + Debug.WriteLine($"C value calibration action '{action}' auto close failed after calibration completion."); + } + + private static string AppendActionSummary(string message, params string[] summaries) + { + foreach (var summary in summaries) + { + if (!string.IsNullOrWhiteSpace(summary)) + { + message = $"{message},{summary}"; + } + } + + return message; + } + private bool TryStartCoilPulse(ushort coilAddress, string actionText) { if (!_tcpDeviceConnectionService.TryWriteCoil(coilAddress, true))