有没有办法改变dymola中设置为20的“最大事件迭代次数”eviter
的值?
答案 0 :(得分:1)
似乎dymosim.ini并未用于常规模拟(请注意第4行中的版本:dymosim.ini声明为1.1,而dsin.txt具有用Dymola 2019编写的1.4)。我也无法在Dymola中找到函数或变量来更改eviter
,所以我能想到的唯一解决方案是在仿真之前编辑dsin.txt。
下面的代码显示了如何更新dsin.txt然后执行模拟的函数。请注意,应扩展该功能以进行错误处理。
function MySim
import Modelica.Utilities.Strings;
import Modelica.Utilities.Streams;
import Modelica.Utilities.Files.removeFile;
import SimAPI = DymolaCommands.SimulatorAPI;
input String m = "Modelica.Blocks.Examples.PID_Controller"
annotation (Dialog(__Dymola_translatedModel(translate=false)));
input Integer iterations = 40;
protected
String[:] dsin;
algorithm
// initialize
removeFile("dsin_custom.txt");
removeFile("dsin_export.txt");
SimAPI.translateModel(m);
SimAPI.exportInitialDsin("dsin_export.txt"); // exports simulation setup of active model
// write custom dsin file
dsin :=Streams.readFile("dsin_export.txt");
for i in 1:size(dsin, 1) loop
if Strings.find(dsin[i], " # eviter ") > 0 then
dsin[i] :=Strings.replace(dsin[i], "20", String(iterations));
break;
end if;
end for;
for i in 1:size(dsin, 1) loop
Streams.print(dsin[i], "dsin_custom.txt");
end for;
// simulate and open file
// using simulateModel would generate a new dsin file, so dymosim.exe must be called
SimAPI.system("dymosim.exe -s dsin_custom.txt "+m+".mat");
// workaround: create empty plot to open result, as there is no load-result command
DymolaCommands.Plot.createPlot(y={""}, grid=true, filename=m+".mat");
end MySim;
该函数可转换所选模型,导出仿真设置,根据需要对其进行编辑,执行仿真并打开结果文件-因此它基本上是一个自定义的SimulationModel命令。
使用Dymola用户手册第2卷中的 7.2可扩展用户界面–菜单,工具栏和收藏夹中所述的功能,可以在Dymola GUI中创建该功能的快捷方式,从而可以执行所选模型的仿真。这将使该功能像常规的模拟按钮一样方便使用。
答案 1 :(得分:1)
自从Dymola 2020x开始,就有一个高级变量应该可以准确地做到这一点。
从2020x更新日志中:
Advanced.Simulation.MaxEventIterations
evnet的最大数量 迭代,eviter。请谨慎使用,因为值太小会导致仿真失败。 默认值为Advanced.Simulation.MaxEventIterations=20
另外,可以更改迭代的精度:
Advanced.Simulation.EventEpsilon
事件的时间分辨率,即eveps。的 默认值为Advanced.Simulation.EventEpsilon=1e-10