更新
This commit is contained in:
@@ -77,6 +77,8 @@ namespace TabletTester2025.ViewModels
|
||||
[ObservableProperty] private double _hardnessRSD;
|
||||
[ObservableProperty] private double _hardnessInternalMin = 40;
|
||||
[ObservableProperty] private double _hardnessInternalMax = 60;
|
||||
[ObservableProperty] private bool _isHardnessResetting;
|
||||
public string HardnessResetButtonText => IsHardnessResetting ? "复位中" : "复位";
|
||||
|
||||
|
||||
//硬度新增
|
||||
@@ -267,16 +269,7 @@ namespace TabletTester2025.ViewModels
|
||||
});
|
||||
|
||||
//硬复位
|
||||
HardnessResetCommand = new AsyncRelayCommand(async () =>
|
||||
{
|
||||
// 1. 标准PLC按钮脉冲逻辑:置1 → 延时 → 置0(模拟按下再松开按钮)
|
||||
await _plc.WriteCoilAsync(_plcConfig.HardnessStartReset, true);
|
||||
await Task.Delay(100); // 脉冲宽度,可根据PLC程序调整20~100ms
|
||||
await _plc.WriteCoilAsync(_plcConfig.HardnessStartReset, false);
|
||||
_isHardnessRunning = false;
|
||||
RefreshOverallPhase();
|
||||
|
||||
});
|
||||
HardnessResetCommand = new AsyncRelayCommand(ResetHardnessAsync, CanResetHardness);
|
||||
|
||||
// 硬前进按钮命令
|
||||
HardnessForward = new AsyncRelayCommand(async () =>
|
||||
@@ -1725,6 +1718,63 @@ namespace TabletTester2025.ViewModels
|
||||
HardnessSudu = value;
|
||||
}
|
||||
|
||||
partial void OnIsHardnessResettingChanged(bool value)
|
||||
{
|
||||
OnPropertyChanged(nameof(HardnessResetButtonText));
|
||||
HardnessResetCommand?.NotifyCanExecuteChanged();
|
||||
}
|
||||
|
||||
private bool CanResetHardness()
|
||||
{
|
||||
return !IsHardnessResetting;
|
||||
}
|
||||
|
||||
private async Task ResetHardnessAsync()
|
||||
{
|
||||
if (IsHardnessResetting)
|
||||
return;
|
||||
|
||||
IsHardnessResetting = true;
|
||||
try
|
||||
{
|
||||
await PulseCoilAsync(_plcConfig.HardnessStartReset);
|
||||
_isHardnessRunning = false;
|
||||
RefreshOverallPhase();
|
||||
await WaitForHardnessResetCompleteAsync(ResolveHardnessResetCompleteCoil());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await Application.Current.Dispatcher.InvokeAsync(() =>
|
||||
MessageBox.Show($"硬度复位出错: {ex.Message}"));
|
||||
}
|
||||
finally
|
||||
{
|
||||
IsHardnessResetting = false;
|
||||
}
|
||||
}
|
||||
|
||||
private ushort ResolveHardnessResetCompleteCoil()
|
||||
{
|
||||
return _plcConfig.HardnessStartOver;
|
||||
}
|
||||
|
||||
private async Task WaitForHardnessResetCompleteAsync(ushort completeCoil)
|
||||
{
|
||||
if (completeCoil == 0)
|
||||
throw new InvalidOperationException("硬度复位完成线圈未配置");
|
||||
|
||||
DateTime deadline = DateTime.Now.AddSeconds(120);
|
||||
while (DateTime.Now <= deadline)
|
||||
{
|
||||
if (await _plc.ReadCoilAsync(completeCoil))
|
||||
return;
|
||||
|
||||
await Task.Delay(100);
|
||||
}
|
||||
|
||||
throw new TimeoutException("等待硬度复位完成信号超时");
|
||||
}
|
||||
|
||||
private async Task WaitForHardnessSampleCompleteAsync(ushort completeCoil)
|
||||
{
|
||||
DateTime deadline = DateTime.Now.AddSeconds(120);
|
||||
|
||||
Reference in New Issue
Block a user