【发布时间】: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 文件中初始化系统状态的任何建议。谢谢。
【问题讨论】:
-
事实证明,这个问题与初始状态无关,而是模型的输入不适合我试图运行的模拟。对于遇到此问题的其他人,还要检查模拟输入,即使看起来初始化变量可能是罪魁祸首。