Files
CapMachine/CapMachine.Wpf/PPCalculation/PPCalculation-物性计算说明.md
2026-04-29 20:51:27 +08:00

6.2 KiB
Raw Blame History

PPCalculation 物性计算说明

本文档用于说明当前工程中 PPC 物性计算 的整体数据流、输入输出、单位约定、关键规则,以及 REFPROP 调用链路,便于后续维护与复用。

1. 代码入口与职责边界

  • 入口服务CapMachine.Wpf.Services.PPCService

    • 负责:
      • TagManager 读取实时数据(压力、温度、功率、流量、转速等)。
      • 调用物性计算器Calculator完成计算。
      • 将结果写回 Tag干度、过热/过冷、Qh/Qc、COP、效率等
      • 负责 REFPROP 初始化SETPATH/SETUP与全局串行化锁。
    • 不负责:
      • 具体的热力性质求解细节(已下沉到 Calculator
  • 干度计算器CapMachine.Wpf.PPCalculation.EnthalpyDrynessCalculator

    • 职责:基于“加权混合焓 + 吸气压力下饱和焓差”的方法,计算干度。
  • 六参数计算器CapMachine.Wpf.PPCalculation.ThermodynamicSixResultsCalculator

    • 职责:计算六个核心性能/效率结果:
      • QcQhCOPcCOPhηsηv
    • 内部封装 REFPROP 计算链路、单位换算、以及关键规则(如 h3 的 Tsat-10°C

2. 单位约定(非常重要)

2.1 Tag 输入单位(来自 PLC/界面)

  • 压力:BarA
  • 温度:
  • 功率:WHV[W]
  • 冷媒总流量:kg/h
  • 转速:rpm
  • 排量:cccm³/rev

2.2 REFPROP 常用单位(在 Calculator 内部处理)

REFPROP 不同接口参数单位不完全一致,工程中统一由 Calculator 进行换算。

  • 温度:K
  • 压力:常见为 kPa(例如 SATP/TPRHO 采用 kPa
  • 摩尔密度:mol/L
  • 焓:J/molTHERM 输出),最终换算为 kJ/kg
  • 熵:J/(mol·K)THERM 输出),最终换算为 kJ/(kg·K)

典型换算:

  • BarA -> MPa:乘 0.1
  • MPa -> kPa:乘 1000
  • ℃ -> K:加 273.15
  • J/mol -> kJ/kg(J/mol) / (kg/mol) * 0.001

3. 运行周期与整体数据流

PPCService.RtScanDeviceStart() 周期性执行(约 100ms 一次),主要步骤:

  1. REFPROP 幂等初始化(第一次进入或未初始化时)

    • 调用 EnsureRefpropInitialized()
    • 内部在 _refpropLock 下执行:
      • SETPATHdll 设置流体库路径
      • SETUPdll 载入工质(当前默认 R134A.FLD
  2. 过热度/过冷度计算(当前仍在服务内直接调用 SATP

    • 吸气侧:由吸气压力求 Tsat,与吸气温度做差得到过热度
    • 膨胀阀前侧:由膨胀阀前压力求 Tsat,与膨胀阀前温度做差得到过冷度
  3. 干度计算(调用 EnthalpyDrynessCalculator

    • 读取:
      • 气路阀前压力/温度GasPreValve P/T
      • 膨胀阀前压力/温度TxvFr P/T
      • 吸气压力InhP
      • 冷媒总流量VRV
      • 液体流量LiqRefFlow
    • 当前实现中:润滑油流量 lubeFlowKgPerH 固定为 0.0(不参与干度计算)。
    • 输出:
      • Dryness1 写入 干度[%] Tag*100
      • Dryness2 写入 PPCService.DrynessTag2Value*100用于界面绑定
  4. 六参数计算(调用 ThermodynamicSixResultsCalculator.TryCalculate

    • 读取输入:
      • 吸气 P/TBarA/℃)
      • 排气 P/TBarA/℃)
      • 膨胀阀前 P/TBarA/℃)
      • 冷媒总流量kg/h
      • HV 功率W
      • 转速rpm
      • 排量cc
    • 输出写回:
      • 制热量Qh[W]kW * 1000
      • 制冷量Qc[W]kW * 1000
      • 压缩机性能系数(制热)COPh
      • 压缩机性能系数(制冷)COPc
      • 等熵效率ns[%]
      • 容积效率nv[%]

4. 干度计算EnthalpyDrynessCalculator概要

4.1 输入

  • GasPreValvePressBarA
  • GasPreValveTempC
  • TxvFrPressBarA
  • TxvFrTempC
  • InhPressBarA
  • VrvFlowKgPerH
  • LiqRefFlowKgPerH
  • LubeFlowKgPerH(当前传 0

4.2 核心思路

  1. 分别求取:
    • 气路阀前气相焓 h_vap
    • 膨胀阀前液相焓 h_liq
  2. 由总流量与液体流量推算气体流量,按质量流量计算混合焓 h_mix
  3. 由吸气压力求饱和液/饱和气焓:h_satLh_satV
  4. 干度:

x = (h_mix - h_satL) / (h_satV - h_satL)

并进行必要的边界处理除零、NaN、限幅等由 Calculator 内实现)。

5. 六参数计算ThermodynamicSixResultsCalculator概要

5.1 输出结果

  • Qc制冷量kW
  • Qh制热量kW
  • COPc:制冷 COP
  • COPh:制热 COP
  • ηs:等熵效率(%
  • ηv:容积效率(%

5.2 h3液路阀前/冷凝出口关键规则Tsat-10°C

该规则已封装在 ThermodynamicSixResultsCalculator 内部:

  • 排气压力计算饱和温度 Tsat_discharge
  • T_for_h3 = Tsat_discharge - 10°C
  • TxvFrPressT_for_h3 求液体点焓 h3

注意:这是为了对齐现场 LabVIEW 流程/截图对比,属于业务约束。

5.3 典型计算链路(概念级)

  • h1/s1吸气点由吸气 P/T 求物性)
  • h2排气点由排气 P/T 求物性)
  • h2s等熵压缩出口点由排气压力 + s1 求物性)
  • h3液体点由 TxvFrPress + (Tsat(DischargePress)-10°C) 求物性)

由焓差与质量流量计算 Qc/Qh并结合功率得到 COP。

6. REFPROP 初始化与线程安全

  • PPCService 内使用静态锁:_refpropLock
  • 原因REFPROP Fortran DLL 内部通常存在全局状态/非线程安全调用。
  • 约束:
    • EnsureRefpropInitialized() 必须在锁内进行。
    • 所有直接 REFPROP 原生调用也必须串行化。

Calculator 内部同样通过外部传入的锁对象串行化 REFPROP 调用。

7. 结果写回约定

  • DrynessTag:按百分比写回(x * 100)。
  • DrynessTag2Value:按百分比用于界面绑定(x * 100)。
  • Qh/QcTag 单位为 WCalculator 输出为 kW,写回时乘 1000

8. 扩展/维护建议

  • 如后续希望让 PPCService 更纯粹:
    • 可将过热度/过冷度计算也下沉到独立 Calculator避免在 Service 里直接调用 SATP
  • 工质切换:
    • 当前 EnsureRefpropInitialized() 默认只加载 R134A.FLD
    • 若要支持 R1234yf 等,需要根据配置选择对应 .FLD 文件。