【问题标题】:Initialization of a Dymola FMU in Simulink在 Simulink 中初始化 Dymola FMU
【发布时间】:2013-04-22 16:55:58
【问题描述】:

我在尝试使用 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 函数“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 块不一致。

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

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

【问题讨论】:

  • 事实证明,这个问题与初始状态无关,而是模型的输入不适合我试图运行的模拟。对于遇到此问题的其他人,还要检查模拟输入,即使看起来初始化变量可能是罪魁祸首。

标签: simulink dymola fmi


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 稍微随机化的初始值确实在第一次迭代中运行,因此确实证明初始化不是精确的问题。但是,使用 close_system(model) 命令和 load_system(model) 并不能解决问题。
猜你喜欢
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多