Modelica类方法

时间:2015-09-03 03:35:01

标签: 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;
    output Real y;
  algorithm
    y := e;
  end omega;

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

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

  

无法找到e

的类或组件声明

我会天真地期望,由于omegae属于同一个班级omega,因此可以看到e

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果将所需的变量作为函数的附加输入显式传递,则可以具有类似于成员函数的内容。参见以下示例:

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;