Modelica Class 方法

Modelica Class Method

我想在我的 Modelica 模型中使用 class function/method,如下所示:

optimization Moo(objective=-x(finalTime), startTime = 0, finalTime = 12)
  parameter Real e = 0.05;

  Real x(start=2, fixed=true, min=0, max=100);

  input Real v (min=0, max=1);

  function omega
    input  Real t;
    output Real y;
  algorithm
    y := e;
  end omega;

equation
  der(x) = v*omega(time);
constraint
  v<=1;
end Moo;

我希望函数 omega 中的变量 e 是一个变量,这样我可以在以后进行参数扫描时轻松地更改它的值。不幸的是,函数 omega 似乎不知道变量 e 和 JModelica 编译器 returns 错误:

Cannot find class or component declaration for e

我天真地期望因为 omegae 属于同一个 class omega 能够看到 e.

有办法实现吗?

Modelica 不支持成员函数,因此在模型内部声明的函数就像一个独立函数,无需访问周围的模型变量。 成员函数是不允许的,因为函数需要是纯函数,即它们不允许有任何副作用。这是 Modelica 中的一个基本假设,它使得工具可以应用符号转换和重新排列计算。

如果您显式地将所需的变量作为附加输入传递给函数,则可以拥有类似于成员函数的东西。看这个例子:

package MemberFunction
  
  model A
    Real x=1;
    function get_x = MemberFunction.get(u=x);
  end A;

  function get
    input Real u;
    output Real y;
  algorithm 
    y := u;
  end get;

  model Test
      A a;
      Real x;
  equation 
    x = a.get_x();
  end Test;

end MemberFunction;