问题标签 [fmi]

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 投票
2 回答
450 浏览

fmi - 如何使用 PyFMI 运行 EnergyPlus-FMU

我在用 PyFMI 模拟 EnergyPlus-FMU 时遇到了麻烦。我使用参考建筑模型创建了一个 EnergyPlus FMU。我正在使用 PyFMI2.5。如何运行 do_step() 函数?

我得到的错误:

我仔细检查了 PyFMI 的 API,没有发现任何问题。如何启用模拟?谢谢。

0 投票
0 回答
379 浏览

fmi - 使用 JModelica 设置 fmu 参数时出现问题 - “无法设置真实值”

我正在尝试使用用户手册第 4.4.1 节中给出的方法在 JModelica 中设置参数的值;但是,当我加载 fmu 并尝试更改值时,我收到消息:

我可以使用这种方法设置 fmu 的一些参数,但是这个方法就是不想工作。我还尝试使用 .get() 直接从 fmu 读取相同的变量来设置参数,但错误仍然存​​在。

有谁知道导致此错误的原因以及如何解决?

编辑:我尝试了其他一些参数,似乎只有分配了单位的参数才会出现错误,即功率和质量 [W] 流量 [kg/s] 单位的参数。这是否意味着只能使用这种方法更改 FMU 中真实且没有单位的参数?

0 投票
0 回答
258 浏览

cython - 如何修复'AttributeError:类型对象'pyfmi.fmi.ModelBase'没有属性'__reduce_cython__''

我正在导入 pyfmi 并收到此错误消息。我在 Windows 上使用 Spyder (Python 3.6)。

我还下载了最新版本的 Cython 0.29.13

0 投票
1 回答
100 浏览

fmi - FMI 函数调用顺序(FMI 2.0)

哪个调用顺序是正确的?

1. fmi2SetReal/Integer/Boolean/String

fmi2SetupExperiment

fmi2进入初始化模式

或者

2. fmi2SetupExperiment

fmi2SetReal/整数/布尔值/字符串

fmi2进入初始化模式

按照标准:

“在调用 fmi2EnterInitializationMode 函数之前,可以使用“fmi2SetXXX”函数设置所有具有属性的变量。在调用 fmi2EnterInitializationMode 之前必须至少调用一次 fmi2SetupExperiment,以便定义 startTime。

但是没有指定顺序。

FMI 标准中的伪代码有 fmi2SetXXX 后跟 fmi2SetupExperiment


//通信步长

h = 0.01;

// 设置所有变量的起始值(“ScalarVariable //start”)

s1_fmi2SetReal/Integer/Boolean/String(s1, ...);

s2_fmi2SetReal/Integer/Boolean/String(s2, ...);

//初始化奴隶

s1_fmi2SetupExperiment(s1, fmi2False, 0.0, startTime, fmi2True, stopTime);

s2_fmi2SetupExperiment(s1, fmi2False, 0.0, startTime, fmi2True, stopTime);

s1_fmi2EnterInitializationMode(s1);


哪个调用顺序是正确的,为什么?

提前致谢。

0 投票
1 回答
550 浏览

python - 为 FMI 类型“模型交换”设置一个变量

我正在使用 python fmpy 来运行 fmu 模型。执行、运行和绘制结果工作正常。也定义输入(按照教程)。

但我正在努力改变 fmu 模型中全局参数的值。

