Как я могу добавить собственный пакет в путь запуска в Dymola / Modelica?

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


person Chad    schedule 15.03.2013    source источник


Ответы (5)


Хитрость заключается в том, чтобы добавить следующие строки в settings.mos в c: / Users / USERNAME / AppData / Roaming / Dynasim:

Utilities.setenv("MODELICAPATH", "C:\Users\USERNAME\Documents\Dymola");
openModel("c:\Users\USERNAME\Documents\Dymola\UserDefined\package.mo")

Первая строка добавляет каталог к ​​пути, который Dymola использует для поиска пакетов, которые не были загружены до первого запуска модели, а вторая строка загружает указанный пакет. Эти две команды могут быть несколько избыточными, но я делаю обе, потому что хочу убедиться, что мои пользовательские пакеты находятся на пути в дополнение к загрузке пакета UserDefined.

person Chad    schedule 20.03.2013
comment
Я сам столкнулся с этим и собирался обновить свой ответ, но вы меня опередили! - person Michael Tiller; 18.04.2013
comment
@MichaelTiller, можно ли изменить строку в openModel, чтобы использовать сокращение modelica: //? - person Chad; 07.08.2013
comment
Вам не нужен синтаксис modelica: //. Если вы хотите открыть модель, просто произнесите openModelFile("Fully.Qualified.Model.Name") (например, openModelFile("Modelica")). - person Michael Tiller; 08.08.2013

Два предложения. Во-первых, вам нужно добавить свой пакет в MODELICAPATH. Вам нужно будет обратиться к документации Dymola, чтобы точно определить, что вам нужно делать. Но обычно это означает, что вы должны установить переменную среды, которая дает список каталогов (разделенных ;) для поиска вашего пакета. Теперь это поместит его на ваш путь, чтобы он мог найти его автоматически, но он не будет загружать его, пока он не понадобится.

Если вы хотите, чтобы он всегда отображался в браузере пакетов, вам, вероятно, потребуется настроить файл .mos (скрипт) для его загрузки. У Димолы есть такая возможность, но вам придется прочитать руководство, чтобы выяснить, как этот скрипт должен называться и где Димола ожидает его найти.

Надеюсь, это поможет.

person Michael Tiller    schedule 16.03.2013
comment
Что ж, руководство Dymola, похоже, не предоставило достаточно информации для настройки скрипта .mos, поэтому этот вопрос частично решен. - person Chad; 18.03.2013
comment
Чад, стоит попробовать две вещи. Во-первых, в Разделе 5.5.16 руководства Dymola показано, как можно вызвать Dymola и попросить его запустить скрипт. Это может сработать (я бы не использовал параметр «/ nowindow»). Кроме того, Раздел 4.3.6 подразумевает (но на самом деле не говорит об этом прямо), что сценарий dymola.mos вызывается при запуске Dymola. Таким образом, вы можете добавить свою команду, чтобы открыть там свою библиотеку. Я, кажется, припоминаю, что он также ищет файл dymola.mos в текущем каталоге, в котором он запускается, и, если он есть, запускает его. Но никаких обещаний нет. Вам просто нужно попробовать. - person Michael Tiller; 20.03.2013

В папке установки Dymola 2018 -> insert -> dymola.mos я добавил строки:

Utilities.setenv("MODELICAPATH", "C:\Users\XXXX\Documents\Dymola");
openModel("C:\Users\XXXX\Documents\Dymola\DCOL\package.mo");
openModel(“C:\Users\XXXX\Documents\Dymola\Annex60 1.0.0\package.mo”);

Теперь я не понимаю предложения об утилитах, так как пакет DCOL отлично загружается без него, а добавленный пакет «утилит» в меню пакетов бесполезен. Но он не открывает пакет Annex60.

Я пробовал много разных комбинаций и не могу загрузить несколько пакетов. Сомневаюсь, что "cd" и "Advanced.ParallelizeCode", которые тоже добавлены в текст, работают.

person Rens de Waal    schedule 14.02.2018

Ответ принято не работает с Dymola 2017 FD01, поскольку файл settings.mos больше не используется. Вместо этого пользовательские настройки хранятся в файле setup.dymx, расположенном в

C:\Users\USERNAME\AppData\Roaming\DassaultSystemes\Dymola

В отличие от файла setup.mos, вы не можете включать пользовательские строки в сценарий modelica в setup.dymx.

answer с использованием dymola.mos по-прежнему работает, но вам нужны права администратора для изменения этого файла.

Вот простое решение, которое работает со всеми версиями Dyomola: вы можете передать .mos-скрипт в качестве первого параметра в dymola.exe.

Это может, например, сделать так:

  • Создайте где-нибудь сценарий .mos с такими командами, как openModel () и т. Д.
  • Создайте ярлык для Dymola.exe на рабочем столе.
  • Откройте свойства ярлыка и добавьте путь к сценарию .mos в текстовое поле Target. Тогда это будет выглядеть примерно так:

"C:\Program Files\Dymola 2018 FD01\bin64\Dymola.exe" "C:\<some-path>\startup.mos"

  • Запустите Dymola с помощью ярлыка на рабочем столе. Сценарий будет выполнен, а возможные ошибки или сообщения отобразятся в окне команд.
person marco    schedule 19.02.2018

Другое предложение, когда вам не нужно жестко кодировать ваш пакет в переменной среды вашей операционной системы (и, возможно, более безопасно для неопытных программистов):

  1. Перейдите в папку, в которой установлена ​​Dymola (например, C: \ Program Files \ Dymola 2020).
  2. Найдите файл Dymola.mos во вложенной папке. 'вставить' папку
  3. Откройте скрипт (например, в блокноте ++)
  4. Добавьте сюда ссылку (-ы) на ваш файл (-ы) Dymola-library-package.mo с помощью оператора openModel, например, openModel ("C: /IDEAS/package.mo"); Скрипт Dymola.mos
  5. Сохраните сценарий. Теперь каждый раз, когда вы открываете Dymola, ваши библиотеки загружаются автоматически.
person Matthi9000    schedule 08.10.2019