Базовая модель, созданная в Dymola, не может быть смоделирована в JModelica - исключение FMU

Я создал базовую модель накопителя горячей воды в Dymola, используя компоненты из пакета библиотеки зданий. Я сохранил модель как файл .mo, успешно скомпилировал fmu и загрузил модель в JModelica. Проблема возникает, когда я моделирую, используя:

res = model.simulate(final_time=100000)

Это приводит к следующему сообщению об ошибке:

FMUException Traceback (последний вызов последний) в () ----> 1 res = model.simulate (final_time = 100000)

src \ pyfmi \ fmi.pyx в pyfmi.fmi.FMUModelME1.simulate (src \ pyfmi \ fmi.c: 35608) ()

src \ pyfmi \ fmi.pyx в pyfmi.fmi.ModelBase._exec_simulate_algorithm (src \ pyfmi \ fmi.c: 6045) ()

src \ pyfmi \ fmi.pyx в pyfmi.fmi.ModelBase._exec_simulate_algorithm (src \ pyfmi \ fmi.c: 5936) ()

C: \ JModelica.org-2.1 \ install \ Python \ pyfmi \ fmi_algorithm_drivers.pyc в init (self, start_time, final_time, input, model, options) 300, если isinstance (self.model, fmi. FMUModelME1): 301 self.model.time = start_time # Установить время начала перед инициализацией -> 302 self.model.initialize (толерантность = rtol) 303 304 elif isinstance (self.model, fmi.FMUModelME2) или isinstance (self.model , fmi_coupled.CoupledFMUModelME2):

src \ pyfmi \ fmi.pyx в pyfmi.fmi.FMUModelME1.initialize (src \ pyfmi \ fmi.c: 34954) ()

FMUException: инициализация вернула ошибку. См. Информацию в журнале (FMUModel.get_log).

Как и предполагалось, я проверил журнал с помощью model.get_log(), что также не имеет особого смысла:

FMIL: модуль = Модель, уровень журнала = 2: [ОШИБКА] [Состояние FMU: Ошибка] Не удалось заключить корень в скобки «1». И нижняя, и верхняя границы находятся на грани.

FMIL: модуль = Модель, уровень журнала = 2: [ИНФОРМАЦИЯ] [Состояние FMU: Ошибка] Не удалось выполнить инициализацию.

FMIL: модуль = Модель, уровень журнала = 2: [ОШИБКА] [Статус FMU: Ошибка] Не удалось заключить в скобки корень в name = "block"> "1". И нижняя, и верхняя граница.

FMIL: модуль = Модель, уровень журнала = 2: [ИНФОРМАЦИЯ] [Состояние FMU: Ошибка] Не удалось выполнить инициализацию.

FMIL: module = Model, уровень журнала = 2: [ERROR] [FMU status: Error] category = "error"> Не удалось заключить в скобки корень в name = "block"> "1". И нижний, и верхний находятся на> границах.

FMIL: модуль = Модель, уровень журнала = 2: [ИНФОРМАЦИЯ] [Состояние FMU: Ошибка] Не удалось выполнить инициализацию.

FMIL: module = Model, уровень журнала = 2: [ERROR] [FMU status: Error] category = "error"> Не удалось заключить в скобки корень в name = "block"> "1". И нижний, и верхний находятся на> границах.

FMIL: модуль = Модель, уровень журнала = 2: [ИНФОРМАЦИЯ] [Состояние FMU: Ошибка] Не удалось выполнить инициализацию.

Какие-нибудь рекомендации по поводу того, что здесь происходит? Я слышал, как многие люди создают системы с помощью Dymola, сохраняют сценарий, а затем импортируют и моделируют в JModelica. Однако может ли это быть проблемой здесь?


person alkey    schedule 05.03.2018    source источник
comment
.mo - для моделей Modelica, .mos - для скриптов, так что, может быть, вам лучше сохранить его как .mo? И вы должны убедиться, что используете последние версии Buildings и JModelica, потому что совместимость была улучшена с последними версиями.   -  person matth    schedule 05.03.2018
comment
@matth Извинения, я допустил опечатку, файл сохранен как .mo, и я использую последние версии как JModelica, так и библиотеки зданий   -  person alkey    schedule 05.03.2018
comment
Причины подобных проблем могут сильно различаться от случая к случаю. Но обычно это связано с разными состояниями или разными итерационными переменными. В вашем случае похоже, что JModelica.org имеет разные итерационные переменные, чем Dymola для начального блока 1, поэтому, пожалуйста, проверьте, какие переменные итерации у вас есть в начальном блоке 1.   -  person Jon S    schedule 05.03.2018
comment
@ Jon-S Извините, я новичок в Modelica, как мне сравнить переменные итерации в JModelica с Dymola?   -  person alkey    schedule 05.03.2018
comment
Полностью понимаю, к сожалению, это большая тема, я бы посоветовал вам прочитать несколько книг о Modelica. Что касается поиска переменных итерации для JModelica.org, сгенерируйте диагностику HTML (jmodelica.org/api-docs/usersguide/2.1/ch04s05.html#d0e1256) и проверьте исходный BLT.   -  person Jon S    schedule 05.03.2018
comment
@ Jon-s Спасибо за ответ. Честно говоря, я пытаюсь создать рабочий процесс, который позволит мне создавать модели с зависимостями пакетов, сохранять их как отдельный файл .mo, а затем компилировать и моделировать результаты в JModelica. На первый взгляд я думал, что это будет просто, но подозреваю, что ошибки могут закрасться на любом этапе этого процесса.   -  person alkey    schedule 05.03.2018
comment
Я понимаю, что опаздываю с проблемой, но во время тестирования я обнаружил, что PyFMI не работает надежно с FMU. Я столкнулся с аналогичной проблемой с FMU библиотеки ThermoSysPro, FMU OpenIPSL. Предлагаю вам использовать библиотеку FMPy. Я протестировал его почти со всеми моделями FMU и обнаружил, что он работает надежнее других.   -  person Digvijay Gusain    schedule 17.12.2018


Ответы (1)


Из сообщения об ошибке мы получаем, что в модели есть блок, который сложно решить (блок 1), и что мы не можем найти решение с заданными верхней и нижней границами. В зависимости от того, установили ли вы минимальные / максимальные значения для переменных, это может быть проблемой. Это связано с тем, что рассматриваемый блок является одномерным и решается с использованием метода Бренца, который учитывает минимальные / максимальные значения.

Я рекомендую запустить модель с более высоким уровнем журнала и посмотреть, так ли это. Попробуйте, а затем проверьте журнал:

model = load_fmu("...", log_level=6)
model.set("_log_level", 8)
...
person Christian Winther    schedule 10.03.2018