certflow.services.pressure_calc_service module

物理计算引擎 —— 试压报告的压力与保压时间计算

对标 VBA Fun_计算压力时间 模块,提供: 1. Lb 压力等级 → MPa 换算(150Lb→2.0, 300Lb→5.17, 600Lb→10.34) 2. 强度试验压力(按标准号 × 公称压力倍率) 3. 上密封试验压力(按标准号 × 公称压力倍率,止回阀/蝶阀特殊处理) 4. 主密封试验压力(按标准号 × 公称压力倍率) 5. 四种保压时间查表(强度 / 上密封 / 主密封,按标准号 + 口径)

设计原则: - 纯函数,无副作用,无 DB / 文件 I/O 依赖 - 对标 VBA 逐行语义,不一致处标注差异 - 未匹配标准号 → 返回 None / "≥",不伪造数据

certflow.services.pressure_calc_service.lb_to_mpa(lb_level)[源代码]

Lb 压力等级 → MPa 数值

参数:

lb_level (int) -- 压力等级(150/300/600/800/900/1500/2500)

返回:

MPa 值,未匹配返回 None(VBA 中为 Stop)

返回类型:

float

class certflow.services.pressure_calc_service.PressureCalcInput(standard='', nominal_pressure_mpa=0.0, caliber_mm=0.0, is_check_valve=False, is_butterfly_valve=False, is_metric=True, is_imperial=False)[源代码]

基类:object

物理计算输入参数

参数:
  • standard (str)

  • nominal_pressure_mpa (float)

  • caliber_mm (float)

  • is_check_valve (bool)

  • is_butterfly_valve (bool)

  • is_metric (bool)

  • is_imperial (bool)

standard

试压标准号(如 "GB/T 13927-2022", "API 598")

Type:

str

nominal_pressure_mpa

公称压力(MPa 数值),英制已换算

Type:

float

caliber_mm

口径(mm 数值),如 50, 100, 150

Type:

float

is_check_valve

是否止回阀

Type:

bool

is_butterfly_valve

是否蝶阀

Type:

bool

is_metric

是否公制单位(True=公制, False=英制)

Type:

bool

is_imperial

是否英制型号(用于保压时间判断)

Type:

bool

standard: str = ''
nominal_pressure_mpa: float = 0.0
caliber_mm: float = 0.0
is_check_valve: bool = False
is_butterfly_valve: bool = False
is_metric: bool = True
is_imperial: bool = False
class certflow.services.pressure_calc_service.PressureCalcResult(strength_test_pressure=None, strength_test_pressure_display='', upper_seal_pressure=None, upper_seal_pressure_display='', main_seal_pressure=None, main_seal_pressure_display='', strength_hold_time='≥', upper_seal_hold_time='≥', main_seal_hold_time='≥', errors=<factory>)[源代码]

基类:object

物理计算结果

参数:
  • strength_test_pressure (float | None)

  • strength_test_pressure_display (str)

  • upper_seal_pressure (float | None)

  • upper_seal_pressure_display (str)

  • main_seal_pressure (float | None)

  • main_seal_pressure_display (str)

  • strength_hold_time (str)

  • upper_seal_hold_time (str)

  • main_seal_hold_time (str)

  • errors (list[str])

strength_test_pressure

强度试验压力(MPa 数值,None 表示无法计算)

Type:

float | None

strength_test_pressure_display

强度试验压力显示文本

Type:

str

upper_seal_pressure

上密封试验压力(None 表示无此项目,如 "/")

Type:

float | None

upper_seal_pressure_display

上密封试验压力显示文本

Type:

str

main_seal_pressure

主密封试验压力

Type:

float | None

main_seal_pressure_display

主密封试验压力显示文本

Type:

str

strength_hold_time

强度保压时间(如 "≥15", "≥60", "≥")

Type:

str

upper_seal_hold_time

上密封保压时间

Type:

str

main_seal_hold_time

主密封保压时间

Type:

str

errors

计算过程中的警告/错误信息列表

Type:

list[str]

strength_test_pressure: float | None = None
strength_test_pressure_display: str = ''
upper_seal_pressure: float | None = None
upper_seal_pressure_display: str = ''
main_seal_pressure: float | None = None
main_seal_pressure_display: str = ''
strength_hold_time: str = '≥'
upper_seal_hold_time: str = '≥'
main_seal_hold_time: str = '≥'
errors: list[str]
class certflow.services.pressure_calc_service.PressureCalcService[源代码]

基类:object

物理计算服务 —— 试压报告的压力与保压时间计算

对标 VBA Fun_计算压力时间 模块的 7 个函数。 所有方法均为纯函数(无状态、无副作用),可直接用于报告生成管线。

示例

>>> svc = PressureCalcService()
>>> result = svc.calculate(PressureCalcInput(
...     standard="GB/T 13927-2022",
...     nominal_pressure_mpa=2.5,
...     caliber_mm=100,
... ))
>>> result.strength_test_pressure
3.75
>>> result.strength_hold_time
'≥60'
calculate(inp)[源代码]

