2

我使用建筑物库包中的组件在 Dymola 中创建了一个热水储水缸的基本模型。我已将模型保存为 .mo 文件并成功编译 fmu 并将模型加载到 JModelica 中。当我模拟使用时会出现问题:

res = model.simulate(final_time=100000)

这会导致以下错误消息:

FMUException Traceback (last last call last) in () ----> 1 res = model.simulate(final_time=100000)

src\pyfmi\fmi.pyx 在 pyfmi.fmi.FMUModelME1.simulate (src\pyfmi\fmi.c:35608)()

src\pyfmi\fmi.pyx 在 pyfmi.fmi.ModelBase._exec_simulate_algorithm (src\pyfmi\fmi.c:6045)()

src\pyfmi\fmi.pyx 在 pyfmi.fmi.ModelBase._exec_simulate_algorithm (src\pyfmi\fmi.c:5936)()

C:\JModelica.org-2.1\install\Python\pyfmi\fmi_algorithm_drivers.pyc in init (self, start_time, final_time, input, model, options) 300 if isinstance(self.model, fmi.FMUModelME1): 301 self.model .time = start_time #设置初始化前的开始时间 --> 302 self.model.initialize(tolerance=rtol) 303 304 elif isinstance(self.model, fmi.FMUModelME2) or isinstance(self.model, fmi_coupled.CoupledFMUModelME2):

src\pyfmi\fmi.pyx 在 pyfmi.fmi.FMUModelME1.initialize (src\pyfmi\fmi.c:34954)()

FMUException:初始化返回错误。检查日志以获取信息 (FMUModel.get_log)。

正如所建议的那样,我已经检查了使用model.get_log()这也没有多大意义的日志:

FMIL:模块 = 模型,日志级别 = 2:[错误][FMU 状态:错误] 无法将根括在“1”中。下限和上限都在界限内。

FMIL:模块 = 模型,日志级别 = 2:[INFO][FMU 状态:错误] 初始化失败。

FMIL:模块 = 模型,日志级别 = 2:[错误][FMU 状态:错误] 无法将根括号括起来 name="block">"1"。下限和上限都在界限内。

FMIL:模块 = 模型,日志级别 = 2:[INFO][FMU 状态:错误] 初始化失败。

FMIL: module = Model, log level = 2: [ERROR][FMU status:Error] category="error">Could not bill the root in name="block">"1". 下限和上限都在 > 范围内。

FMIL:模块 = 模型,日志级别 = 2:[INFO][FMU 状态:错误] 初始化失败。

FMIL: module = Model, log level = 2: [ERROR][FMU status:Error] category="error">Could not bill the root in name="block">"1". 下限和上限都在 > 范围内。

FMIL:模块 = 模型,日志级别 = 2:[INFO][FMU 状态:错误] 初始化失败。

关于这里发生了什么的任何建议?我听说很多人用 Dymola 构建系统,保存脚本,然后在 JModelica 中导入和模拟。然而,这可能是这里的问题吗?

4

1 回答 1

0

从错误消息中,我们得到模型中有一个难以解决的块(块 1),并且我们无法找到具有给定上限和下限的解决方案。根据您是否在变量上设置了最小/最大值,这可能是问题所在。这是因为所讨论的块是一维的,并且使用 Brents 方法求解,该方法考虑了最小值/最大值。

我建议以更高的日志级别运行模型,看看是否是这种情况。尝试然后检查日志:

model = load_fmu("...", log_level=6)
model.set("_log_level", 8)
...
于 2018-03-10T13:07:19.727 回答