Соединитель как входной аргумент функции в modelica - PullRequest
0 голосов
/ 11 октября 2018

возможно ли использовать соединитель в качестве входного аргумента функции?Почему-то я не могу запустить следующий минимальный пример.

В файле 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 голосов
/ 12 октября 2018

Предыдущий ответ хорош и работает, но в 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, в настоящее время она активна только в Dymola, если вы установите флаг Advanced.RecordModelConstructor = true;

0 голосов
/ 11 октября 2018

Разъемы не могут использоваться как функциональные входы.Однако вы можете сделать это:

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;
...