一次性计算所有试压参数(压力 + 保压时间)

参数:

inp (PressureCalcInput) -- 输入参数

返回:

完整计算结果

返回类型:

PressureCalcResult

static calc_strength_pressure(standard_norm, nominal_pressure_mpa)[源代码]

计算强度试验压力

标准倍率规则(对标 VBA 根据标准号计算强度试验压力):

API 598 1.5x Lb 已在调用前换算为 MPa GB/T 13927 1.5x GB/T 26480 1.5x JB/T 9092 1.5x JB/T 3595 1.5x GB/T 12465 1.5x GB/T 12245 1.5x 减压阀 GB/T 14382 1.5x GB/T 14478 1.5x GB 12242 1.5x 水流指示器 GB/T 12251 1.5x 蒸汽疏水阀 SL 553 1.5x DL/T 5190.5 1.5x NB/T 47044 见下 电站阀门(分级)

≤4 MPa 1.5x (等同 JB/T 3595) 4-10 MPa 1.5x (等同 GB/T 26480) 10-17 MPa 3.0x =17 MPa 48.0 (固定值, PW55 170V)

背压阀外购 4.0x
参数:
  • standard_norm (str)

  • nominal_pressure_mpa (float)

返回类型:

float | None

static calc_upper_seal_pressure(standard_norm, nominal_pressure_mpa, is_check_valve=False, is_butterfly_valve=False)[源代码]

计算上密封试验压力

返回 None 表示无上密封试验项目(对标 VBA 返回 "/")。 返回 0.0 表示压力为 0(VBA 返回 0,如 GB/T 12465)。

关键规则: - 止回阀(check valve):多数标准无上密封 → "/" - 减压阀(GB/T 12245):无上密封 → "/" - 伸缩节(GB/T 12465):无上密封 → 0 - 蒸汽疏水阀(GB/T 12251):只有强度试验 → "/" - 背压阀外购:无上密封 → "/" - GB/T 14382:无上密封 → "/"

参数:
  • standard_norm (str)

  • nominal_pressure_mpa (float)

  • is_check_valve (bool)

  • is_butterfly_valve (bool)

返回类型:

float | None

static calc_main_seal_pressure(standard_norm, nominal_pressure_mpa, is_check_valve=False, is_butterfly_valve=False)[源代码]

计算主密封试验压力

关键规则: - API 598:所有阀门 1.1x - GB/T 26480 / JB/T 9092:止回阀 1.0x,其他 1.1x - NB/T 47044:止回阀/蝶阀 1.0x,其他按公称压力分级 - GB/T 12465 / GB/T 14382 / DL/T 5190.5:1.25x - GB 12242(水流指示器):1.2x - 背压阀外购:1.2x - GB/T 12251(蒸汽疏水阀):0(只有强度试验) - GB/T 14478:需用户输入最大净水头(此处返回 None 需人工)

参数:
  • standard_norm (str)

  • nominal_pressure_mpa (float)

  • is_check_valve (bool)

  • is_butterfly_valve (bool)

返回类型:

float | None

static calc_strength_hold_time(standard_norm, caliber_mm, is_check_valve=False, is_metric=True)[源代码]

计算强度试验最短保压时间

对标 VBA `查找强度试验最短保压时间`(第658-861行)。

按标准号 + 口径查表,英制单位仅支持 API 598。

返回:

如 "≥15", "≥60", "≥120", "≥300", "≥1800", "≥"

返回类型:

str

参数:
static calc_upper_seal_hold_time(standard_norm, caliber_mm, is_metric=True)[源代码]

计算上密封试验最短保压时间

对标 VBA `查找上密封试验最短保压时间`(第530-656行)。

无上密封试验项目 → 返回 "/" 或 "≥"

参数:
返回类型:

str

static calc_main_seal_hold_time(standard_norm, caliber_mm, is_check_valve=False, is_metric=True)[源代码]

计算主密封试验最短保压时间

对标 VBA `查找主密封试验最短保压时间`(第303-528行)。

参数:
返回类型:

str

certflow.services.pressure_calc_service.compute_pressure_params(standard, nominal_pressure_mpa, caliber_mm, is_check_valve=False, is_butterfly_valve=False, is_imperial=False)[源代码]

便捷函数:一次性计算所有试压参数,返回字典。

供 report_service.py 直接调用,无需创建 PressureCalcInput 对象。

参数:
  • standard (str) -- 试压标准号

  • nominal_pressure_mpa (float) -- 公称压力(MPa)

  • caliber_mm (float) -- 口径(mm)

  • is_check_valve (bool) -- 是否止回阀

  • is_butterfly_valve (bool) -- 是否蝶阀

  • is_imperial (bool) -- 是否英制型号

返回:

包含所有压力和时间字段的字典,可直接 merge 到 report_data

返回类型:

dict