PyFMI:从结果文件重新启动耦合模拟

时间:2018-08-13 19:31:59

标签: python modelica

我正在使用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')

但是我不知道如何将这些结果定义为下一步仿真的初始条件。

1 个答案:

答案 0 :(得分:0)

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