来自字符串的可替换函数和函数调用

Replaceable function and function calls from strings

下面三个问题是连在一起的所以请大家见谅post.

使用 Dymola 2016。

在模型中使用可替换函数调用为用户提供了使用下拉选项的机会。示例如下:

model Test1
  parameter Real x = 1;
  Real y;
  replaceable function a=b constrainedby d annotation(choicesAllMatching=true);
equation 
  y = a(x);
end Test1;

在函数内执行相同的可替换函数调用似乎不允许与调用函数相同的下拉功能(即在包浏览器中右键单击调用函数。我认为这是故意的,因为通常调用函数在其他 functions/models 内。示例如下:

function Test2
  input Real x;
  output Real y;
  replaceable function a=b constrainedby d annotation(choicesAllMatching=true);
algorithm 
  y :=a(x);
end Test2;

问题 #1。是否可以像在模型中一样在函数中使用可替换的函数调用?如果是这样,合适的语法是什么?替代方法?

或者,另一种选择是在模型中执行可替换的函数调用,然后将结果传递给另一个函数,该函数随后进行适当的调用。示例如下:

model Test3mod
  parameter Real x = 1;
  Real y;
  replaceable function a=b constrainedby d annotation(choicesAllMatching=true);
equation 
  y = Test3func(x,a);
end Test3mod;

将参数 x 和函数句柄 a 传递给:

function Test3func
  input Real x;
  input ???? a;
  output Real y;
algorithm 
  y :=a(x);
end Test3func;

问题#2。这在 Modelica 中是允许的吗?如果是,怎么做?替代方法?

问题 #3。是否可以定义一个字符串并将其转换为函数名称。示例如下:

model Test4
  parameter String 'functionname';
  parameter Real x = 1;
  Real y;
equation
  y = functionname(x);
end Test4;

提前致谢!感谢您的反馈,因为我会继续探索 Modelica 的使用。

这应该可以正常工作:

model Test3mod
  parameter Real x = 1;
  Real y;
  replaceable function a=b constrainedby d annotation(choicesAllMatching=true);
equation 
  y = Test3Func(x,a);
end blah;

function Test3func
  input Real x;
  input d f;
  output Real y;
algorithm 
  y := f(x);
end Test3func;