Modelica

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 19:28, 1 июня 2016.
Modelica
Modelica.png
Парадигма объектно-ориентированное, декларативное программирование
Первый   появившийся 1997
OS Кроссплатформеный
Лицензия Modelica License Version 2
Расширение файла .mo
Портал: www.modelica.org
Под влиянием
ActionScript, OCaml, Java

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

Обзор Modelica

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

История

Разработка Modelica началась в сентябре 1996 года Hilding Elmqvist. Цель в том, чтобы разработать объектно-ориентированный язык для моделирования технических систем с целью повторного использования и обмена динамических моделей системы в стандартном формате. Modelica 1.0 на основе кандидатской диссертации в Hilding Elmqvist и на опыте с языков моделирования Allan, Dymola, NMF, ObjectMath, Omola, SIDOPS +, и Smile. Hilding Elmqvist является главным архитектором Modelica, но и многие другие люди внесли свой вклад. В сентябре 1997 года, версия 1.0 спецификации Modelica была выпущена, которая стала основой для реализации прототипа в коммерческой системе программного обеспечения Dymola. В 2000 году некоммерческая ассоциация Modelica была создана для управления постоянно меняющимся языком Modelica и развитием свободной стандартной библиотеки Modelica. В том же году, началось использование Modelica в промышленных приложениях. Эта таблица представляет хронологию истории спецификации Modelica:

Версия Дата релиза Особенности
1.0 1997, Сентябрь Первая версия моделирования непрерывных динамических систем.
1.1 1998, Декабрь Элементы языка для моделирования дискретных систем
1.2 1999, Июнь Интерфейс для C и Fortran, внутренний / внешний для глобальных переменных, переработана семантика обработки событий
1.3 1999, Декабрь Улучшенные семантика внутренних / внешних соединений, защищенных элементов, выражений массива.
1.4 2000, Декабрь Удалены объявленные до использования правила, переработана концепция пакетов
2.0 2002, Июль Инициализация моделей, стандартизация графического интерфейса, функции со смешанными позиционными и именованными аргументами, конструктор записи, перечислений
2.1 2004, Март Переопределенный разъем для моделирования 3-dim. механических систем, повышенное переопределение подмодели, массива и массива индексов перечислений
2.2 2005, Февраль Возможность расширения разъема для моделирования signal bus, условные заявления компонентов, массивы с динамическими изменениями размера в функциях
3.0 2007, Сентябрь Версия очистки: спецификации переписаны, системные тип и внешний вид графического интерфейса переработаны, языковые проблемы исправлены, сбалансированная модель концепции для обнаружения ошибок в модели гораздо лучше
3.1 2009, Май Разъем потока для обработки двунаправленного постоянно меняющегося потока, перегрузки операторов, отображение частей модели к среде исполнения
3.2 2010, Март Улучшенная инициализация с гомотопическим методом, поддержка юникода, доступ к контролю защиты IP, улучшена поддержка объектных библиотек
3.3 2012, Май Добавлены элементы языка для описания периодических и непериодических синхронных контроллеров на основе синхронизированных уравнений, а также синхронных автомаов.

Описание

Семантика Modelica языка задается с помощью набора правил для перевода любого класса, описанного в языке Modelica прямой структуры Modelica. Класс должен иметь дополнительные свойства для того, чтобы его прямая структура Modelica могла быть дополнительно преобразована в набор дифференциальных, алгебраических и дискретных уравнений (= flat hybrid DAE). Такие классы называются имитационными моделями. Прямая структура Modelica также определяется для других случаев, кроме как имитационных моделей; в том числе функции (может быть использована для обеспечения алгоритмического содержимого), пакетов (используются в качестве механизма структурирования) и частичных моделей (используются в качестве базовых моделей). Это позволяет проверять корректность прежде чем строить имитационные модели. Modelica была разработана для облегчения символьных преобразований моделей, особенно отображением в основном каждой конструкции языка Modelica в непрерывные или мгновенные уравнения в прямой структуре Modelica. Многие модели Modelica, особенно в стандартной библиотеке Associated Modelica, имеют более высокие системы индекса, и могут быть разумно смоделированы только если выполняется символическое снижение индекса, то есть, уравнения дифференцированные и соответствующие переменные выбраны в качестве состояний, так что в результате система уравнений может быть преобразована в пространственную форму состояний (по крайней мере локально численно), т.е. гибридный DAE индекса нулевой. Спецификация Modelica не определяет, как имитировать модель. Тем не менее, он определяет набор уравнений, таких что результат моделирования должен удовлетворять как надо. Ключевые проблемы перевода:

  • Расширение унаследованных базовых классов
  • Параметризация базовых классов, местных классов и компонентов
  • Генерация уравнений связи с Connect-уравнений

