diff --git a/Views/SettingsWindow.xaml b/Views/SettingsWindow.xaml index 713b09e..140a2f2 100644 --- a/Views/SettingsWindow.xaml +++ b/Views/SettingsWindow.xaml @@ -91,6 +91,10 @@ + + + + diff --git a/Views/SettingsWindow.xaml.cs b/Views/SettingsWindow.xaml.cs index c84562e..1a8a500 100644 --- a/Views/SettingsWindow.xaml.cs +++ b/Views/SettingsWindow.xaml.cs @@ -19,6 +19,7 @@ namespace TabletTester2025 private async void SettingsWindow_Loaded(object sender, RoutedEventArgs e) { await LoadHardnessPressureAsync(); + await LoadHardnessDamageThresholdAsync(); } private void LoadSettings() @@ -56,6 +57,7 @@ namespace TabletTester2025 p.HardnessMax_N = ParseFiniteDouble(HardnessMaxBox.Text, "硬度内控上限"); p.HardnessTestCount = int.Parse(HardnessCountBox.Text); double hardnessPressure = ParseFiniteDouble(HardnessPressureBox.Text, "加压压力"); + int hardnessDamageThreshold = ParsePositiveInt(HardnessDamageThresholdBox.Text, "硬度破损判定"); p.FriabilityTargetRpm = ParseFiniteDouble(FriabilityRpmBox.Text, "脆碎度转速"); p.FriabilityTargetTimeMin = ParseFiniteDouble(FriabilityTimeBox.Text, "脆碎度试验时间"); p.FriabilityTargetRounds = ParsePositiveInt(FriabilityRoundsBox.Text, "脆碎圈数"); @@ -77,6 +79,7 @@ namespace TabletTester2025 ValidateParameters(p); await WriteHardnessPressureAsync(hardnessPressure); + await WriteHardnessDamageThresholdAsync(hardnessDamageThreshold); App.CurrentPharmaParams = p; App.SaveCurrentPharmaParameters(); @@ -204,6 +207,38 @@ namespace TabletTester2025 return App.PlcConfig.HardnessPressure != 0 ? App.PlcConfig.HardnessPressure : (ushort)1480; } + private async Task LoadHardnessDamageThresholdAsync() + { + ushort registerAddress = ResolveHardnessDamageThresholdRegister(); + if (registerAddress == 0) + return; + + try + { + int value = await App.PlcService.ReadIntAsync(registerAddress); + if (value >= 0) + HardnessDamageThresholdBox.Text = value.ToString(); + } + catch + { + HardnessDamageThresholdBox.Text = ""; + } + } + + private static async Task WriteHardnessDamageThresholdAsync(int value) + { + ushort registerAddress = ResolveHardnessDamageThresholdRegister(); + if (registerAddress == 0) + throw new InvalidOperationException("硬度破损判定PLC寄存器地址未配置。"); + + await App.PlcService.WriteRegisterAsync(registerAddress, (ushort)Math.Clamp(value, 0, ushort.MaxValue)); + } + + private static ushort ResolveHardnessDamageThresholdRegister() + { + return App.PlcConfig.HardnessPoSun != 0 ? App.PlcConfig.HardnessPoSun : (ushort)400; + } + private static double ResolveFriabilityTargetTimeMin(PharmaParameters p) { if (p.FriabilityTargetTimeMin > 0)