[英]Problems with record call in Dymola
以下軟件包“ RecordTest”(用於再現較大模型的錯誤的示例)包含用於定義某些數據結構的Record。 在包“ DataDefintion”中進一步定義了兩組數據。 最后,此數據應在“ UseOfData”包中使用。 在此讀取數據集,並在函數“ FunctionWithData”中評估所有數組A的總和。
在OpenModelica中,對“ FunctionCall”模型的仿真效果很好。 在Dymola中,我得到一個錯誤: “對於變量包常量RecordTest.UseOfData.ReadData [1] .A,數組變量的下標RecordTest.UseOfData.ReadData.Index不是整數。”
我想念什么嗎? 常量“索引”在記錄“數據結構”中定義為整數。 該模型還可以在OpenModelica中運行。 我不明白Dymola的錯誤。
提前致謝。
package RecordTest
record DataStructure
constant Integer Index;
Real A[Index];
end DataStructure;
package DataDefinition
constant DataStructure Set1(Index=2, A={1,2});
constant DataStructure Set2(Index=2, A={3,4});
end DataDefinition;
package UseOfData
constant Integer N=2;
constant DataStructure ReadData[N]={DataDefinition.Set1, DataDefinition.Set2};
function FunctionWithData
input Real b;
output Real Result;
protected
Real Array[2];
algorithm
Array := {sum(ReadData[1].A), sum(ReadData[2].A)};
Result := b*sum(Array);
end FunctionWithData;
model FunctionCall
parameter Real b=2;
Real FunctionResult;
equation
FunctionResult = FunctionWithData(b);
end FunctionCall;
end UseOfData;
end RecordTest;
一種變通方法是如下重寫程序包:
package RecordTest
record DataStructure
constant Integer Index;
Real A[:];
end DataStructure;
package DataDefinition
constant DataStructure Set1=DataStructure(Index=2, A={1.0,2.0});
constant DataStructure Set2=DataStructure(Index=2, A={3.0,4.0});
end DataDefinition;
package UseOfData
constant Integer N=2;
constant DataStructure ReadData[N]={DataDefinition.Set1, DataDefinition.Set2};
function FunctionWithData
input Real b;
output Real Result;
protected
Real Array[2];
algorithm
Array := {sum(ReadData[1].A), sum(ReadData[2].A)};
Result := b*sum(Array);
end FunctionWithData;
model FunctionCall
parameter Real b=2;
Real FunctionResult;
equation
FunctionResult = FunctionWithData(b);
end FunctionCall;
end UseOfData;
end RecordTest;
問題是在包常數記錄數組中的A中使用的“索引”,以及包常數記錄Set1和Set2的修飾符而不是綁定方程式。 (它將在將來的Dymola版本中處理,我知道答案有點晚了。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.