我有一个用于表示某些媒体的程序包,其构建与Modelica.Media类似但不完全相同。我想允许用户为特定属性在不同功能之间进行选择,而不必更改其余属性的计算方式。
包装为:
package myPac
replaceable function prop = F1 constrainedby partialF
annotation (choicesAllMatching=true);
function partialF
input Real x;
output Real y;
end partialF;
function F1
extends partialF;
algorithm
y := x;
end F1;
function F2
extends partialF;
algorithm
y := 2*x;
end F2;
end myPac;
然后我想从模型内部选择F1或F2。
model myModel
replaceable package pack1 = myPac(redeclare function prop = pack1.F2);
Real x;
Real y;
equation
y = pack1.prop(x);
end myModel;
按预期工作。如何参数化prop的重新声明,以便可以在参数对话框中进行设置?
我正在寻找类似的东西:
model myModel2
replaceable package pack1 = myPac(redeclare function prop = if a == 1 then pack1.F1 else pack1.F2);
parameter Integer a = 1;
Real x;
Real y;
equation
y = pack1.prop(x);
end myModel2;
这显然是不正确的语法。另外,prop的声明中的choicesAllMatching = true确实显示了一个下拉菜单,但未列出任何选择。
答案 0 :(得分:2)
如何参数化prop的重新声明,以便可以对其进行设置 在参数对话框中?
您不需要其他参数a
来选择功能。只需单击prop
的编辑按钮即可获得所选可更换包装的参数窗口,您可以在其中选择F1
和F2
。
我在下面添加了动画,以使其更加清晰。
此外,prop的声明中的choicesAllMatching = true确实显示 我有一个下拉菜单,但没有列出任何选择。
这对我有用,如您在动画中所见。请注意,我将函数partialF
声明为partial
,因此它不包含在下拉菜单中。然后,我在choicesAllMatching
中的replaceable package pack1
上添加了另一个myModel
注释,以创建另一个用于选择pack1
的下拉菜单(就像汉斯在他的回答中所做的那样)。
答案 1 :(得分:0)
当前无法根据参数值进行重新声明。
但是,您可以在对话框中出现的两个软件包之间进行选择:
package myPac
replaceable function prop = F1 constrainedby partialF
annotation (choicesAllMatching=true);
function partialF
input Real x;
output Real y;
end partialF;
function F1
extends partialF;
algorithm
y := x;
end F1;
function F2
extends partialF;
algorithm
y := 2*x;
end F2;
end myPac;
package myPac1=myPac(redeclare function prop=myPac.F1);
package myPac2=myPac(redeclare function prop=myPac.F2);
model myModel
replaceable package pack1 = myPac annotation(choicesAllMatching=true);
Real x;
Real y;
equation
y = pack1.prop(x);
end myModel;