使用未指定的数组尺寸(:
)是设计可重复使用的灵活组件的基本功能。我aware很好,编译模型时必须确定实际尺寸。据我所知,将具有未指定数组维的变量绑定到具有明确定义维的变量就足够了。
所以我有些困惑,为什么以下model Test
不会在OpenModelica
或Wolfram System Modeler
中生效:
package VectorFunctions
model Test
VectorSum converter "Component taking the sum of a vector input";
InformationSource source "Vector input";
equation
connect( source.y, converter.u );
end Test;
block VectorSum "Take the sum of an input with unspecified dimension"
Modelica.Blocks.Interfaces.RealInput u[:];
Modelica.Blocks.Interfaces.RealOutput y;
equation
y = sum(u);
end VectorSum;
block InformationSource "Provide some vector output"
Modelica.Blocks.Interfaces.RealOutput y[3];
equation
y = ones( 3 );
end InformationSource;
end VectorFunctions;
那怎么办呢?
答案 0 :(得分:1)
我的猜测是Modelica Spec未指定,可以从连接中自动检测矢量大小,因此工具不支持。
我认为您必须自行设置矢量大小,例如在您的测试模型中设置的参数如下:
model Test
VectorSum converter(nu=size(source.y, 1)) "Pass in the vector size";
InformationSource source "Vector input";
equation
connect(source.y, converter.u);
end Test;
block VectorSum "Take the sum of an input with unspecified dimension"
Modelica.Blocks.Interfaces.RealInput u[nu];
parameter Integer nu(min=0)=0;
output Real y;
equation
y = sum(u);
end VectorSum;
请注意,Dymola在您的示例代码中抱怨connect语句只能应用于连接器。因此,我将input Real
更改为Modelica.Blocks.Interfaces.RealInput
(与InformationSource
类似)
答案 1 :(得分:1)
Wolfram MathCore的某人(例如,System Modeler的开发人员)给了我feedback on Wolfram Community(非正式):
您好,我同意您的解释,我认为我们应该支持。我已提交了一个错误以在内部跟踪此问题,很遗憾,我没有任何解决方法。解决此问题后,我们会尽快与您联系。
因此,希望blocks
和functions
都将支持灵活数组大小。