diff --git a/ViewModels/StationViewModel.cs b/ViewModels/StationViewModel.cs index 830d527..8fa7c10 100644 --- a/ViewModels/StationViewModel.cs +++ b/ViewModels/StationViewModel.cs @@ -1306,7 +1306,10 @@ namespace TabletTester2025.ViewModels try { int count = Math.Max(1, HardnessTestCount); + ushort startCoil = ResolveHardnessStartCoil(); ushort completeCoil = ResolveHardnessCompleteCoil(); + if (startCoil == 0) + throw new InvalidOperationException("硬度启动线圈未配置"); if (completeCoil == 0) throw new InvalidOperationException("硬度完成线圈未配置"); if (_plcConfig.HardnessMax == 0) @@ -1315,10 +1318,11 @@ namespace TabletTester2025.ViewModels await _plc.WriteFloatAsync(_plcConfig.HardnessSudu, (float)HardnessSudu); await _plc.WriteFloatAsync(_plcConfig.HardnessWeiyi, (float)HardnessWeiyi); - if (await _plc.ReadCoilAsync(completeCoil)) - await WaitForCoilStateAsync(completeCoil, false, TimeSpan.FromSeconds(10), "硬度完成信号未复位"); + bool completeWasActiveBeforeStart = await _plc.ReadCoilAsync(completeCoil); + await PulseCoilAsync(startCoil); - await PulseCoilAsync(_plcConfig.HardnessStartCoil); + if (completeWasActiveBeforeStart) + await WaitForCoilStateAsync(completeCoil, false, TimeSpan.FromSeconds(10), "硬度完成信号未复位"); while (Phase == TestPhase.Running && _hardnessResults.Count < count) { @@ -1357,6 +1361,13 @@ namespace TabletTester2025.ViewModels : _plcConfig.HardnessCompleteCoil; } + private ushort ResolveHardnessStartCoil() + { + return _plcConfig.HardnessStartCoil != 0 + ? _plcConfig.HardnessStartCoil + : (ushort)70; + } + private async Task ReadHardnessResultAsync() { double value = await _plc.ReadFloatAsync(_plcConfig.HardnessMax);