【问题标题】:connect to a slice of an array of connectors连接到连接器阵列的一部分
【发布时间】:2012-04-23 19:17:05
【问题描述】:

我有一个连接器阵列,我想将另一个较小的类似连接器阵列连接到此连接器阵列的一部分。例如ax 连接器数组,by 连接器数组,x < y

connect(a[:], b[1:x]); // works fine
connect(a[:], b[2:x+1]); // gives an error

我在第二种情况下遇到的错误(在 Dymola 2012 中检查模型时)说:

Error: Failed to expand connect(a[:], b[2:x+1])

这是语言或工具限制吗?是否有解决方法(除了使用 for 循环连接每个单独的连接器)?

【问题讨论】:

  • 您确定这不仅仅是运算符优先级的问题吗?你试过 b[2:(x+1)] 吗?
  • 是的,我试过了,在这种情况下,() 甚至会在错误消息中被删除。
  • 编辑:但这有效:connect(a[:], b[1:x+1-1]); 所以它与起始位置与 1 不同

标签: modelica


【解决方案1】:

这一定是工具限制,因为规范说:

连接器引用中的下标应为参数表达式或特殊运算符“:”。

我能想到的唯一解决方法是使用 for 公式或更明显的方法:向 Dymola 团队提交错误报告。我会为 OpenModelica 做同样的事情(它会生成方程式,但是是错误的)。

【讨论】:

    【解决方案2】:

    我认为我们需要更多代码来了解发生了什么。我没有看到 Dymola 有任何明显的限制。例如,以下代码在 Dymola 2012 FD01 中运行良好:

    model SlicedConnectors 
      parameter Integer n(start=5);
      Modelica.Blocks.Interfaces.RealInput a[n];
      Modelica.Blocks.Interfaces.RealOutput b[2*n];
    equation 
      connect(a[:],b[1:n]);
      connect(a[:],b[(n+1):(2*n)]);
    end SlicedConnectors;
    

    因此,问题似乎不是切片本身,而是可能更复杂的问题(关于特定连接器、尺寸可变性等的问题)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多