Автор: Ассоциация Modelica
Перевод: Молодых А.Г.
Оригинальное название статьи: Modelica Tutorial, version 1.4
Источник: «Modelica Association» https://www.modelica.org/
 
1. Обзор Modelica
 
В качестве введения в Modelica мы рассмотрим моделирование простой электрической цепи, как показано ниже.
Система может быть разбита на некоторое количество стандартных компонентов. У нас есть источник напряжения, два резистора, индуктивность, конденсатор и земля. Модели этих компонентов, как правило, доступны в библиотеках моделей. При использовании графического редактора моделей мы можем определить необходимую модель путем отображения на диаграмме объектов простых изображений, представляющих модели компонентов и их соединения.
Полное описание схемы в Modelica выглядит следующим образом:
model circuit
Resistor R1(R=10);
Capacitor C(C=0.01);
Resistor R2(R=100);
Inductor L(L=0.1);
VsourceAC AC;
Ground G;
equation
connect (AC.p, R1.p); // Capacitor circuit
connect (R1.n, C.p);
connect (C.n, AC.n);
connect (R1.p, R2.p); // Inductor circuit
connect (R2.n, L.p);
connect (L.n, C.n);
connect (AC.n, G.p); // Ground
end circuit;
Следует отметить, что графическая компоновка композиционной диаграммы (в данном случае электрической цепи) не отражается, а данные о графическом формате элементов хранятся в Modelica моделях как дополнения (они не обрабатываются транслятором Modelica, и используются лишь инструментарием). Данная составная модель представляет собой топологию моделируемой системы, которая содержит компоненты и связи между ними. Определение
ResistorR1(R=10);
определяет компонент R1 класса Resistor (резистор) и устанавливает значение сопротивления R = 10. Соединения устанавливают взаимодействия между компонентами. В других языках моделирования соединения могут определяться сокращениями, портами или терминалами. Элемент языка «connect» является специальным оператором, генерирующим уравнения с учетом размерных характеристик, которые описаны ниже.
Следующим шагом в освоении Modelica является рассмотрение определения библиотек классов моделей.
Соединения должны содержать все единицы измерения необходимые для описания взаимодействия. Для определения взаимодействия электрических компонент через провод - величины тока и напряжения. Типы представляющие их объявлены как:
type Voltage = Real(unit="V");
type Current = Real(unit="A");
где Real – название предопределенного типа. Переменная real (число с плавающей запятой) определяет такие атрибуты как: единица измерения, начальное значение, минимальное и максимальное значение. В данном случае, единицы измерения установлены в системе СИ.
В Modelica, базовым структурным элементом является class. Имеется семь ограниченных классов со специфичными именами, такими как model, type (класс расширения таких встроенных классов как Real и других), connector (класс который не несет вычислительной нагрузки, и может быть использован в качестве соединителя). Для текущей модели, замена слов model и type на class абсолютно равнозначна, так как ограничения накладываемые данным специализированным классом выполняются текущей моделью.
Идея ограниченных классов оказывает благоприятное воздействие, так как необходимость изучения сложных концепций, разработчиком моделей, сужается до одной – концепции классов. Все свойства классов, такие как правила семантики и синтаксиса, создания экземпляров, наследования, универсальны и идентичны всем ограниченным классам. К тому же значительно упрощается конструкция Modelica транслятора, так как семантика и синтаксис реализуется лишь для class с дополнительными проверками на ограниченность класса. Такие базовые типы как Real и Integer являются встроенными классами type, то есть они имеют все свойства класса class, и атрибуты соответствующих базовых типов являющиеся параметрами класса.
Существует две возможности описания классов: Стандартный путь заключается в описании электрической цепи (модель цепи). Быстрое описание возможно если новый класс идентичен существующему, а изменяются лишь значения атрибутов по умолчанию. Тип Voltage описывается следующим образом:
connector Pin
Voltage v;
flow Current i;
end Pin;
Соединение connect(Pin1, Pin2), соединяет два контакта Pin1 c Pin2 соединительным классом Pin таким образом, что они образуют единый узел. Подразумевается два уравнения вида Pin1.v = Pin2.v и Pin1.i + Pin2.i = 0. Первое уравнение показывает, что напряжение одинаково на обеих ветвях соединенных между собой, а второе соответствует первому закону Кирхгофа – сумма токов сходящихся в одном узле равна нулю. Уравнения sum-to-zero (суммирования к нулю) генерируются при использовании префикса flow. Подобные законы применяются к расчетам потоков в трубопроводах, сил и крутящих моментов в механических системах.
При разработке моделей и библиотек моделей для новой предметной области, хорошо бы начать с определения набора соединительных классов. Суммарное множество соединительных классов, использующихся во всех компонентах библиотеки, должно обладать совместимостью с компонентами модели. В Modelica Standard Library (Стандартная Библиотека Modelica), которая разработана совместно с языком Modelica, соединительные классы для многих предметных областей уже определены.
Общим свойством многих электрических компонент является то, что они имеют два вывода, то есть полезно определить интерфейс модели класса:
partial model OnePort "Superclass of elements with two electrical pins"
Pin p, n;
Voltage v;
Current i;
equation
v = p.v - n.v;
0 = p.i + n.i;
i = p.i;
end OnePort;
Интерфейс имеет два контакта p и n, размерность v - которая определяет падение напряжения на компонентах, и размерность i - которая определяет ток между контактами р и n идущий через компонент. Уравнения определяют общие отношения между размерностями простых электрических компонент. Для большей полезности должны быть добавлены базовые уравнения. Ключевое слово partial указывает на то что модель класса является не законченной. Данное ключевое слово необязательно. Оно указывает пользователю на невозможность использования данного класса для создания экземпляра компонента. Между именем класса и его телом можно размещать строку, которая рассматривается как атрибут комментария для документирования и может отображаться каким-либо специфичным способом.
Для описания модели резистора мы использовали OnePort. Добавим определение параметров сопротивления, и закон Ома для описания поведения:
model Resistor "Ideal electrical resistor"
extends OnePort;
parameter Real R(unit="Ohm") "Resistance";
equation
R*i = v;
end Resistor;
Ключевое слово parameter, указывает на неизменность величины в течение моделирования, но значение может изменяться между запусками. Параметром является величина, которая упрощает изменение поведения модели пользователем.
Модель электрического конденсатора также является двухконтактной, и описывается следующим образом:
model Capacitor "Ideal electrical capacitor"
extends OnePort;
parameter Real C(unit="F") "Capacitance";
equation
C*der(v) = i;
end Capacitor;
где der(v) означает производную по времени от v. Модель источника напряжения может быть определена как:
model VsourceAC "Sin-wave voltage source"
extends OnePort;
parameter Voltage VA = 220 "Amplitude";
parameter Real f(unit="Hz") = 50 "Frequency";
constant Real PI=3.141592653589793;
equation
v = VA*sin(2*PI*f*time);
end VsourceAC;
Чтоб не перегружать данный этап информацией, константа ПИ объявлена явно, хотя, как правило, она импортируется из стандартной библиотеки Modelica (см. приложение спецификации языка). И в конце-концов мы не должны забывать о точке земли.
model Ground "Ground"
Pin p;
equation
p.v = 0;
end Ground;
Введение точки земли преследует две цели: во-первых, она определяет нулевой уровень напряжения, во-вторых, будет много соединений генерирующих первый закон Кирхгофа. Модель земли используется для представления специальной величины тока p.i, которая неявным образом при вычислениях будет сведена к нулю.