问题标签 [jmodelica]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
428 浏览

modelica - PyFMI/JModelica - 暂停模拟并从修改参数的状态重新启动

我正在使用 Dymola 2019 将我的 Modelica 模型转换为 FMU,然后我使用 JModelica 进行模拟(我从 2018 年 3 月 15 日开始使用 JModelica 2.2 版)。我的目标是能够模拟某个时期,分析结果,根据这些结果修改某些参数,然后在使用新参数值的同时从中断的地方继续之前的模拟。

我知道get_fmu_stateandset_fmu_state在技术上应该能够做到这一点,但是在尝试实现它时我没有设法使它工作,并且 PyFMI 目录中似乎没有任何示例使用其中任何一个功能。我尝试了以下方法:

上面的代码在不引发任何异常的情况下工作,尽管它确实在最后打印了以下警告:WARNING:root:The simulation start time (5.000000) and the current time in the model (0.000000) is different. Is the simulation start time correctly set?. 但更重要的是,当在一个相对复杂的模型上尝试使用 Modelicasample()函数定期更改的离散实变量时,该离散变量的状态似乎在第二次模拟中变得不可变。它的初始值从第一次模拟结束时延续,但之后不再改变。因此,在前面的代码中,将产生与以下代码中res2截然不同的结果:res3

即使将通信点的数量增加一倍res3以更准确地反映,差异仍然存在res2。我不知道为什么我的真实离散变量在使用set_fmu_state(). 有没有人有任何想法?我没有set_fmu_state()正确使用吗?

还值得注意的是,我也看过这个问题,但这显然需要使用compile_fmu()而不是load_fmu()为了使用该"state_initial_equations": True选项(更不用说它似乎不适用于模拟中未包含的变量结果)。我也看过这个问题,但这是专门针对 Dymola 而不是 JModelica 的,并且依赖于结果文件中存在的所需状态,但情况并非总是如此。

编辑

为了让我的问题更清楚,我在下面提供了一个示例模型。

之后,使用 Dymola 2019 将此模型转换为 FMU 格式,然后使用 JModelica 在我的问题中运行 Python。首先,以下结果res3符合预期:

但是,以下结果res2表明,虽然连续变量在使用 时表现如预期,但另一方面set_fmu_state()离散变量在整个第二次模拟中不会发生变化:

0 投票
2 回答
540 浏览

python - FMU 模块并使用 PyFMI 从 OpenModelica 传输到 Python

在 Python 环境中使用 PyFMI 加载 OpenModelica FMU 模块(带有 MSL 噪声模块)不起作用。

我试图在 PyFMI 环境中运行从 OpenModelica 导出的 FMU 模块。确定性模型工作正常。

但是,当我使用 MSL 块 Modelica.Blocks.Noise.NormalNoise 包含噪声模型时,我会得到一个 FMU,它在加载到 PyFMI 环境时会出现问题。错误文本以:

FMUException:加载二进制文件时出错。无法加载 DLLL:libModelicaExternalC.so.0:无法打开共享对象文件:没有这样的文件或目录。

不用说,但在 OpenModelica 中,带有噪声的系统运行良好。JModelica 中的相同代码以及使用 PyFMI 在 Python 环境中编译和加载的代码也运行良好。然而,OpenModelica 和 JModelica 中相同种子的随机噪声序列不同,这表明存在一些差异。

对于这个例子,我在 Docker Linux 中运行 JModelica 和 PyFMI 2.1 版,OpenModelica 也在 Linux 环境中运行。由于 Linux 在两者中我都可以传输 FMU 模型。JModelica 和 OpenModelica 都支持 Modelica 标准 3.2.2 和相应的 MSL。

我还刚刚使用来自 mclab 的 Docker Linux 映像使用 JModelica 和 PyFMI 2.4 版(或至少 2.2 版)测试了该示例。我得到与 2.1 相同的错误文本(并且没有噪音块,它的工作原理与 2.1 相同)。

——</p>

我的问题是,所描述的错误是在 PyFMI 还是 OpenModelica 方面,或者两者兼而有之?或者,从 OpenModelica 导出 FMU 时是否需要做一些额外的事情?

0 投票
1 回答
101 浏览

python - 常量上的 PyFMI FMU 模块方法 get_variable_unit()

PyFMI FMU 模块方法 get_variable_unit() 不适用于常量。

在我看来,FMU-mouldes get_variable_unit() 和 _variable_description 的 PyFMI 方法也处理常量和参数。

我制作了一个包含常量声明的包 M。尽量使它整洁并声明单位和描述。当我尝试 get_model_variable_unit('model.variable') 时,我收到错误消息“No unit was found for the variable...”。但是它对 get_model_variable_description() 的工作方式与预期一样。

在我看来,它是一个小错误。

我运行的是秋季安装的 JModelica 2.4,即最近在 12 月份将 PyFMI 升级到 2.5,我不使用。

0 投票
2 回答
746 浏览

c - 未定义对“__imp_fmi2_import_free”的引用

我一直在尝试编译和链接一个用 c 编写的可以与 JModelica 的 FMILibrary 通信的测试文件。我能够编译和链接它并在 linux 系统中运行它。来到 Windows,我正在使用 mingw-64 编译器编译测试文件并将其与 FMILibrary 链接,但我收到未定义的引用错误。我能够在 32 位 mingw 上编译和运行它,但我需要编译它并将其与 64 位编译的二进制文件链接。

我的命令是这样的:

以下是作为结果打印出来的结果

FMILibrary 上是否有任何宏或任何设置以在 Windows 64 位上使用 64 位 mingw 编译器进行编译?谢谢。

0 投票
2 回答
389 浏览

matlab - fmi2Instantiate:未定义的函数或变量“fmuhelper”

