【问题标题】:Array Expandable Connector Issue阵列可扩展连接器问题
【发布时间】:2021-08-19 20:22:39
【问题描述】:

我正在尝试通过以下方式使用数组可扩展连接器:

model MWE
  expandable connector ControlBus
    extends Modelica.Icons.SignalBus;
  end ControlBus;
  ControlBus controlBus[1];
  Modelica.Blocks.Math.Gain gain(k=1);
equation 
  connect(gain.u, controlBus[1].a);
end MWE;

...但是 Dymola 会抛出关于在记录扩展中找不到成员“a”的错误。

奇怪的是,如果我在 controlBus 声明之后(不是之前!)声明了一个整数参数并使用它来指定 controlBus 的大小,它会按预期工作而没有错误:

model MWE
  expandable connector ControlBus
    extends Modelica.Icons.SignalBus;
  end ControlBus;
  ControlBus controlBus[k];
  Modelica.Blocks.Math.Gain gain(k=1);
  parameter Integer k=1;
equation 
  connect(gain.u, controlBus[1].a);
end MWE;

我的主要问题是 Modelica 中是否允许使用阵列可扩展连接器?如果是这样,我的第一种方法是否存在任何问题,或者 Dymola 是否存在一些错误(显然恰好可以通过第二种方法中的解决方法克服)?

编辑:添加另一个相关示例,其中声明顺序似乎与可扩展连接器有所不同:

model MWE
  expandable connector ControlBus
    Real variable;
  end ControlBus;
  ControlBus controlBus;
  Modelica.Blocks.Sources.RealExpression realExpression(y=controlBus.variable);
end MWE;

这里 Dymola 会在检查时发出警告,但会编译。但是,如果我在 realExpression 之后声明 controlBus,它就不会抱怨了。

【问题讨论】:

  • 我在 OpenModelica 中试过这个(有效,没有警告)。我尝试时 Dymola 给我的另一个有趣的信息是 Connected variables must have subscripts that can be expanded into literals.,但 1 是文字。
  • @sjoelund.se 感谢您对此进行检查

标签: modelica dymola


【解决方案1】:

在 Modelica 中这个例子是非法的; a 是可扩展连接器组件 controlBus[1] 的未声明成员。 https://specification.modelica.org/maint/3.5/connectors-and-connections.html#expandable-connectors

似乎需要改进 Dymola 来处理这种情况,并假设不会发生任何奇怪的事情,这将在下一个常规版本中完成。

【讨论】:

  • 感谢您的评论。在此期间,我的第二个示例中的解决方法确实有效,所以我现在计划使用它。
猜你喜欢
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 2012-07-23
  • 2011-03-14
相关资源
最近更新 更多