Modelica

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Modelica
Семантика

объектно-ориентированное, декларативное программирование

Класс языка

язык программирования и декларативный язык программирования[d]

Появился в

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]

См. также[править | править код]

Примечания[править | править код]

  1. 1 2 3 4 Modelica Language Specification, Version 3.3. Modelica Association (9 мая 2012). Проверено 7 апреля 2015.
  2. Homepage of the Modelica Association
  3. A Structured Model Language for Large Continuous Systems..
  4. Jeandel A., Boudaud F.: Physical System Modelling Languages: from ALLAN to Modelica, Building Simulation’97, IBPSA Conference, Prague, September 8-10, 1997.
  5. Per Sahlin, NMF HANDBOOK. An Introduction to the Neutral Model Format. NMF version 3.02. Nov 1996
  6. ObjectMath
  7. 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.
  8. 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.
  9. Ernst T., Jähnichen S., Klose M.: Object-Oriented Physical Systems Modeling, Modelica, and the Smile/M Simulation Environment. 15th IMACS World Congress on Scientific Computation, Modelling and Applied Mathematics, Berlin, August 24-29, 1997.
  10. CyModelica product page.
  11. Supports Modelica standard. Maplesoft. Проверено 11 октября 2009.
  12. Modelica in CATIA (module: CATIA Systems Dynamic Behavior). Dassault Systemes.
  13. Announcement of DS' acquisition of Dynasim
  14. The JModelica.org project.
  15. 1 2 3 OpenModelica project
  16. Adrian Pop, David Akhvlediani, Peter Fritzson Integrated UML and Modelica System Modeling with ModelicaML in Eclipse, In Proceedings of the 11th IASTED International Conference on Software Engineering and Applications (SEA 2007), Cambridge, MA, USA
  17. Håkan Lundvall and Peter Fritzson Automatic Parallelization of Object Oriented Models Executed with Inline Solvers, In Proceedings of EuroPvm/Parsim, Springer Verlag LNCS, Volume 4757, 2007. See also http://pvmmpi07.lri.fr/parsim07.html. Paris, France.
  18. Anders Fernström, Ingemar Axelsson, Peter Fritzson, Anders Sandholm, Adrian Pop OMNotebook - Interactive WYSIWYG Book Software for Teaching Programming, 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
  19. Jörg Frochte Modelica Simulator Compatibility — Today and in Future, The 8th International Modelica Conference, March 20th-22nd 2011, Technical University, Dresden, Germany
  20. англ: поток
  21. англ.: capacitor
  22. Michael Tiller, Paul Bowles, Mike Dempsey Development of a Vehicle Modeling Architecture in Modelica, 3rd International Modelica Conference
  23. Erik Surewaard, Eckhard Karden, Michael Tiller Advanced Electric Storage System Modeling in Modelica, 3rd International Modelica Conference
  24. Charles Newman, John Batteh, Michael Tiller Spark-Ignited Engine Cycle Simulation in Modelica, 2nd International Modelica Conference
  25. E. D. Tate, Michael Sasena, Jesse Gohl, Michael Tiller Model Embedded Control: A Method to Rapidly Synthesize Controllers in a Modeling Environment, 6th International Modelica Conference
  26. S. Soejima, T. Matsuba Application of mixed mode integration and implicit inline integration at Toyota, 2nd International Modelica Conference
  27. Henrik Wigermo, Johannes von Grundherr, Thomas Christ Implementation of a Modelica Online Optimization for an Operating Strategy of a Hybrid Powertrain, 6th International Modelica Conference
  28. Brückmann, Strenkert, Keller, Wiesner, Junghanns Model-based Development of a Dual-Clutch Transmission using Rapid Prototyping and SiL, International VDI Congress Transmissions in Vehicles 2009, Friedrichshafen, Germany
  29. Michael Wetter, Christoph Haugstetter Modelica versus TRNSYS — A Comparison Between An Equation-Based and a Procedural Modeling Language for Building Energy Simulation, 2nd SimBuild Conference, Cambridge, MA, USA, August 2006.