我在通过 PyFMI 模拟 EnergyPlus-FMU 时遇到了麻烦。我使用参考建筑模型创建了 EnergyPlus FMU。我使用的是PyFMI2.5。如何运行 do_step() 函数?
from pyfmi import load_fmu
model = load_fmu("MyEnergyplus.fmu")
start_time = 0
final_time = 60.0 * 60 * 24 * 3 #seconds
step_size = 60 # seconds
opts = model.simulate_options()
idf_steps_per_hour = 60
ncp = (final_time - start_time)/(3600./idf_steps_per_hour)
opts['ncp'] = ncp
t = 0
status = model.do_step(current_t = t, step_size= step_size, new_step=True)
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
File "test_fmi2.py", line 15, in <module> status = model.do_step(current_t = t, step_size= step_size, new_step=True)
AttributeError: 'pyfmi.fmi.FMUModelME2' object has no attribute …
Run Code Online (Sandbox Code Playgroud) 我有一个模型的 FMU,用例是更改 FMU 的参数值以查看对结果的影响。如果我无法访问 Modelica 模型,有没有办法使用 FMPy 或 pyFMI 列出 FMU 的顶级参数?
我一直在遵循的过程之一是使用 FMPy.gui 打开 FMU 并查看参数列表,然后在脚本中使用它们,但我想知道是否有更简单的方法,以便我可以列出然后在 Jupyter notebook 中根据需要更改参数?
通过像 FMPy 这样的 Python 库,我能够针对给定的和模拟 fmus(使用fmpy.simulate_fmu
) 。在这种情况下,函数simulate_fmu完成模拟并返回时间序列结果。start_time
stop_time
但是,我想在 fmu 和 Python 函数之间创建一个闭环(即在 Python 脚本中初始化 fmu,每 0.1 秒后从 fmu 获取结果,并基于该结果将下一个时间步的输入值更新到 fmu) 。有没有办法使用 fmpy 或 pyfmi 等现有库来实现此目的?
我有一个 pandapower 网络,在一些公交车上,我将电池和光伏设备作为 FMU。现在我有一个主算法,可以在不同 FMU 的输入和输出之间创建连接并运行模拟。
我的问题是是否有可能将所有内容组合成一个 FMU,它将所有不同的输入和所有不同的输出组合在一起。
在一些交互式仿真工作中,可以方便地仿真到某个时间点,更改一些参数,然后继续仿真。
使用FMU进行仿真,则需要重新加载或重置FMU,然后为系统状态输入新的初始值,该初始值是先前仿真的状态的最终值。您还需要以与之前的模拟类似的方式输入与默认值不同的参数值。
当您使用 PyFMI 时,有一个方便的关联函数 get_states_list() ,如下所示:
from pyfmi import load_fmu
...
model = load_fmu('file of fmu')
stateDict = model.get_states_list()
Run Code Online (Sandbox Code Playgroud)
字典 stateDict 包含连续时间状态,这对于进一步自动更新初始状态值与先前模拟的最终状态值非常有帮助。据我了解,可能的离散时间状态不包括在内,并且需要手动处理。
如何使用 FMPy 获得类似的(连续时间)状态字典?或者更好的是,还包括离散时间状态?