Modelica (Modelica)
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 включают
- AMESim от французской компании Imagine SA (ныне — часть LMS International),
- Dymola от шведской компании Dynasim AB (ныне — часть Dassault Systemes),
- CyModelica[10] от компании CyDesign Labs,
- Wolfram SystemModeler (бывш. MathModelica) от шведской компании Wolfram MathCore AB (ныне — часть Wolfram Research),
- SimulationX от немецкой компании ITI GmbH,
- MapleSim от канадской компании Maplesoft,[11]
- CATIA Systems[12][13] от Dassault Systemes (CATIA — одна из основных CAD систем).
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', символически представляющего производную от переменной по времени. Также примечательны строки документации, которые могут быть ассоциированы с декларациями и уравнениями.
Следующий фрагмент программы демонстрирует блок с одним входом и одним выходом:
class Example parameter Real c=1 "Константа"; Real x "Зависимая переменная"; output Real z "Выход"; input Real y "Вход"; algorithm // здесь нет выражения для интегрирования, только присвоение с:=100; // переопределяем константу c:=c*y; equation // здесь выражение для интегрирования der(x) = -c*x "ОДУ 1-го порядка"; algorithm // здесь нет выражения для интегрирования, только присвоение z:=c*x; end example;
Встроенные и определяемые пользователем типы
[править | править код]В языке 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]
См. также
[править | править код]- AMPL
- COIN-OR (англ.)
- AMESim
- APMonitor
- ASCEND
- Domain-Specific Modeling DSM
- Dymola
- EcosimPro: Continuous and Discrete Modelling and Simulation Software
- EMSO
- GAMS
- JModelica.org
- OpenModelica
- MapleSim
- MATLAB
- Optimica Compiler Toolkit[30]
- SimulationX
- Wolfram SystemModeler
- Scilab/Xcos
- Kepler (Ptolemy)
- Extended Mathematical Programming (EMP)
- GNU MathProg
Примечания
[править | править код]- ↑ 1 2 3 4 Modelica Language Specification, Version 3.3 . Modelica Association (9 мая 2012). Дата обращения: 7 апреля 2015. Архивировано 4 марта 2016 года.
- ↑ Homepage of the Modelica Association . Дата обращения: 29 декабря 2014. Архивировано 26 сентября 2019 года.
- ↑ A Structured Model Language for Large Continuous Systems. (недоступная ссылка)
- ↑ Jeandel A., Boudaud F.: Physical System Modelling Languages: from ALLAN to Modelica Архивная копия от 18 марта 2016 на Wayback Machine, Building Simulation’97, IBPSA Conference, Prague, September 8-10, 1997.
- ↑ Per Sahlin, NMF HANDBOOK. An Introduction to the Neutral Model Format. NMF version 3.02. Nov 1996 . Дата обращения: 1 января 2015. Архивировано 4 марта 2016 года.
- ↑ ObjectMath . Дата обращения: 1 января 2015. Архивировано 21 мая 2016 года.
- ↑ S.E. Mattsson, M. Andersson and K.J..Aström: Object-oriented modeling and simulation. In: Linkens, ed., CAD for Control Systems (Marcel Dekker, 1993) pp. 31-69.
- ↑ A.P.J. Breunese and J.F. Broenink, Modeling Mechatronic Systems Using The Sidops+ Language. In: Proceedings of ICBGM’97, 3rd International Conference on Bond Graph Modeling and Simulation, Phoenix, Arizona, January 12-15, 1997, SCS Publishing, San Diego, California, Simulation Series, Vol.29, No.1, ISBN 1-56555-050-1. Дата обращения: 1 января 2015. Архивировано 4 марта 2016 года.
- ↑ Ernst T., Jähnichen S., Klose M.: Object-Oriented Physical Systems Modeling, Modelica, and the Smile/M Simulation Environment Архивная копия от 22 марта 2016 на Wayback Machine. 15th IMACS World Congress on Scientific Computation, Modelling and Applied Mathematics, Berlin, August 24-29, 1997.
- ↑ CyModelica product page . Дата обращения: 1 января 2015. Архивировано 28 декабря 2012 года.
- ↑ Supports Modelica standard . Maplesoft. Дата обращения: 11 октября 2009. Архивировано 2 января 2010 года.
- ↑ Modelica in CATIA (module: CATIA Systems Dynamic Behavior) . Dassault Systemes. Дата обращения: 1 января 2015. Архивировано 1 мая 2010 года.
- ↑ Announcement of DS' acquisition of Dynasim (недоступная ссылка)
- ↑ The JModelica.org project . Дата обращения: 28 апреля 2020. Архивировано из оригинала 10 июля 2015 года.
- ↑ 1 2 3 OpenModelica project . Дата обращения: 14 мая 2022. Архивировано 1 августа 2015 года.
- ↑ Adrian Pop, David Akhvlediani, Peter Fritzson Integrated UML and Modelica System Modeling with ModelicaML in Eclipse Архивная копия от 7 июля 2011 на Wayback Machine, In Proceedings of the 11th IASTED International Conference on Software Engineering and Applications (SEA 2007), Cambridge, MA, USA
- ↑ Håkan Lundvall and Peter Fritzson Automatic Parallelization of Object Oriented Models Executed with Inline Solvers Архивная копия от 2 декабря 2008 на Wayback Machine, In Proceedings of EuroPvm/Parsim, Springer Verlag LNCS, Volume 4757, 2007. See also http://pvmmpi07.lri.fr/parsim07.html Архивная копия от 3 марта 2016 на Wayback Machine. Paris, France.
- ↑ Anders Fernström, Ingemar Axelsson, Peter Fritzson, Anders Sandholm, Adrian Pop OMNotebook - Interactive WYSIWYG Book Software for Teaching Programming Архивная копия от 25 апреля 2016 на Wayback Machine, In Proc. of the Workshop on Developing Computer Science Education — How Can It Be Done?, 2006. Linköping University, Dept. Computer & Inf. Science, Linköping, Sweden
- ↑ Jörg Frochte Modelica Simulator Compatibility — Today and in Future, The 8th International Modelica Conference, March 20th-22nd 2011, Technical University, Dresden, Germany
- ↑ англ: поток
- ↑ англ.: capacitor
- ↑ Michael Tiller, Paul Bowles, Mike Dempsey Development of a Vehicle Modeling Architecture in Modelica Архивная копия от 25 апреля 2016 на Wayback Machine, 3rd International Modelica Conference
- ↑ Erik Surewaard, Eckhard Karden, Michael Tiller Advanced Electric Storage System Modeling in Modelica Архивная копия от 25 апреля 2016 на Wayback Machine, 3rd International Modelica Conference
- ↑ Charles Newman, John Batteh, Michael Tiller Spark-Ignited Engine Cycle Simulation in Modelica Архивировано 2 октября 2003 года., 2nd International Modelica Conference
- ↑ E. D. Tate, Michael Sasena, Jesse Gohl, Michael Tiller Model Embedded Control: A Method to Rapidly Synthesize Controllers in a Modeling Environment Архивная копия от 5 марта 2016 на Wayback Machine, 6th International Modelica Conference
- ↑ S. Soejima, T. Matsuba Application of mixed mode integration and implicit inline integration at Toyota Архивная копия от 25 апреля 2016 на Wayback Machine, 2nd International Modelica Conference
- ↑ Henrik Wigermo, Johannes von Grundherr, Thomas Christ Implementation of a Modelica Online Optimization for an Operating Strategy of a Hybrid Powertrain Архивная копия от 25 апреля 2016 на Wayback Machine, 6th International Modelica Conference
- ↑ Brückmann, Strenkert, Keller, Wiesner, Junghanns Model-based Development of a Dual-Clutch Transmission using Rapid Prototyping and SiL Архивная копия от 22 марта 2015 на Wayback Machine, International VDI Congress Transmissions in Vehicles 2009, Friedrichshafen, Germany
- ↑ Michael Wetter, Christoph Haugstetter Modelica versus TRNSYS — A Comparison Between An Equation-Based and a Procedural Modeling Language for Building Energy Simulation Архивная копия от 3 февраля 2016 на Wayback Machine, 2nd SimBuild Conference, Cambridge, MA, USA, August 2006.
- ↑ OPTIMICA Compiler Toolkit - Modelon . Дата обращения: 1 июня 2017. Архивировано 6 июня 2017 года.