首页 > 解决方案 > PyFMI:从结果文件重新启动耦合模拟

问题描述

我正在使用 PyFMI 来模拟两个 FMU(Control.fmu 和 Plant.fmu)的耦合模拟,如下所示。

import matplotlib.pyplot as plt
from pyfmi import load_fmu

fmu_control = load_fmu('Control.fmu'); fmu_plant = load_fmu('Plant.fmu')

# List models
models = [fmu_control, fmu_plant]
# Set up connections between models
connections = [(fmu_control, 'y1', fmu_plant, 'u1'), (fmu_control, 'y2', fmu_plant, 'u2'),
               (fmu_plant, 'y1', fmu_control, 'u1'), (fmu_plant, 'y2', fmu_control, 'u2')]

# Create coupled co-simulation object
from pyfmi.master import Master
coupled_simulation = Master(models, connections)

opts = coupled_simulation.simulate_options()
opts['step_size'] = 0.01; opts['linear_correction'] = False
opts['block_initialization'] = True; opts['initialize'] = False

coupled_simulation.initialize(start_time = 0.0, final_time = 0.01, opts = opts)

res = coupled_simulation.simulate(options=opts, final_time = 1.0)

Plant_u1 = res[fmu_plant]['u1']; Plant_u2 = res[fmu_plant]['u2']
Plant_y1 = res[fmu_plant]['y1']; Plant_y2 = res[fmu_plant]['y2']
time = res[fmu_plant]['time']

有没有办法在模拟中实现重启功能?我想加载结果文件并使用它们继续模拟(即,从我在上一步中中断的地方开始)。我一直在使用以下方法读取结果文件:

from pyfmi.common.io import ResultDymolaTextual
res_control = ResultDymolaTextual('Control_0_result.txt')
res_plant = ResultDymolaTextual('Plant_1_result.txt')

但我不知道如何将这些结果定义为下一个模拟步骤的初始条件。

标签: pythonmodelica

解决方案


为了完全支持重启功能,FMU 本身需要支持规范中描述的可选功能获取/设置 FMU 状态,请参阅https://fmi-standard.org/downloads/。在一般情况下,仅使用结果文件重新启动仿真是不够的,因为 FMU 中通常存在未在结果文件中公开但对 FMU 的实际状态有重大影响的内部变量。例如,布尔开关通常不在结果文件中。


推荐阅读