Гибридные DAE прямой формы состоят из:

  • Объявления переменных с соответствующими основными типами, префиксами и атрибутами, таких как "действительный параметр V = 5":
  • Уравнения от уравнений разделов.
  • Функциональные вызовы, когда вызов рассматривается как набор уравнений, который включает все входные и все переменные результаты (количество уравнений = число основных результатов переменных).
  • Алгоритмические секции, где каждая секция воспринимается как набор уравнений, которые включают переменные, встречающиеся в алгоритмической секции (количество уравнений = количество различных присвоенных переменных).
  • When-clause, где каждый When-clause рассматривается как набор условно оцененных уравнений, также называемые мгновенные уравнений, которые являются функциями переменных, входящих в clause (количество уравнений = количество различных присвоенных переменных).

Таким образом, прямой гибрид DAE рассматривается как набор уравнений, где некоторые из уравнений лишь условно оценивается (например мгновенные уравнения вычисляются только тогда, когда соответствующее when-condition становится истинным). Начальная настройка модели задается с помощью начальных значений и мгновенных уравнений, которые держат только в начальный момент времени. Класс Modelica может также содержать аннотации, т.е. формальные комментарии, которые определяют графическое представление класса (значок и диаграмма), текст документации для класса, а также информацию о версии.

Некоторые определения

Семантическая спецификация должна рассматриваться вместе с грамматикой Modelica. Ненормативных текст, то есть, примеры и комментарии, которые заключены в []; комментарии установлены курсивом.

Терм Определение
Компонент Элемент определяется производственной component_clause в грамматике Modelica

(в основном переменная или экземпляр класса)

Элемент Определения классов, extends-clauses и component-clauses, объявленные в классе

(в основном ссылка на класс или компонент в декларации).

Выравнивание Перевод в модели, описанной в Modelica для соответствующей модели,

описанной в гибридной DAE, с участием расширения унаследованных базовых классов, параметризации базовых классов, местных классов и компонентов, и поколение уравнений связи с Connect-уравнениями (в основном, отображение иерархической структура модели в набор дифференциальных, алгебраических и дискретных уравнений вместе с соответствующими объявлениями переменных и определений функций из модели).

Реализации

Коммерческие front-ends для Modelica включают AMESim из французской компании ImagineSA (в настоящее время часть LMS International), Dymola от шведской компании Dynasim АВ (теперь часть компании Dassault Systemes), CyModelica от американской компании CyDesign Labs, Wolfram Systemmodeler (ранее MathModelica ) из шведской компании Wolfram Mathcore АВ (теперь часть Wolfram Research), SimulationX от немецкой компании ITI GmbH, MapleSim от канадской компании MAPLESOFT и CATIA Systems из компании Dassault Systemes (CATIA является одним из основных САПР). JModelica.org является расширяемым основанным на Modelica платформой с открытым кодом для оптимизации, моделирования и анализа сложных динамических систем. Основная цель проекта заключается в создании промышленно жизнеспособной платформы с открытым кодом для оптимизации моделирования моделей Modelica, предлагая гибкую платформу, служащую в качестве виртуальной лаборатории для разработки алгоритмов и исследования. OpenModelica является средой с открытым исходным кодом Modelica-ориентированного моделирования и моделирования, предназначенной для промышленных и научных целей. Его долгосрочное развитие поддерживается некоммерческой организацией - Open Source Modelica Consortium (OSMC). Целью OpenModelica является создание всеобъемлющего Open Source Modelica моделирования, компиляции и моделирования окружающей среды на основе свободного программного обеспечения, распространяемого в двоичном и исходном коде формы для научных исследований, обучения и промышленного использования. Бесплатная среда моделирования Scicos использует подмножество Modelica для моделирования компонентов. Поддержка большей части языка Modelica в настоящее время в стадии разработки. Тем не менее, есть еще некоторые несовместимости и расходящиеся интерпретации между всеми различными инструментами, касающихся языка Modelica.

