openModelica - 在模拟过程中冻结特定的时间值



我遇到了一个问题,在像Fortran这样的因果环境中可以轻松解决,但考虑到我有限的知识,在Modelica中被证明是困难

考虑一个带有入口和出口的体积。 指定入口质量流量,而出口质量流量根据体积中的压力计算。 当体积中的压力超过设定点时,出口面积开始从其初始值线性增加到最大值,之后保持固定。 换句话说:

A = min( const * (t - t*) + A_0, A_max)
if p > p_set
where t* = the time at which pressure in the volume exceeds the set pressure.

问题是:在模拟过程中有一个捕获t*的功能? 或者如何对模型进行编程以做到这一点? 我尝试了很多方法,但模型永远不会关闭。 欢迎和赞赏想法!

节日/新年快乐!

穆罕默德

您可能会发现我书中的示例和示例很有用。 它使用基于时间的采样,而您可能希望基于压力值进行采样。 但原理是一样的。 这将允许您记录事件发生的时间。

针对您的具体情况,以下(未经测试的)代码可能非常接近您想要的:

  ...
  Modelica.SIunits.Time t_star=-1;
equation
  when p >= p_set then
    t_star = time;
  end when;
  A = if t_star<0 then A_max else min(const*(t - t_star) + A_0, A_max);

最新更新