例如,如果我在 GUI ( https://fmpy.readthedocs.io/en/latest/tutorial/ ) 中运行相同的模型,我将获得所有可用参数的完整列表。在那里,我可以将名为“l1”的参数的值设置为 412。如果我记录 GUI 的 FMI 调用,我可以看到,使用以下命令将“l1”设置为 412:

fmi2SetReal(fmu, vr=[671088641], nvr=1, value=[412])

如何使用 python 命令将“l1”设置为 412?

我的 fmu 是 Model Exchange 类型。我试图将其定义为输入,但这不起作用。

有什么建议么?

干杯

0 投票
0 回答
139 浏览

openmodelica - 在 OpenModelica 中实现可调参数

我有以下 Modelica 代码

旨在模拟臭名昭著的火箭车问题,我想将其转换为 FMU。我使用以下方式转换文件OMShell

生成的 FMU 将变量列为

即,作为固定参数。我想更改 Modelica 代码以tunable parameter在生成的 FMU 中获取 a 。

请注意,已经提出并回答了类似的问题。建议的解决方案是添加annotation (Evaluate=false)到参数的定义中。但是,这个答案似乎特定于Dymola。建议的注释似乎对生成的 FMU 没有影响。是否有注释的 OpenModelica 变体可以达到相同的效果?

0 投票
1 回答
138 浏览

simulation - 如何将我的 OMNeT++ 模型导出为 FMU(功能模型单元)?

我正在尝试共同模拟MATLAB 和 OMNeT++。对于协同仿真接口,我使用 Ptolemy-VirGIL 将两个模型连接为 FMU。MATLAB 导出非常简单,但我找不到将我的 OMNeT++ 模型导出为 FMU 的方法。请帮忙。

0 投票
2 回答
1133 浏览

tensorflow - FMU 中的强化学习代理

我想在我在 OpenModelica 中构建的模型上训练强化学习代理。通过使用pyFMI,导入FMU,模拟一下,得到一些结果是没有问题的。

我的问题是,我不可能在每一步之后“暂停”模拟,获取状态,用它喂给我的 RL 代理并返回他提议的动作作为输入。

ModelicaGym 似乎是通过启动模拟、停止、获取结果、定义下一个动作并以最后的结束时间作为开始时间再次开始模拟来解决这个问题的一种方法。

阅读隆德大学的一篇论文 ( https://portal.research.lu.se/portal/files/7201641/pyfmi_tech.pdf ) 让我想到了另一个想法:

使用 Learner 创建一个 FMU,并通过 PyFMI.Master 连接两个 FMU。

这些方面的东西:

使用内部带有 PID 控制器的其他 FMU 控制电路是可行的,但是是否可以使用强化学习代理创建 FMU,包括所有其他所需的库、包(Keras、Tensorflow?)

根据我的观点,这样的实现可以有很好的性能,特别是对于复杂度更高的模型和学习器,这可能是一种有趣的方法。

还是我只是在追逐一些梦想,因为在 FMU 中实现强化学习算法是不可能的,或者造成了其他麻烦?

实际上,我对没有发现其他人试图实现这一点感到有点惊讶。

最好的祝福

亨里克

0 投票
2 回答
340 浏览

modelica - 如何在没有分析雅可比的情况下从 FMU 或 Dymola 访问模型雅可比

我正在尝试通过编译的 FMU 或导出的 Dymola 源代码找到一种方法来访问 dymola 中模型的 jacobian。

最终目标是使用相同的程序来访问更复杂的多体车辆模型(205 个状态)的雅可比。

使用fmi2GetDirectionalDerivative()FMI 标准似乎很有希望,所以我制作了一个简单的线性车辆模型来测试它。

该模型具有:

  • 州 -vr
  • 输入 -delta
  • 输出 -ay

对于本次测试,

  • delta=amp*sin(2*Modelica.Constants.pi*freq*time)

    • amp = 1*Modelica.Constants.pi/180
    • freq = 0.5
  • 版本:Dymola 2020x

  • 求解器:RKFIX2
  • 时间步长:0.01s
  • 协同仿真 FMU

由于这是一个线性模型,所以雅可比在整个模拟过程中应该是一个恒定值。对于这个模型,当我设置 flag 时Advanced.GenerateAnalyticJacobian = true,我会得到以下模型 jacobian 的值,这些值是根据已知fmi2GetDirectionalDerivative()和未知的所有组合计算得出的。在所有情况下,dvKnown = 1对于功能。

根据状态空间方程,这些值是正确的:

但是,如果我设置 flag Advanced.GenerateAnalyticJacobian = false,我会得到以下完全垃圾值:

我希望该值与分析值不同,因为它是数值计算的,但我不明白为什么它完全错误。

我尝试启用其他一些标志(Advanced.AllowNumericDifferentiation, Advanced.AutomaticDifferentiation)并将求解器更改为 CVODE、DASSL 等,但值仍然不正确。

不幸的是,Dymola 无法为大型模型计算分析雅可比,因此我无法使用该选项。我读过的所有文献都指向fmi2GetDirectionalDerivative().

我将不胜感激有关如何将模型 jacobian 从 FMU 中取出的任何意见。

如果有其他方法可以通过 Dymola 使用,那也可以,因为我们有源代码导出许可证。

0 投票
2 回答
1828 浏览

python - Ubuntu 18.04 中 Python 3 环境中的 PyFMI

我的目标是能够在 Ubuntu 18.04 中运行 OpenModelica 生成的 FMU,然后在 Python 3 环境中使用 PyFMI 运行这些 FMU。

我按照这里的 PyFMI 安装大纲https://jmodelica.org/pyfmi/installation.html

到目前为止,我已经使用 Conda 成功安装了 Python3、Numpy、Scipy、lxml 和其他一些包,并使其与我的一些 Python 示例一起工作。但我会很感激一些详细的建议如何

  1. 安装 FMI 库 - 我不知道如何设置标志 fmil-home
  2. 安装 Assimulo

在那之后,我想我们已经准备好从安装大纲“python setup.py install —fmil-home=/path/to/fmil”

感谢一些基本的建议!