Python 为FMI类型设置一个变量;模型交换“;

Python 为FMI类型设置一个变量;模型交换“;,python,fmi,Python,Fmi,我正在使用pythonfmpy运行一个fmu模型。 执行、运行和打印结果效果良好。定义输入(遵循教程) 但我正在努力改变fmu模型中全局参数的值 例如,如果我在GUI()中运行相同的模型,我就有了所有可用参数的完整列表。在那里,我可以将名为“l1”的参数的值设置为412。如果我记录GUI的FMI调用,我可以看到以下命令用于将“l1”设置为412的值: fmi2SetReal(fmu,vr=[671088641],nvr=1,值=[412]) 如何使用python命令将“l1”设置为412 从fm

我正在使用pythonfmpy运行一个fmu模型。 执行、运行和打印结果效果良好。定义输入(遵循教程)

但我正在努力改变fmu模型中全局参数的值

例如,如果我在GUI()中运行相同的模型,我就有了所有可用参数的完整列表。在那里,我可以将名为“l1”的参数的值设置为412。如果我记录GUI的FMI调用,我可以看到以下命令用于将“l1”设置为412的值:

fmi2SetReal(fmu,vr=[671088641],nvr=1,值=[412])

如何使用python命令将“l1”设置为412

从fmpy.util导入绘图结果
将numpy作为np导入
从scipy输入信号
将matplotlib.pyplot作为plt导入
从fmpy导入*
fmu='曲轴箱\ ME2.fmu'
卸载(fmu)
#阅读模型说明
模型描述=读取模型描述(fmu)
#收集值引用
vrs={}
对于model_description.modelVariables中的变量:
vrs[variable.name]=variable.valueReference
L=412
hPLug=215
alphaDrvie=60
启动vrs=[vrs['l1',vrs['h_插头]],vrs['Alpha_驱动器]]
起始值=[L,hPLug,alphaDrvie]
dtype=[('time',np.double),('l1',np.int),('h_plug',np.int),('Alpha_drive',np.int)]
信号=np.数组([(0.0,L,hPLug,alphaDrvie)],数据类型=数据类型)
打印间隔=1e-5
结果=模拟fmu(fmu,开始时间=0,停止时间=0.1,相对公差=1e-7,输出间隔=打印间隔,输入=信号)
t=结果[‘时间’]
y#u力=结果['expseu#u.Out2']#y力
plt.绘图(t,y_力)
我的fmu是型号交换型。 我试图将其定义为输入,但这不起作用

有什么建议吗


干杯

所以我想起来了

要在fmpy中定义全局参数,请使用“start_values”语句。 这是一个很好的例子。但为了完整起见,这里有一个“整流器.fmu”模型的最小工作示例vrs'包含fmu模型中保存的所有变量,在那里可以找到频率'f'。默认值设置为50Hz,如果频率参数应设置为100Hz,只需使用“开始值={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)
如果您想直观地查看保存的参数,可以在中打开fmu