複数のファイル(CSV、2列)を所属名(文字列)と補間方法の平滑度(文字列)で読み込もうとしています。レコードを使用することにより、私はDymolaはで素敵なGUIを取得: モデル内の柔軟な配列サイズがレコード内にありません - 拡張に失敗しました
は私の問題を説明するために、ここでは単純化したモデルである:
model Test_Strings
parameter String x[:];
parameter Integer k = size(x,1);
Integer i;
initial algorithm
i := 0;
Modelica.Utilities.Streams.print(String(i));
Modelica.Utilities.Streams.print(String(k));
equation
algorithm
when sample(1,1) then
i :=pre(i) + 1;
Modelica.Utilities.Streams.print(String(i));
for j in 1:k loop
Modelica.Utilities.Streams.print(x[j]);
end for;
end when;
end Test_Strings;
それを実行するコード:
model Test_Strings_System
Test_Strings test_Strings(x={"a","b","c","d"});
end Test_Strings_System;
今、私はレコードを使用しようとすると:モデル(最初のパラメータだけラインを
record MyRecord2
parameter String name = "NoName";
end MyRecord2;
をそして適応MyRecord2のX [:]とループのX [内J]が変更.nameのは):内部エラー::
model Test_Strings2
parameter MyRecord2 x[:];
parameter Integer k = size(x,1);
Integer i;
initial algorithm
i := 0;
Modelica.Utilities.Streams.print(String(i));
Modelica.Utilities.Streams.print(String(k));
equation
algorithm
when sample(1,1) then
i :=pre(i) + 1;
Modelica.Utilities.Streams.print(String(i));
for j in 1:k loop // k must be fixed number if equation
Modelica.Utilities.Streams.print(x[j].name); // j must be fixed number if algorithm
end for;
end when;
end Test_Strings2;
それから私は、変換エラーを取得した文字列を拡張することができませんでした。
私は与えられた数のforループ内のKまたはJを修正する場合、それが動作する(のが3を言わせて)、それは、アルゴリズムや数式セクション内だ場合によっては(コード内のコメントを参照してください)。
私はフレキシブルなアレイサイズで同様の問題を抱えていましたが、それを解決する方法はまだ分かりません。 関数を使用する必要がありますか? 外部データに応じて定義され、シミュレーションの前にパラメータとして選択された柔軟な配列サイズ(テーブルの長さなど)を使用するにはどうすればよいですか? この場合、他の場所の問題ですか?
ありがとうございました。