В поисках такого понятия, как «многословие» в Modelica - PullRequest
5 голосов
/ 28 сентября 2011

Я борюсь с размером выходных файлов для больших моделей Modelica. Конечно, я могу защитить некоторые объекты, чтобы полностью удалить их из файла результатов. Однако это порождает две проблемы:

  1. невозможно повторно объявить защищенные объекты
  2. если я хочу подробно протестировать свою модель (например, в течение короткого периода времени), мне нужно снова объявить эти объекты публично, чтобы увидеть их переменные

Интересно, есть ли хитрость, чтобы установить «многословность» модели Modelica? Возможно, мне бы хотелось, чтобы третье ключевое слово было рядом с public, protected, например transparent. Затем, при настройке симуляции, я хочу установить уровень детализации на 1 или 2 со следующим эффектом:

1 -> считать все transparent элементы protected

2 -> считать все transparent элементы public

Этот эффект распространяется на все модели и подмодели.
Я не думаю, что это уже существует. Но есть ли легкий обходной путь?

Спасибо, Рул

Ответы [ 5 ]

6 голосов
/ 03 октября 2011

Как писал Майкл Тиллер выше, это не обрабатывается одинаково во всех инструментах Modelica, и нет однозначного ответа.Чтобы дать специфичный для OpenModelica ответ, можно использовать simulate(ModelName,outputFilter="regex"), чтобы хранить только те переменные, которые полностью соответствуют заданному регулярному выражению (по умолчанию .*, соответствует любой переменной).

3 голосов
/ 07 января 2014

В SystemModeler вы переходите на вкладку «Настройки» в окне просмотра эксперимента в Центре моделирования. Нажмите «Вывод» внизу и выберите переменные для хранения.

(Возможны варианты state variables, derivatives, algebraic variables, parameters, protected variables, и если вы отметите вариант Store simulation log, вы получите интересную статистику по событиям во времени и функциям оценки, открывая еще одну возможность отследить части симуляции и модели, которая создает больше оценок)

3 голосов
/ 29 сентября 2011

Рул,

Я знаю нескольких людей, борющихся с этой проблемой. На данный момент все это зависит от используемого инструмента. Я не знаю, как другие инструменты управляют фильтрацией результатов, но в Dymola вы управляете этим (как вы указали), присваивая сигналам специальные классификаторы (например, защищенные).

Одна вещь, которую я сделал в прошлом, это расширение модели, а затем добавление набора выходных сигналов для вещей, которые меня интересуют. Затем вы можете выбрать «Выходы» в Dymola, чтобы убедиться, что они попадают в файл результатов. Это далеко от совершенства, потому что а) перечисление всего, что вы хотите, может стать утомительным и б) ссылки на защищенные переменные строго запрещены (хотя Dymola позволяет вам сойти с рук, но выдает предупреждение).

В Dassault мы активно обсуждаем эту идею и надеемся предоставить некоторые более функциональные возможности в этом направлении. Не ясно, будет ли такая функциональность строго привязана к инструменту или будет каким-то образом задействовать язык. Но если это связано с языком, мы (конечно) будем работать с группой разработчиков, чтобы сформулировать спецификацию, которую могут поддерживать и другие поставщики инструментов.

2 голосов
/ 30 сентября 2011

Я не уверен, поможет ли это вам, но в Dymola вы можете перейти в Simulation-> Setup-> Output и отметить флажок «Хранить защищенные переменные». Таким образом, можно объявить большинство переменных защищенными: при обычном моделировании они не сохраняются, но при отладке вашей модели вы просто отмечаете этот флажок, и они сохраняются. Конечно, это не то же самое, что предложенное вами ключевое слово, прозрачное, но, возможно, это немного поможет ...

0 голосов
/ 08 декабря 2016

Немного поздно, но в Dymola 2013 FD01 и более поздних версиях вы можете выбрать, какие переменные хранить на основе имен (и названий моделей), используя аннотацию __Dymola_selections, и даже фильтровать по пользовательским тегам - так что вы можете создатьимя тега "прозрачный" в модели.См. «Соответствие и выбор переменных» в руководстве.

...