Примеры

Следующий фрагмент кода показывает очень простой пример системы первого порядка ():

model FirstOrder
  parameter Real c=1 "Time constant";
  Real x "An unknown";
equation
  der(x) = -c*x "A first order differential equation";
end FirstOrder;

Интересные вещи, которые можно отметить в этом примере - классификатор 'parameter', который указывает, что данная переменная не зависит от времени и 'der' оператор, который представляет собой (символически) производную по времени переменной. Также стоит отметить строки документации, которые могут быть связаны с декларациями и уравнениями. Основная область применения Modelica является моделирование физических систем. Самые основные понятия структурирования показаны на простых примерах из электрических доменов:

Встроенные и пользовательские типы

Modelica имеет четыре встроенных типа: Real, Integer, Boolean, String. Как правило, пользовательские типы вводятся, чтобы связать физическую величину, единицу, номинальные значения и другие атрибуты:

type Voltage = Real(quantity="ElectricalPotential", unit="V");
type Current = Real(quantity="ElectricalCurrent", unit="A");
  ...

Разъемы, описывающие физическое взаимодействие

Взаимодействие компонента с другими компонентами определяемое физическими портами, называется connectors, например, электрический контакт определяется как:

connector Pin "Electrical pin"
   Voltage      v "Potential at the pin";
   flow Current i "Current flowing into the component";
end Pin;

При составлении соединительных линий между портами нужно помнить, что соответствующий разъем переменных без префикса "flow" идентичны ("v"), а соответствующий переменные разъема с префиксом "flow" ("i") определяют уравнение с нулевой суммой (сумма всех соответствующих "flow" переменных равна нулю). Мотивация в том, чтобы автоматически выполнить соответствующие уравнения баланса в бесконечно малой точке подключения.

Компоненты простой модели

Базовая модель компонента определяется как model и содержит уравнения, описывающие отношения между соединительными переменными в декларативной форме (т.е. без указания порядка расчета):

model Capacitor
  parameter Capacitance C;
  Voltage u "Voltage drop between pin_p and pin_n";
  Pin pin_p, pin_n;
equation
  0 = pin_p.i + pin_n.i;
  u = pin_p.v - pin_n.v;
  C * der(u) = pin_p.i;
end Capacitor;

Цель в том, что связное множество компонентов модели приводит к набору дифференциальных, алгебраических и дискретных уравнений, где число неизвестных и число уравнений идентичны. В Modelica, это достигается с помощью требования так называемой balanced model.

Тем не менее, в большинстве случаев простое правило можно выполнить, рассчитывая таким образом переменные и уравнения так же, как это делают большинство инструментов моделирования:

A model is balanced when the number of its equations
equals the number of its variables.

при условии, что переменные и уравнения должны учитываться в соответствии с правилом:

->Number of model equations                            = 
  Number of equations defined in the model             + 
  number of flow variables in the outside connectors->Number of model variables = Number of variables defined in the model
  (including the variables in the physical connectors) 

Note that standard input connectors (such as RealInput or IntegerInput) do not contribute to the count of variables since no new variables are defined inside them. Понять это правило можно, подумав о конденсаторе, определенном выше. Его контакты содержат переменную потока, т.е. ток, любой. Когда мы проверяем его, ни к чему не подключен. Это предписывает установить вывод равенства.i = 0 для каждого вывода. Вот почему необходимо добавить уравнение для каждой переменной потока.

Очевидно, что пример может быть распространен и на другие случаи, в которых участвуют другие виды переменных потоков (например, сил моментов, и т.д.).

Когда наш конденсатор подключен к другой (сбалансированной) модели с помощью одного из своих выводов, уравнение соединение будет генерироваться так, что надо будет заменить два i = 0 уравнения выходов, которые были подключены. Так как уравнения соединения соответствуют двум скалярным уравнениям, операция соединения оставит сбалансированной большую модель (образованный конденсатором и моделью, к которой он подключен).

Конденсаторная модель выше balanced, так как

