2012-04-23 19 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; 

因此,它似乎並沒有被切片本身是問題,但可能更復雜的東西(一些有關的特定連接器,尺寸的變化,等等)。