0

我在尝试使用 Simulink 中的 fmu 文件模拟模型时遇到了一个问题:

我正在使用 Dymola/Simulink 接口的 Modelon FMI 工具箱将 Model-Exchange 类型的 fmu 文件(1.0 版)导入 Simulink 模型。我有一个 Matlab m 文件,它以编程方式依次模拟模型,保存模型的最终内部状态以在下一次模拟中进行初始化。模拟的第一次迭代运行没有错误,但在第二次迭代中,Matlab 在调用模拟时返回以下错误:

模块 = partial_run_sim2/BasicModels.System_model_final_Sim,日志级别 = 错误:[][FMU 状态:错误] fmiInitialize:dsblock_ 失败,QiErr = 1
模块 = partial_run_sim2/BasicModels.System_model_final_Sim,日志级别 = 错误:[][FMU 状态:错误]可能的错误(非详尽): 1. 未找到许可证文件。使用环境变量“DYMOLA_RUNTIME_LICENSE”来指定您的 Dymola 许可证文件。2. 模型引用了目标机器上不存在的外部数据,至少不在同一位置。'partial_run_sim2/BasicModels.System_model_final_Sim' 中的 S-function 'sfun_fmu_me_1_0' 报告的错误:fmiInitialize 在 initialize_fmu_model_first_time 返回错误。有关 FMU 模型打印的更多信息,请参阅命令窗口。

我知道我的 Dymola 和 FMI 工具箱许可证是最新的。

m文件中的模拟调用是:

simOut_itr = sim(model, model_cs); 

其中“model”是 Simulink .slx 模型文件,“model_cs”是 Simulink 配置设置变量。我已经设置了配置,以便模型从工作区加载初始状态,并且我已经将之前的迭代最终状态保存到该工作区变量。此操作也发生在第一次迭代中,尽管初始状态与 fmu 文件中的默认初始状态相同。我怀疑第一次迭代运行没有问题,因为初始化与默认值相同,但随后的迭代具有不同的初始化值,这与 fmu 块不一致。

我知道使用 fmi 函数在 Matlab 中模拟 fmu 文件的能力,但是这些方法不允许对系统状态进行尽可能多的透明度,这阻碍了顺序模拟。但是,我对任何允许这种模拟的方法持开放态度。

非常感谢有关在 Matlab/Simulink 中的 fmu 文件中初始化系统状态的任何建议。谢谢你。

4

1 回答 1

0

我想我以前遇到过这个错误,但没有使用 FMI Toolbox。

我在 for 循环中多次初始化 Dymola 生成的 FMU 时遇到问题,这与您上面描述的非常相似,其中一个初始化的输出作为下一个初始化的输入。

给一些随机的(但相当好的值)并初始化模型一次,使初始化与默认值不同。

如果这可行,那么很可能问题出在多重初始化中。也许,您可以在每次初始化结束时卸载模型,然后在每次循环开始时再次加载它?

如果没有任何效果,也许您可​​以使用 JModelica.org(来自 Modelon 的开源平台)将这些初始化的输出获取到 mat 文件中,然后在 MATLAB 中使用它进行后续工作。我知道这并不理想,但可能会在您在这里等待一些答案时为您节省一些时间。

于 2013-04-22T19:57:08.440 回答