您好 Modelica 社区,
我想在 JModelica 中并行运行两个模型,但我不确定如何在模型之间传递变量。一个模型是 python 模型,另一个是 EnergyPlusToFMU 模型。
JModelica 文档中的示例具有在模型仿真之前定义的完整仿真周期输入。我不明白如何配置一个暂停输入的模型,这是 FMU 和联合仿真的一项关键功能。
有人能给我提供一个示例或一段代码来说明如何在 JModelica 中实现这一点吗?
我是否将模拟命令放入循环中?如果是这样,我如何处理预热期和初始化而不丢失先前时间步的数据?
感谢您的时间,
Justin
迟到的回答,但万一被其他人发现了......
您确实可以将模拟放入循环中,您只需要跟踪系统的状态,以便可以在每次迭代时重新初始化它。考虑以下示例:
Ts = 100
x_k = x_0
for k in range(100):
# Do whatever you need to get your input here
u_k = ...
FMU.reset()
FMU.set(x_k.keys(), x_k.values())
sim_res = FMU.simulate(
start_time=k*Ts,
final_time=(k+1)*Ts,
input=u_k
)
x_k = get_state(sim_res)
现在,我编写了一个小函数来获取状态,x_k
,系统的:
# Get state names and their values at given index
def get_state(fmu, results, index):
# Identify states as variables with a _start_ value
identifier = "_start_"
keys = fmu.get_model_variables(filter=identifier + "*").keys()
# Now, loop through all states, get their value and put it in x
x = {}
for name in keys:
x[name] = results[name[len(identifier):]][index]
# Return state
return x
这依赖于设置"state_initial_equations": True
编译选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)