2013-04-22 163 views
0

我曾经遇到过一个问题,而试图利用Simulink中的FMU文件来模拟模型:初始化在Simulink

我使用FMI毛涤纶工具箱的Dymola的/ Simulink的界面导入一个模型 - 将类型fmu文件(版本1.0)交换到Simulink模型中。我有一个Matlab m文件,它可以按顺序模拟模型,保存模型的最终内部状态,以便在下一次模拟中进行初始化。模拟的第一次迭代运行没有错误,但在第二次迭代,MATLAB在呼吁模拟返回以下错误:

module = partial_run_sim2/BasicModels.System_model_final_Sim, log level = ERROR: [][FMU status:Error] fmiInitialize: dsblock_ failed, QiErr = 1
module = partial_run_sim2/BasicModels.System_model_final_Sim, log level = ERROR: [][FMU status:Error] Possible errors (non-exhaustive): 1. The license file was not found. Use the environment variable "DYMOLA_RUNTIME_LICENSE" to specify your Dymola license file. 2. The model references external data that is not present on the target machine, at least not with the same location. Error reported by S-function 'sfun_fmu_me_1_0' in 'partial_run_sim2/BasicModels.System_model_final_Sim': fmiInitialize returned with an error in initialize_fmu_model_first_time. See the Command Window for more information printed by the FMU model.

我知道,我的Dymola的和FMI工具箱许可证是对-日期。

在M文件模拟电话是:

simOut_itr = sim(model, model_cs); 

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

我知道使用fmi函数在Matlab中模拟fmu文件的能力,但是这些方法不允许系统状态的透明度太高,这妨碍了顺序模拟。但是,我愿意接受任何允许这种模拟的方法。

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

+0

事实证明,这个问题与初始状态无关,而是模型的输入不适合我试图运行的模拟。对于遇到此问题的其他人,也要检查模拟输入,尽管看起来初始化变量可能是责任。 – 2013-04-24 00:44:13

回答

0

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

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

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

如果这种方法有效,那很可能问题可能出现在多重初始化中。也许,您可以在每次初始化结束时卸载模型,然后在每个循环的开始处再次加载模型?

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

+0

稍微随机化的初始值确实在第一次迭代中运行,因此确实证明初始化不是确切的问题。但是,使用close_system(model)命令和load_system(model)不能解决问题。 – 2013-04-22 22:11:26