在Modelica中将连接器作为函数输入参数

时间:2018-10-11 09:18:07

标签: function modelica openmodelica

是否可以将连接器用作函数输入参数?不知何故,我无法运行以下最小示例。

在f.mo文件中,我有

function f
  input Modelica.Electrical.Analog.Interfaces.Pin t;
  output Real p;
  algorithm
    p:=t.i*t.v;
end f;

在test.mo中,我有

model test
   Modelica.Electrical.Analog.Interfaces.Pin t;
   Real V = f(t);
end test;

运行test.mo的检查时,我收到错误消息

[1] 11:15:38 Translation Error 
[f: 2:3-2:52]: Invalid type .Modelica.Electrical.Analog.Interfaces.Pin for function component t.

[2] 11:15:38 Translation Error
[test: 5:3-5:16]: Class f not found in scope test (looking for a function or record).

[3] 11:15:38 Translation Error
Error occurred while flattening model test

谢谢!

2 个答案:

答案 0 :(得分:4)

先前的答案是好的并且可行,但是在Modelica 3.4中的12.6.1节中。添加了另一个更接近原始的可能性。

record R
  Real i,v;
end R;

function f
  input R t;
  output Real p;
  algorithm
    p:=t.i*t.v;
end f;

model test
   Modelica.Electrical.Analog.Interfaces.Pin t;
   Real V = f(R(t));
end test;

这主要是由模型引起的,在模型中您拥有更多的元素,列出所有元素变得很乏味。由于它是Modelica 3.4中的新功能,因此如果您设置标志Advanced.RecordModelConstructor = true;

,则当前仅在Dymola中处于活动状态

答案 1 :(得分:2)

连接器不能用作功能输入。但是,您可以这样做:

function f
  input Real i;
  input Real v;
  output Real p;
  algorithm
    p:=i*v;
end f;

model test
   Modelica.Electrical.Analog.Interfaces.Pin t;
   Real V = f(t.i, t.v);
end test;