如何在块中使用未指定的数组尺寸?

时间:2019-06-18 14:13:09

标签: modelica openmodelica systemmodeler

使用未指定的数组尺寸(:)是设计可重复使用的灵活组件的基本功能。我aware很好,编译模型时必须确定实际尺寸。据我所知,将具有未指定数组维的变量绑定到具有明确定义维的变量就足够了。

所以我有些困惑,为什么以下model Test不会在OpenModelicaWolfram 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;

那怎么办呢?

2 个答案:

答案 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(非正式):

  

您好,我同意您的解释,我认为我们应该支持。我已提交了一个错误以在内部跟踪此问题,很遗憾,我没有任何解决方法。解决此问题后,我们会尽快与您联系。

因此,希望blocksfunctions都将支持灵活数组大小。