Есть ли способ составить список параметров FMU (или субмодели в FMU), используя библиотеки python FMPy или pyFMI? - PullRequest
4 голосов
/ 02 марта 2020

У меня есть FMU модели, и сценарий использования - изменить значения параметров FMU, чтобы увидеть влияние на результаты. Есть ли способ перечислить параметры верхнего уровня FMU, используя FMPy или pyFMI, если у меня нет доступа к модели Modelica?

Один из процессов, которым я следовал, - открыть FMU с помощью FMPy. gui и go просмотрите список параметров и затем используйте их в сценарии, но я хотел бы знать, есть ли более простой способ сделать это, чтобы я мог затем перечислить их в записной книжке Jupyter и изменить параметры по мере необходимости?

Ответы [ 3 ]

4 голосов
/ 02 марта 2020

В FMI нет различия между параметрами верхнего уровня и другими параметрами. Для просмотра всех доступных параметров в модели с использованием PyFMI (FMI 2.0):

from pyfmi import load_fmu
import pyfmi.fmi as fmi

model = load_fmu("MyModel.fmu")
params = model.get_model_variables(causality=fmi.FMI2_PARAMETER)
2 голосов
/ 03 марта 2020

Для fmpy вы также можете проверить этот блокнот jupyter: https://notebooks.azure.com/t-sommer/projects/CoupledClutches, который содержит строки

model_description = read_model_description(filename)  # read the model description

for variable in model_description.modelVariables:            # iterate over the variables
    if variable.causality == 'parameter':                    # and print the names of all parameters
        print('%-25s %s' % (variable.name, variable.start))  # and the respective start values
2 голосов
/ 03 марта 2020

С помощью fmpy вы можете l oop сверх modelVariables в описании модели следующим образом:

from fmpy import read_model_description
from fmpy.util import download_test_file

fmu_filename = 'CoupledClutches.fmu'

download_test_file('2.0', 'CoSimulation', 'MapleSim', '2016.2', 'CoupledClutches', fmu_filename)

model_description = read_model_description(fmu_filename)

parameters = [v for v in model_description.modelVariables if v.causality == 'parameter']
...