gpt4 book ai didi

modelica - 在仿真期间暂停 JModelica 并传递增量输入

转载 作者:行者123 更新时间:2023-12-02 03:12:20 26 4
gpt4 key购买 nike

嗨,Modelica 社区,

我想在 JModelica 中并行运行两个模型,但我不确定如何在模型之间传递变量。一个模型是python模型,另一个是EnergyPlusToFMU模型。

JModelica 文档中的示例具有在模型仿真之前定义的完整仿真周期输入。我不明白如何配置一个暂停输入的模型,这是 FMU 和协同仿真的一个关键特性。

有人可以向我提供一个示例或一段代码来说明如何在 JModelica 中实现它吗?

我是否将模拟命令置于循环中?如果是这样,我如何处理预热期和初始化而不丢失先前时间步长的数据?

谢谢你的时间,

贾斯汀

最佳答案

迟到的答案,但万一被别人捡到...

您确实可以将模拟放入一个循环中,您只需要跟踪系统的状态,这样您就可以在每次迭代时重新初始化它。考虑以下示例:

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 编译选项。

关于modelica - 在仿真期间暂停 JModelica 并传递增量输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39216764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com