`

СПЕЦІАЛЬНІ
ПАРТНЕРИ
ПРОЕКТУ

Чи використовує ваша компанія ChatGPT в роботі?

BEST CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Modelica

Статья опубликована в №8 (625) от 26 февраля

+22
голоса

Знаменитая Texas Instruments в 2008 г. продолжает выпускать... программируемые научно-инженерные калькуляторы. Ни обладающие большей вычислительной мощностью и универсальностью карманные компьютеры, ни дешевеющие «недоноутбуки» не «выбили» эти специализированные устройства с рынка. И обусловлено это скорее всего именно их специализацией.

Как ни странно, но к предмету обсуждения в этой статье можно относиться и как... к программируемому инженерному калькулятору. Больше того, на начальном этапе освоения любого инструмента, основанного на спецификациях языка Modelica, пользователь неизбежно будет вынужден прибегать к «калькуляторному» стилю работы. Другое дело, что «калькулятор» этот обладает исключительно хорошо соответствующей решаемым задачам архитектурой и колоссальной мощностью, за умение использовать которую придется, естественно, расплатиться временем и усилиями. Больше того, этот калькулятор позволяет «спрятать под кнопками» не только нечто вычисляемое, но и данные, получаемые в реальном времени посредством эксперимента. Эта возможность, для которой предусмотрена аббревиатура HIL (Hardware In the Loop, «железо» в цикле моделирования), очень важна. Впрочем, всему свое время, а пока давайте бегло ознакомимся с тем, кто и какие именно задачи решает с помощью этого «калькулятора».

Modelica
Пакет OpenModelica предлагает пользователю две разновидности интерфейсов – менее требовательную к ресурсам консоль с минимально необходимым набором команд и интерактивный иерархический «блокнот» в стиле знаменитой системы Mathematica. Последний еще достаточно «сырой», но вполне пригоден для изучения системы

Например, большими почитателями Modelica являются автомобильные производители – Toyota использует инструментальное ПО, поддерживающее Modelica-моделирование (увы, этой двуязычной тавтологии не избежать), фактически во всех проектных подразделениях, а модель дизельного двигателя, созданная в этой компании для проектирования электронных систем управления, можно отнести к настоящим шедеврам моделирования. Конструкторы BMW «обкатывают» с помощью Modelica-инструментария различные варианты автоматических трансмиссий, в том числе и модификации уже существующих моделей на основе HIL-технологии – реальная автоматическая коробка передач дополняется компьютерной моделью и изучается поведение результата. Scania исследует с помощью Modelica энергетическую эффективность шасси своих тяжелых грузовиков, Ford – модели электромобилей и гибридных машин. Кроме автомобильной промышленности, которая в силу специфики может затрачивать на инженерию огромные средства (автомобиль ведь один из самых дорогих предметов массового спроса), на «калькуляторах», основанных на Modelica, считают в промышленной робототехнике, аэрокосмической индустрии и, конечно, в «оборонке». В общем, список можно продолжать долго. Достаточно сказать, что популярность Modelica столь высока, что один из лидеров «тяжелого» CADостроения (Computer Aided Design), Dassault Systemes, в середине 2006 г. объявила о стратегических планах поддержки Modelica-моделирования в основном своем продукте – CAD CATIA (и даже если вы в первый раз слышите эти названия, просто поверьте – это Очень Серьезно).

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

Итак, Modelica. Наивно полагать, что использованная ранее аналогия с калькулятором кроме наглядности еще и что-то объясняет. Modellica – это на самом деле сразу несколько явлений из самых разных областей человеческой деятельности.

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

К слову, пока ведутся непрекращающиеся дебаты вокруг взаимоотношений модели открытых исходных текстов и индустрии программного обеспечения, TRON, Modelica и даже... многострадальная ОС UNIX, фактически давшая миру спецификации мобильной операционной системы POSIX, демонстрируют не требующую никаких обсуждений вполне очевидно работающую модель открытых спецификаций. Впрочем, в сражениях идеологий пусть участвуют фанатики, мы же остановимся на одном забавном нюансе подобных ассоциаций, который кажется автору статьи примечательным. А именно, на финансовых условиях членства в ассоциации. Оно платное для любых участников – например, физические лица за право потрудиться на благо формируемого ассоциацией сообщества должны расстаться с символическими 20 евро в год, при этом все члены ассоциации работают в ней без материального вознаграждения.

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

Во-вторых, естественно, Modelica – это спецификации, полуторамегабайтовый pdf-документ, содержащий описание весьма специфического языка, описание, достаточное для реализации инструментальных средств на его основе www.modelica.org/documents/ModelicaSpec30.pdf. Последнее замечание – не следствие симпатий автора статьи к модели открытых спецификаций, а дань реальности – на основе спецификаций Modelica создан не один успешный программный продукт промышленного уровня качества.

В-третьих, Modelica – это, собственно, очень интересный и во многом очень необычный язык программирования и набор библиотек.

И наконец, в-четвертых. В каком-то смысле Modelica – это и инструментальные средства, созданные на основе спецификаций. Их немало. Но из всего перечня мы выберем самую доступную реализацию – полностью открытую и бесплатную, OpenModelica. Пусть она не самая лучшая, не самая полная и не лишенная множества «болячек», но у нее есть два важных достоинства – она доступна (причем для разных платформ), и предлагает потенциальному пользователю не только инструментарий, но и адекватное потребностям самоучки сообщество (согласитесь, приставать с неизбежными для начинающего наивными и смешными вопросами к серьезным дядям, например из BMW, – это даже не столько некрасиво, сколько просто невозможно). Кроме того, и сам проект OpenModelica остро нуждается в пользователях, хоть бы и в начинающих (без их участия, например, в вышедшей буквально на днях очередной версии пакета не «пролечили» бы инсталлятор бинарного дистрибутива для ОС семейства Windows).

Мы уделим немного внимания двум составляющим Modelica – языку и инструментарию OpenModelica. Немного, но вполне достаточно для преодоления барьера «страха чистого листа». Кстати, сейчас модно на досуге баловаться со всякими диковинными программистскими штучками – как с головоломками, для самосовершенствования и забавы. И даже если вы не специалист по моделированию систем, можете отнестись к Modelica как к такой головоломке-забаве, почему бы и нет, это роскошная бесконечная игра.

Без символа присваивания

Если бросить взгляд на оглавление спецификаций, Modelica в чем-то похож на обычные императивные объектно-ориентированные языки – тут есть и выражения, и классы, и наследование, и функции. Но. Основой языка является непривычное для программиста и столь любезное математику-прикладнику «уравнение» (equation). Соответственно, общепринятый в языках программирования символ операции присваивания «=» здесь имеет принципиально иной смысл.

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

der(x) = –x

Точнее, давайте попробуем объяснить словами ее смысл человеку, не сведущему в программировании. Итак, это инструкция машине, содержащая указание: вычислить записанное cправа от символа «=» (rvalue) некоторое вычисляемое выражение и сохранить результат в ячейке памяти, представление адреса которой указано слева от символа «=» (lvalue). Эта инструкция содержит массу дополнительной информации. Например, rvalue должно быть действительно вычислимым (иначе произойдет ошибка), lvalue должно храниться в области памяти, допускающей модификацию (иначе не будет выполнена запись). Таким образом, зная только, что речь идет об императивном языке, мы «выудили» из записи следующие факты – чем бы ни было der(x), оно фактически должно быть допустимым для записи адресом, а –x должно быть допустимым для вычисления выражением.

В Modellica все совершенно иначе. Если здесь вы записываете

der(x) = –x ;

это означает то же самое, что и записанное языком математики

Даже на первый взгляд разница колоссальна – в одном случае мы описываем операцию в терминах машинных абстракций, в другом – записываем дифференциальное уравнение. Но понимание неочевидного следствия еще важнее. Вернемся к первому, машинному выражению. Допустим, символом x в нем мы косвенно (как именем переменной, например) описывали адрес некоторой ячейки (это допустимо и очень похоже на принятую в синтаксисе большинства языков форму записи). Соответственно, rvalue и lvalue описывают два состояния этой ячейки во времени – до вычисления rvalue (x справа от «=»), и после вычисления и записи результата (x слева от «=»). Иными словами, машинная операция присваивания содержит информацию о причине (в rvalue) и следствии (в lvalue). А теперь давайте, например, несколько неожиданно вспомним... закон Ома. Он соотносит протекающий через резистор ток (I), разницу потенциалов на «выводах» резистора (U) и его сопротивление (R) в одной из следующих трех абсолютно равнозначных по смыслу форм: I = U/R, U = I∙R, R = U/I. Попробуем ответить на следующий вопрос: если моделировать резистор средствами машинных операций присваивания, какая из форм записи будет более предпочтительной, если учитывать причинно-следственные свойства этих операций:

i = u/r ; u = i*r ; r = u/i .

Естественно, предпочтительная форма будет определяться или спецификой решаемой задачи, или методом решения – именно они задают, что нужно вычислить на основании чего, или что будет являться причиной, а что – следствием. А это означает, что если вы задумали создать систему «моделирования всего» на основе языка программирования с машинной семантикой оператора присваивания, готовьтесь к описанию всех возможных форм каждой модели (это адский и в каком-то смысле вообще сизифов труд). Зато если вы получили средство моделировать резистор одним математическим уравнением, вы получили и независимость от причинно-следственных механизмов вычислителя, на котором решается ваша задача. Этот нюанс очень важен, и если вы соберетесь «играться в Modelica» сколь-нибудь серьезно, то неоднократно встретитесь с термином «non-causal modelling», некаузативное моделирование (как ни странно, но в русском языке слово «каузативный» прижилось только в лингвистике). Теперь вы знаете, что оно означает (в данном контексте) построение моделей на основе уравнений.

Теперь перейдем к примеру, который в большинстве самоучителей, в том числе и в интерактивном, поставляемом с OpenModelica, называется Hello, World!. В отличие от сугубо программистского понимания сути этого примера (почему-то в программистском мире принято не без снобизма считать, что этим примером человек машинными средствами должен поприветствовать реальный мир), здесь человек приветствует мир Modelica:

class HelloWorld "Решение ДУ"
Real x(start=1);
equation
der(x) = -x;
end HelloWorld;

Итак, несмотря на «прозрачность» примера, давайте рассмотрим некоторые нюансы. Во-первых, мы объявили класс HelloWorld. В объектно-ориентированном языке Modelica классами представлено все. Во-вторых, обратим внимание на закавыченную фразу «Решение...» – это специфическая форма комментария, которая используется при определении классов и переменных. В Modelica комментариям уделено особое внимание – так как язык ориентирован на интенсивное повторное применение моделей из библиотек и в связи с тем, что хорошие модели не утрачивают актуальности столько же времени, сколько не устаревают моделируемые ими объекты физического мира, тщательное комментирование и документирование кода становится очень важной задачей, поэтому в языке предусмотрено три стиля комментариев. Вторая строка примера – объявление переменной типа Real с именем x. Real – один из пяти встроенных типов языка Modelica, кроме него в распоряжение программисту предоставляются не менее традиционные в названиях Boolean, Integer, String и Enumeration (перечисление). Но схожестью названий и предопределенностью обольщаться не следует – все эти типы в реализации весьма сложны и далеки от описания просто диапазона значений. Впрочем, выражение Real x(start x=1) демонстрирует нам и одно единственное исключение из правила применения символа «=» (согласно параграфу 3.5 спецификаций языка его можно применять при описании уравнений и в вызовах функции для передачи параметров), и тот факт, что любая переменная типа Real характеризуется «начальным значением», которое будет использовано при численном решении уравнений (по умолчанию все поля всех переменных всех типов инициализируются нулями). Ключевое слово equation начинает секцию объявления уравнений. Само уравнение мы уже обсудили раньше, следует лишь заметить, что Modelica предусматривает несколько их форм. В этом примере применена нормальная форма, кроме нее есть и условная (работоспособная реализация которой как раз и появилась в свежей версии OpenModelica), а также формы объявления, связывания, инициализации и т. д. (параграф 8.1 спецификации). Собственно говоря, это весь «разбор» примера. Теперь достаточно указать OpenModelica, что мы хотим моделировать поведение описанной моделью (классом) HelloWorld системы на временном участке от 0 до 2 с и отобразить результат:

simulate(HelloWorld, stopTime = 2)
plot(x)

Этот пример, как и многие другие, есть в интерактивной среде работы с OpenModelica OMNotebook. Как видите, на таком уровне знакомства с Modelica, инструментарий можно действительно считать мощным, удобным и несложным калькулятором, специализация которого – решение дифференциальных уравнений. В принципе, в этом нет ничего необычного, зато этого более чем достаточно для того, чтобы вдоволь «наиграться» с языком и реализующей его системой и приготовить себя к ознакомлению с теми механизмами Modelica, благодаря которым язык приобрел заслуженную популярность.

Продолжение следует

Ready, set, buy! Посібник для початківців - як придбати Copilot для Microsoft 365

+22
голоса

Напечатать Отправить другу

Читайте также

 

Ukraine

 

  •  Home  •  Ринок  •  IТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Мережі  •  Безпека  •  Наука  •  IoT