我正在尝试使用新的工具耦合工具箱从 matlab 导出 fmu,如此链接所示https://www.mathworks.com/help/simulink/ug/_mw_54e936ec-2fa7-4418-be70-d99c8f91d2bd.html

所以我能够导出一个 fmu 并生成源代码的 64 位二进制文​​件,因为我的平台是 64 位的。我编写了一个测试文件来导入 fmu 并仅使用二进制文件运行模型。因此,我按照链接中的说明启动了 matlab 服务器,然后尝试运行我的测试文件。我的测试文件与 qtronic 导出的示例 fmus 等其他 fmus 配合良好。现在我想运行matlab生成的fmu,它给出了以下错误:

fmistatus = 错误;测试 CS 模型实例 (logStatusError):fmi2Instantiate:未定义的函数或变量“fmuhelper”。fmi2Instantiate:未定义的函数或变量“fmuhelper”。fmi2_import_instantiate 失败模块 = FMICAPI,日志级别 = 5:调用 fmi2SetupExperiment

我没有在我的任何源代码中写任何东西作为 fmuhelper。当我在 matlab 中检查并转到特定路径时,我能够看到 fmuhelper 是 matlab 的一部分,并且它是一个构造函数。除了那个功能,我什么都不懂。谁能给我一些关于如何解决它的建议?谢谢!

0 投票
0 回答
125 浏览

openmodelica - fmi - 忽略未知资源 URI

我从 openmodelica OMEditor 导出了一个模型 fmu,它是 FMU 2.0 版,我将其指定为联合仿真。我收到以下错误:

fmistatus = 好的;测试 CS 模型实例 (logStatusWarning ): fmi2Instantiate: 忽略未知资源 URI: (null) fmi2Instantiate: 忽略未知资源 URI: (null) assert | 调试 | 无法打开文件 (null)/test_info.json 进行读取:没有这样的文件或目录 getBestJumpBuffer got mmc_jumper=0000000000000000, globalJumpBuffer=0000000000000000

我不明白为什么找不到资源文件夹 URI。它在 Model Exchange 上运行良好。我参考了下面的链接并将我的路径更改为提取的文件夹,但得到了同样的错误。

https://trac.openmodelica.org/OpenModelica/ticket/2623

请提出一种解决此错误的方法。谢谢!

0 投票
0 回答
202 浏览

modelica - 在 Modelica 模拟中包含因果关系会导致模型展平时出现平移错误

我想模拟一个基于能量工作的质量弹簧模型的控制器:

但这会导致错误消息:

翻译错误

展平模型时出错

如果您能帮助我了解问题所在以及如何解决,我将不胜感激。

PS1。 SIMULINK也无法完成!

PS2。可以在这里看到新版本的代码。

P.S.3. According to this discussion on Discord, the algorithm section was not really meant for casual relations. More information about the keyword is here.

0 投票
1 回答
256 浏览

modelica - 为什么 q_nom 和 head_nom 总是对从 ThermoPower 库构建的模型给出问题?

我已经在 OpenModelica 的 ThermoPower 库中工作了一段时间,现在尝试通过首先对 Brayton 和 Rankine Power Cycles 进行建模来构建组合的 Power Cycle。

每次我尝试使用泵时,我总是收到如下错误:

选择的任何泵都将始终为我的模型声明这些错误。我尝试了许多不同类型的解决方案,但都没有成功。

  1. 我尝试使用矢量格式声明泵组件参数的值,即:q_nom = {1,1,1}。尝试模拟时会弹出相同的错误。

  2. 我尝试直接单击错误只是为了重定向到 ThermoPower.PowerPlants。在这里,我指向一行代码:

    函数 flowCharacteristic = ThermoPower.Functions.PumpCharacteristics.quadraticFlow (q_nom= q_nom, head_nom=head_nom);

在这里,我尝试手动输入 q_nom 和 head_nom 的值,但没有成功。我还尝试在模型顶部复制上面的代码行,试图“重新声明”函数flowCharacteristic。这只会导致错误地重新声明不可声明的类。

我尝试了其他解决方案,但没有成功。

如果您对如何解决此问题有任何建议,请随时在下面留下您的意见!

更新:

这是我已经研究了一段时间的模型的代码。

模型Rankine_HRSG

0 投票
1 回答
186 浏览

modelica - OpenModelica 抱怨不能为负的负值

这个问题之后,我修改了我在这里描述的基于能量的控制器,以避免出现负值sqrt

但是,它一直给我错误:

在时间 7.170000 违反了以下断言

模型错误:sqrt(K / m) 的参数是 -1.77973e-005 应该 >= 0

Integrator 尝试使用调用的断言来处理问题。

在时间 7.169500 违反了以下断言

模型错误:sqrt(K / m) 的参数是 -6.5459e-006 应该 >= 0

模型终止 | 模拟被当时的断言终止:7.1695

统计数据 

模拟过程失败。以代码 -1 退出。

如果您能帮助我了解问题所在以及如何解决,我将不胜感激。

0 投票
1 回答
775 浏览

modelica - 如何在 Modelica 中修复“范围内未找到变量”

我最近尝试实例化位于 PowerSystems.Examples.Wind.WindFarm 中的 WindFarm.mo,但收到一条错误消息:

我以前遇到过这个问题,错误消息总是将用户重定向到不同的类或部分类。

这个错误让我很困惑,因为WindFarm.mo 中没有任何地方使用 PowerSystems.AC3ph.Machines 库中的任何模型。

WindFarm.mo 中使用的所有组件确实都有 PowerSystems.AC3ph 中使用的组件,但是,这就是它的终点。我相信转子速度的变量n_r甚至没有在我的模型中使用。

如果您对此主题有任何了解,建议或建议,请随时发表评论!谢谢!