Dymola FMU在SIMULINK中的初始化 [英] Initialization of a Dymola FMU in Simulink

查看:5
本文介绍了Dymola FMU在SIMULINK中的初始化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试在Simulink中使用FMU文件模拟模型时遇到问题:

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

模块=partial_run_sim2/BasicModels.System_model_final_Sim,日志 Level=错误:[][FMU状态:错误]fmiInitialize:dsblock_FAILED, 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’:fmi初始化中的S函数‘SFUN_FMU_Me_1_0’ 在INITIALIZE_FMU_MODEL_FIRST_TIME中返回错误。请参阅 命令窗口,查看FMU型号打印的详细信息。

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

m文件中的模拟调用为:

simOut_itr = sim(model, model_cs); 
其中,"模型"是Simulink.slx模型文件,"模型_cs"是一个Simulink配置设置变量。我已经设置了配置,以便模型从工作区加载初始状态,并且我已将先前的小版本最终状态保存到该工作区变量。尽管初始状态与FMU文件中的默认初始状态相同,但此操作也会在第一次迭代中发生。我怀疑第一个迭代运行时没有问题,因为初始化与默认值相同,但后续迭代具有不同的初始化值,这与FMU块不一致。

我知道能够使用FMI函数在MatLab中模拟FMU文件,但这些方法不允许对系统状态有太大的透明度,这阻碍了顺序模拟。不过,我对任何允许这种模拟的方法都持开放态度。

如有任何关于在Matlab/Simulink中初始化FMU文件中的系统状态的建议,我们将非常感谢。谢谢。

推荐答案

我想我以前遇到过此错误,但没有遇到过FMI工具箱。

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

提供一些随机的(但相当不错的)值,并只初始化模型一次,以便初始化不同于默认值。

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

如果什么都不起作用,也许您可以使用JModelica.org(Modelon的开源平台)将这些初始化的输出放入mat文件中,然后在matlab中使用它进行后续工作。我知道这并不理想,但可能会在您等待答案时为您节省一些时间。

这篇关于Dymola FMU在SIMULINK中的初始化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