number of equations =   3+2=5   (flow variables: pin_p.i, pin_n.i, u)
number of variables =       5   (u, pin_p.u, pin_p.i, pin_n.u, pi_n.i)

Проверка подлинности с использованием OpenModelica этой модели дает:

Class Capacitor has 5 equation(s) and 5 variable(s).
3 of these are trivial equation(s).

Другой пример, содержащий оба входных разъема и физические разъемы следующий компонент из стандартной библиотеки Modelica:

model SignalVoltage 
  "Generic voltage source using the input signal as source voltage"
  Interfaces.PositivePin p;
  Interfaces.NegativePin n;
  Modelica.Blocks.Interfaces.RealInput v(unit="V") 
    "Voltage between pin p and n (= p.v - n.v) as input signal";
  SI.Current i "Current flowing from pin p to pin n";
equation 
  v = p.v - n.v;
  0 = p.i + n.i;
  i = p.i;
end SignalVoltage;

Компонент SignalVoltage уравновешивается с:

number of equations =   3+2=5  (flow variables: pin_p.i, pin_n.i, u)
number of variables =       5  (i, pin_p.u, pin_p.i, pin_n.u, pi_n.i)

И снова, проверка с OpenModelica дает:

Class Modelica.Electrical.Analog.Sources.SignalVoltage has 5 equation(s) and 5 variable(s).
4 of these are trivial equation(s).

Иерархическая модель

Иерархическая модель построена из базовых моделей, с помощью экземпляра базовых моделей, обеспечивая подходящие значения для параметров модели, и подключением модели разъемов. Типичным примером является следующая электрическая цепь:

model Circuit
   Capacitor C1(C=1e-4) "A Capacitor instance from the model above";
   Capacitor C2(C=1e-5) "A Capacitor instance from the model above";
     ...
equation
   connect(C1.pin_p, C2.pin_n);
   ...
end Circuit;

Через элемента языка annotation(...), определения могут быть добавлены к модели, которые не имеют влияния на моделирующее устройство. Аннотации используются для определения графического макета, документации и информации о версии. Базовый набор графических аннотаций стандартизирован, чтобы обеспечить идентичность графического вида и компоновки модели в различных инструментах Modelica.

Применения

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

В автомобильном секторе, многие из основных автомобильных производителей используют Modelica. Они включают в себя Ford, General Motors, Toyota, BMW and Daimler. Modelica также все чаще используется для моделирования термо-жидкостных и энергетических систем. Характеристики Modelica (acausal, object-oriented, domain neutral) сделаи ее хорошо подходящей для моделирования на системном уровне.

Литература

  • Benveniste A., Caspi P., Edwards S.A., Halbwachs N., Le Guernic P., and Simone R. (2003): The Synchronous

Languages Twelve Years Later. Proc. of the IEEE, Vol., 91, No. 1.

  • Colaco J.-L., and Pouzet M. (2003): Clocks as First Class Abstract Types. In Third International Conference on

Embedded Software (EMSOFT'03), Philadelphia, Pennsylvania, USA, October 2003.

  • Elmqvist H., Otter M. and Cellier F.E. (1995): Inline Integration: A New Mixed Symbolic/Numeric Approach

for Solving Differential-Algebraic Equation Systems. Keynote Address, Proceedings ESM'95, European Simulation Multiconference, Prague, Czech Republic, June 5-8, 1995, pp. xxiii-xxxiv.

  • Forget J., F. Boniol, D. Lesens, C. Pagetti (2008): A Multi-Periodic Synchronous Data-Flow Language. In 11th

IEEE High Assurance Systems Engineering Symposium (HASE'08), Dec. 3-5 2008, Nanjing, China, pp. 251-260.

  • Harel, D. (1987): Statecharts: A Visual Formalism for Complex Systems. Science of Computer Programming

8, 231-274. Department of Applied Mathematics, The Weizmann Institute of Science, Rehovot, Israel.

  • Looye G., Thümmel M., Kurze M., Otter M., and Bals J. (2005): Nonlinear Inverse Models for Control.

Proceedings of 4th International Modelica Conference, ed. G. Schmitz, Hamburg, March 7-8.

  • Pouzet M. (2006): Lucid Synchrone, Version 3.0, Tutorial and Reference Manual.

Ссылки