首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为FMI类型"Model Exchange“设置一个变量

为FMI类型"Model Exchange“设置一个变量
EN

Stack Overflow用户
提问于 2019-10-09 21:14:30
回答 1查看 491关注 0票数 0

我正在使用python fmpy运行一个fmu模型。执行、运行和绘制结果都可以正常工作。定义输入(遵循教程)。

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

例如,如果我在图形用户界面(https://fmpy.readthedocs.io/en/latest/tutorial/)中运行相同的模型,我将获得所有可用参数的完整列表。在那里,我可以将名为"l1“的参数的值设置为412。如果我记录图形用户界面的FMI调用,我可以看到,使用以下命令将"l1“设置为值412:

fmi2SetReal(fmu、vr=671088641、nvr=1、value=412)

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

代码语言:javascript
复制
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类型。我试图将其定义为输入,但这不起作用。

有什么建议吗?

干杯

EN

回答 1

Stack Overflow用户

发布于 2019-10-17 20:23:12

所以我就想明白了.

要在fmpy中定义全局参数,需要使用"start_values“语句。在coupled_clutches.py中有一个很好的例子。但为了完整起见,这里给出了一个“Rectifier.fmu”模型的最小工作示例。‘'vrs’包含fmu模型中保存的所有变量,您可以在那里找到频率'f‘。默认值设置为50 be,如果频率参数应设置为100 be,只需使用'start_values={'f':100}‘,如下所示:

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

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

https://stackoverflow.com/questions/58305021

复制
相关文章

相似问题

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