我正试图通过csv文件将我的结果从Dymola导出到excel。但我有很多结果。我如何将它们写在数组中?
我试图创建一个for循环,但是我缺乏如何键入代码的知识。
if (time) <= 0 then
Modelica.Utilities.Files.removeFile("tube_0.02"+".csv");
Modelica.Utilities.Streams.print("temps," +
"delta_fr1,"+
"delta_fr2,"+
"delta_fr3,",
"tube_0.02"+".csv");
else
Modelica.Utilities.Streams.print(String(time) +
"," + String( my_code_tube1[1].delta_fr)+
"," + String( my_code_tube1[2].delta_fr)+
"," + String( my_code_tube1[3].delta_fr),
"tube_0.02"+".csv");
end if;
不用写delta_fr1,delta_fr2.然后是my_code_tube11.delta_fr,my_code_tube12.delta_fr..。我需要创建一个for循环,因为我将有将近1500个变量要导出。
发布于 2019-08-29 08:13:48
在模拟过程中,试图将结果写入csv文件会给Modelica带来一些麻烦:
sample()
函数定义一个周期输出。Advanced.MaxStringLength = 50000
来确保当前Dymola实例使用适当的大值。考虑到这些,我们可以编写如下代码:
model SO_print_for
My_code_tube my_code_tube1[1500];
protected
String line;
String f="tube_0.02" + ".csv";
model My_code_tube
Real delta_fr=1;
end My_code_tube;
initial algorithm
line := "temps";
for i in 1:size(my_code_tube1,1) loop
line := line + ", delta_fr" + String(i);
end for;
Modelica.Utilities.Files.removeFile(f);
Modelica.Utilities.Streams.print(line, f);
algorithm
when sample(0, 0.1) then
line := String(time);
for i in 1:size(my_code_tube1,1) loop
line := line + ", "+String(my_code_tube1[i].delta_fr);
end for;
Modelica.Utilities.Streams.print(line, f);
end when;
end SO_print_for;
代码可以工作,但是它会减慢您的模拟速度,因为生成许多时间事件(来自sample()
函数)。
与其在模拟期间编写csv,不如考虑以下方法之一,以便在模拟完成后转换结果文件:
DataFiles.convertMATtoCSV
。以下两行代码将从delta_fr
结果文件中提取1500个.mat变量 vars = {"my_code_tube1["+String(i)+"].delta_fr" for i in 1:1500}
DataFiles.convertMATtoCSV("your-model.mat", vars, "out.csv")
dymload.m
将.mat结果文件导入Matlab。详情请参阅Dymola用户手册第1卷。https://stackoverflow.com/questions/57695967
复制相似问题