Events Modelica中的最大事件迭代次数
有没有办法更改dymola中设置为20的“最大事件迭代次数”的值 似乎dymosim.ini不用于常规模拟(注意第4行中的版本:dymosim.ini状态为1.1,而dsin.txt中的1.4是用Dymola 2019编写的)。我也无法在Dymola中找到一个函数或变量来更改Events Modelica中的最大事件迭代次数,events,iteration,modelica,dymola,Events,Iteration,Modelica,Dymola,有没有办法更改dymola中设置为20的“最大事件迭代次数”的值 似乎dymosim.ini不用于常规模拟(注意第4行中的版本:dymosim.ini状态为1.1,而dsin.txt中的1.4是用Dymola 2019编写的)。我也无法在Dymola中找到一个函数或变量来更改eviter,因此我能想到的唯一解决方案是在模拟之前编辑dsin.txt 下面的代码显示了更新dsin.txt然后执行模拟的函数的外观。请注意,应扩展该函数以进行错误处理 function MySim import Mo
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;
该函数转换选定的模型,导出模拟设置,根据需要进行编辑,执行模拟并打开结果文件,因此它基本上是一个自定义的simulateModel命令
使用Dymola用户手册第2卷7.2可扩展用户界面–菜单、工具栏和收藏夹中描述的功能,可以在Dymola GUI中创建该功能的快捷方式,从而允许对选定模型执行模拟。这将使该函数与常规模拟按钮一样方便使用。因为Dymola 2020x有一个高级变量,它正好可以做到这一点 从2020x变更日志:
Advanced.Simulation.MaxEventIterations
evnet的最大数量
迭代,埃维特。小心使用,因为值太小会导致模拟失败。
默认值为Advanced.Simulation.MaxEventIterations=20
此外,可以更改迭代的精度:
Advanced.Simulation.EventEpsilon
eveps事件的时间分辨率。这个
默认值为Advanced.Simulation.EventEpsilon=1e-10
另外,我确实在
dymosim.ini
中更改了eviter
,但是更改没有反映在dsin.txt
中,我必须通过执行:dymosim dsin.txt
再次运行模拟。我想知道如何使eviter
直接在dsin.txt
中更改,这样我就可以在Dymola中进行模拟,而不是通过执行dymosim
再次进行模拟。它真的有助于更改最大迭代次数吗?如果是,你能发布模型吗?