modelica - 如何在块中使用未指定的数组维度?
问题描述
使用未指定的数组维度 ( :
) 是设计灵活组件以供重用的基本特征。我很清楚在编译模型时必须固定实际尺寸。据我所知,将具有未指定数组维度的变量绑定到具有明确定义维度的变量就足够了。
所以我有点困惑为什么以下内容在任何一个或以下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;
这样的事情怎么能做到呢?
解决方案
我的猜测是 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 在您的示例代码中抱怨连接语句只能应用于连接器。因此我改为input Real
(Modelica.Blocks.Interfaces.RealInput
和类似的InformationSource
)
推荐阅读
- javascript - Javascript(中断)
- forms - 无法使用 AEM 表单发送电子邮件
- php - 为什么给定的数组键在 JSON_decode 中无法解码 API 响应?
- python - 读入 Python 时在 CSV 文件上使用逗号分隔符 - 不适用于所有行
- php - 有没有办法将 html 代码放入 file_put_contents() 函数中?
- json - JSON响应迅速解码为零
- javascript - 在 HTML 表格中正确设置绘图的大小
- three.js - 为什么 setFromMatrix() 位置不起作用?
- json - 从 swagger JSON 中获取建议的示例值
- python - for 循环中的 Python pack() 函数似乎没有