Modelica | |
---|---|
Семантика | объектно-ориентированное, декларативное программирование |
Класс языка | язык программирования и декларативный язык программирования |
Появился в | 1997 |
Расширение файлов |
.mo |
Выпуск | 3.3 (May 9, 2012[1]) |
Основные реализации: | AMESim, CATIA Systems, CyModelica, Dymola, JModelica.org, MapleSim, Wolfram SystemModeler, OpenModelica, Scicos, SimulationX, Vertex, Xcos |
Лицензия | Modelica License Version 2 |
Сайт | www.modelica.org |
Modelica — объектно-ориентированный, декларативный, мультидоменный язык моделирования для компонентно-ориентированного моделирования сложных систем, в частности, систем, содержащих механические, электрические, электронные, гидравлические, тепловые, энергетические компоненты, а также компоненты управления и компоненты, ориентированные на отдельные процессы[1]. Modelica разработана некоммерческой организацией Modelica Association[2]. Эта компания также разрабатывает свободно распространяемую стандартную библиотеку Modelica Standard Library, в версии 3.2.1 содержащую порядка 1360 типичных элементов моделей и 1280 функций из различных областей.
В то время как Modelica напоминает объектно-ориентированные языки программирования, такие как C++ или Java, она отличается от них в двух аспектах. Во-первых, Modelica является языком моделирования, а не обычным языком программирования. Классы Modelica не компилируются в обычном смысле, но преобразуются в объекты, которые затем используются специализированным процессором. Специализированный процессор языком не определятся, хотя к нему предъявляются определённые требования.
Во-вторых, хотя классы могут содержать алгоритмические компоненты, аналогичные операторам или блокам в языках программирования, их основное содержание составляют множества уравнений. В терминах языка Modelica точки, уравнения не задают заранее определенную причинно-следственную связь (causality). Специализированный процессор может (и обычно должен) манипулировать уравнениями в символьном виде, определяя порядок их исполнения и то, какие компоненты в этом уравнении определяют входы и выходы.
Первые усилия по созданию языка Modelica были предприняты в сентябре 1996 года Хильдингом Эльмквистом (Hilding Elmqvist). Цель этих усилий состояла в разработке объектно-ориентированного языка для моделирования технических систем, пригодного для многократного использования моделей динамических систем и обмена между этими моделями в стандартизированном формате. Modelica 1.0 основывалась на диссертационной работе[3] Хильдинга Эльмквиста и на опыте использования языков моделирования Allan[4], Dymola, NMF[5], ObjectMath[6], Omola[7], SIDOPS+[8] и Smile[9]. Хильдинг Эльмквист является основным архитектором языка Modelica, Но вклад в развитие языка внесли и многие другие (см. приложение E в[1]).
В сентябре 1997, была выпущена версия 1.0 спецификации языка Modelica. Она получила основой для внедрения в качестве прототипа в коммерческой системе Dymola. В 2000 году была создана некоммерческая ассоциация Modelica, ориентированная на непрерывное развитие языка Modelica и развитие свободной стандартной библиотеки Modelica Standard Library. В том же году началось использование языка Modelica в промышленных приложениях.
Коммерческие реализации языка Modelica включают
JModelica.org[14] — расширяющаяся основанная на языке Modelica платформа, состоящая из программ в открытом коде и предназначенная для оптимизации, моделирования и анализа сложных динамических систем. Главная цель проекта состоит в создании «промышленно жизнеспособной» опирающейся на программы в открытом коде платформы для моделирования и оптимизации моделей, написанных на языке Modelica, предлагающая гибкую платформу, служащую как виртуальная лаборатория для развития алгоритмов и исследований.
OpenModelica[15] — среда для моделирования, опирающаяся на открытый код и язык Modelica, ориентированная для промышленного и академического применения. Её долгосрочное развитие поддержано бесприбыльной организацией — Open Source Modelica Consortium (OSMC). Цель усилий OpenModelica состоит в создании в рамках Open Source Modelica продвинутых моделей[16], а также среды для компиляции и моделирования, опирающихся на свободно распространяемое в бинарном коде и исходниках программное обеспечение для исследований[17], обучения[18] и промышленных нужд.
Свободно распространяемая предназначенная для моделирования среда Scicos использует часть языка Modelica для моделирования компонент. Поддержание большей части языка Modelica находится в разработке. Тем не менее, по-прежнему имеет место некоторая несовместимость и расхождения в интерпретации между различными средствами, касающимися языка Modelica.[19]
Следующий фрагмент программы демонстрирует очень простой пример дифференциального уравнения первого порядка ( ):
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 имеются четыре встроенных типа: Real, Integer, Boolean, String. Определяемые пользователем типы обычно ассоциируются с физическими величинами, единицами, номинальными значениями и иными атрибутами:
type Voltage = Real(quantity="ElectricalPotential", unit="V"); type Current = Real(quantity="ElectricalCurrent", unit="A"); ...
Взаимодействие между компонентами определено физическими портами, называемыми соединители или коннекторы (connector). Так, например, электрический пин (штырь) определён как:
connector Pin "Electrical pin" Voltage v "Potential at the pin"; flow Current i "Current flowing into the component"; end Pin;
При рисовании линий соединения между портами смысл состоит в том, что соответствующие соединителю переменные без префикса «flow»[20] идентичны (пример такой переменной здесь: «v»), а соответствующие соединителю переменные с префиксом «flow» (пример такой переменной здесь: «i») определены уравнением с нулевой суммой (сумма всех соответствующих переменных «flow» равна нулю). Мотивация состоит в том, чтобы автоматически выполнялись соответствующие уравнения баланса на сколь угодно малой точке соединения.
Базовые компоненты модели определены моделью и содержат уравнения, описывающие взаимоотношения между переменными соединителя в декларативной форме, то есть без определения порядка вычислений. Вот например, модель конденсатора[21]:
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;
Здесь C — ёмкость, pin_p и pin_n — обкладки конденсаторов, имеющие смысл пинов, u — разность потенциалов между обкладками pin_p и pin_n.
Первое уравнение выражает закон сохранения заряда для конденсатора (равенство зарядов на его обкладках), второе уравнение — разность потенциалов между обкладками, третье уравнение определяет переменный ток.
Цель состоит в том, чтобы связное множество компонентов модели приводило к системе дифференциальных, алгебраических и дискретных уравнений, у которых число уравнений совпадает с числом неизвестных. В языке Modelica это достигается за счёт т. н. сбалансированных моделей.
Полные правила для определения сбалансированных моделей довольно сложны, о них можно узнать из [1], раздел 4.7.
Однако для большинства случаев могут быть установлены простые правила, которые считают число уравнений и число неизвестных так, как это делают большинство средств, предназначенных для моделирования:
Модель сбалансирована, если число её уравнений равно числу её переменных.
Переменные и уравнения должны быть посчитаны по следующему правилу:
->Число уравнений модели = Число уравнений, определённых в самой модели + число потоковых переменных из внешних соединителей ->Число переменных модели = Число переменных, определённых в самой модели, включая переменные в физических соединителях.
Заметим, что стандартные соединители на входе (такие как RealInput или IntegerInput) не вносят вклада при счёте переменных, так как в них не определены новые переменные.
Смысл такого определения может быть пояснён на приведённом выше примере конденсатора. Каждый из его соединителей содержат потоковую переменную, то есть ток. При проверке оказывается, что эта переменная ни с чем не соединена. Это соответствует тому, что на каждом соединителе устанавливается уравнение pin.i=0. Вот почему должно быть добавлено уравнение для каждой потоковой переменной.
Пример может быть распространён на другие случаи, в которые вовлечены иные типы потоковых переменных, например, силы, моменты и т. д.
Представленная выше модель конденсатора сбалансирована, так как
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[15] даёт:
Class Capacitor has 5 equation(s) and 5 variable(s). 3 of these are trivial equation(s).
Другой пример, содержащий как входящие, так и физические соединители представлен, следующей моделью из Modelica Standard Library:
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[15] даёт:
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 by Example» содержит многочисленные примеры, похожие на данные, с детальным пояснением всех свойств языка Modelica версии 3.3.
Modelica разработана так, что она остаётся нейтральной по отношению к области применения. Как результат, она используется в многочисленных приложениях, таких как жидкостные системы (например, производство энергии парогенераторами, гидравлика, и т. д.), автостроение (особенно трансмиссии) и механические системы (например, системы многих тел, мехатроника и т. д.).
В автостроении многие производители используют язык Modelica. Среди них Ford [22] ,[23],[24] General Motors,[25] Toyota,[26] BMW[27] и Daimler.[28] Язык Modelica также используется при моделировании течений с учётом теплопереноса и энергетических систем.[29]
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .