用 CoolProp 完成一次制冷循环计算:从安装到COP的完整实践指南
【免费下载链接】CoolPropThermophysical properties for the masses项目地址: https://gitcode.com/gh_mirrors/co/CoolProp
如果你做过制冷系统或热泵的课程设计,大概率经历过这样的夜晚:为了查 R134a 在 5°C 饱和蒸气的焓值,你翻开厚厚的热力性质表,在密密麻麻的数字里来回寻找,然后对表、插值、抄数据、再核对——六个状态点下来,一个小时就没了。更麻烦的是,表上的数据是定温定压的,一旦循环参数变化,整套查表工作就得重来。
CoolProp就是为解决这类问题而生的开源热力学计算库。它能在一行代码内返回任意流体的焓、熵、密度、声速等 40 余种物性参数,覆盖 120 多种纯流体、混合物和载冷剂,且完全免费。本文用一个完整的制冷循环计算案例,带你从零走通"安装 → 验证 → 计算 COP → 进阶混合物"的全过程。
一、先把任务拆开:一次 COP 计算需要什么
一个最简单的蒸气压缩制冷循环由四个部件组成:蒸发器、压缩机、冷凝器、节流阀,对应四个关键状态点:
- 蒸发器出口(压缩机入口):饱和蒸气,已知温度,求焓 h1、熵 s1
- 压缩机出口:等熵压缩到冷凝压力,求焓 h2
- 冷凝器出口:饱和液体,已知温度,求焓 h3
- 节流阀出口:等焓节流,h4 = h3
最后用公式COP = (h1 − h4) / (h2 − h1)算出制冷系数。
你会发现,整个计算的核心只有一件事:给定两个独立参数,求出流体的某个物性。这正是 CoolProp 的PropsSI函数做的事。所以接下来的主线很清晰:先装好工具,再逐点求解,最后算 COP。
二、三步完成环境搭建(耗时约 3 分钟)
前提是你已安装 Python 3.8 及以上版本。打开终端,依次执行:
# 第 1 步:安装 CoolProp pip install coolprop # 第 2 步:验证安装版本(预期输出形如 6.6.0) python -c "import CoolProp; print(CoolProp.__version__)"如果网络较慢,可换用国内镜像源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple coolprop。
第 3 步,跑通第一个计算。新建一个 Python 文件,输入:
import CoolProp.CoolProp as CP # PropsSI 的前两个参数是输入对,最后一个参数是流体名 # 求水在 1 个大气压 (101325 Pa) 下的饱和温度,单位为开尔文 T_sat = CP.PropsSI('T', 'P', 101325, 'Q', 0, 'Water') print(f"水在 1 atm 下的饱和温度: {T_sat:.2f} K") # 预期约 373.12 K能看到约 373.12 K(即 100°C)的输出,说明环境已就绪。这个验证用例也写在了仓库的wrappers/Python/examples/example.py中,你可以对照运行。
三、理解 PropsSI 的"输入对"规则
上面代码里的Q是关键概念:干度(quality),表示湿蒸气中气相的质量占比。Q=0表示饱和液体,Q=1表示饱和蒸气。
要理解为什么必须这样写,可以记住一条热力学规则:对纯物质,给定两个独立参数才能确定一个状态点。CoolProp 支持非常多的输入组合,常见的有:
P+T:压力 + 温度(单相区用)T+Q:温度 + 干度(饱和线上用)P+Q:压力 + 干度(饱和线上用)P+H/P+S:压力 + 焓 / 熵(压缩、节流过程用)
注意:在饱和线附近(距饱和压力 1E-4% 以内),只用P+T定位会被判定为状态不唯一而报错,此时必须改用T+Q或P+Q来明确相态。
四、主线任务一:查询循环所需的饱和点物性
回到我们的 R134a 循环。设定蒸发温度 5°C、冷凝温度 40°C,先求出压缩机入口的焓与熵、冷凝压力:
import CoolProp.CoolProp as CP fluid = 'R134a' T_evap = 273.15 + 5 # 蒸发温度,5°C 换算为开尔文 T_cond = 273.15 + 40 # 冷凝温度,40°C # 点1:蒸发器出口,饱和蒸气 h1 = CP.PropsSI('H', 'T', T_evap, 'Q', 1, fluid) # 焓,单位 J/kg s1 = CP.PropsSI('S', 'T', T_evap, 'Q', 1, fluid) # 熵,单位 J/(kg·K) # 冷凝压力:40°C 对应的饱和压力 p_cond = CP.PropsSI('P', 'T', T_cond, 'Q', 0, fluid) # 单位 Pa print(f"h1 = {h1:.0f} J/kg") print(f"s1 = {s1:.1f} J/(kg·K)") print(f"p_cond = {p_cond/1e5:.2f} bar") # 预期约 10.17 bar请特别留意单位:CoolProp 默认采用 SI 制,温度是开尔文、压力是帕斯卡、焓与熵是每千克焦耳。把摄氏度直接当成开尔文传入,是所有新手遇到的第一个坑。
五、主线任务二:四状态点焓值,算出理想 COP
现在补全四个点的焓值。点 2 的等熵压缩,用P+S输入对求解;点 3 是冷凝器出口的饱和液体;点 4 是等焓节流,直接等于 h3:
# 点2:等熵压缩到冷凝压力 h2s = CP.PropsSI('H', 'P', p_cond, 'S', s1, fluid) # 点3:冷凝器出口,饱和液体 h3 = CP.PropsSI('H', 'T', T_cond, 'Q', 0, fluid) # 点4:节流阀出口,等焓过程 h4 = h3 # 理想循环 COP COP = (h1 - h4) / (h2s - h1) print(f"理想 COP = {COP:.2f}")在我们的参数下,理想 COP 约为6.8,即每消耗 1 份电能可搬运约 6.8 份冷量——这是不考虑任何损失的"天花板"。
下图展示了这类循环在温度-熵图上的形态:紫色虚线是等熵过程,红色实线是实际过程,两者之间的偏离直观反映了压缩过程中的能量损失。
六、主线任务三:加入压缩机效率,得到真实 COP
实际压缩机存在摩擦、泄漏等损失,等熵效率一般在 0.7~0.9 之间。真实出口焓按下式修正:
eta_comp = 0.85 # 压缩机等熵效率 h2 = h1 + (h2s - h1) / eta_comp # 实际压缩出口焓 COP_real = (h1 - h4) / (h2 - h1) print(f"实际 COP = {COP_real:.2f}")计算结果约为5.8,比理想值低约 15%。这个差距就是压缩机效率带来的直接代价。你还可以顺手验证一下压缩机出口温度:
T2 = CP.PropsSI('T', 'P', p_cond, 'H', h2, fluid) print(f"压缩机出口温度 = {T2 - 273.15:.1f} °C")至此,一条完整的制冷循环计算主线已经跑通:从两个温度出发,用 6 次 PropsSI 调用,得到了 COP 和压缩机出口温度。同样的代码,把fluid换成'R410A'、'Ammonia'或'Propane',立即就是另一种制冷剂的结果——这就是用代码替代查表的核心价值。
七、对照自查:新手最常犯的 3 个错误
错误 1:把饱和线上 P、T 混用
# 错误:饱和线附近同时给 P 和 T,报错或结果不确定 CP.PropsSI('H', 'P', 101325, 'T', 373.15, 'Water') # 正确:用干度明确相态 CP.PropsSI('H', 'P', 101325, 'Q', 1, 'Water')错误 2:忘记 SI 单位
# 错误:温度直接传 100 表示 100°C CP.PropsSI('P', 'T', 100, 'Q', 0, 'Water') # 正确:传开尔文 CP.PropsSI('P', 'T', 273.15 + 100, 'Q', 0, 'Water')错误 3:输出参数与输入参数位置颠倒PropsSI的固定签名是PropsSI(输出参数, 输入参数1, 值1, 输入参数2, 值2, 流体名)。输出参数永远在第一位,写反了会得到莫名其妙的报错。
八、进阶:把单个流体换成自定义混合物
纯制冷剂之外,CoolProp 还支持自定义混合物。比如要评估"水 + R134a"这种非常规工质,两行代码即可建立模型:
import CoolProp.CoolProp as CP # HEOS 是 CoolProp 内置的高精度混合模型后端 mix = CP.AbstractState("HEOS", "Water&R134a") mix.set_mole_fractions([0.5, 0.5]) # 各占 50% 摩尔分数 mix.update(CP.PT_INPUTS, 1e5, 300) # 给定压力 1 bar、温度 300 K h = mix.hmass() print(f"混合物比焓 = {h:.0f} J/kg")混合物计算的难点在于判断给定温度压力下系统处于单相还是两相。CoolProp 内部会先做稳定性分析,再通过 Rachford-Rice 方程求解相分离,流程如下:
如果不想自己调AbstractState,官方还预置了一批常用混合物(如 R410A、R404A),直接用流体名字符串调用PropsSI即可,底层自动帮你处理了全部闪蒸计算。
九、关于精度与性能,值得知道的两件事
精度:CoolProp 的纯流体物性基于亥姆霍兹自由能状态方程(Helmholtz energy EOS),参数由大量实验数据拟合而来。以甲烷为例,在 LNG 储罐设计的低温高压区间,密度与焓的计算偏差通常可控制在 0.1% 以内,远优于经验公式和图表插值。这一模型的原理说明见仓库Web/fluid_properties/PurePseudoPure.rst。
性能:不同输入对的求解速度差异很大。方程以温度 T 和密度 ρ 为自变量,所以T+ρ输入最快;P+T约慢 3~10 倍;而P+H这类不含 T、ρ 的组合需要迭代求解,最慢。官方文档(Web/coolprop/HighLevelAPI.rst)明确给出了这一结论。如果你的程序在循环里反复调用,优先构造含 T 的输入对,可省下可观的耗时。
十、下一步行动清单
到这里,你已经完成了从安装到实际工程计算的全流程。建议按下面的清单逐项验收:
- 用
pip show coolprop确认安装版本不低于 6.0 - 复现文中第 2 步的饱和温度验证代码,得到 373.12 K
- 跑通四状态点 COP 计算,理想值约 6.8、实际值约 5.8
- 把流体换成 R410A,观察 COP 与压缩机出口温度的变化
- 对照第 7 节自查表,确认自己没踩单位与输入对的坑
- 如需改源码或为特定平台编译,可克隆仓库
git clone https://gitcode.com/gh_mirrors/co/CoolProp后参考文档从源码构建
把查表和插值的精力省下来,用在真正需要判断力的设计决策上——这大概是热力学计算工具能给你的最大价值。下一次拿到一个新的循环工况,试试 10 分钟内交出全部状态点数据。
【免费下载链接】CoolPropThermophysical properties for the masses项目地址: https://gitcode.com/gh_mirrors/co/CoolProp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考