我在尝试使用 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 文件中初始化系统状态的任何建议。谢谢你。