使用 OMPython 获取模拟的停止时间

Get stop time of a simulation with OMPython

我正在 openmodelica 中开发一个系统,该系统设计了一群无人机在各种模拟中的行为。现在,我想用 OMPython 得到模拟结果,因为我将使用 matplotlib 来制作各种 KPI 的图表。如果我想获取值,openmodelica 脚本函数需要:

val(String valueName, Real timePoint, String file);

我想在模拟结束时取值。问题是模拟停止时间不是恒定的!那么,有没有找回模拟停止时间的功能呢?

编辑 1:
我设法使用 simulate 函数在 python 中检索到此信息。但我想使用 BuildModel 函数,因为有了它我可以更改系统中的变量并再次模拟而不会出现任何问题。有什么建议吗?

您可以在模拟后阅读result-file以获得stopTime。您确实需要读取整个向量,因为没有 API 来获取最后一次。 (也可以使用其他 Python 包打开 mat-file;如果您想对结果中的数据执行更多操作,这可能会更容易):

installPackage(Modelica);
loadModel(Modelica);getErrorString();
simulate(Modelica.Mechanics.MultiBody.Examples.Elementary.DoublePendulum, fileNamePrefix="M");
// Or buildModel(...); system("./M"), etc...
vars:=readSimulationResult("M_res.mat",{time});getErrorString();
stopTime:=vars[1,end];

您可以使用 terminal() 将终止时间存储在模型本身中:

model StoreFinalTime
Real t_stop;
equation
when terminal() then
  t_stop = time;
end when;
end StoreFinalTime;