【发布时间】:2017-06-21 18:03:38
【问题描述】:
我正在尝试使用所属名称(字符串)和插值方法平滑度(字符串)读取多个文件(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[:]和for循环内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),那么它会起作用,但取决于它是否在算法或方程部分(参见代码中的 cmets)。
我在灵活的数组大小方面遇到了类似的问题,但仍然不明白如何解决它。 我必须使用函数吗? 如何使用根据外部数据定义的灵活数组大小,在模拟之前选择作为参数(例如表格的长度)? 还是这种情况下的问题在其他地方?
谢谢。
【问题讨论】:
标签: arrays record modelica dymola openmodelica