本文将介绍在Modelica使用时遇到的一些Bug以及处理方法,主要使用的平台是Dymola,有任何问题可联系博主。

Bug以及解决方法

组件名称无效的情况

问题描述当组件名称与自建库名称一致时,容易出现报错问题,但并不一定100%复现错误。

//错误例子
package Controller 
Controller.HeatpumpController_LC2 Controller
"空气源热泵控制器"
annotation (Placement(transformation(extent={{760,-540},{968,-400}})));
  
//正确示范 
package Controller 
 Controller.HeatpumpController_LC2 controller
"空气源热泵控制器"
annotation (Placement(transformation(extent={{760,-540},{968,-400}})))

解决方案:这个问题似乎是软件的一个Bug,当完成包(package)的声明后,紧接着对模型进行示例化时,如果使用与包相同的名称(name1)则会报错,但这时先修改package名称(name2),再使用先前名称(name1)对模型进行实例化,最后将package名称改回,则不会触发错误。 通常情况下,组件名称建议小写开头,变量名称建议大写开头。

联合仿真问题

问题描述:与Energyplus进行联合仿真时,出现交互时间点报错,如下图所示:

解决方法:尝试了几种方式,并且对导出的FMU进行了测试,FMU的设置没有问题,问题应该是在于模型的使用方法,FMU模块的输入输出之间不能以代数方程的方式直接相连,需要具有微分环节,并且通过pre函数带来的延时环节同样不能使用,典型应用环路如下:

其中,温度计应该设置一定的延迟动态时间,否则还是会触发交互点时间差问题。

膨胀水箱的使用问题

问题描述:通常在使用的时候,对于一个封闭的环路需要连接一个膨胀水箱才可以正常运行,但当系统有多个定压点存在时,并且模型中使用同一个膨胀水箱时就需要注意连接点的问题,防止出现本没有耦合关系的环路,水力出现了耦合的情况。例如在下面的例子中,本想搭建两个没有水力过程耦合但使用同一个定压水箱的环路,如下第一张图所示,但会发现两个环路出现了混流的情况。

问题解释:设备的进口与出口连接时,其实就是将两个流体接口进行等价,因此,第一张图其实等效于第二张图,因此流体会在接口进行混合后再输配给下游设备,也就是出现混流的情况。

解决方法:避免接口等价,就是添加一些组件,使得其再编译时不将两个环路定压点进行等价,或者直接使用两个膨胀水箱,如下图所示。

此外,经过测试发现,如果将两个接口封装在模型外,也可以防止接口等价现象的出现。

补充:使用边界源(Buildings.Fluid.Sources.Boundary_pT)也可以实现相同的定压效果,其原理都是通过指定接口压力来达到定压的效果,但如果添加膨胀水箱模型(Buildings.Fluid.Storage.ExpansionVessel),其中将加入几个微分方程,如下所示,用于判断水箱是否拥有充足的水,当定压点压力持续降低水箱内水流尽后,模型将会报错。因此一般情况下,使用边界源的方法时,模型计算速度将要快于使用膨胀水箱模型,在不需要考虑补水等因素的模型中,推荐使用边界源模型。

equation 
  assert(m > 1.0E-8,
    "Expansion vessel is undersized. You need to increase the value of the parameter V_start.");
  // Conservation equations
  der(m)   = port_a.m_flow;
  der(H)   = port_a.m_flow * actualStream(port_a.h_outflow);
  der(mXi) = port_a.m_flow * actualStream(port_a.Xi_outflow);
  der(mC)  = port_a.m_flow * actualStream(port_a.C_outflow);
  // Properties of outgoing flow.
  // The port pressure is set to a constant value.
  port_a.p          = p_start;
  m*port_a.h_outflow  = H;
  m*port_a.Xi_outflow = mXi;
  m*port_a.C_outflow  = mC;

优化使用技巧

bug的调节方法以及模型加速运行方法