2012-04-23 40 views
2

我有一个连接器阵列,我想将另一个较小的类似连接器阵列连接到此连接器阵列的一片。与a实施例的x连接器,by连接器阵列,x < y数组:连接到连接器阵列的一片

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

我在第二种情况下得到(检查在2012 Dymola的模型时)错误表示:

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

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

+0

你确定这不是简单的运算符优先级问题吗?你试过b [2:(x + 1)]吗? – 2012-04-26 14:59:30

+0

是的,我试过了,在这种情况下,错误消息中甚至会删除'()'。 – saroele 2012-04-26 19:29:23

+0

编辑:但这个工程:'connect(a [:],b [1:x + 1-1]);'所以它的起始位置不同于1 – saroele 2012-04-26 19:48:22

回答

2

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

下标在连接器参考应的参数表达式或特殊的运算符“:”。

我能想到的唯一解决方法是for-equation或更明显的:向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; 

因此,它似乎并没有被切片本身是问题,但可能更复杂的东西(一些有关的特定连接器,尺寸的变化,等等)。