问题标签 [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.
modelica - PyFMI/JModelica - 暂停模拟并从修改参数的状态重新启动
我正在使用 Dymola 2019 将我的 Modelica 模型转换为 FMU,然后我使用 JModelica 进行模拟(我从 2018 年 3 月 15 日开始使用 JModelica 2.2 版)。我的目标是能够模拟某个时期,分析结果,根据这些结果修改某些参数,然后在使用新参数值的同时从中断的地方继续之前的模拟。
我知道get_fmu_state
andset_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()
,离散变量在整个第二次模拟中不会发生变化:
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 时是否需要做一些额外的事情?
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,我不使用。
c - 未定义对“__imp_fmi2_import_free”的引用
我一直在尝试编译和链接一个用 c 编写的可以与 JModelica 的 FMILibrary 通信的测试文件。我能够编译和链接它并在 linux 系统中运行它。来到 Windows,我正在使用 mingw-64 编译器编译测试文件并将其与 FMILibrary 链接,但我收到未定义的引用错误。我能够在 32 位 mingw 上编译和运行它,但我需要编译它并将其与 64 位编译的二进制文件链接。
我的命令是这样的:
以下是作为结果打印出来的结果
FMILibrary 上是否有任何宏或任何设置以在 Windows 64 位上使用 64 位 mingw 编译器进行编译?谢谢。
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 的一部分,并且它是一个构造函数。除了那个功能,我什么都不懂。谁能给我一些关于如何解决它的建议?谢谢!
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
请提出一种解决此错误的方法。谢谢!
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.
modelica - 为什么 q_nom 和 head_nom 总是对从 ThermoPower 库构建的模型给出问题?
我已经在 OpenModelica 的 ThermoPower 库中工作了一段时间,现在尝试通过首先对 Brayton 和 Rankine Power Cycles 进行建模来构建组合的 Power Cycle。
每次我尝试使用泵时,我总是收到如下错误:
选择的任何泵都将始终为我的模型声明这些错误。我尝试了许多不同类型的解决方案,但都没有成功。
我尝试使用矢量格式声明泵组件参数的值,即:
q_nom = {1,1,1}
。尝试模拟时会弹出相同的错误。我尝试直接单击错误只是为了重定向到 ThermoPower.PowerPlants。在这里,我指向一行代码:
函数 flowCharacteristic = ThermoPower.Functions.PumpCharacteristics.quadraticFlow (q_nom= q_nom, head_nom=head_nom);
在这里,我尝试手动输入 q_nom 和 head_nom 的值,但没有成功。我还尝试在模型顶部复制上面的代码行,试图“重新声明”函数flowCharacteristic
。这只会导致错误地重新声明不可声明的类。
我尝试了其他解决方案,但没有成功。
如果您对如何解决此问题有任何建议,请随时在下面留下您的意见!
更新:
这是我已经研究了一段时间的模型的代码。
模型Rankine_HRSG
modelica - 如何在 Modelica 中修复“范围内未找到变量”
我最近尝试实例化位于 PowerSystems.Examples.Wind.WindFarm 中的 WindFarm.mo,但收到一条错误消息:
我以前遇到过这个问题,错误消息总是将用户重定向到不同的类或部分类。
这个错误让我很困惑,因为WindFarm.mo 中没有任何地方使用 PowerSystems.AC3ph.Machines 库中的任何模型。
WindFarm.mo 中使用的所有组件确实都有 PowerSystems.AC3ph 中使用的组件,但是,这就是它的终点。我相信转子速度的变量n_r
甚至没有在我的模型中使用。
如果您对此主题有任何了解,建议或建议,请随时发表评论!谢谢!