This commit is contained in:
xyy
2026-02-27 16:03:49 +08:00
parent ff5d1b7d1d
commit 82abc41dbc
26 changed files with 1170 additions and 50 deletions

View File

@@ -0,0 +1,30 @@
namespace MembranePoreTester.Models
{
public class BubblePointRecord
{
public string SampleType { get; set; } // 平板膜/中空纤维膜
public string SampleSpec { get; set; } // 规格
public double RoomTemperature { get; set; } // 室温(°C)
public double SoakingTime { get; set; } // 浸润时间(小时)
public TestLiquid Liquid { get; set; } // 测试液体
public string LiquidManufacturer { get; set; } // 生产厂家
public double BubblePointPressure { get; set; } // 泡点压力(数值)
public string PressureUnit { get; set; } // Pa/cmHg/psi
public DateTime TestDate { get; set; } = DateTime.Now;
public string Tester { get; set; }
public double MaxPoreSize => CalculateMaxPore();
private double CalculateMaxPore()
{
if (Liquid == null) return 0;
return PressureUnit switch
{
"Pa" => Liquid.C_Pa / BubblePointPressure,
"cmHg" => Liquid.C_cmHg / BubblePointPressure,
"psi" => Liquid.C_psi / BubblePointPressure,
_ => 0
};
}
}
}

9
Models/DataPoint.cs Normal file
View File

@@ -0,0 +1,9 @@
namespace MembranePoreTester.Models
{
public class DataPoint
{
public double Pressure { get; set; } // 压力
public double WetFlow { get; set; } // 湿膜流量(L/min)
public double DryFlow { get; set; } // 干膜流量(L/min)
}
}

View File

@@ -0,0 +1,81 @@
using System.Collections.ObjectModel;
namespace MembranePoreTester.Models
{
/// <summary>
/// 孔分布测试的记录模型,存储一次孔分布测试的所有输入数据和计算结果。
/// 对应 GB/T 32361-2015 标准中的平均流量法测试。
/// </summary>
public class PoreDistributionRecord
{
/// <summary>
/// 膜类型:平板膜 或 中空纤维膜。
/// </summary>
public string SampleType { get; set; }
/// <summary>
/// 样品规格,如直径、厚度或型号等。
/// </summary>
public string SampleSpec { get; set; }
/// <summary>
/// 测试时的室温单位摄氏度°C
/// </summary>
public double RoomTemperature { get; set; }
/// <summary>
/// 样品在测试液体中的浸润时间单位小时h
/// </summary>
public double SoakingTime { get; set; }
/// <summary>
/// 测试使用的液体对象,包含液体名称、表面张力等信息。
/// </summary>
public TestLiquid Liquid { get; set; }
/// <summary>
/// 测试液体的生产厂家,用于溯源。
/// </summary>
public string LiquidManufacturer { get; set; }
/// <summary>
/// 压力单位Pa、cmHg 或 psi。所有压力相关输入均以此单位为准。
/// </summary>
public string PressureUnit { get; set; }
/// <summary>
/// 压力-流量数据点集合,每个点包含压力、湿膜流量、干膜流量。
/// 使用 ObservableCollection 以便在界面添加/删除时自动更新。
/// </summary>
public ObservableCollection<DataPoint> DataPoints { get; set; } = new();
/// <summary>
/// 测试日期,默认为当前日期时间。
/// </summary>
public DateTime TestDate { get; set; } = DateTime.Now;
/// <summary>
/// 测试人员姓名。
/// </summary>
public string Tester { get; set; }
// ---------- 计算结果(由计算逻辑填充) ----------
/// <summary>
/// 泡点压力(由用户单独记录或从数据点推断),用于最大孔径计算。
/// </summary>
public double BubblePointPressure { get; set; }
/// <summary>
/// 计算出的平均孔径单位微米μm
/// 对应标准中平均流量法的平均孔径结果。
/// </summary>
public double AveragePoreSize { get; set; }
/// <summary>
/// 孔分布计算结果列表,每个元素表示一个孔径区间的流量百分比。
/// 对应标准中孔分布的多个区间结果。
/// </summary>
public List<PoreDistributionResult> PoreDistributions { get; set; } = new();
}
}

View File

@@ -0,0 +1,9 @@
namespace MembranePoreTester.Models
{
public class PoreDistributionResult
{
public double LowerPore { get; set; } // 孔径下限(μm)
public double UpperPore { get; set; } // 孔径上限(μm)
public double Percentage { get; set; } // 流量百分比
}
}

21
Models/TestLiquid.cs Normal file
View File

@@ -0,0 +1,21 @@
namespace MembranePoreTester.Models
{
public class TestLiquid
{
public string Name { get; set; }
public double SurfaceTension { get; set; } // mN/m, 25°C
// Cγ
public double C_Pa => 2860 * SurfaceTension;
public double C_cmHg => 2.15 * SurfaceTension;
public double C_psi => 0.415 * SurfaceTension;
public static List<TestLiquid> Predefined => new()
{
new TestLiquid { Name = "水", SurfaceTension = 72.0 },
new TestLiquid { Name = "石油馏分", SurfaceTension = 30.0 },
new TestLiquid { Name = "乙醇", SurfaceTension = 22.3 },
new TestLiquid { Name = "液态石蜡", SurfaceTension = 34.7 }
};
}
}