Dymola中ExternalMedia调用报错:热泵系统建模求助
问题分析与解决方案
核心报错原因
你当前的模型存在过约束问题:
- 设置了
inputChoice=ExternalMedia.Common.InputChoice.hs,说明介质状态由焓(h)和熵(s)唯一确定,但模型里同时给了fluid.p = p、fluid.s = s、fluid.h = h三个方程,导致状态变量冲突,触发求解器报错。 - 同时你注释掉了p的赋值语句,p变量未被定义,也会引发求解错误。
针对"用压力和温度获取物性"的修改方案
1. 调整介质模型与状态变量
将介质的输入类型改为压力-温度(pt),并修正状态变量的赋值逻辑,修改后的完整模型如下:
model Pentane_pt package wf extends ExternalMedia.Media.CoolPropMedium( mediumName = "Pentane", substanceNames = {"n-Pentane"}, inputChoice=ExternalMedia.Common.InputChoice.pt); // 切换为pt输入模式 end wf; wf.BaseProperties fluid "Properties of the two-phase fluid"; Modelica.SIunits.SpecificEnthalpy h; Modelica.SIunits.Pressure p; Modelica.SIunits.Temperature T; // 新增温度变量 Modelica.SIunits.DerDensityByEnthalpy drdh "Derivative of average density by enthalpy"; Modelica.SIunits.DerDensityByPressure drdp "Derivative of average density by pressure"; equation p = 1E5; // 给压力赋值,示例为1bar T = 293.15 + time*10; // 温度随时间变化的示例值,可按需修改 // 仅需给p和T赋值即可确定介质状态 fluid.p = p; fluid.T = T; // 可从介质状态中直接获取h、s等物性参数 h = fluid.h; // 调用与pt输入匹配的导数函数 drdp = wf.density_derp_T(fluid.state); drdh = wf.density_derh_p(fluid.state); end Pentane_pt;
2. 解决库导入失败问题
- 确保Dymola中已正确加载
ExternalMedia库:- 打开Dymola,依次点击
File > Open > Libraries,找到ExternalMedia库 - 右键选择
Load Library,等待加载完成
- 打开Dymola,依次点击
- 配置CoolProp依赖:
ExternalMedia需要CoolProp计算物性,需检查ExternalMedia > Common > Config中的coolpropLibraryPath,确保其指向正确的CoolProp库文件(Windows下为CoolProp.dll,Linux下为libCoolProp.so)。若未安装CoolProp,需下载对应版本的库文件,配置路径后重启Dymola。
关键注意事项
- 介质的
inputChoice必须与你赋值的状态变量严格对应:pt对应压力p+温度Ths对应焓h+熵sph对应压力p+焓h
不能同时给超过两个独立状态变量赋值,否则会引发过约束错误
- 调用导数函数时,要选择与当前输入类型匹配的函数(比如
density_derp_T对应pt输入模式)
内容的提问来源于stack exchange,提问作者CHO
相关产品推荐
相关产品推荐

