首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在模拟过程中暂停JModelica并传递增量输入

在模拟过程中暂停JModelica并传递增量输入
EN

Stack Overflow用户
提问于 2016-08-30 07:38:48
回答 1查看 408关注 0票数 3

嗨,Modelica社区,

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

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

谁能给我提供一个例子或一段代码,说明如何在JModelica中实现这一点?

我要把模拟命令放在循环中吗?如果是这样,我如何处理预热周期和初始化,而不会在之前的时间步中丢失数据?

谢谢您抽时间见我,

贾斯汀

EN

回答 1

Stack Overflow用户

发布于 2017-03-08 22:35:26

回答晚了,但以防它被其他人拿到...

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

代码语言:javascript
复制
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

代码语言:javascript
复制
# 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编译选项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39216764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档