Modelica类方法

Modelica类方法,modelica,jmodelica,Modelica,Jmodelica,我想在我的Modelica模型中使用一个类函数/方法,如下所示: 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;

我想在我的Modelica模型中使用一个类函数/方法,如下所示:

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;
优化Moo(目标=-x(最终时间),开始时间=0,最终时间=12)
实际参数e=0.05;
实x(开始=2,固定=真,最小=0,最大=100);
输入实v(最小值=0,最大值=1);
函数ω
输入实t;
输出真实y;
算法
y:=e;
末端ω;
方程式
der(x)=v*ω(时间);
约束

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;


一种可能的解决方法是将函数更改为一个块,向其中添加一个参数,实例化该块并将e传播到新参数,然后引用公式中的blockInstance.y。