我正在使用python fmpy运行fmu模型。 执行,运行和绘制结果效果很好。还定义输入(按照教程进行)。
但是我正在努力改变fmu模型中的全局参数值。
例如,如果我在GUI(https://fmpy.readthedocs.io/en/latest/tutorial/)中运行相同的模型,则将获得所有可用参数的完整列表。在那里,我可以将名称为“ l1”的参数的值设置为412。如果我登录GUI的FMI调用,可以看到以下命令用于将“ l1”设置为412: / p>
fmi2SetReal(fmu,vr = [671088641],nvr = 1,value = [412])
如何使用python命令将“ l1”设置为412?
from fmpy.util import plot_result
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
from fmpy import *
fmu = 'CrankCase_ME2.fmu'
dump(fmu)
# read the model description
model_description = read_model_description(fmu)
# collect the value references
vrs = {}
for variable in model_description.modelVariables:
vrs[variable.name] = variable.valueReference
L = 412
hPLug = 215
alphaDrvie = 60
start_vrs = [vrs['l1'], vrs['h_plug'], vrs['Alpha_drive']]
start_values = [L, hPLug, alphaDrvie]
dtype = [('time', np.double), ('l1', np.int), ('h_plug', np.int), ('Alpha_drive', np.int)]
signals = np.array([(0.0, L, hPLug, alphaDrvie)], dtype=dtype)
print_interval = 1e-5
result = simulate_fmu(fmu, start_time=0, stop_time=0.1, relative_tolerance=1e-7, output_interval=print_interval, input=signals)
t = result['time']
y_Force = result['expseu_.Out2'] # y force
plt.plot(t, y_Force)
我的fmu属于Model Exchange类型。 我试图将其定义为输入,但这不起作用。
有什么建议吗?
欢呼
答案 0 :(得分:0)
所以我才想通了...
要在fmpy中定义全局参数,请使用“ start_values”语句。 coupled_clutches.py中有一个很好的例子。但是为了完整起见,此处仅提供了“ Rectifier.fmu”模型的最小工作示例。 “ vrs”包含fmu模型中所有已保存的变量,您可以在其中找到频率“ f”。默认值设置为50Hz,如果将频率参数设置为100Hz,则只需使用'start_values = {'f':100}',例如:
from fmpy import dump, simulate_fmu, read_model_description
from fmpy.util import plot_result
fmu = 'Rectifier.fmu'
dump(fmu)
model_description = read_model_description(fmu)
vrs = {}
for variable in model_description.modelVariables:
vrs[variable.name] = variable.valueReference
print_interval = 1e-5
result = simulate_fmu(fmu,
start_time=0,
stop_time=0.1,
relative_tolerance=1e-7,
output_interval=print_interval,
start_values={'f': 100})
plot_result(result)
如果要直观地浏览保存的参数,可以在FMPy GUI内打开fmu