Я хочу знать, можно ли смоделировать в OMShell модель, вложенную в пакет, который я загрузил в OMShell через loadFile(). Ни одна из моих попыток сделать это через loadModel() или loadFile() не увенчалась успехом.
Ситуация следующая: у меня есть самостоятельно написанный (Modelica) пакет с именем Testpackage, который содержит модель с именем Testmodel, которую я хочу смоделировать в OMShell. Пакет не организован в структуру папок — это просто файл package.mo.
Мне удается загрузить файл пакета, перейдя по cd("/path/to/Testpackage"), а затем загрузив пакет через loadFile(Testpackage).
После этого я потерялся. При попытке загрузить Testmodel с помощью команды loadModel(Testmodel) я получаю сообщение о том, что он пытался загрузить его из стандартной библиотеки Modelica. Указав путь, он сообщает мне вещи, которые я не знаю, как интерпретировать.
Заранее благодарим вас за помощь! Римский
Обновлено:
Я только что столкнулся с другой проблемой, и я надеюсь, что можно добавить мой вопрос в эту тему и отредактировать исходный вопрос.
Причина, по которой я пытаюсь познакомиться с OMShell, заключается в том, что мне нужно выполнить несколько симуляций с моделями в моем самописном пакете, расширяющем модели библиотеки зданий... несколько прогонов, где я хочу варьировать используемые файлы погоды и некоторые значения внутри запись параметра, определяющая мою модель. Я хотел написать скрипт (.mos) для автоматизации этого процесса и наткнулся на команду «setParameterValue()».
Попытка использовать его для управления параметром модели внутри модели, которую я моделирую, похоже, не работает, поскольку я получаю сообщение об ошибке, в котором говорится, что он не может найти класс. Но это работает, когда я хочу манипулировать параметром модели, которую хочу имитировать.
Существует ли ограничение на применимость этой команды только к модели, которую я моделирую, а не к моделям внутри нее? Я хотел бы знать, как получить доступ к параметрам, которые находятся на «более глубоком уровне»....надеюсь, вы поняли то, что я хочу выразить. Заранее большое спасибо за вашу помощь!
Римский
Вышеупомянутый пример — это когда у вас есть package.mo внутри каталога Testpackage. Если у вас есть файл Testpackage.mo вместо каталога, вам необходимо загрузить его: loadFile("/path/To/Testpackage.mo");
См. также: 13.4 Сопоставление файловой системы пакета/класса в specification.modelica.org/master/packages.html
Спасибо за помощь, Адриан! Честно говоря (после прочтения), я сомневаюсь, что пришёл бы к такому выводу без подсказки, просто прочитав этот отрывок в спецификации. Я только что узнал что-то новое.... я ценю вашу помощь!
Пожалуйста, задайте новый вопрос вместо того, чтобы менять этот.





Загружать TestModel не обязательно. Вы просто загружаете пакет, а затем моделируете, используя полный путь к классу. Это должно работать:
loadFile("/path/to/Testpackage.mo") // loads the package and its content
simulate(Testpackage.Testmodel)
Я предлагаю просмотреть руководство пользователя, чтобы получить представление о том, что делают функции. Судя по всему, loadModel предназначен для загрузки моделей из стандартной библиотеки Modelica, что также отражается в сообщении об ошибке, которое вы получаете (на самом деле я думаю, что он загружает что угодно из MODELICAPATH, а не только MSL, поэтому документация вводит в заблуждение).
Привет, Марко, спасибо за твой ответ — я попробовал, и это работает. Я привык к OMEdit, и неспособность «видеть» вещи и делать все, вводя команды, требует, чтобы вы знали этот процесс.
Вам необходимо загрузить всю библиотеку: loadFile("/path/To/Testpackage/package.mo"); симулировать(Testpackage.ModelName);