diff --git a/Models/PlcConfiguration.cs b/Models/PlcConfiguration.cs
index ac77530..4d2455f 100644
--- a/Models/PlcConfiguration.cs
+++ b/Models/PlcConfiguration.cs
@@ -23,6 +23,7 @@
public ushort HardnessOver { get; set; }
public ushort HardnessCompleteCoil { get; set; }
public ushort HardnessPoSun { get; set; }
+ public ushort HardnessPressure { get; set; }
// 脆碎度
public ushort FriabilityStartCoil { get; set; }
public ushort FriabilityTestTime { get; set; }
diff --git a/Views/SettingsWindow.xaml b/Views/SettingsWindow.xaml
index e9cc271..cd4d31d 100644
--- a/Views/SettingsWindow.xaml
+++ b/Views/SettingsWindow.xaml
@@ -87,6 +87,10 @@
+
+
+
+
diff --git a/Views/SettingsWindow.xaml.cs b/Views/SettingsWindow.xaml.cs
index cf958a8..0b51ff9 100644
--- a/Views/SettingsWindow.xaml.cs
+++ b/Views/SettingsWindow.xaml.cs
@@ -1,5 +1,6 @@
using System;
using System.Linq;
+using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using TabletTester2025.Models;
@@ -12,6 +13,12 @@ namespace TabletTester2025
{
InitializeComponent();
LoadSettings();
+ Loaded += SettingsWindow_Loaded;
+ }
+
+ private async void SettingsWindow_Loaded(object sender, RoutedEventArgs e)
+ {
+ await LoadHardnessPressureAsync();
}
private void LoadSettings()
@@ -39,7 +46,7 @@ namespace TabletTester2025
SampleTimesBox.Text = string.Join(",", p.DissolutionSampleTimes ?? Array.Empty());
}
- private void SaveButton_Click(object sender, RoutedEventArgs e)
+ private async void SaveButton_Click(object sender, RoutedEventArgs e)
{
try
{
@@ -50,6 +57,7 @@ namespace TabletTester2025
p.HardnessMin_N = ParseFiniteDouble(HardnessMinBox.Text, "硬度内控下限");
p.HardnessMax_N = ParseFiniteDouble(HardnessMaxBox.Text, "硬度内控上限");
p.HardnessTestCount = int.Parse(HardnessCountBox.Text);
+ double hardnessPressure = ParseFiniteDouble(HardnessPressureBox.Text, "加压压力");
p.FriabilityTargetRpm = ParseFiniteDouble(FriabilityRpmBox.Text, "脆碎度转速");
p.FriabilityTargetTimeMin = ParseFiniteDouble(FriabilityTimeBox.Text, "脆碎度试验时间");
p.FriabilityTargetRounds = CalculateFriabilityRounds(p.FriabilityTargetTimeMin, p.FriabilityTargetRpm);
@@ -70,6 +78,7 @@ namespace TabletTester2025
.ToArray();
ValidateParameters(p);
+ await WriteHardnessPressureAsync(hardnessPressure);
App.CurrentPharmaParams = p;
App.SaveCurrentPharmaParameters();
@@ -169,10 +178,44 @@ namespace TabletTester2025
{
if (!double.TryParse(text, out double value) || !double.IsFinite(value))
throw new InvalidOperationException($"{fieldName}必须为有效数字。");
+ if (value < 0)
+ throw new InvalidOperationException($"{fieldName}不能小于0。");
return value;
}
+ private async Task LoadHardnessPressureAsync()
+ {
+ ushort registerAddress = ResolveHardnessPressureRegister();
+ if (registerAddress == 0)
+ return;
+
+ try
+ {
+ float value = await App.PlcService.ReadFloatAsync(registerAddress);
+ if (float.IsFinite(value))
+ HardnessPressureBox.Text = value.ToString("0.###");
+ }
+ catch
+ {
+ HardnessPressureBox.Text = "";
+ }
+ }
+
+ private static async Task WriteHardnessPressureAsync(double value)
+ {
+ ushort registerAddress = ResolveHardnessPressureRegister();
+ if (registerAddress == 0)
+ throw new InvalidOperationException("加压压力PLC寄存器地址未配置。");
+
+ await App.PlcService.WriteFloatAsync(registerAddress, (float)value);
+ }
+
+ private static ushort ResolveHardnessPressureRegister()
+ {
+ return App.PlcConfig.HardnessPressure != 0 ? App.PlcConfig.HardnessPressure : (ushort)1480;
+ }
+
private static double ResolveFriabilityTargetTimeMin(PharmaParameters p)
{
if (p.FriabilityTargetTimeMin > 0)
diff --git a/appsettings.json b/appsettings.json
index 4cbf562..f1e4f7a 100644
--- a/appsettings.json
+++ b/appsettings.json
@@ -21,6 +21,7 @@
"HardnessSudu": 300, // 硬度速度输入mm/min
"HardnessWeiyi": 310, // 硬度位移输入mm/min
"HardnessPoSun": 400, // 硬度破损判定输入N
+ "HardnessPressure": 1480, // 加压压力
"HardnessMax": 72, //最大力采集
"HardnessShishilizhi": 1314, //力显示