Текст
                    Евгения Бенькович
Юрий Колесов
Юрий Сениченков
www.bhv.ru
www.bhv.kiev.ua
Графические среды для создания моделей
из отдельных компонентов
Реализация гибридных систем,
описанных на языке Modelica,
в Simulink и Model Vision Studium
UML как средство проектирования
моделей динамических систем
Объектно-ориентированное
моделирование
CD-ROM
прилагается

Евгения Бенькович, Юрий Колесов, Юрий Сениченков Практическое МОДЕЛИРОВАНИЕ ДИНАМИЧЕСКИХ СИСТЕМ CaMKin-Jle/nefi&fltz Дюссельдорф ♦ Киев ♦ Москва ♦ Санкт-Петербург
УДК 681.3.06 M i HM В книге рассматриваются современные компьютерные технологии визуального моде- лирования сложных динамических систем. Подробно обсуждается понятие гибридной системы. Рассмотрены различные подходы к проектированию многокомпонентных систем различной физической природы. Обсуждаются особенности графических программных средств, предназначенных для визуального моделирования, и современ- ных языков моделирования. Изложены основные понятия универсального языка моделирования GML. Проанализированы проблемы конструирования классов для обьектно-ориентированного моделирования. В приложениях описан язык моделиро- вания, используемый в Mode! Vision Studium. Подробно рассмотрена методика реше- ния задач с использованием UML, Simulink. Stateflow и Model Vision Studium. Пред- лагается набор учебных заданий. На прилагаемом компакт-диске находятся бесплатные версии пакетов Model Vision Studium и AnyLogic. Для студентов, изучающих моделирование, а также инженеров, Группа подготовки издания: Главный редактор Зав. редакцией Редактор Компьютерная верстка Корректор Дизайн обложки Зав. производством Екатерина Кондукова Наталья Таркова Владимир Харитонов Натальи Смирновой Наталия Першакова Игоря Цырульникова Николай Тверских к- Бенькович Е. С., Колесов Ю. Б., Сениченков Ю. Б. Практическое моделирование динамических систем — СПб.: БХВ-Петербург, 2002. — 464 с.: ил. ISBN 5-94157-099-6 © Е. С. Бенькович, Ю. Б. Колесов, Ю. Б. Сениченков, 2002 © Оформление, издательство "БХВ-Петербург", 2002 Ё' ...» С'-...;*, • jijv у-,-: : -С. ""I:'.V Лицензия ИД Ns 02429 от 24,07.00 Подписано в печать 22.10 01. Формат 70х1001/16. Печать офсетная. Усл. печ. л. 37,41. Тираж 3000 экз. Заказ Nt 1261 "БХВ-Петербург", 198005, Санкт-Петербург, Измайловский пр., 29. Гигиеническое заключение на продукцию, товар No 77 99.1 953.П.950.3.99 от 01.03.1999 г. выдано Департаментом ГСЭН Минздрава России. Отпечатано с готовых диапозитивов в Академической типографии «Наука» РАН Качество соответствует предоставленным оригиналам. 199034.Санкт-Петербург.9 линия, 12
Содержание Введение............................................................1 Глава 1. Что такое модель и зачем она нужна?........................5 Какие бывают модели?..............................................6 Вычислительный эксперимент...................................... 10 Построение математическом модели............................... 11 Построение компьютерной модели................................ 13 Оценка адекватности модели.................................... 15 Исследование модели........................................... 16 Компонентное моделирование.......................................19 Объектно-ориентированное моделирование...........................21 Глава 2. От классических динамических систем к гибридным...........23 Время............................................................27 Пространство.....................................................36 События..........................................................42 Динамическая система.............................................47 Непрерывные модели.............................................48 Дискретные отображения.........................................49 Конечные автоматы..............................................53 Системы "вход-выход-состояние".................................56 Изолированная система. Равноправные фазовые координаты.......56 Открытые системы. Входные воздействия........................57 Различные формы представления динамических систем..............58 Системы с непрерывным временем...............................58 Передаточные функции.........................................59 Гибридные автоматы...............................................60 Смена начальных условий........................................60 Записимость от параметров.................................... 63 Изменение правой части........................................ 65 Карты состояний и гибридные автоматы...........................67 Типы гибридного поведения......................................74 Глава 3. Компонентные модели.......................................89 Иерархические системы........................................... 92 Блоки и связи. Различные подходы.................................96 Ориентированные блоки и связи....................................97 Совокупная система.............................................99
IV Содержание Описание гибридных систем.......................................107 Объектно-ориентированное моделирование..........................107 Неориентированные блоки и связи...................................108 Совокупная система..............................................108 Описание гибридных систем.......................................119 Объектно-ориентированное моделирование........................... 121 Описание неявных взаимодействий компонентов модели................123 Глава 4. Современные программные средства...........................127 Подсистема Simulink пакета Matlab.................................129 Основные свойства подсистемы Simulink...........................129 Этапы построения модели в подсистеме Simulink.....................130 Запуск подсистемы Simulink......................................130 Библиотеки блоков Simulink......................................132 Библиотека Sources............................................134 Библиотека Sinks............................................. 134 Библиотека Discrete...........................................135 Библиотека Continuous........................................ 135 Библиотека Nonlinear..........................................136 Библиотека Math............................................. 137 Библиотека Functions & Tables............................... 138 Библиотека Signals & Systems..................................138 Соединение и дублирование блоков............................... 140 Объединение блок-диаграмм в составные блоки.....................141 Непрерывное и дискретное время..................................141 Сигналы.........................................................143 Подсистема Stateflow..............................................144 Создание блока управления Stateflow............................ 144 Основные элементы диаграмм Staleflow............................145 State.........................................................145 Transition....................................................147 Default transition............................................148 History junction............................................. 149 Connective junction...........................................150 Data..........................................................150 Event.........................................................151 Запуск модели Simulink.......................................... 152 OmSim и Omola.....................................................152 OmSim...........................................................153 Создание простейших моделей.................................. 153 Создание структурированных моделей........................... 154 Язык Omola......................................................156 Классы....................................................... 157 Атрибуты класса...............................................158 Уравнения.................................................... 159 Наследование..................................................160
Содержание I/ Основная библиотека...............................................161 Соединения........................................................161 События ..........................................................162 Дискретные переменные ............................................163 Dymola и Qymosim......................................................163 Dymola или лаборатория моделирования динамических систем............164 11 росте й 111 ая м од ел ь.......................................165 Создание структурированных моделей................................166 Создание анимированных моделей....................................166 Командный язык.................................................. 166 Визуальное моделирование в пакете Dymola..........................166 Dymosim.............................................................167 Численные методы Dymosim..........................................168 Modelica..............................................................169 Классы..............................................................169 Уравнения и алгоритмы...............................................172 Оператор if.......................................................................................................172 Оператор when.....................................................172 Соединения........................................................173 События и синхронизация.............................................173 Математическое описание. Гибридные системы алгебро-диффе’рснииалы 1ых уравнений................................174 Model Vision Studium — инструмент для визуального объе ктн о -ори е нти рова иного модел и рова н ия сложных динамических систем...................................................175 Технология моделирования в MVS......................................176 Входной язык.................................................... 179 Блоки и связи.....................................................179 Поведение....................................................... 180 Классы и экземпляры...............................................182 Выполняемая модель..................................................183 Визуальная модель.................................................183 Скрытая" модель..................................................187 Анимация............................................................188 Исполняющая система.................................................189 Численные методы................................................... 191 Организация библиотеки численных методов..........................192 Структура решателей...............................................193 Решение системы нелинейных алгебраических уравнений...............195 Решение системы обыкновенных дифференциальных уравнений...........196 Решение системы алгебро-дифференциальных уравнений................198 Примеры............................................................ 199 Следящий электропривод............................................199 Алгебраические циклы............................................ 202 Маятник с подвижным подвесом......................................203 П р ы га ю щи й м я ч и к.........................................204 Система терморегулирования дома...................................206
VI Содержание Десятичный счетчик..........................................207 Живое сердце............................................... 207 Модели с "жесткими" дифференциальными уравнениями...........208 Глава 5. Унифицированный язык моделирования UML..................211 Предпосылки создания UML.......................................211 Назначение и основные компоненты UML...........................213 Назначение UML...............................................213 Применение объектно-ориентированного подхода в UML...........213 Общие понятия................................................214 Основные компоненты UML......................................215 Диаграммы вариантов использования..............................221 Основные элементы диаграммы..................................221 Связи в диаграмме вариантов использования....................222 Диаграммы классов..............................................224 Класс........................................................224 Атрибут.....................................................225 Операция....................................................227 Объект.......................................................228 Составной объект.............................................229 Активный объект..............................................230 Типы связей между классами...................................231 Ассоциация..................................................231 Агрегация.........*.........................................234 Зависимость.................................................235 Наследование................................................235 Расширения понятия класса в UML..............................236 Интерфейс...................................................237 Параметризованные классы (шаблоны)..........................238 Утилиты.....................................................239 Связи между объектами........................................239 Пакеты......................................................240 Диаграммы взаимодействия.......................................241 Диаграммы последовательности.................................241 Сообщения и переходы........................................243 Активация...................................................244 Кооперативные диаграммы......................................244 Диаграммы состояний............................................246 Состояния....................................................247 Подсостояния.................................................248 События......................................................250 Простой переход............................................ 251 Сложный переход..............................................252 Переход в состояние со сложной структурой....................252 Посылка сообщений............................................253 Диаграммы деятельностей........................................254
Содержание VI! Основные элементы диаграммы..................................255 "Плавательные дорожки".......................................256 Декомпозиция на диаграмме деятельностей......................258 Глава 6. Объектно-ориентированное моделирование..................259 ООМ и языки программирования...................................260 Что такое обьект в ООМ?......................................262 Наследование в ООМ...........................................270 Полиморфизм в ООМ............................................ 276 Типы данных..................................................279 Пакеты.......................................................280 Приложение 1. Входной язык пакета Model Vision Studium 3.0.......283 Устройство.....................................................283 Фазовые переменные............................................. 285 Типы данных................................................... 286 Скалярные типы...............................................287 Вещественный тип...........................................287 Целые типы.................................................288 Булевский тип..............................................288 Перечислимые типы.......................................... 289 Символьные типы............................................289 Автоматическое приведение типов............................290 Регулярные типы..............................................290 Векторы..............................-.....................290 Матрицы....................................................291 Выражения......................................................292 Ал горитмич сские one раз оры..................................293 Оператор присваивания........................................294 Оператор вызова процедуры....................................294 Условный оператор............................................294 Оператор варианта............................................295 Оператор цикла...............................................295 Оператор выхода из никла.....................................296 Оператор возврата............................................296 Алгоритмические процедуры и функции............................296 Предопределенные процедуры и функции ........................297 Функции, возвращающие значение типа, соответствующего типу аргумента............................................ 297 Функции преобразования типов...............................297 Элементарные функции.......................................297 Функции для работы со строками.............................298 Функции, реализующие законы распределения случайных величин.298 Функции для матриц и векторов..............................298 Специальные функции........................................300 Системные функции..........................................300
VIII Содержание Функционалы...................................................300 Специальные процедуры ....................................... 301 Внутренние процедуры и функции................................301 Внешние процедуры и функции...................................303 Карта поведения...................................................305 Непрерывнос поведение.............................................312 Иерархическая карта поведения.....................................323 События и сигналы.................................................326 Описание структуры................................................331 Функциональная связь............................................333 Собственное поведение составного устройства.....................334 Описание проекта в целом..........................................337 Правила видимости.................................................339 Иерархия классов и наследование...................................340 Иерархия классов устройств......................................341 Прямое наследование классов устройств...........................341 Кл асе С Device............................................... 342 Переопределение поведения.......................................343 Приложение 2. Пример выполнения учебного задания....................345 Описание системы в терминах О ML..................................349 Диаграммы классов, диаграммы пакетов, диаграммы объектов........349 Диаграмма вариантов использования...............................355 Диаграмма последовательности....................................357 Диаграмма деятельностей.........................................357 Диаграмма состояний.............................................360 Модель системы, реализованная в подсистеме Simulink пакета Matlab.363 Модель системы, реализованная в пакете Model Vision Studium.......370 Усовершенствования................................................379 Результаты эксперимента...........................................383 Приложение 3. Моделирование системы управления креслом водителя автомобиля в среде Model Vision Studium........................... 387 Постановка задачи.................................................387 Панель управления...............................................388 Требования к модулю управления..................................389 Описание аппаратного обеспечения..............................389 Управление положением кресла..................................390 Направление вращения двигателей...............................391 Калибровка....................................................391 Запоминание текущего положения................................392 Регистрация позиции...........................................392 Защитные функции..............................................392 Функция, облегчающая вход и выход из автомобиля...............393 Предварительная настройка подголовника........................394 Функция подогрева кресла......................................394
Содержание IX Компьютер! !ая модсл ь...............................................396 Структурная схема модели...........................................396 Описание классов................................................. 397 Класс MoveButtons................................................397 Класе MoveSignal.................................................398 Класс Voltage.................................................. 400 К л асе Move Group 1.............................................401 Кл асе Move Group2...............................................406 Класе Memory.....................................................411 Класс Door.......................................................413 Класс С15_Signal.................................................413 Кл асе Courtesy..................................................414 Класс Heating....................................................416 Класс Seat..................................................... 418 Выводы...............................................................419 Приложение 4» Учебные задачи по курсу "Компьютерное моделирование"...........................................421 Задание..............................................................421 Задача 1.............................................................421 Задача №2............................................................423 Задача № 3...........................................................424 Задача № 4...........................................................426 Задача № 5...........................................................427 Задача № 6 ..........................................................428 Задача № 7 ..........................................................429 Задача № 8...........................................................430 Задача №9............................................................431 Задача № 10..........................................................432 Задача № 11..........................................................433 Задача № 12..........................................................436 Приложение 5. Описание компакт-диска...................................439 Список литературы......................................................441
Введение В названии этой книги ключевым словом является прилагательное ’практи- ческое”. Этим мы хотим подчеркнуть, что книга адресована инженерам- проектировщикам и студентам, выбравшим эту профессию. Книга является учебным пособием по курсу "Компьютерное моделирование". Главным в ней являются современные технологии компьютерного моделирования. Еще в недалеком прошлом, каких-нибудь тридцать лет назад, компьютерное моделирование применялось только высококвалифицированными специа- листами в научных исследованиях и дорогостоящих технических проектах Это были космические и ядерпые программы, проекты, связанные с созда- нием новых средств вооружения. Для проведения каждого вычислительного эксперимента создавалось уникальное программное обеспечение, и его от- личительной чертой был "текстовый интерфейс”. Собственно, ничего дру- гого и не могла предоставить инженеру вычислительная техника того вре- мени. Поворотным моментом в технологии компьютерного моделирования стало появление недорогого персонального компьютера с графическим дис- плеем, сделавшего возможным появление современных визуальных инстру- ментов моделирования. Визуальное моделирование предполагает использование графической фор- мы описания модели и зримого представления результатов исследования. Основным элементом графического представления моделируемой системы в современных средах является структурная схема, построенная из образов отдельных компонентов, соединенных функциональными связями. Для представления результатов используется математическая графика, а также двух- и трехмерная анимация. Ни для кого не секрет, что идеализированная схема проектирования, к ко- торой мы все так стремимся, обещающая автоматический синтез системы с заданными свойствами, весьма далека от реальности. Работа проектировщи- ка во многом опирается на интуицию, многотрудный перебор и сравнение множества различных вариантов проектируемой системы в условиях доста- точно жестких временных ограничении. Поэтому простота и скорость реа- лизации отдельного варианта системы и его оценки прямо влияет на качест- во проектирования. Современные инструменты визуального моделирования предоставляют проектировщику новое средство проектирования — вирту- альный испытательный стенд, на котором он может проводить эксперимен- ты, используя ту же технологию, что и на обычном испытательном стенде, но значительно быстрее.
2 Практическое моделирование динамических систем В книге рассматриваются различные современные подходы к компонентно- му моделированию сложных динамических систем: П технология, ориентированная на использование стандартных блоков и функциональных схем, восходящих к эпохе моделирования на аналого- вых машинах (Matlab-Simulink-Stateflow); П объектно-ориентированная технология, позволяющая применять для опи- сания поведения объектов гибридные автоматы (Model Vision Studium); П технология, получившая название "физическое моделирование", опи- рающаяся на блоки с двунаправленными связями (Modelica). Каждый из подходов проиллюстрирован простыми и понятными специали- стам различных областей примерами. Характерной особенностью современных технических объектов является резкое повышение их логической сложности, связанное с повсеместным внедрением встроенных микропроцессорных систем. Для моделирования объектов с такими свойствами, сочетающих в себе непрерывные и дискрет- ные аспекты поведения, используется математическая модель, называемая гибридной системой. У этого термина есть синонимы — непрерывно- дискретная система или система с переменной структурой. В книге разъяс- няется, что понимается под гибридной системой и подробно рассматривает- ся наиболее наглядный с нашей точки зрения способ представления гиб- ридных систем в виде гибридных автоматов или гибридных карт повеления. Перспективным современным направлением компьютерного моделирования является объектно-ориентированное моделирование (OOM). ООМ интен- сивно развивается, охватывая все новые области. Развитие ООМ примени- тельно к гибридным системам видится авторам книги как расширение язы- ка проектирования сложных вычислительных систем — Unified Modeling Language (UML). В главе 1 изложены основные понятия, связанные с компьютерным модели- рованием. В главе 2 обсуждаются различные математические модели, ис- пользуемые в современных пакетах моделирования, такие как классическая динамическая система, карта состояний и гибридная карта состояний (гибридный автомат). В главе 3 излагаются современные основные подходы к компонентному моделированию. В главе 4 рассматриваются реализации этих подходов в конкретных пакетах. В главе 5 делается попытка проанали- зировать возможности языка UML, имеющие непосредственное отношение к ООМ. В главе 6 предлагаются расширения UML применительно к исполь- зованию гибридных карт состояния. В качестве приложений к книге мы предлагаем несколько моделей гибрид- ных систем, реализованных в различных средах. Эти примеры и их реализа- ции можно рассматривать как иллюстративный или учебный материал. Мы также предлагаем двенадцать простых задач, которые рекомендуем решить
Введение 3 самостоятельно, и полное описание входного языка пакета Model Vision Studium 3.0 для самостоятельного изучения возможностей пакета. На прилагаемом к книге компакт-диске находятся два пакета визуального моделирования гибридных динамических систем, разработанных исследова- тельской группой Experimental Object Technologies (www.xjtek.com, www.simulation.ru): □ свободно распространяемая версия пакета Model Vision Studium 3.0 (MVS) for Windows/98/NT/2000; □ ознакомительная версия пакета AnyLogic 4 5 (в пакете используется тот же подход, что и в MVS, но в качестве входного языка используется рас- ширение языка Java).
Глава 1 Что такое модель и зачем она нужна? Моделью объекта называется любой другой объект, отдельные свойства кото- рого полностью или частично совпадают со свойствами исходного. Следует ясно понимать, что исчерпывающе полной модель быть нс может. Она всегда ограничена и должна лишь соответствовать целям моделирова- ния, отражая ровно столько свойств исходного объекта и в такой полноте, сколько необходимо для конкретного исследования. Исходный объект может быть либо реальным, либо воображаемым. С вооб- ражаемыми объектами в инженерной практике мы имеем дело на ранних этапах проектирования технических систем. Модели еще не воплощенных в реальные разработки объектов называются предвосхищающими. Модель создается ради исследований, которые на реальном объекте прово- дить либо невозможно, либо дорого, либо просто неудобно. Можно выде- лить несколько целей, ради которых создаются модели и ряд основных ти- пов исследований: □ модель как средство осмысления помогает выявить взаимозависимости переменных, характер их изменения во времени, найти существующие закономерности. При составлении модели становится более понятной структура исследуемою объекта, вскрываются важные причинно-следст- венные связи. В процессе моделирования постепенно происходит разде- ление свойств исходного объекта на существенные и второстепенные с точки зрения сформулированных требований к модели. Мы пытаемся найти в исходном объекте только тс черты, которые имеют непосредст- венное отношение к интересующей нас стороне его функционирования. В определенном смысле вся научная деятельность сводится к построению и исследованию моделей природных явлений; □ модель как средство прогнозирования позволяет научиться предсказывать поведение объекта и управлять им, испытывая различные варианты управления на модели. Экспериментировать с реальным объектом часто, в лучшем случае, бывает неудобно, а иногда и просто опасно или вообще невозможно в силу ряда причин: большой продолжительности экспсри-
6 Практическое моделирование динамических систем мента, риска повредить или уничтожить объект, отсутствия реального объекта в случае, когда он еще только проектируется; П построенные модели могут использоваться для нахождения оптимальных соотношений параметров, исследования особых (критических) режимов работы; □ модель также может в некоторых случаях заменять исходный объект при обучении, например, использоваться в качестве тренажера при подготов- ке персонала к последующей работе в реальной обстановке, или высту- пать в качестве исследуемого объекта в виртуальной лаборатории. Моде- ли, реализованные в виде исполняемых модулей, применяются и как имитаторы объектов управления при стендовых испытаниях систем управления, и, на ранних стадиях проектирования, заменяют сами буду- щие аппаратно реализуемые системы управления. Какие бывают модели? Модели можно условно разделить на две группы: материальные и идеаль- ные, и, соответственно, различать предметное и абстрактное моделирование. Основными разновидностями предметного моделирования являются физи- ческое и аналоговое моделирование. Физическим принято называть такое моделирование (макетирование), при котором реальному объекту ставится в соответствие его увеличенная или уменьшенная копия. Эта копия создается на основе теории подобия, что и позволяет утверждать, что в модели сохранились требуемые свойства. В фи- зических моделях помимо геометрических пропорций может быть сохранен, например, материал или цветовая гамма исходного объекта, а также другие свойства, необходимые для конкретного исследования. Так, чтобы расста- вить мебель в комнате, можно обойтись листом бумаги, на котором нарисо- ван ее план, и соответствующих размеров бумажными прямоугольниками, изображающими столы или стулья. В то же время для моделирования воен- ных учений или знаменитых сражений придется воспроизводить со всеми деталями и местность, и сооружения, и технику. При исследованиях аэро- динамических свойств будущего самолета в аэродинамической трубе доста- точно его макета, изготовленного в натуральную величину или уменьшен- ного. Главное, чтобы он точно отражал лишь геометрические размеры. Макет же самолета, представленный на выставочном стенде, должен быть покрашен чуть ли не той же краской, что и реальная машина. Аналоговое моделирование основано на замене исходного объекта объектом другой физической природы, обладающим аналогичным поведением. Коле- бания и резонанс можно изучать и с помощью механических систем, и с помощью электрических цепей. При аналоговом моделировании важно уви- деть в объекте-заменителе нужные черты, и правильно их интерпретировать.
Глава 1. Что такое модель и зачем она нужна? 7 Обычно для объектов с аналогичным поведением можно использовать одну и ту же математическую модель. И физическое, и аналоговое моделирование в качестве основного способа исследования предполагают проведение натурного эксперимента с моделью, но этот эксперимент оказывается в каком-то смысле более привлекатель- ным, чем эксперимент с исходным объектом. Например, в свое время очень широко использовались аналоговые вычислительные машины. Моделирова- ние с их помощью основано на том, что электрические явления сходны с очень многими явлениями другой физической природы. Например, колеба- ния тока в электрической цепи аналогичны угловым колебаниям ракеты, а экспериментировать с электрической цепью дешевле и безопаснее, чем с летящей ракетой. Электрические колебания, воспроизводимые на аналого- вых машинах, можно было наблюдать с помощью специальных приборов — осциллографов — и тем самым "видеть" поведение модели. Идеальные модели — эго абстрактные образы реальных или воображаемых объектов. Различают два типа идеального моделирования: интуитивное и знаковое. Об интуитивном моделировании говорят, когда не могут даже описать ис- пользуемую модель, хотя она и существует, но берутся с се помощью пред- сказывать или объяснять окружающий нас мир. Мы знаем, что живые суще- ства могут объяснять и предсказывать явления без видимого присутствия физической или абстрактной модели. В этом смысле, например, жизненный опыт каждого человека может считаться его интуитивной моделью окру- жающего мира. Собираясь перейти улицу, вы смотрите вправо, влево и ин- туитивно решаете (обычно правильно), можно ли идти. Как справляется мозг с этой задачей, мы просто пока не знаем. Знаковым называется моделирование, использующее в качестве моделей знаки или символы: схемы, графики, чертежи, тексты на различных языках, включая формальные, математические формулы и теории. Обязательным участником знакового моделирования является интерпретатор знаковой мо- дели, чаще всего человек, но с интерпретацией может справляться и компь- ютер. Чертежи, тексты, формулы сами по себе не имеют никакого смысла без того, кто понимает их и использует в своей повседневной деятельности. Важнейшим видом знакового моделирования является математическое мо- делирование. Абстрагируясь от физической природы объектов, математика изучает идеальные объекты. Например, с помощью теории дифференциаль- ных уравнений можно изучать уже упомянутые электрические и механиче- ские колебания в наиболее общем виде, а затем полученные знания приме- нять для исследования объектов конкретной физической природы Далее мы будем говорить только о математическом моделировании и его важнейшей разновидности — компьютерном моделировании.
8 Практическое моделирование динамических систем Компьютерная модель — это программная реализация математической моде- ли, дополненная различными служебными программами (например, ри- сующими и изменяющими графические образы во времени). Компьютерная модель имеет две составляющие — программную и аппаратную. Програм- мная составляющая так же является абстрактной знаковой моделью. Это лишь другая форма абстрактной модели, которая, однако, может интерпре- тироваться уже не только математиками и программистами, но и техниче- ским устройством — процессором компьютера. Компьютерная модель проявляет свойства физической модели, когда она, а точнее ее абстрактные составляющие — программы — интерпретируются физическим устройством, компьютером. В работе [20] совокупность компь- ютера и моделирующей программы называется "электронным эквивалентом изучаемого объекта". Компьютерная модель как физическое устройство мо- жет входить в состав испытательных стендов, тренажеров и виртуальных ла- бораторий. Этот специальный вид моделей, сочетающих в себе и абстракт- ные, и физические черты, обладает уникальным набором полезных свойств Главным из них является простота создания и модификации модели. Заново пишется и изменяется только программа ("мягкая" составляющая модели), в то время как аппаратура компьютера ("жесткая" составляющая) остается не- изменной. Добавьте к этому практически неограниченную функциональную сложность моделей и высокую точность получаемых результатов, и вы пой- мете, почему в настоящее время под моделированием почти всегда понима- ют компьютерное моделирование. На рис. 1.1 показано, как соотносятся между собой различные модели анало- гичных физических систем. Рассмотрим три различные физические колебатель- ные системы: обычный маятник, груз на пружинке и электрическую цепь. Если для нас существенны только колебания, возникающие в этих системах, то лю- бую из них можно рассматривать как аналоговую модель всех остальных, хотя более привычно называть аналоговой моделью именно электрическую цепь (это отношение на рис. 1.1 показано пунктирной линией со стрелкой). Колебательные свойства всех рассмотренных физических систем описыва- ются одной и той же математической моделью 1 — дифференциальным уравнением второго порядка При ряде допущений (линейность восстанав- ливающей силы, отсутствие возмущающей силы, определенное соотноше- ние между параметрами /??,а,к) можно воспользоваться упрощенной мате- матической моделью 2 — формулой, с помощью которой в явном виде записано решение менее сложного дифференциального уравнения. Вторая математическая модель является существенно более ограниченной, чем пер- вая, и справедлива при более жестких предположениях. Наконец, для математической модели 1 можно создать компьютерную мо- дель (на рис, 1.1 показана модель, созданная с помощью пакета Model Vision Studium). Отличительной чертой современных пакетов моделирования явля- ется использование средств компьютерной визуализации, позволяющих пользователю легко и быстро синтезировать трехмерное динамическое изо- бражение любой исходной физической системы, в данном случае, маятника.
Глава 1. Что такое модель и зачем она нужна? 9 Рис. 1.1. Компьютерное моделирование
10 Практическое моделирование динамических систем Компьютерная модель в условиях высказанных о ней предположений ничем не отличается от реального объекта. Ее можно "подключать" к реальным объектам точно так, как ее физические прототипы. Если, например, физи- ческие осцилляторы используются вами как источники периодического сигнала в реальной аппаратуре, то и компьютерная модель при наличии на компьютере специального устройства, цифро-аналогового преобразователя (ЦАП), может прекрасно служить источником такого сигнала. На соотношение моделей и реальных устройств можно взглянуть и с иных позиций. Для инженера, которому в проектируемой системе требуется ис- точник периодического сигнала, исходным в начале разработки является некоторое виртуальное устройство ’'Осциллятор", задаваемое его математи- ческой моделью Все же реализуемые физические системы могут рассматри- ваться как разные физические воплощения этого виртуального устройства, более или менее удобные в использовании. Весьма возможно, что совре- менный инженер предпочтет всем физическим воплощениям программную реализацию осциллятора на встроенном микропроцессоре. Вычислительный эксперимент Процесс построения и исследования компьютерных моделей в нашей стране принято называть вычислительным экспериментом. Его можно представить как последовательность следующих основных шагов: I. Выделение существенных для данного исследования свойств исходного объекта и построение математической модели. 2. Проектирование и отладка компьютерной модели. 3. Оценка адекватности построенной компьютерной модели. Как правило, оценка адекватности приводит к пересмотру требований к модели и воз- врату на этап 1 — приходится уточнять или заново строить математиче- скую модель. 4. Исследование модели. 5. Анализ полученных результатов. Подведение итогов моделирования мо- жет привести к выводу, что запланированных экспериментов недостаточ- но для завершения работ, а возможно и к необходимости вновь уточнить математическую модель. Современные инструменты компьютерного моделирования позволяют в значительной степени автоматизировать проведение вычислительного экс- перимента. Из приведенного описания следует, что моделирование — процесс цикличе- ский, в котором одни и те же операции повторяются многократно. Эта цик- личность обусловлена двумя обстоятельствами: технологическими, связан-
Гпава 1. Что такое модель и зачем она нужна? 11 ными с "досадными” ошибками, допущенными на каждом из рассмотрен- ных этапов моделирования, и "идеологическими", связанными с уточнением модели, и даже с отказом от нее, и переходом к другой модели. Еще один дополнительный "внешний" цикл может появиться, если мы захотим рас- ширить область применимости модели, и изменим исходные данные, кото- рые она должна правильно учитывать, или допущения, при которых она должна быть справедливой. В один прекрасный момент этот никл все же заканчивается и после этого разработанная модель может быть: □ выброшена как ненужная; □ продемонстрирована заказчику как макет проектируемого изделия; □ использована в течение жизненного цикла проектируемого изделия на так называемом этане сопровождения, когда исправляются ошибки, вно- сятся изменения, испытываются нештатные режимы; О применена как тренажер для обучения обслуживающего персонала; О превращена после соответствующих доработок в учебный программный продукт для подготовки будущих разработчиков; О предметом гордости или стыла для коллектива разработчиков. Рассмотрим подробнее этапы вычислительного эксперимента. Построение математической модели Эта работа в основном выполняется вручную. Единственным утешением может служить то, что существуют готовые библиотеки компонентов прак- тически для всех известных прикладных областей и можно будет воспользо- ваться результатами своего предыдущего или чужого труда (о компонентном моделировании мы поговорим в главе 3). Рассмотрим процесс составления математической модели более подробно. Представьте себя на месте человека, которому нужно создать модель маят- ника (см. рис. 1.1), о котором он до этого момента ничего нс слышал. Болес того, пусть моделируемая вами система, в данном случае обыкновенный ма- ятник —- это уникальное явление природы, о которой вообще никто ничего не знает. Вы должны будете сначала провести серию экспериментов с маят- ником, для того чтобы получить экспериментальные данные, статистически их обработать и на их основании, если повезет, "открыть" закон движения маятника, как когда-то были открыты закон Кулона или закон Ома. Согласитесь, что уникальные объекты, моделям которых присваиваются имена собственные, редко встречаются в повседневной инженерной практи- ке. Скорее всего, для описания поведения исследуемого вами объекта при- менимы уже известные законы физики, химии или биологии. В значитель- ном числе случаев (особенно в технике) достаточно "покопаться" в спе-
12 Практическое моделирование динамических систем циальнои литературе и найти подходящую математическую модель,. Пусть, однако, модель маятника вам на глаза не попалась. Прежде всего, попытаемся сформулировать, что является для нас важным, а чем можно будет пренебречь, или как иначе говорят, выскажем ряд допуще- ний. Предположим, что точечная масса т подвешена на идеальном несжи- маемом стержне длиной L и колеблется в воздушной среде. Вспомнив изу- чавшуюся когда-то механику, вы напишете уравнения вращательного движения: da — = dt dco Т. dt " J ’ J ~ ml}; T = T^Tr+Tj- T = -mgsin(a)L, где: a — угловое ускорение; co — угловая скорость; J — момент инерции; Т — крутящий момент; Т — составляющая момента от силы тяжести; Тг — составляющая момента от трения в точке подвеса; T(i — аэродинамическая составляющая момента; g — ускорение силы тяжести. Затем вы сделаете предположение, что момент сопротивления в точке под- веса пропорционален угловой скорости и, вспомнив, что аэродинамическое сопротивление Т пропорционально скоростному напору (плотность среды р, помноженная на квадрат линейной скорости V и деленная пополам), характерной площади S и аэродинамическому коэффициенту Сд, получите нужные зависимости: Тг = -рад V = coL, где р — коэффициент трения. Работа закончена, если вам нужны только уравнения движения маятника, правильно отражающие его поведение при высказанных предположениях (и если, конечно же, вы все правильно написали и умеете решать полученные уравнения). Если же нужна модель конкретного маятника, правильно отра- жающая результаты проведенного натурного эксперимента, то, возможно, придется что-то изменить, упростив или усложнив модель, и обязательно получить результаты при заданных значениях коэффициентов уравнения.
Глава 1. Что такое модель и зачем она нужна? 13 Так, вполне возможно, что понадобится дополнительно масштабировать уравнения так, чтобы в них правильно учитывались реально измеренные параметры маятника, ведь численное моделирование существенно зависит от выбора масштаба. Кроме уравнений и формул в математических моделях часто фигурируют зависимости, полученные экспериментально и задаваемые в табличной форме. Например, это может быть зависимость СДУ) аэродинамического коэффициента Схот скорости V или тестовая, используемая для проверки, зависимость возмущающего момента от времени. В этом случае вам допол- нительно придется изучать влияние возмущения на свойства решения, т. к. в экспериментальных данных всегда есть погрешности. На раннем этапе моделирования целесообразно стремиться к тому, чтобы модель была как можно проще, но учитывала все существенные факторы. Является тот или иной фактор существенным или нет, зависит и от диапа- зона изменения параметров: если длина маятника невелика (L = 1 м), то только ненормальный исследователь будет учитывать зависимость плотности воздуха и ускорения силы тяжести от высоты, но если длина значительна (Л — 1 км), то, скорее всего, ненормальным назовут того, кто это не сделает. Болезнью начинающих ’’модельеров” является неудержимое стремление учесть в любой модели все, что только можно — от гравитационного поля Луны до влияния электростатики лежащего рядом кота. Следует отметить, что оценить на этом этапе адекватность вашей модели и необходимость уче- та в ней тех или иных факторов вы не в состоянии, т. к. для этого нужно начать проводить с ней эксперименты. Построение компьютерной модели Итак, математическая модель построена, и теперь нужно написать реали- зующую ее программу. На исторически ранних этапах компьютерного моделирования эти програм- мы создавались либо на языках программирования ’’высокого уровня" (Фортране, Алголе), либо даже на языке Ассемблера. Код на Ассемблере да вад иногда очень серьезный выигрыш в быстродействии. ЭВМ того пе- риода выполняли всего лишь десятки и сотни тысяч операций в секунду, а не сотни миллионов, как современные настольные компьютеры, поэтому стоило бороться за оптимальное выполнение каждой "машинной" команды. Традиционным языком программирования для построения компьютерных моделей являлся все же Фортран. Практически все стандартные библиотеки численных методов и функций, составлявшие основу всех моделей, и по сей день пишутся на Фортране. Применявшаяся в те годы технология програм- мирования требовала на создание моделей очень много времени. В работе
14 Практическое моделирование динамических систем Р. Шеннона [281 приводятся данные о трудозатратах на создание простой, с современной точки зрения, компьютерной модели в 5—6 человеко-месяцев. К счастью, на сегодняшний день положение кардинально изменилось и еще неизвестно, какие приятные сюрпризы ждут нас в этой области в будущем. Начиная с 1960-х гг., было разработано множество систем или пакетов мо- делирования, автоматизирующих прежде всего этап, показанный жирной стрелкой на рис. 1.2. В системе автоматизации моделирования (далее просто 'система моделирования") математическая модель записывается на некото- ром формальном входном языке моделирования и затем автоматически, с помощью соответствующего транслятора, переводится на язык, понятный компьютеру (см. рис. 1.2). Часто в качестве промежуточного используется какой-нибудь универсальный язык программирования (Fortran, Algol, С, Pascal, Java и др.). В этом случае трансляция производится в два этапа: на первом этапе описание на языке моделирования транслируется в промежу- точный текст на языке программирования, а на втором этапе этот текст компилируется каким-либо компилятором языка программирования, напи- санным для конкретной операционной системы и компьютера. В модели- рующую программу помимо сгенерированного кода, необходимого дня реа- лизации конкретной модели, автоматически включают уже готовые модули поддержки периода исполнения, предоставляемые системой моделирования (механизм продвижения модельного времени, численные библиотеки, гра- фические функции). Система моделирования должна также автоматически переводить входные данные модели, записанные в форме, удобной дтя ана- лиза человеком, в машинную форму представления и аналогичную опера- цию производить над выходными данными в машинной форме. Иными словами, интерпретировать входные и выходные данные, чтобы облегчить работу проектировщику. Входные данные Рис. 1.2. Построение компьютерной модели
Глава 1. Что такое модель и зачем она нужна? 15 В этой книге достаточно подробно излагаются три различные современные технологии моделирования с использованием пакетов Simulink, Model Vision Studium и пакета Dymola, основанного на языке Modelica. С точки зрения пользователя современных пакетов, построение компьютер- ной модели сводится в основном к переводу описания модели с языка ма- тематики на входной язык используемой системы и к выбору численного метода из имеющихся для получения требуемого решения. Перевод исходного описания на язык моделирования осуществляется доста- точно просто. Современные системы имеют дружественный графический интерфейс и входной язык, очень близкий к "традиционному математиче- скому". Например, в пакете Model Vision Studium для того, чтобы создать описание модели маятника на языке MVL по исходному математическому, нужно дополнительно объявить используемые переменные, задать необхо- димые начальные значения и практически в неизмененном виде переписать имеющиеся уравнения движения. Пользователям пакета Simulink придется выполнить больше дополнительной работы и "собрать" эти уравнения из набора стандартных звеньев, таких как "интегратор”, "сумматор" и "уси- литель". В результате, какое бы описание мы не использовали, пакетом ав- томатически создается моделирующая программа, соответствующая введен- ной математической модели, и, надо отметить, что в большинстве случаев это делается без ошибок. В то же время, выбор численного метода может стать источником многих проблем, начиная от неэффективности вычислений и кончая получением неверных результатов. Проблема создания и автоматического выбора чис- ленного метода, гарантирующего либо построение решения с заданной точ- ностью, либо обнаружение причин, не позволяющих это сделать, остается нерешенной. Оценка адекватности модели Оценка адекватности модели предполагает в качестве обязательного этапа проведение специальных численных экспериментов, результаты которых априорно известны. Для проверки правильности модели могут использо- ваться уже известные экспериментальные зависимости, существующие опенки решения, вручную найденные частные решения модельных уравне- ний. Для такой хорошо изученной модели, как модель маятника, полезно просто понаблюдать за поведением трехмерной визуализации колебаний — это и будет служить грубой проверкой правдоподобности моделируемого движения. Очень часто наблюдение за поведением модели и сравнение его с ожидаемым оказывается весьма эффективным средством обнаружения оши- бок и для более сложных моделей. Недаром в последнее время так много внимания уделяют вопросам визуализации трудно воспринимаемых абст- рактных понятий. Еще одним тестом может быть проверка у моделируемого
16 Практическое моделирование динамических систем маятника закона сохранения энергии. Сохранение любых известных инва- риантов или закономерностей при проверке модели только увеличивает сте- пень доверия к ней, хотя и не гарантирует от ошибок. Наконец, полученные данные численного эксперимента можно сравнить с экспериментальными. В результате проведения этих экспериментов выявляются ошибки и неточ- ности математической модели. Если ваш маятник без внешнего возмущения начинает вдруг крутиться вокруг оси с увеличивающейся скоростью, то это, скорее всего, означает, что вы ошиблись при написании уравнений, напри- мер, неправильно выбрали знаки у соответствующих коэффициентов. Не- точность в демонстрируемом поведении также может означать, что не учтен какой-нибудь существенный фактор. Например, может выясниться, что для целей вашего исследования учет сопротивления воздуха — ненужная рос- кошь, а вот растяжимость стержня необходимо учитывать. После внесения исправлений придется повторить все эксперименты с моделью заново. Со- временные системы моделирования позволяют совершать эти многократно повторяющиеся действия достаточно быстро. Значительно сложнее вопрос о степени доверия к численному решению. Процедура выбора и настройки численного метода для решения конкретной системы уравнений требует специальных знаний и навыков и во многом зависит от свойств исследуемой системы. Как правило, пользователь полу- чает представление о свойствах модели только после первых экспериментов с ней. Неудачно выбранный численный метод, как ошибки в модели, может привести даже к качественно неверным результатам и порой бывает очень сложно определить, действительно ли наблюдаемое поведение присуще мо- дели, или это результат ошибок. Опыт разработчиков пакетов моделирова- ния говорит о том, что большинство пользователей всегда применяют мето- ды, установленные авторами пакета по умолчанию. Следовательно, этот "метод по умолчанию" должен обладать свойствами автоматического реша- теля, безошибочного "автомата", и пытаться либо найти решение с заданной точностью (пусть медленно и неэффективно) для максимально широкого спектра моделей, либо диагностировать причины возникающего "отказа'. Исследование модели Воспроизведение поведения моделируемой системы на интервале модель- ного времени [О, Т] при фиксированных значениях параметров модели мы будем называть элементарным опытом, "прогоном" или "выполнением" ("execution") модели. Результатом прогона является нахождение значений всех переменных модели в конечный момент времени Т и построение таб- лиц значений переменных на указанном интервале для промежуточных зна- чений времени. Конечный момент может быть косвенно привязан к какому- то конкретному событию, например, "времени, когда амплитуда колебаний маятника уменьшится вдвое".
Гпава 1. Что такое модель и зачем она нужна? 17 Естественно, что в большинстве случаев одного опыта или однократного прогона модели окажется недостаточно для достижения искомого результа- та. Например, для тою, чтобы найти параметрическую зависимость времени затухания амплитуды колебаний маятника на пятьдесят процентов от исход- ного значения как функцию от плотности воздуха, придется выполнить се- рию прогонов с различными значениями плотности. Еще одной типовой задачей исследования является параметрическая опти- мизация. При решении этой задачи для вычисления целевой функции также используется отдельный прогон модели. Например, мы хотим найти угол бросания, при котором материальная точка, брошенная под углом к гори- зонту, падает максимально далеко. Целевой функцией этой задачи является значение горизонтальной координаты в момент падения (определяется дис- кретным событием — пересечением вертикальной координатой нуля свер- ху). Алгоритм оптимизации задает некоторое значение угла, выполняет прогон модели до дискретного события "паление", замеряет координату точ- ки падения, определяет новое значение угла и повторяет эти операции многократно, пока не найдет оптимальную точку (рис. L3) Рис. 1.3. Визуализация процесса поиска оптимального угла бросания. По вертикальной оси отложены значения угла, по горизонтальной — дальность полета Наконец, отдельной задачей является нахождение особых значений коэф- фициентов уравнений модели, качественно меняющих характер ее поведе- ния. Такие исследования обычно проводят, когда хотят выяснить, насколько рабочий режим "далек" от аварийного.
18 Практическое моделирование динамических систем Рассмотрим модель динамики популяции зверей |2] dx К - л — - гх------ dt К ~А, где: а — количество зверей; г — скорость роста при малой численности популяции; К — максимальное число зверей, определяемое ресурсами дан- ной местности; А — интенсивность добычи зверя. Известно, что если значение интенсивности добычи А равно нулю, т. е. на зверя не охотятся, то через некоторое время популяция достигает предель- ной численности К и остается в состоянии равновесия (рис 1.4). Если по- степенно увеличивать интенсивность добычи через заданные промежут- ки времени Г, (например, через год), то сначала популяция будет "приспосабливаться" к насилию (см. рис. 1.4), достигая новых равновесных значений численности Ks (соответствующих интенсивности добычи А,), а , >'К2 затем, когда интенсивность достигнет предельного значения л(.=—j—, — вымирает. Рис. 1.4. Реакция популяции на увеличение интенсивности добычи. Ступенчатая функция показывает, на сколько ежегодно увеличивается добыча, непрерывная — как уменьшается при этом численность популяции В этом примере найти и теоретическое, и численное значение точки бифур- кации (значение интенсивности, при котором у системы исчезают точки равновесия) достаточно просто. В общем случае применения численных процедур поиска точек, где качественно меняется характер поведения, жела-
Глава 1. Что такое модель и зачем она нужна? 19 тсльно предварительно знать, что они существуют и уметь оценивать диапа- зон параметров, где их следует искать. Искомые значения чаше всего нахо- дят с помощью итерационных процедур, и тогда приходится многократно строить отдельные решения. Успех исследования во многом зависит от возможности автоматизировать вычислительный эксперимент. Современные пакеты моделирования органи- зуют его, опираясь на концепцию виртуального стенда. Вычислительный эксперимент можно трактовать как работу на виртуальном испытательном стенде, где размещаются блоки моделируемой системы, а также виртуальная "измерительная аппаратура" (всякого рода индикаторы, "осциллографы" и "самописцы"), только вместо блоков и кабелей "в металле" пользователь имеет дело с прямоугольниками и линиями на экране дисплея. Компонентное моделирование Написать итоговую систему уравнений для конкретной модели может ока- заться достаточно сложно, хотя бы потому, что с ростом числа уравнений вероятность даже элементарных описок резко возрастает. Рассмотрим описание поведения следящего дифференциатора в виде систе- мы уравнений и в виде структурной схемы (рис. 1.5), с хорошо известными любому инже- неру интегратором, усилителем и сумматором При ручном, "доком- пьютерном" способе проектирования, эти два описания дополняли друг друга, и рисунком можно было воспользоваться лишь как подсказкой, для вывода уравненый. Посмотрев внимательно на рисунок, можно обратить внимание на то, что: 1. Сама структура системы несет ценную информацию о пей. Рисунок легче воспринимается и помогает надолго запомнить совет "не умеете диффе- ренцировать — интегрируйте в обратной связи!’’, ведь на нем можно уви- деть петлю обратной связи. 2. Структура системы может быть далеко не такой простой и "ручной" вы- вод эквивалентной системы уравнений может привести к ошибкам. 3. В этой схеме все звенья стандартные (интегратор, усилитель, блок срав- нения) и появляется надежда, что вывод нужной системы уравнений можно сделать автоматически.
20 Практическое моделирование динамических систем Возникает естественный вопрос: а нельзя ли поручить системе моделирова- ния не только автоматически преобразовывать математическую модель сис- темы в моделирующую программу, но и автоматически получать математи- ческую модель всей моделируемой системы по математическим моделям се отдельных компонентов и описанию связей между ними? Ответ на этот во- прос положительный. Большинство современных систем визуального моде- лирования позволяют просто нарисовать структурную схему моделируемой системы в специальном графическом редакторе. Все остальное, т. е. получе- ние эквивалентной математической модели, дело системы моделирования! Модель, показанная на рис. 1.5, может быть просто составлена из образов блоков, входящих в библиотеку стандартных компонентов. Любой новый компонент можно попытаться собрать из уже существующих или создать его самостоятельно на основании существующей математической модели. Про- ектирование новых компонентов из существующих обычно приводит к по- строению иерархической структурной схемы. Более того, структурные схемы используют и на этапе прогона модели. Со- временная компьютерная модель становится больше похожа не на програм- му в традиционном смысле (как последовательность операторов), а на неко- торую виртуальную квазиаппаратуру, включающую в себя параллельно функционирующие компоненты. Поддержка концепции виртуального стен- да требует от системы моделирования реализации еще ряда возможностей: □ интерактивного вмешательства в ход прогона модели (пользователь дол- жен иметь возможность крутить "ручки" настроек, переключать "тумбле- ры", т. е. активно вмешиваться в ход эксперимента); □ визуализации результатов в ходе прогона, а не после него; □ прикладной 2D- и 3D-анимации, позволяющей визуально оценивать ди- намику моделируемой системы.
Глава 1. Что такое модель и зачем она нужна? 21 На самом деле в компонентном моделировании не все так безоблачно: су- ществуют проблемы получения эквивалентной математической модели и различные подходы к решению этих проблем (они будут подробно рассмот- рены в главе 3 "Компонентное моделирование'}. Тем не менее, существует точка зрения, что только системы компонентного моделирования и могут называться системами моделирования, а те пакеты, что имеют дело с матема- тическими моделями неструктурированных обьектов, следует называть "мате- матическими пакетами". Объектно-ориентированное моделирование В следящем дифференциаторе (см. рис. 1.5) каждый типовой блок использу- ется только один раз. Однако в любом учебнике по теории автоматического управления вы увидите структурные схемы, в которых одновременно ис- пользуется несколько интеграторов, несколько сумматоров и усилителей. Аналогично этому, в любой сколько-нибудь сложной электрической схеме (например, в вашем телевизоре) присутствуют десятки и сотни резисторов и конденсаторов. Чем отличается один компонент, интегратор inti, от другого компонента, интегратора int2, если, как очевидно, математическая модель у них одна — уравнение — = Кх? Это просто два различных экземпляра интегратора, с dt возможно, различающимися значениями коэффициента усиления К. Вполне естественно ввести понятие обобщенного интегратора, в описании которого присутствуют внешние переменные у и, у, параметр К, а также дифференциальное уравнение — = Кх. их связывающее. Такой обобщенный dt компонент, прототип всех возможных интеграторов, называется классом. Говоря о классах, нельзя ответить на вопрос, чему равны конкретные значе- ния переменных л:, у, К. Для обобщенного интегратора — это лишь прото- типы переменных. Значения имеют только переменные конкретного инте- гратора —- экземпляра класса обобщенного интегратора. Величина К играет особую роль — это параметр, значение которого может изменяться только в момент создания конкретного экземпляра, а затем остается неизменным па все время существования данного экземпляра. Понятия класса и экземпляра являются базовыми для объектно- ориентированного моделирования (ООМ). Более сложными понятиями ООМ являются наследование и полиморфизм. Рассмотрим модификацию обобщенного интегратора, в котором коэффициент усиления зависит от
22 Практическое моделирование динамических систем температуры: — = (К + КтТ)х . Этот новый класс — термоинтегратор — на- dl следует все переменные класса интегратора, добавляет новую внешнюю пе- ременную Т, новый параметр Кт и переопределяет уравнение динамики. Класс термоинтегратор является потомком класса интегратора, а последний является его предком. Для обозначения тех же отношений часто используют- ся термины производный класс — базовый класс, подкласс — суперкласс. Ясно, любой экземпляр термоинтегратора может быть использован вместо любого интегратора в любой структурной схеме. Возможность использования лю- бого потомка в контексте предка называется полиморфизмом. Вопросы ООМ будут подробно рассмотрены в главе 6 "Объектно-ориенти- рованное моделирование ".
Глава 2 От классических динамических систем к гибридным Термин "динамическая система" первоначально отождествлялся с автоном- ной системой обыкновенных дифференциальных уравнений, правая часть которой удовлетворяет условиям, гарантирующим существование и единст- венность решения. Позже он стал использоваться для обозначения все большего числа математических моделей и теперь нередко употребляется во всех случаях, когда речь заходит о системах, чье поведение зависит от вре- мени. Среди динамических систем особо выделяют гибридные системы, про- стейшие примеры которых мы сейчас и рассмотрим. Прыгающий мячик Будем изучать движение шарика массы т, брошенного с начальной скоростью VQ под углом cz к горизонтальной плоскости в плоско-параллельном поле тяго- тения. После броска шарик взлетит вверх, затем начнет падать вниз, ударится о плоскость, отскочит, и снова полетит вверх. При отсутствии воздуха и абсолютно упругом ударе траектория шарика будет выглядеть так, как показано на рис. 2.1. Рис. 2.1. Полет и абсолютно упругий огскок шарика от горизонтальной поверхности в среде без сопротивления. По вертикальной оси отложена высота полета, по горизонтальной — дальность 2 5ик. ].?6|
24 Практическое моделирование динамических систем На рисунке хорошо видны две чередующиеся фазы: полет и отскок В фазе по- лета поведение шарика описывается системой уравнений (2.1), = <2-’) Л ' ’ ‘IV. [~dT=-s- Здесь [л, у] — дальность и высота полета [V .VJ — горизонтальная и верти- кальная составляющая скорости; g — ускорение силы тяжести. Длительностью фазы отскока при достаточно больших значениях начальной скорости Ио можно пренебречь по сравнению с длительностью фазы полета, и рассматривать отскок как мгновенное дискретное действие, результатом ко- торого является изменение знака вертикальной составляющей скорости на противоположный. Момент отскока можно определить, если следить за выпол- нением неравенств у < 0 и V, < 0 (без учета знака скорости первое условие выполнилось бы уже в начальной точке). Алгоритм смены фаз движения шарика схематически показан на рис. 2.2 В на- чальный момент t = 0. .г = 0, у - 0, V, = V cosa, V, = V sincr, шарик нахо- дится в состоянии "Полет" и движется согласно системе уравнений (2.1). В не- который момент времени t*, который определяется логическим предикатом (у < 0)гд/<7(И|1 < 0), полет заканчивается (уравнения (2.1) перестают "рабо- тать"), шарик мгновенно меняет направление движения (Vv, :=-V ) и полет продолжается, но уже с новыми начальными условиями. ч when [у<=0] and(Vy<0) actions {Vy:= Vy;} Рис. 2.2. Графическое изображение поведения прыгающего шарика. Прямоугольник со спрямленными краями обозначает длительные действия и называется (локальным) состоянием. Состояние имеет имя и ему приписана в данном случае система обыкновенных дифференциальных уравнений, определяющая конкретное длительное действие. Черный кружок со стрелкой, указывающей на состояние "Полет", говорит о том, что это начальное состояние. Стрелка, исходящая из кружка и возвращающаяся в него, показывает, что состояние "Полет” периодически повторяется Стрелке предписаны условия выхода из текущего состояния, и мгновенные действия, выполняющиеся при переходе в новое состояние
Гпава 2. От классических динамических систем к гибридным 25 Этот пример иллюстрирует самый простой вид гибридной системы, когда существует единый закон непрерывного поведения, но в некоторые момен- ты времени, в общем случае зависящие от значений времени и координат, часть фазовых переменных "скачком" меняет свои значения. Описание по- ведения таких систем включает в себя не только описание непрерывного действия, но и описание дискретных действий, указывающее, когда насту- пают изменения и какие мгновенные действия следует выполнить. Поведение гибридной системы можно рассматривать как "склейку' непре- рывных поведений, в виде кусочно-непрерывной функции. Место "склейки" (момент времени Г) называют "временной щелью". Она обладает рядом ин- тересных особенностей. Взгляните на график изменения вертикальной со- ставляющей скорости (рис. 2.3). Рис. 2.3. "Временная щель” в месте склейки двух непрерывных поведений. Получающаяся функция в месте склейки оказывается неоднозначной — на это указывает пунктирная линия Переменная V в один и тот же момент времени Л смены поведения имеет два значения — отрицательное и положительное, т. е мы имеем дело с многозначными функциями. Это естественное следствие нашего допущения о том, что процесс отскока имеет нулевую длительность. Усилитель с насыщением Усилитель с насыщением реализует статическую характеристику, показанную на рис. 2.4. Поведение такого устройства описывается условной формулой Lower Limit, mm ’ Upper Limit, > max »
26 Практическое моделирование динамических систем Рис. 2.4. Типичный пример поведения, меняющего свой характер в зависимости от входного сигнала. Эта непрерывная функция "склеена” из трех различных зависимостей — двух констант и линейной функции, определенных каждая в своей области входного сигнала Уравнения и формулы, правые части которых включают условные выраже- ния, иногда называют гибридными, подчеркивая тем самым, что мы имеем дело с совокупностью различных математических описаний, конкретная реализация которых зависит от событий. Это пример гибридности другого типа, чем предыдущий, здесь "скачком" меняется правая часть уравнения или формулы, т. е. в разных областях фа- зового пространства используются различные описания поведения, однако число и состав компонент фазового вектора остаются всюду неизменными В данном случае мы имеем три области, три системы уравнений и условия переключения между ними относительно одних и тех же переменных. а Обрыв нити качающегося маятника Рассмотрим маятник в виде шарика, подвешенного на нити длиной L. Предпо- ложим, что мы по команде Обрезать мгновенно перерезаем нить качающего маятника. Колебательное движение маятника описывается системой уравне- ний (на рис. 2.5 она называется УравненияКолебаний) da — - ty; dt dco ------ -gsinr./; dt 6 л = Lsina; j' = -L coscr, где: a — угол отклонения нити от вертикального положения; со — угловая ско- рость; g — ускорение силы тяжести, л — горизонтальная координата шарика; д — вертикальная координата шарика в прямоугольной системе координат, началь- ная точка которой совмещена с точкой подвеса. Свободный полет шарика по- сле перерезания нити описывается уже использовавшейся нами системой -4
Гпава 2. От классических динамических систем к гибридным 27 уравнений (2.1) (УравнеиияСвободногоДзижения). Различные фазы и усло- вия смены поведения показаны на рис. 2 5. do УравненияСвободногоДвижения do УраьненияКолебаний Свободное Движение when Отрезать actions { V х: =0 тедзи1_ ”cos(Alpha); Vy: =0 megaxLxsin(Alpha]; ) ' Рис. 2.5. Графическое изображение сложного поведения, начинающегося со свободных колебаний маятника, и заканчивающегося полетом шарика после перерезания нити В данном случае в различных областях меняются не только правые части урав- нений, описывающие движение, но и размерность, и состав фазового вектора, и количество решаемых уравнений. Как мы видим, гибридные или событийно-управляемые системы являются обобщением классических динамических систем, у которых в различных областях фазового пространства меняются уравнения, размерность и состав фазового вектора. Частные случаи таких систем достаточно хорошо изучены, однако даже они вызывают трудности при практическом моделировании. Рассмотрим гибридные системы более подробно. Гибридные системы часто называют непрерывно-дискретными или собы- тийно-управляемыми. При их описании приходится использовать как тра- диционные непрерывные модели (системы дифффернциальных уравнений), так и классические дискретные (конечные автоматы), опирающиеся на раз- личные модели времени. Попытка совместить оба подхода, с тем, чтобы бы- ло удобно одновременно представлять и непрерывное и дискретное поведе- ние, прежде всего, приводит к необходимости введения новой модели времени. Время Ньютоновская модель времени родилась при формулировании законов классической механики. В представлении Ньютона время является само- стоятельной сущностью реального мира, что позволяет говорить о его мате- матических моделях. Ньютон различал [22]: О физическое (астрономическое) время'. "„.относительное, кажущееся или обыденное время есть или точная, или изменчивая, постигаемая чувствами, внешняя, совершаемая при посред- стве какого-либо движения, мера продолжительности, употребляемая в
28 Практическое моделирование динамических систем обыденной жизни вместо истинного математического времени, как то час, день, месяц, год"; □ абсолютное (математическое) время'. "Абсолютное, истинное математическое время само по себе и по своей сущности, без всякого отношения к чему-либо внешнему, протекает рав- номерно и иначе называется дли тел ьн остью". Ньютоновское время характеризуется непрерывным направленным течени- ем с постоянной скоростью. Еще одно важное свойство этой модели — аб- солютность времени, позволяющая синхронизировать все параллельно про- текающие процессы Математической моделью ньютоновского времени является вещественная ось, по которой с постоянной скоростью пробегает переменная t (время), двигаясь из прошлого в будущее, в пределах от -w до со. С непрерывным временем неразрывно связаны обыкновенные дифференциаль- ные уравнения, применяющиеся для описания непрерывных во времени про- цессов. В обыкновенных дифференциальных уравнениях время — это единст- венная независимая переменная, от которой зависит положение точки л(г). — = f(x.t). леЭГ, Х0) = л-°. dt Если мы перейдем от неавтономной к автономной системе, в которой время I трактуется как координата: 4^ = /(.v,z), хе Si", л(0) = л°; ат -^- = 1, /(0) = 0, ат то в новой записи в явном виде появится уравнение "часов". В абсолютном непрерывном времени не возникает проблем с синхрониза- цией параллельно протекающих процессов. Рассмотрим систему линейных дифференциальных уравнений относительно неизвестного вектора х с за- данной квадратной матрицей А и вектором Ъ dv — = Ах + b , dt выделим в ней два новых подвектора х, и jq и запишем в виде ——- = Л| । А‘| + А\2 х'2 +; at л л i —— - А21Л; +А22Л2 +Ь2, at
Глава 2. От классических динамических систем к гибридным 29 где х = а матрицы второй системы являются блоками исходной и имеют соответствующие размеры. Тем самым мы осуществили декомпози- цию системы на две новых, решаемых параллельно, в едином непрерывном времени, или, что в данном случае то же самое, автоматически синхронизи- ровали два независимых процесса со своими внутренними часами. При рассмотрении многих реальных физических процессов часто отказыва- ются от свойства непрерывности времени и вводят дискретное время. Под дискретным временем понимают любую упорядоченную, неограниченно возрастающую последовательность вещественных или рациональных чисел, {^о Т] *•••}, а чаще всего множество целых чисел. Аналогично тому, как непрерывное время является независимой перемен- ной в дифференциальных уравнениях, дискретное время £-+1 + h играет роль независимой переменной в разностных уравнениях 0=F(?.(^1),z(r;),...,^(-_J); z=0,l....; z(r0) = z(U) = q. или = F(z(rj..z(/f_J); / = 0,1,...; z(r0) = cQ;...; r(Lj = q, что, используя соответствующую замену переменных, всегда можно записать как zf+i = z/+1 = z(i +1); = i. Здесь z(t) искомая вещественная функция. Говоря о разностных уравнени- ях, мы будем считать, что функция z(7) определена только в точках сетки f, поэтому она и получила название сеточной. Сеточные функции и разно- стные уравнения в моделировании возникают как аппроксимации исследуе- мых непрерывных зависимостей. Из последней формы записи мы видим, что множества целых чисел достаточно для моделирования дискретного времени. Мы также будем использовать сеточные функции, временные точки кото- рых могут быть расположены неравномерно <(«;.,,) = 1 = 0,1....; z(/„) = z(Lt) = ct; t,„ = t, +Л,. Дискретное время естественным образом появляется там, где наблюдается разделение поведения на "быстрые" (дискретные или мгновенные действия) и "медленные" (непрерывные или длительные) действия. Примером может служить "быстрый" цифровой регулятор, управляющий движением "медленного" непрерывного объекта. В этом случае при описании совмест-
30 Практическое моделирование динамических систем ной системы ’’объект-регулятор" возникают одновременно дифференциаль- ные уравнения (уравнения объекта) dx at и разностные уравнения (уравнения регулятора) "»+i =G(.Y(f„),wJ; ), /,1+] — tn + Л, образующие совместную систему дифференциально-разностных уравнений (объект-регулятор): dx dt мл.и = G(x(in ),u„); — )» Gi+i ~ C, + где л(/) — вектор, характеризующий состояние объекта управления, a u(tn) — управляющее воздействие. На рис. 2.6 изображена система, состоящая из пропорционально-диффе- ренциального регулятора (ПД-регулятора, CU) и объекта управления (СО). Рис. 2.6. Функциональная схема моделируемого в MVS устройства, состоящего из управляющего устройства (CU) и объекта управления (СО), охваченных обратной связью Поведение объекта управления описывается уравнениями (рис. 2.7), где y — "непрерывная" координата объекта, Ym — ее квантованное значение, полу- чаемое с измерительною прибора, а и — управляющий сигнал.
Гпава 2. От классических динамических систем к гибридным 31 Рис. 2.7. Уравнения движения объекта, набранные в текстовом редакторе непрерывных поведений пакета MVS Рис. 2.8. Графическое изображение поведения или карга поведения пакета MVS. показывающая, как вырабатывается управляющий сит нал Управляющий сигнал формируется следующим образом (рис. 2.8). Периоди- чески, с периодом т, вычисляется разность е между желаемым х и текущим Уш положением объекта, и на ее основании формируется сигнал управления и, который и поступает на объект. Как мы видим из рисунка, система управле- ния работает циклически, начиная всегда свои действия в узле (состоянии) cbeg. Переход из начального состояния в состояние ucaic осуществляется мгновенно, при этом вычисляется величина рассогласования о. Переход в состояние Cend, когда окончательно формируется величина сигнала управ- ления и, происходит с задержкой таи*т (моделируем сложные и длительные вычисления). После чего система управления "замирает" и возвращается в исходное состояние cbeg через (1 - таи) *т единиц времени. При аппроксимации дифференциальных уравнений разностными естест- венным образом возникают дискретное время, как более простая модель времени непрерывного, и сеточные функции. Например, дифференциальное уравнение ~ = f(x, Г), х g 9V. л(0) = Х° dt
32 Практическое моделирование динамических систем можно попытаться заменить разностным (явная схема Эйлера) = Г(О) = Л« п или (неявная схема Эйлера) —-----J= J {z(lt + Л),// 4- A), z(0) ~ Л ° , h и решать полученные разностные уравнения вместо исходного дифференци- ального. Поступая так, надеются на то, что при определенных значениях шага дискретизации h модуль разности решений исходного и аппроксими- рующего уравнений rt/rs(s(f.) - х(/.)) будет незначительным во всех дис- кретных точках. Необходимость в дискретном времени и сеточных функци- ях возникает также, когда исходная переменная "наблюдаема" только в определенные моменты времени. Например, для моделирования сигналов маяка, зажигающегося на 1 секунду (пренебрежимо мало) через каждую ми- нуту (длительный интервал) то красным, то зеленым цветом, может быть выбрана сеточная функция с областью значений {red, green} и дискретным временем {1,2,3} (рис. 2.9). рт><7, /=2(/с + 1); green, i ~ 2 /< ; Рис. 2.9. Сеточная функция, определенная на множество натуральных чисел и принимающая значение на множестве {red, green} При использовании дискретного времени проблема синхронизации стано- вится более сложной. Предположим, что две последовательности с несовпа- дающими отсчетами являются "часами" двух независимых систем. Тогда, если мы хотим рассматривать одновременно работу двух систем, придется вводить новые единые часы. Этого можно достигнуть, например, доопреде- ляя значения переменных на несовпадающих временных точках.
Гпава 2. От классических динамических систем к гибридным 33 Выделим в той же системе J.V — = Av + b dt те же две независимые компоненты, аппроксимируем каждое уравнение своим разностным уравнением и предположим, что /?, = 2Л->. Дискретные часы процессов явно нс совпада- ют, и совместное решение обеих систем, вообще говоря, невозможно, если не принимать специальных мер. Если последовательности с временными отсчетами трактовать, как локаль- ные дискретные часы, то они могут оказаться несравнимыми между собой. Наиболее часто в этой ситуации возвращаются к абсолютному непрерывно- му времени, и, вместо сеточных переменных и функций, переходят к кусоч- но-постоянным. В этом случае любые две временные последовательности оказываются совмесгимыми. Рассмотрим пример. Пусть два любителя обмениваться сообщениями с помо- щью "азбуки Морзе" могут выходить в эфир только в определенные моменты времени, а в каждый такт либо посылать сигналы, либо получать их. Если они не договорятся о синхронизации часов, услышать друг друга им вряд ли удаст- ся. Если они синхронизируют часы, но выберут несоизмеримые такты — ре- зультат будет тем же. Если они синхронизируют часы и выберут соизмеримые, но не совпадающие такты — часть сообщений пропадет. Для правильной рабо- ты нужно синхронизировать часы, выбрать равные такты и поочередно на од- ном такте принимать чужие сигналы, а на следующем — отвечать на них. Но проще всего запоминать полученные сигналы (фиксировать их значения между тактами), и тогда проблема синхронизации исчезнет. Вводя дискретное время, мы отказываемся от непрерывности, сохраняя свойства упорядочен пости и неограниченного возрастания. Равномерность течения времени сохраняется, если речь идет о равномерности перебора но- меров дискретных отсчетов. Однако можно пойти и дальше. Следуя воззрениям Лейбница, любую упо- рядоченную последовательность явлений или состоянии объекта можно связывать с течением времени и даже называть "событийным'' време- нем. Здесь время связывается с изменчивостью объекта. О таком времени можно говорить, что оно останавливается, если в рассматриваемой системе
34 Практическое моделирование динамических систем ничего не меняется. Фактически мы следим за неким дискретно меняю- щимся признаком, интересуясь только фактом его изменения. Непрерывное время заменяется цепочкой наблюдаемых изменений. Например, последова- тельность. фиксирующая смену цветов горящих ламп светофора {"Красный", "Желтый", "Зеленый", "Красный", '’Желтый”, "Зеленый", } отражает его правильную работу, а цепочка {"Красный"}, говорит о его поломке. Синхронизация двух процессов с событийным вре- менем возможна либо если мы "привязываем" элементы последовательно- стей к отсчетам единых часов (возвращаемся к непрерывному или дискрет- ному времени), либо если явно перечисляем пары одновременных событий в обеих последовательностях. Во многих приложениях дискретные модели с событийным временем пыта- ются "дооснастить" непрерывным временем, и вводят дня этого специальную переменную “ время, мгновенно увеличивая се на заданную величину при очередном изменении состояния. В таких системах принято перенумеровы- вать дискретные значения функции, за поведением которой наблюдают, и отождествлять состояния с этими значениями. Время, таким образом, стано- вится зависимой переменной, и возникает возможность невольно нарушить его бесконечное течение и неограниченное возрастание. В дальнейшем мы увидим, что ряд моделей, использующих дискретное время, имеет специаль- ные механизмы продвижения времени, зависящие от наблюдаемых событий. Если время определяет сама система, и построенная последовательность имеет конечную предельную точку lim/z, то мы получаем систему, в которой время останавливается. И, наконец, зададимся вопросом, а существуют ли модели, где нам одно- временно требуется и непрерывное (дискретное) и событийное время? Рассмотрим следующую задачу. Несколько автомашин курсируют между городами, развозя товары на склады. Приехав в город и отыскав склад, где можно оставить привезенный товар, шофер сдает его и загружает машину очередным видом товара, который требуется увезти со склада. Таких складов может быть несколько и возможно придется объехать их все, прежде чем отправиться в новый путь. Время в пути намного превышает разъезды по городу, и временем пребывания в городе можно пренебречь. С точки зрения диспетчера, следящего за передвижением машин между го- родами, погрузка и разгрузка совершается мгновенно, и в любом городе он наблюдает скачкообразное изменение номенклатуры и количества товара. С точки зрения городского диспетчера, обеспечивающего погрузку, посеще-
Глава 2. От классических динамических систем к гибридным 35 ние складов совершается в определенном порядке, и возможно, на каждом складе, будет скачкообразно меняться количество груза (рис. 2.10). Предполо- жим, что грузов всего два — один привозится в город, и его исходное количе- ство равно Анач, а второй — вывозится, и его количество равно В. Если, скла- дов всего четыре, тогда Аь А2, A3, А4 — количество оставленного на каждом складе товара, a Bp В2, В3, В4 — принятого. АКО|1СЧН — увезенного из города. Рис. 2.10. С точки зрения диспетчера, следящего за передвижением машин между городами, в момент посещения города все четыре склада одновременно получат свои доли Аь А2, А3, А^ от общего количества товара Акоиочн, привезенного в город С точки зрения непрерывного (длительного) времени, количество груза — неоднозначная функция в точке, соответствующей посещению города. Вве- дем дополнительные дискретные события "въезд в город", "посещение скла- дов", "выезд из складов" и рассмотрим пары: ("въезд в город", Апач), ("посещение первого склада", AJ, ("посещение четвертого склада", Ад), ("выезд из города", Акоиеч11). Это однозначная дискретная функция, опреде- ленная на событийном времени, связанном с последовательным посещени- ем складов в очередном городе. Объединим эти два времени — непрерывное время посещения городов и событийное время посещения складов, в еди- ную последовательность пар дня каждой машины: ([6, 61, ("Движение в город N")), ([^ 61, ("Въезд в город N")), (|/2, 61, ("Посещение первого склада города N")),..., (р2, 61, ("Выезд из города N")),... и получим временную последовательность, которую можно назвать гибридной. Эту последовательность можно интерпретировать следующим образом — непрерывное время, т. е. вся вещественная ось, покрыта замкнутыми интер- валами, в каждом из которых протекает обычное непрерывное время. Об- щие точки этих интервалов назовем "временными щелями", в которых опре- делено свое, событийное время. Гибридное время обладает непривычными свойствами. Например, если две машины посетят один город одновременно, мы ничего не сможем сказать об очередности посещения складов каждой машиной, т. к. их событийные времена несравнимы. В непрерывном време- ни все склады посещаются одновременно. Мы только знаем, в какой после-
36 Практическое моделирование динамических систем довательностн посещались склады каждой машиной в своем событийном времени. Гибридное время для новичков может служить источником серьезных оши- бок. Нс менее непривычным, как показывает опыт, является использование при моделировании гибридных систем трех типов функций — непрерывных, кусочно-постоянных и сеточных. Пространство В ньютоновских законах движения наряду с независимой переменной "время" присутствуют пространственные координаты (x,y.z) движущейся точки. Четверка (r,x,y,z) определяет положение тела в пространстве и вре- мени. Можно следить за положением точки (х(г),у(/),<(/)) как функцией от времени. Графики х = х(г), у - y(r), z. = z(t) мы в дальнейшем будем назы- вать временными диаграммами. Можно также следить за положением точки (л(г),у(Г),г(О) в осях х, у, г, и тогда обычно говорят о фазовых диаграммах. Мы различаем эти случаи, потому что во всех пакетах используются для ви- зуализации поведения графические окна Time diagram (Временная диаграм- ма), где в качестве независимой переменной выступает время, и Phase dia- gram (Фазовая диаграмма), где независимой переменной является одна из компонент фазового вектора. На следующих рисунках показано, как выгля- дит решение уравнения Ван-дер-Поля (рис. 2.11), представленное в виде временной (рис. 2.12) и фазовой диаграмм (рис. 2.13). Н Continuous behavior d(X)/dt = Vx d( Vx)/dt = Mu*(1-X~2)AVx-X Рис. 2.11. Вид уравнения Ван-дер-Поля в текстовом редакторе MVS. На панели управления видны три кнопки, соответствующие трем различным синтаксическим формам, дифференциальным уравнениям, алгебраическим уравнениям и формулам. Кнопка с изображением указательного пальца предназначена для формирования списка переменных, относительно которых решаются алгебраические уравнения Обобщая понятие "физического пространства" и фазовых переменных x,y,z, можно говорить о фазовом векторе X е ЭГ, вещественного пространства раз- мерности и. Или в общем случае фазовый вектор Х = {х1,х2...х } — это множество независимых фазовых координат, каждая из которых имеет свое
Глава 2. От классических динамических систем к гибридным 37 множество значений х. е Di и, соответственно, фазовая траектория — это след точки (X](/),x2(/),.х„(г)) в пространстве £>, х ZZ х... Dn. Рис. 2.12. Зависимость решения уравнения Ван-дер-Поля от времени. Особенностью окна Time diagram пакета MVS является то, что построение решения и его отображение в окне осуществляется одновременно. Накопленная информация сохраняется. Таким образом, график можно редактировать (менять масштабы) и просматривать его отдельные фрагменты уже после окончания эксперимента, а использованные для его построения таблицы — выводить в файл в текстовой форме для дальнейшей обработки Рис. 2.13. Фазовая траектория уравнения Ван-дер-Поля в окне Phase diagram пакета MVS. По оси абсцисс отложено положение точки, а по оси ординат — скорость. Окно Phase diagram является частным случаем окна Time diagram. Щелчок правой кнопкой в поле окна "Временная диаграмма" открывает диалог, с помощью которого можно указать, какая координата фазового вектора будет служить осью абсцисс. В случае, если вектор решения содержит больше двух координат, в одном окне можно разместить до десяти кривых одновременно
38 Практическое моделирование динамических систем Множества значений функций D могут быть конечными, например, функция sign(i) = О,/ = 0; оставаясь вещественной, принимает только три значения {—1,0,1}, что позво- ляет называть ее также дискретной, однако лучше было бы сохранить за ней традиционное название вещественной кусочно-постоянной функции, опреде- ленной на всей вещественной оси. Примером дискретной функции также мо- жет служить следующим образом определенная кусочно-постоянная функция, которую можно использовать для моделирования маяка (рис. 2.14): lighi(i) = ^ green, l = 2,4,6,... попел ф 12,3,4.... light green red Рис. 2.14. Кусочно-постоянная функция, принимающая значение попе на открытых промежутках ]k,k+1[, к-0,1,2,... и поочередно значения red и green в точках к—1,2,3,... На рис 2.15 показано, как можно реализовать эту кусочно-постоянную функцию в MVS. Два состояния, init и Red, поочередно сменяют друг друга, с периодом 7’ равным одной единице модельного времени. Специ- альная переменная i±gxh перечислимого типа всюду принимает значение попе, что подчеркнуто присваиванием light:=none, и только при мгновен- ных сменах состояния принимает поочередно значения red и green. Функция light — кусочно-постоянная, но "правильно" изобразить ее доста- точно сложно (рис. 2.16). На рисунке видно, что три ее значения {red, none} закодированы числами. Значению попе соответствует число 1.0 (единица). В точках 1, 2, 3 ..., где функция попеременно принимает зна- чения {red, green} им соответствуют числа 0.9 и 0.8. На приведенном графике функция в точках 1, 2, 3, 4, 5 последовательно принимает три зна- green,
Глава 2. От классических динамических систем к гибридным 39 ЧенИЯ — {none, red, none), {none, green, none). ИЛИ ТОЧНСС, смене зна- чения соответствует отрезок определенной длины. Очевидно, что это след- ствие технических ограничений при рисовании такого рода функций. Рис. 2.15. Пример реализации кусочно-постоянной функции с помощью карт состояния. Во время длительного действия переменная light принимает значение попе, и только при смене состояний ей присваиваются значения red и green. Фрагмент окна Continuous behavior показывает, что скрыто под оператором do Equations_l Рис. 2.16. Попытка изобразить кусочно-постоянную функцию графическими средствами пакета MVS. Данная функция всюду принимает значение попе (ему соответствует числовое значение 1), за исключением точек, где нарисованы вертикальные отрезки различной длины, изображающие значения red и green
40 Практическое моделирование динамических систем С теоретической точки зрения все разнообразие дискретных (кусочно- постоянных) функций, определенных на вещественной оси с различными типами множеств значений, можно свести к целочисленной дискретной функции, если "закодировать" значения функции различными целыми чис- лами. С практической точки зрения это неудобно, потому что любая такая "кодировка" воспринимается труднее, чем первоначальные значения функ- ции, несущие дополнительную информацию. Сравните исходное и "закоди- рованное" представления: [1, / = 1,3,5,... Ught(t) = < 2, z = 2,4,6,... О, 1,2,3,4,.. с У сеточных функций z(*,-+i) = ^0., )), Л+1 = tj + h. помимо дискретности значений функции z, дискретным оказывается и время. Графиком такой функции служит множество точек {(zf,z,)}- Напри- мер, сеточная функция light_l light = i = 1,3,5,... / = 2,4,6,... выглядит как показано на рис. 2.17. light ▲ green red Рис. 2.17. Пример сеточной функции. Ее значения, в отличие от кусочно-постоянной функции, определены не на всей оси, а только в ее отдельных точках Обратите внимание, что исчезло третье значение функции — ноль, т. к. те- перь функция определена только на множестве целых чисел (дискретное время), в отличие от предыдущей, определенной на всей вещественной оси (непрерывное время). Любой сеточной функции можно поставить в соответствие кусочно- постоянную функцию, считая, что на каждом промежутке [Zf,Z(Hl) кусочно- постоянная функция сохраняет постоянное значение сеточной функции г(г.) в точке /г. Кусочно-постоянная функция может служить моделью
Гпава 2. От классических динамических систем к гибридным 41 шлагбаума, постоянно находящеюся в одном из положений {"открыто", ’’закрыто”} или светофора, с областью значений — {’'зеленый", "желтый", 'красный"}. Последний тип функций, с которыми мы будем иметь дело, — это функции, определенные на гибридном времени, — все они оказываются неоднознач- ными на границах интервалов. Например, функция sign(t) (рис. 2.18) пре- вращается в "гибридную” (рис. 2.19). Рис. 2.18. Однозначная кусочно-постоянная функция sign (t) f А > t Рис. 2.19. Многозначная или "гибридная" функция sign (г) Графическое изображение фазовых траекторий и временных диаграмм в об- щем случае может вызывать затруднения, т. к. мы не умеем рисовать ни даже, например, четырехмерный мир, ни булевские переменные. В первом случае можно использовать различные срезы (поверхности), во втором — таблицы, где каждой клетке поставлено в соответствие графическое изображение эле- мента множества значений функции, и нужная клетка "подсвечивается" в со- ответствующие моменты времени. В качестве фазового портрета системы из двух независимых светофоров, регулирующих выезд из города на два шоссе, может быть использована таблица 3x3, а в качестве графиков — привычное для нас изображение светофора с зажигающимися "окнами" Еще одной важнейшей составляющей любого гибридного поведения явля- ются события.
42 Практическое моделирование динамических систем События Какую бы модель времени мы не использовали, поведение системы с фазо- вым вектором х(/) в любой момент времени /* характеризуется парой (Z* л(г*)), которую принято называть событием. У события две координаты — временная /* и пространственная х(/*). Первая указывает на время наступ- ления события, а вторая говорит о том, что произошло или характеризует явление. В случае, если пространственные координаты и время непрерывны — вре- менная траектория системы (Л x(t)) определяет бесконечное, несчетное множество событий, случившихся за время наблюдения за системой на промежутке [О,Т] на множестве A'IIiaxJ всех наблюдавшихся явлений. В непрерывном случае обычно говорят не о всем множестве событий, а лишь об отдельных событиях, называя их особыми, подчеркивая тем самым, что мы выбираем нечто важное для нас и системы. Положение упрощается, если речь идет о кусочно-постоянных функциях. Если функция принимает конечное число постоянных значении, то с собы- тием обычно связывают вторую координату, т. е. явление. Это обусловлено еще и тем, что в реальных технических устройствах идеальный скачок (разрыв первого рода) реализовать невозможно. В них любая кусочно- постоянная функция принимает новое значение за достаточно малое, но конечное время, и "опознавать" изменения можно, следя не за временем изменения (фронтом сигнала), а за его уровнем. Использование только второй координаты события для кусочно-постоянных функций породило название "дискретные события" и еще один способ опи- сания таких функций. Их изображают в виде графа, приписывая каждому узлу одно значение функции. Например, периодической функции light, on и с ы ва юще й фут i кци он и ро ва н и е с ветофора: Iigh ligh i(i), T = 3, i = 1,2,3... green, i -1; yellow, i - 2; lighi(i) = < соответствует граф, изображенный на рис. 2.20. В любом языке моделирования существуют специальные операторы, описы- вающие события и связанные с их наступлением действия. Задавая только одну координату события, например временную, мы выделяем множество всех одновременно наблюдавшихся явлений. Если фиксировать только оп- ределенное явление, то мы выделяем множество всех одинаковых явлений, случившихся в произвольные моменты времени. Соответственно, описать
Гпава 2. От классических динамических систем к гибридным 43 событие можно следующими способами: задав обе координаты пары, только первую, или только вторую координату. Рис. 2.20. Пример описания кусочно-постоянной периодической функции в виде графа. Карта поведения подчеркиваем, чмо пребывание в любом узле — действие длительное. Оператор after определяет его длительность — одну единицу модельного времени, после чего происходит смена сосмояния и изменение значения функции. Операторы, меняющие значение функции, на рисунке не показаны Это в MVS можно сделать по-разному. Самый простой способ присвоения функции постоянного значения на заданном промежутке заключается в приписывании каждому узлу своего непрерывного уравнения, например light=green для узла green С событиями тесно связаны еще два понятия: сигнал и сообщение. Иногда нас не интересует суть произошедшего явления, т. е. координата л(/*) со- бытия 0*,а'(/*))3 и нам вполне достаточно информации о том, что данное событие произошло. В таком случае ему можно дать имя и связать с этим именем сеточную функцию, принимающую, например, значение tree, в момент, когда происходит указанное событие. Эта сеточная функция ставит в соответствие событию (z*,.x(/*)), булевское true. Такую функцию принято называть сигналом — signa!: (signal: (z*,a(z*)) -> true). На рис. 2.21 показано, как можно моделировать маяк, используя сеточные функции signal. Это реализовано с помощью двух специальных переменных red и green типа signal, определенных только во временной щели, т. е. толь- ко в точках 1,2,3... (рис. 2.21). На рис. 2.22 это отображено следующим обра- зом. Для каждого сигнала выбирают свою ’’нулевую" координату' (0.7 и 0.9), относительно которой и рисуют сигнал в виде вертикального отрезка. В различных языках моделирования события описываются по-разному. В языке UML, о котором мы будем говорить в главе 5, принято выделять
44 Практическое моделирование динамических систем события тремя различными способами. В MVS, который в данном случае строго следует UML, это делается при помощи диалогового окна, показан- ного на рис. 2.23. Рис. 2.21. Использование оператора send (послать сигнал), для оповещения всех заинтересованных о том, что сеточная функция приняла свое очередное значение Рис. 2.22. Принятый в MVS способ изображать сигналы. Каждый сигнал в окне Time diagram изображается в виде вертикального отрезка, расположенного в точке, соответствующей времени наступления события на отдельном графике со своей осью абсцисс. Информация о сути произошедшего утрачивается, и о явлении можно судить только по названию сигнала Наиболее общий способ описания события дается полем when. В него мож- но ввести любой предикат, использующий в качестве аргументов время и
Гпава 2. От классических динамических систем к гибридным 45 координаты фазового вектора. Например, выделим событие, наступающее не раньше, чем через 10 единиц модельного времени, когда фазовая коор- дината становится отрицательной: Time;*-10 and х<=0. Рис. 2.23. Окно тексювого редактора MVS для описания событий, приводящих к смене состояний. Три основных поля: when, after, signal соответствуют трем способам описания событий, принятым в UML. В поле guard condition записывается так называемый "охраняющий" предикат. Как бы вы ни описали событие, система не будет на него реагировать, если охраняющий предикат в момент наступления события не примет значение true Поле after выделяет все события, случившиеся ровно через указанное в этом поле значение модельного времени. Наконец, поле signal может содержать имя одного из введенных сигналов. И тогда выделяется связанное с ним событие. На рис. 2.24 показано, как можно управлять железнодорожным светофором с помощью выделения событий. В исходном состоянии переезд открыт и горит зеленый свет. Когда прибор, управляющий светофором, определил, что поезд подъехал к переезду (train_near), зажигается желтый свет. Сиг- нал train говорит о том, что переезд следует закрыть до тех пор. пока поезд не удалится на достаточное расстояние (train_near). После чего на 10 се- кунд необходимо зажечь желтый сигнал и открыть переезд. В MVS редактор описания событий используется для формулирования усло- вий смены текущего состояния на новое. Если при описании события необ- ходимо указать дополнительные условия, при выполнении которых следует
46 Практическое моделирование динамических систем покидать текущее состояние, то их следует поместить в поле guard condition. Например, если приведенный выше предикат Time>10 and х<0 должен сопровождаться условием у >-о, то его и записывают в поле guard condition (рис. 2.25). Рис. 2.24. Различные способы описания событий, использованные для управления моделью железнодорожного переезда Как мы уже говорили, события определяют смену различных фаз поведения изучаемой системы. Наступление того или иного события необходимо от- слеживать по ходу вычислений, чтобы правильно определить границу смены поведением и выбрать новую фазу. Это действие принято называть поиском точки переключения. Рис. 2.25. Использование охраняющего предиката для указания дополнительных условий смены текущего состояния
Глава 2. От классических динамических систем к гибридным 47 Сигналы существуют только во временной щели, а это не всегда удобно, осо- бенно если их обработку необходимо отложить на некоторое время. Если сиг- налы запоминать, например, ставя им в соответствие кусочно-постоянную функцию, то такие функции естественно назвать сообщениями — их можно обрабатывать не по мере поступления, а по мере надобности. И сигналы и сообщения можно также классифицировать с точки зрения выбранного адресата. Их можно посылать всем, кто способен их услышать и воспринять (широковещательные сигналы), и конкретным адресатам (узко- вещательные, или адресные сигналы). Динамическая система Приступая к разработке программных средств, предназначенных для моде- лирования динамических систем, прежде всего необходимо дать ответы на следующие вопросы. I. Какая графическая форма входного языка выбирается для описания ре- шаемых математических задач? 2. Какие математические модед-и можно создавать, используя входной язык? 3. Какие задачи анализа и синтеза можно решать для допустимого класса моделей ? Ответы на эти вопросы определяют круг пользователей будущею пакета и сложность задач автоматизации вычислительного эксперимента для систем заданного класса. Современный пользователь предпочитает пакеты с выразительным, интуи- тивно понятным, позволяющим легко вносить изменения языком описания решаемых задач и разнообразными средствами их анализа Реализованные в пакете методы исследования в виде почти автоматических процедур дают возможность экспериментировать, не задумываясь о правомерности их при- менения — исследователь полагается на свою интуицию и опыт, а также на окончательную проверку результатов на практике. Существующая степень автоматизации проведения вычислительного эксперимента исключает уто- мительную, требующую постоянного внимания подготовительную работу пои его постановке и анализе результатов. Следует отмстить особое отноше- ние пользователей к программным реализациям методов синтеза, и вообще к любым "сложным" математическим методам, например методам поиска оптимальных значений параметров или структуры. Здесь требование полной автоматизации, как естественная реакция на математическую сложность применяемого алгоритма, является главенствующим. Пользовательские симпатии практически всегда на стороне графических обо- лочек, где традиционное формальное (строгое, но летальное и скучное) опи-
48 Практическое моделирование динамических систем сание задачи и метода ее решения заменяется графическим (интуитивно по- нятным), зримым образом. Однако легкость, с которой удается описать слож- ные объекты, и скорость, с которой пакет сообщает правдоподобные ответы на поставленные вопросы, порождает иллюзию их достоверности. Именно поэтому, если разработчик выбирает графическую форму входного языка, то он обязан обеспечить строгое соответствие графических конструкций матема- тическим задачам, и корректное применение выбранных пользователем мето- дов анализа и синтеза. После того как задача сформулирована, и пользователь выбрал метод ее решения из числа предлагаемых, должен быть либо получен правильный ответ, либо предпринята попытка выяснить, можно ли решить задачу данным методом, при заданных условиях. Еще лучше, если пакет ука- жет степень доверия к полученным результатам или причины и пути преодо- ления возникших трудностей. К сожалению, это очень жесткое и подчас труднореализуемое требование для многих задач численного анализа. К числу таких сложнорешаемых задач относится задача построения описания и исследования так называемых гибридных систем. Термин "гибридные сис- темы" пришел к нам из-за рубежа и постепенно вытеснил близкие по значе- нию термины, использовавшиеся в отечественной литературе "непрерывно- дискретные системы", "агрегаты", "системы с переменной структурой". Непрерывные модели Рассмотрим систему дифференциальных уравнений [18] ^ = /(*), ле'Л", л(0) = х° (2.2) dt с правой частью /(а), обеспечивающей существование и единственность решения х = хО;х'°) в некоторой окрестности / = 0. Например, это может быть непрерывная вектор-функция, удовлетворяющая условиям Липшица ||/(х-|) - f(x2 )|| < A'll-x'i -х2||, где К — некоторая константа в заданной области D . Такая система называется динамической. Решение х = x(Z;x°) можно трактовать как движение точки в фазовом про- странстве х от заданной начальной точки х° по конкретной траектории или как интегральную кривую х = х(г), проходящую в пространстве (лл) размерности п + 1 через точку х°. В первом случае речь идет о фазовой тра- ектории системы, а во втором о графике решения. Указанные динамические системы обладают простыми свойствами, а имен- но, функция л' = х(Г;х°): □ непрерывна по совокупности переменных;
Глава 2. От классических динамических систем к гибридным 49 О Х0:л°) = .г"; □ Х^;л(г,;л-0)) = л(7, + /2;л-“). Любое отображение, удовлетворяющее этим условиям, также называют ди- намической системой. В динамических системах время можно в любой момент повернуть вспять и прийти в исходную точку. В таких системах, если траектории в фазовом пространстве имеют хотя бы одну общую точку, то они совпадают, а соот- ветствующие им решения отличаются постоянным сдвигом по времени. В динамических системах наблюдаются только три типа траекторий: П непериодические, без самопересечений x(/|)?tx(/2), /| Ф □ периодические, х(/+7) = х(0; □ постоянные х(/) — x°w. Среди динамических систем могут встречаться такие, у которых решение уходит в бесконечность за конечное время, что, вообще говоря, не может реализоваться в реальном мире. В этом случае, по крайней мере, можно по- советовать ввести специальное масштабирование уравнений. Если система (2.2) обладает именно таким свойством, т. е. существует точка на временной оси, в окрестности которой решение уходит в бесконечность за конечное время, то можно ввести функцию где /,(х) — компоненты вектора правой части, и рассматривать вместо прежней новую систему 4- = /(л)<т, хе'Л", х(0) = л°. В фазовом пространстве обе системы обладают одинаковыми траекториями, но скорость их прохождения различна, и траектории второй уходят в беско- нечность за бесконечное время, тем самым мы можем рассматривать только системы, определенные на всей вещественной оси. Дискретные отображения Динамические системы могут быть определены и на дискретном времени. Разностные уравнения первого порядка = / = l,23...z0
50 Практическое моделирование динамических систем среди таких систем занимают особое место, и связаны либо с рекуррентны- ми соотношениями, либо с отображениями Пуанкаре, построенными в ре- зультате интегрирования систем дифференциальных уравнений. Примером использования отображения Пуанкаре может служить следующая задача [5]. Модель часов можно представить в виде дифференциального уравнения d2x _ . dx 2 _ —— + 2 • Л— + со х = 0; dt2 dt в котором, при пересечении кривой dt скачком меняется координата и скорость, что физически означает, что ос- циллятору в некоторые моменты времени сообщается дополнительный им- пульс Л dx р = X*,—-). dt Это уравнение можно трактовать как уравнение маятника реальных часов, в котором учтено затухание (Л^О). На фазовой плоскости (х — положение; Г I у = _ — скорость) такой маятник, в отличие от идеального, уже не будет dt совершать периодических колебаний, и, для того чтобы их поддерживать,! ему необходимо передавать дополнительную энергию. Предположим, что d v Ц постоянный импульс р сообщается в точках полуоси х = 0; г = — >(). С1 I Движение маятника начинается в точке г-0 при начальных условиях (х(0) = О.у(О) - уД. Решение исходного дифференциального уравнения име-| ег следующий вид: я И и Г2 ’е /?'sinQ/; ?“Л'( cos £2/ sin £20; -Л2; 6 = 2тгШ. •: I Я 1! ii д- = 0; у = — > 0, имея координату у = е ° dt виде у2 = следнее соотношение является у i д Я Заметим, что через время тизображающая точка придет на полуось Я Запишем уравнение скачка в i + р, где у2 — новые начальные условия у> = + р • По-| позволяет определить значение импульса обеспечивающее правильный ход часов, условием которого Q = № $ s Я а
Глава 2. От классических динамических систем к гибридным 51 На рис. 2.26 приведено описание системы в среде MVS, а на рис. 2.27 пред- ставлен фазовый портрет системы, со значением импульса р, большего, чем необходимо, для правильной работы часов. ci(x)/dt«y d( у у-ft » 2Л||“\'- йГйед&ЛА2А>: 8? В-Chart {Class Ч main] * qjalicns_1 $ :1г :1 -trui false: when and (y>»0) cueud I ocliors{ BK№' □пШ wnen (>:>=G) and (y<=0) guaid g ections { gzMalse; \ f -t-'ue.- Рис. 2.26. Уравнение маятника и карта состояний, позволяющая передавать маятнику дополнительную энергию в момент пересечения положительной вертикальной полуоси фазовой плоскости Рис. 2.27. Фазовый портрет маятника с затуханием, которому на каждом такте передается энергия большая, чем необходимо для поддержания колебаний с постоянным периодом
52 Практическое моделирование динамических систем .. Построение точечного отображения для чуть более сложной задачи об ос-| цилляторе, у которого меняется коэффициент трения /?, можно представить в такой форме: d2X _ . б/л 2 л I —— + 2 • Л, — + от а = 0; л < -1; dt2 dt d2x . , dx > „ . . ——~2hj— + б9'л-(); л>-1. dt2 2 dt Оно позволяет найти область в плоскости (ЛРЛ2), где существует предель-1 ный цикл. Па рис. 2.28 мы видим описание задачи, а на рис. 2.29 один из возможных] фазовых портретов, показывающих существование предельного цикла (внут- ренняя кривая), на который выходит система. Рис. 2.28. Карта поведения и уравнения каждого из состояний осциллятора, у которого периодически меняется и величина, и знак коэффициента затухания Обе приведенные задачи, в данном случае явным образом, а в общем — не-] I I I I -Йн I явным, задают некое дискретное отображение, которое можно рассматри-J вать как дискретную динамическую систему. Являясь классическими зада-
Глава 2. От классических динамических систем к гибридным 53 нами для исследователей динамических систем, они относятся к классу гиб- ридных. В первом случае периодически скачком меняется координата, а во втором существуют две области с различным описанием поведения. Рис. 2.29. Внутренняя кривая представляет собой предельный цикл сложного осциллятора, у которого периодически меняется правая часть Разностные уравнения в моделировании используются также при аппрокси- мации дифференциальных уравнений. Обычно разностные уравнения, воз- никшие в результате аппроксимации непрерывных динамических систем, вы- деляют в особый класс, т. к в этом случае возникает дополнительная задача воспроизведения нужных свойств исходной динамической системы. Построе- нием численных схем, удовлетворяющим заданным свойствам, занимается специальная дисциплина — численный анализ. В этой книге мы намеренно относимся к проблемам численного интегрирования систем обыкновенных дифференциальных уравнений как проблемам техническим, вспомогатель- ным. Считаем, что пользователь должен быть обеспечен разработчиком пакета всеми необходимыми средствами для построения численного решения и ему остается лишь выбирать нужный метод, а не конструировать его. Исходя из этого, мы не поддерживаем в нашей графической среде средства конструиро- вания численных алгоритмов, как это сделано в математических пакетах, на- пример в Matlab, в частности собственно сеточных функций. Конечные автоматы Как вы уже заметили, на многих рисунках присутствуют графы, узлы кото- рых связаны с непрерывным поведением, а дуги — с условиями смены по- ведения Исходным для такого способа описания послужили конечные ав-
54 Практическое моделирование динамических систем томаты, один из основных формализмов, используемых при изучении дис- кретных систем. Опираясь на событийное время, конечный автомат можно рассматривать как динамическую систему. Находясь в некотором состоянии, он восприни-1 мает очередной символ из последовательности входных символов (играю- щих роль временных отсчетов), мгновенно реагирует на него, формируя по-1 слсдовательность выходных символов, и меняет свое состояние. Таким обра- зом, как и в дифференциальном уравнении, в конечном автомате текущее состояние зависит и от предыстории, и от значения входного сигнала, что позволяет говорить о таких системах, как о системах "с памятью". Рассмотрим в качестве примера работу автомата, сортирующего телеграммы, * которые могут быть только на двух языках, — русском и английском. Поток телеграмм бесконечен, и, если передается русский текст, то он переправляется без изменений по одному адресу, если английский, по другому. У такого ав-1 томата входными сигналам являются буквы. Если автомат принимает русский текст (находится в состоянии "Русская телеграмма”), то приход новой русской буквы оставляет его в том же состоянии, а передача текста продолжается по адресу "Россия". Смена алфавита, приводит к смене адреса и состояния, в ко- тором английский текст воспринимается уже как признак сохранения состоя- ния ("Английская телеграмма"). В таком автомате можно следить за 'вре- менем" переключения из состояния "Русская телеграмма" в состояние ; "Английская телелрамма" и обратно, связывая "время" с приходом первой анг- лийской буквы в ряду русских, и первой русской в последовательности анг- :| лийских. Более того, можно измерять время работы в первом и втором со- стояниях длиной соответствующей символьной последовательности. В этой модели, конечно же, можно говорить о дискретном, целочисленном ' времени, имея в виду номер символа во входной последовательности, и то- гда мы получим обычное дискретное время. Выделяя в этом примере состояния (прием русской и английской теле-| грамм), входной алфавит (русский и английский), выходной алфавит, в дан-1: ном случае совпадающий со входным, граф, показывающий последователь- ность смены состояний и правила формирования выходного сообщения, придем к следующему определению конечного автомата. Конечным автоматом называется кортеж X = {AfQ,^fA), I Л в котором одно из состояний из множества Q помечается как начальное. При описании конечного автомата использованы следующие обозначения: А = {<7|,(ь} — входной алфавит; Q = {q\,q2,...,qn} — множество ] состояний; V = {v!,v2,...,vA.} — выходной алфавит; S.QkA-^Q — функция! переходов; л .: 2 х А -> К — функция выходов. I
Глава 2. От классических динамических систем к гибридным 55 Вернемся к задаче о разгрузке машин на складах, но теперь предположим, что время разгрузки товара прямо пропорционально количеству товара, ко- торый будет на складе оставлен. Пусть складов будет три, как показано на рис. 2.30. Количество товара на машине обозначим через Ас. В исходном состоянии на складах хранится а.1, А2, аз единиц данного товара, при мак- симально возможном количестве Amax=JC0. Рис. 2.30. Карта состояний, реализующая алгоритм разгрузки автомашин на складах. При въезде машины на склад определяется, сколько товара можно на нем осгавить, и какова будет длительность разгрузки. Предполагается, что обычно на складе остается хоть часть товара, и, следовательно, время разгрузки отлично от нуля. Два предельных случая: на машине нет товара и склад переполнен, приводят к нулевому времени разгрузки. Для городского диспетчера, следящего за разгрузкой товаров, это означает, что машина проезжает склад не останавливаясь. Предельные случаи не нарушают работу карты поведения, превращая се в классический конечный автомат При произвольных начальных условиях может реализоваться ситуация, ко- гда машина будет разгружаться па всех трех складах, например, при л±=эз, А2-97, А3~1, со временами разгрузки 2, 3. 5 единиц модельного времени. Но может случиться, что первые два склада будут заполнены, A1-100, А2=-100 и разгрузка произойдет только на третьем складе аз-о, т. е. машина мгновен- но минует два склада. В этом случае наша схема для первых двух состояний ведет себя как классический, только что описанный выше конечный авто- мат, мгновенно переходя из одного состояния в другое. 3 Зак 1261
1 56 Практическое моделирование динамических систем Системы "вход-выход-состояние" В ряде случаев возникает необходимость разделить фазовые переменные на группы, отражающие причинно-следственные отношения в изучаемой системе. Изолированная система. Равноправные фазовые координаты Предположим, что мы моделируем систему, не взаимодействующую с внешним миром, и наблюдаем за всеми ее фазовыми переменными, не вы- деляя специально ни одну из них. Рассмотрим модель, показывающую, как развивается популяция, которая состоит из двух видов животных, рующих за один и тот же вид корма |24]. Рассмотрим уравнения данности TVj и двух видов ко н кури- ДЛЯ ЧИС- dt 1 1 “ ' dN? ~~ ~ /<2 (А\ , ЛГ2 )^2 ’ di 1 4 где 4 А2 (*^1»2 ) ~ (Л? ” У 2 1 ’ ^2 )) переменные коэффициенты прироста популяции, зависящие от тельных постоянных коэффициентов прироста каждого вида вии, что пищи достаточно, и функции Г(^,ДГ2), равной количеству пищи, поедаемой обеими популяциями в единицу времени, с помощью которой учитывается уменьшение прироста, если пищи не хватает. Коэффициенты /. трактуются как коэффициенты "прожорливости". Предположим, что функция непрерывна и обладает такими свойствами. положи- $ при усло- lim F(0,;V2) = ос; lim F(JV|2,0) = 11 г Можно показать, что в сообществе, состоящем из двух видов, животные, ’ которых отношение -Д. меньше, со временем вымирают, а численность ос- тавшегося вида остается всегда ограниченной, т. е., в этой системе пет "входов" и "выходов". ::Я 1
Гпава 2. От классических динамических систем к гибридным 57 Нам важно здесь то, что оба вида в модели равноправны, система изолиро- вана, и сценарий ее развития при заданных значениях коэффициентов пол- ностью определяется только самой системой. Открытые системы. Входные воздействия Обратимся к модели популяции, описанной в главе /, и дополним его уравнением "управления интенсивностью охоты" А = А(л,0. В совокупной системе явно просматривается разделение переменных фазо- вого пространства на специфические группы. При фиксированных значени- ях параметров г, К, А — популяция живет по закону, определяемому только первым уравнением, что соответствует рассмотренной ранее изолированной системе. Если параметр А начинает меняться по указанному "внешнему" закону, который можно назвать законом регулирования численности, то система при каждом его изменении будет стремиться восстановить равнове- сие. Численность популяции начинает зависеть и от внешнего воздействия и от свойств самой системы. При исследовании систем, в которых имеются фазовые переменные различ- ных видов, принято делить их на "входные", "выходные" и "переменные со- стояния", а сами системы записывать в следующем виде: где л(/) — переменные состояния системы; х(г) входные воздействия, y(t) — выходные сигналы. Аналогично записываются и разностные уравне- ния для дискретных моделей: “71+1 — 1 -^11 du )> ) ft ~ и ’С; )• В линейном случае для систем обыкновенных дифференциальных уравне- ний мы получаем систему r/.v — - zl.v + fix; < dt [ y(t}~Cs+Dx.
58 Практическое моделирование динамических систем 1 Размерности матриц A,£,C,D, входящих в состав системы, выбираются из ел еду ю ш и х соображе 11 и й: □ А — (н х п) -матрица, где п — размерность вектора состояний; □ В — (лх /л)-матрица, где m — размерность входного вскгора; □ С — (г х и)-матрица, где г — размерность выходного вектора; О D — (г х т)-матрица. Различные формы представления динамических систем Как мы уже отмечали, классическую динамическую систему можно задавать различными способами, либо в виде систем дифференциальных уравнений, либо в виде явных формул решений этих систем, лишь бы заданные таким образом системы удовлетворяли нужным нам свойствам. Системы с непрерывным временем В практическом моделировании задача вынужденно ставится несколько ши-1 ре. поскольку обычно свойства изучаемой существующей или проектируе-д мой системы могут оказаться нам неизвестными, и даже написание, а. не то | что анализ уравнений, может вызывать затруднения. Более того, некоторые части системы могут быть описаны алгоритмически, и даже такие свойства, как непрерывность, ограниченность, удовлетворение условиям Липшица проверить на практике оказывается достаточно трудно. Мы будем различать следующие формы описания непрерывного поведения: □ Формулы вида z = z(t). □ Нелинейные алгебраические уравнения относительно переменных, явно , зависящих от времени G(z(f),O = 0. | О Дифференциальные уравнения в форме систем уравнений первого по- | dz i рядка — = /(z,/) с заданными начальными условиями, дифференциала S г// 5 ные уравнения в форме систем линейных алгебраических уравнений oi- I и 1 носительно первых производных вида А— dt /*(zj) и в общей форме di г Я
|;Глава 2. Ст классических динамических систем к гибридным 59 □ Алгебро-дифференциальные уравнения вида dz ~=F{z^l)- di 0 = G(z,ij) с согласованными начальными условиями. Если описание системы задано в форме алгебро-дифференциальных уравне- ний, будем считать, что решение алгебраических уравнений известно в на- чальной точке. Такие системы называются согласованными в начальной точке. Более того, будем во всех случаях предполагать, что на временном промежутке, где ищется решение, — оно единственное. Будем говорить, что мы имеем описание обобщенной динамической систе- мы, если се поведение задано любой совокупностью из вышеприведенных способов. Передаточные функции В теории управления систему "вход-выход-состояние" принято описывать с помощью дифференциалы того оператора F, связывающего "выход" у с 'входом" .у: .)’= Fx. Пустьх и у будут скалярами. Если оператор F линейный и не зависит от времени, то мы приходим к линейным стационарным системам. Для таких систем очень часто использу- ется описание, основанное на передаточной функции р/О АЧд) ПДд) = где соответствующие интегралы К(/>) = Х(р) = J r(t)c-'"А О о вычислены при нулевых начальных условиях. Передаточными функциями конечномерных линейных стационарных объек- тов являются дробно-рациональные функции комплексной переменной р: рп + апрп^ -г... 4 щ Таким образом, связь между входом и выходом задается формулой <Р" + "fiP“~' +-..4 +bINp'1'-14-...4-Л,).
60 Практическое моделирование динамических систем По передаточной функции можно легко восстановить вид дифференциалы-1 ного уравнения, описывающего поведение системы: dy" dy"-' , dxJ,‘ , dyt"-' , <Z/" " dt"' dt"' dt"-' ' что и позволяет использовать их для описания динамических систем. Существуют области, где динамические системы в основном описываются в 1 виде передаточных функций. В некоторых пакетах моделирования язык пе- редаточных функций также используется для описания поведения систем, несмотря на то, что описание сколько-нибудь сложной системы на языке| передаточных функций выглядит достаточно громоздким и трудно читаемо. Г ибридные автоматы Теперь можно перейти к построению гибридного автомата. Используемый для этого формализм должен содержать средства для описания непрерывного по- ведения и механизм смены состояний. Как, наверное, уже ясно из предыду-1 шего изложения, мы предлагаем объединить язык дифференциальных уравне-| ний и язык конечных автоматов в единый формализм, позволяющий описать смену поведения в различных областях фазового пространства. Из рассмотренных в начале главы примеров следует, что можно различать | три ’’типа" гибридных систем: О сохраняющих единое описание во всем пространстве и меняющих только) начальные условия при переходе из области в область; □ меняющих значения параметров в правых частях уравнений в зависимо- сти от наступления событий; □ меняющих правые части и число уравнений в момент, когда происходит! смена поведения. Смена начальных условий | Простейшим примером гибридной системы с единым во всем пространстве описанием может служить система линейных дифференциальных уравнений с постоянной матрицей. Воспользуемся тем, что у динамических систем все фа- зовое пространство разбивается на ячейки, обладающие следующим свойст- вом: если решение начинается в одной из ячеек, то уже никогда ее не покида- ет. Эго хорошо видно на примере линейной системы второго порядка с диагональной матрицей, у которой собственные числа вещественны и имеют различные знаки. В этом случае каждый квадрант фазовой плоскости пред- ставляет собой такую ячейку. Свяжем состояния гибридной системы с ячей- ками фазового пространства. Зная их границы, можно поступить следующим
61 Глава 2. От классических динамических систем к гибридным Кг Ц образом Выберем начальные условия в одной из них. Зафиксируем время I или кривую внутри ячейки, по достижении которых остановим решение, и выберем новые начальные условия, но уже в другой ячейке. Повторяя этот процесс по некоторым, заранее определенным правилам, мы получим по- следовательность решений динамической системы, соответствующую реше- нию следующей гибридной. У построенной гибридной системы будет столь- ко состояний, сколько ячеек мы будем последовательно обходить, а система уравнений для каждого состояния будет одной и той же Условием перехода из состояния в состояние будет либо заданное время, либо достижение не- |ких граничных значений, а мгновенными действиями — смена начальных условий по алгоритму, зависящему от конкретной ячейки. № ' Ей Пример линейной системы с особой точкой типа "седло" В качестве первого примера выберем линейную систему на плоскости 9?2 с особой точкой типа ''седло11: г dx dt '2„ -a<x} <a\ -b < x2 b\ a J) > 0 и соответствующими подобластями: 1 => Л ] > 0 ; 2 => л, < 0; 3 х, < 0; 4 => .Xj > 0; Л'2 > 0; х2 < 0; а2 > 0; а2 <0. В начальный момент времени система начинает движение в первой области с начальными условиями v = [а'10,/?]Г, а далее обходит подобласти по правилу меняя начальные условия 1-> 2 : х0 = [-.v2,-Z>]r; 2->3:л0 = [x2,i>]r; 3-»4:л0=[х2,-6]г; 4I: л0 = [-x2,Z>]7, где х, — значение второй компоненты вектора л , при переходе границы. Время г1' нахождения системы в конкретной подобласти при выбранной сис- теме координат определяется только начальным значением первой компонен-
62 Практическое моделирование динамических систем ты вектора решения и равно при достижении новой Л'2(/*) = ехр(--Л2 t*)b. . 1 , a Г1 ~—1П---------. при этом вторая компонента, Л л, (0) границы в момент Г* будет равна Т — время об Эта простая система уже может демонстрировать достаточно сложное пове- дение. В зависимости от значений параметров хода подобластей 1 —> 2 —> 3 —> 4 может стремиться либо к бесконечности^ либо к нулю. Вырождение системы в чисто дискретную происходит при Т = 0 (движение по углам прямоугольника, ограничивающего область зада- ния гибридной системы). Циклическое движение возможно, если (0) | удовлетворяет уравнен и ю Л a аЧО), Очевидно, что при квадратной области и равных по модулю собственных числах любое начальное значение удовлетворяет этому уравнению, рис. 2.31 показаны пример фазового портрета рассмотренной системы и висимость компонентов решения от времени. На за- Рис. 2.31. Фазовый портрет и решение простейшей гибридной системы, в основе которой лежит система линейных дифференциальных уравнений второго порядка с особой точкой типа "седло". На левом рисунке хорошо видны ячейки, совпадающие с квадрантами фазовой плоскости. Движение внутри каждой ячейки начинается со своих начальных услозий и заканчивается, когда изображающая точка достигает заданных границ. Решения как функции времени для первой и второй координаты приведены на правом рисунке
di v Гпава 2. От классических динамических систем к гибридным 63 Пример системы с особой точкой типа устойчивый "фокус ° В качестве второго примера выберем линейную систему на плоскости W2 с осо- бой точкой типа устойчивый "фокус": v > 0; новые начальные усло- выборе параметров v-2Av/r; r-e~k' R\ kv,kr>§ можно обеспечить периодичность решения. На рис. 2.32 показана фазовая траектория системы при одном из возможных выборов параметров. При достижении точки ||л|| = г вектору присваиваются вия При специальном Рис. 2.32. Фазовая траектория гибридной системы, основанной на системе линейных дифференциальных уравнений второго порядка с устойчивой точкой типа "фокус" при одном из возможных наборов параметров, обеспечивающих периодичность решения Зависимость от параметров Рассмотрим электрическую цепь (рис. 2.33), у которой в зависимости от по- ложения ключа может меняться значение сопротивления.
64 Практическое моделирование динамических систем 1 Рис. 2.33. Электрическая цепь, в которой за счет переключения сопротивлений можно обеспечить изменение характера колебаний I I Поведение этой цепи описывается уравнением L— + iR * + — f idr = Е dt С 0 и, если R* меняется периодически R * (г) - R * (I + Т), например, пусть R* = \ 1 lA t е [0,1); t е [1,2], то мы обеспечим периодическую смену характера поведения. Преобразуем уравнение в систему: L—+/Я*+и = В; dt Д| 1 г Л/ = — idtc CJ о du _ 1 . |] . dt ~ С1 | и дополним новым дифференциальным уравнением: di L du 1 . — = —i\ dt С dR* -----= 0; / = 0; R* = R. ; t = 1; R* = R^... I dt 1 2
Глава 2. От классических динамических систем к гибридным 65 Последняя система будет эквивалентна предыдущей, если рассматривать ее как набор систем, у которых периодически меняются начальные условия последнего уравнения в точках t= 1,2,3. В этих точках координаты /, и — "склеиваются", образуя непрерывные функции, а меняется скачком, в результате чего появляется кусочно-непрерывная функция. Это общий при- ем, позволяющий говорить о таких системах, как о системах с неизменной правой частью и меняющимися только начальными условиями. Действи- тельно, любую систему дифференциальных уравнений с кусочно-постоян- ным параметром Р di С| в области J p с2 в области У2 можно записать в виде ^ = 0 di dt {Р(0) = с, в области : Р(0) = с2 в области 1 Л. Изменение правой части Изменение правой части дифференциальных уравнений возникает во мно- гих практических задачах. В механических системах это часто связано с за- коном изменения возмущающей силы. Примером могут служить колебания маятника, подверженного воздействию различных периодических функций: d2x dx ... Л di2 di [ Z)| sin(/) при 0<л <я; /(.x)-i I - Zhcos(O при -ж л‘ < 0. В данном случае формально можно ввести новые коэффициенты к} и к2, меняющиеся скачком в соответствующих областях d2x dx . . .. ч .. ~7— + + /<|/1(л')+ k2f2(x) = 0; di «I f(x) = Z>]Sin(/) A,=l, /<2=0, при 0<л </т; fi (> ) = -/>2COS(Z) k\ - 0, k2 = L при - тг < x < 0
66 Практическое моделирование динамических систем и перейти к новой системе: d А dX I J' / , I г . \ —г + л— + /<1./| (а) т А'2./2 <л’) = °’ ^- = 0: di 11 dk2 di у которой в точках ( - +кл, k - 0,I,2,3... меняются только начальные условия. Еще одним примером может служить система линейных дифференциальных^ уравнений, у которой в разных областях меняется вся матрица системы це-| ликом. В первом квадранте плоскости, в области 0 < х, < a; 0 < ,т, < п: a > 0 выделим три подобласти: ’ 3 2 ' 'I — ’2 — J поведения: положим a - г3. Первой и третьей подобласти припишем! di dx di 21 Лц,Л]2 а второй di Л I' чтобы система имела особые точки Векторы выберем так, (2«,2с/);((г1 +г2)/2,(Г] + г2)/2) и (л,а). Значения г{ и г3 можно выбрать произ^ вольными, а значение /ч положим равным г2 = /, + 2?, с относительно малым а. При пересечении любой границы, с гем, чтобы удобнее было наблюдать за сменой поведения, будем также выбирать новые начальные условия по правилу x{i+) = [х'2 (Г ),Х| (Г )]г. И здесь, используя тот же прием, можно построить единую систему, коэф- фициенты которой оказываются кусочно-постоянными функциями, а по- и з; 0 о 22 J - к 3 я
Глава 2. От классических динамических систем к гибридным 67 следи юю, в свою очередь, привести к системе с дополнительными уравне- ниями, у которых меняются только начальные условия. Карты состояний и гибридные автоматы Для описания поведения, форма записи которого сохраняется неизменной во всей области фазового пространства, а меняются только коэффициенты, представляющие собой кусочно-постоянные функции, прекрасно подходит формализм Харела [41], называемый картами состояний (statechan). Рассмотрим динамическую систему — =/(л). л е/Л D -L>. UP, dt с правой частью, представимой в форме /(л ) = А[/| (а) + /<2./2(л); Так как коэффициенты £,(х) и £,(л) кусочно-постоянные функции, то их можно представить с помощью конечного автомата. У этого автомата два состояния: D\ и выходные символы {k\~ 1, к2—0} для состояния D\ и {£|=0, £э=1} для состояния /X, а входными символами являются два сигна- ла, говорящие о достижении границы областей Ц иО2- Состояние по- мечено как начальное. Автомат, изображенный на рисунке (рис. 2.34), несколько отличается от классического конечного автомата. Он анализирует поступающие на него значения переменной л, входного сигнала, и меняет свое текущее состоя- ние только если выполняются условия, приписанные дугам. Если каждому
68 Практическое моделирование динамических систем состоянию поставить в соответствие различные значения некоторой пере- г менной, то они будут меняться скачком в момент смены состояния. Такие | автоматы называются картами состояний и предназначены для дискретного | изменения коэффициентов. В совокупности с приведенным дифферент!- альным уравнением карта состояний дает полное описание непрерывно- g дискретной или гибридной системы. Можно сказать, что карта состояний управляет значением коэффициентов правой части дифференциального 1 уравнения и меняет характер непрерывного поведения. h Рассмотрим более сложную функцию у - /(х), изображенную на рис. 2.35 и |« называемую петлей гистерезиса. Рис. 2.35. Многозначная функция, называемая петлей гистерезиса. Ее вертикальные участки соответствуют разрывам первого рода, а на горизонтальных участках (а—Ь) и (с—d) существует два значения функции для каждого значения аргумента Особенность этой функции заключается в том, что она не является одно-; значной. Однако ее легко превратить в таковую, если учитывать предысто-Й рию обращения. Так, если новое значение аргумента оказалось на участке неоднозначности, а предыдущее значение функции было отрицательным, то реализуется одно поведение (участкок а—Ь), а если положительным — дру-| гое (участок с—d). Символически на рисунке это обозначено стрелками, указывающими направления обхода участка неоднозначности. Рассмотрим карту (рис. 2.36), имеющую два состояния, соответствующие положитель-1 ним и отрицательным значениям функции р и к и состояние start, реали- зующее функцию в соответствии с выбранным направлением обхода. Будем последовательно подавать на нее значения аргумента х. Пусть переменная q принимает два значения q\ и ф, соответствующие отрицательному и поло- жительному значениям функции q - {01,02} 11 нулевое значение, если на] вход карты поступает первое значение аргумента. Таким образом, можно отождествлять переменную х с поведением динамической системы, зави- сящей от параметров q. В формализме Харела или карте состояний дискретной переменной при- нимающей множество различных значений ставится в соответствие множество Q — {<2| ,<2и} узлов графа, называемых состояниями, одно из ко-1
Глава 2. От классических динамических систем к гибридным 69 W вторых помечается как начальное. Узлы графа соединяются дугами I показывающими, в какое новое состояние может перейти карта, при насту- плении заданных событий. События описываются с помощью предикатов |;над множеством переменных А={х'|,л'т}, истинностные значения которых трактуются как условия срабатывания переходов. Предикаты называются условиями смены состояния. Если Л={л'|,А'1Г} непрерывные переменные, описывающие поведение динамической системы, зависящей от параметра |то предикаты выделяют особые события в се фазовом пространстве. Карта I состояний функционирует в непрерывном времени, и по существу стано- j вится элементом описания динамической системы. Рис. 2.36. Использование карты состояний для представления однозначной функции, соответствующей петле гистерезиса | Для удобства описания сложных законов поведения вводятся два дополни- тельных механизма: механизм создания иерархических карт состояний и параллельное функционирование нескольких состояний. Вложенность (рис. 2.37) подразумевает рекурсивный способ описания карт состояний, позволяющий считать, что каждый узел графа в свою очередь мо- гжет быть представлен картой состояний. Такой узел называется гиперузлом. Переход в гиперузел трактуется как переход в начальный узел вложенной кар- ты состояний. Собственные переходы вложенной карты состояний при про- граммной реализации автоматически дополняются переходами между гипе- рузлами, обеспечивающими проверку условий переходов между ними. На рис. 2.37 изображен гиперузел Л с начальным состоянием В, в свою оче- редь являющийся гиперузлом с начальным состоянием D, и простой узел С. Так как состояния здесь меняются последовательно друг за другом, то такой гиперузел назовем последовательным.
70 Практическое моделирование динамических систем Рис. 2.37. Карта состояний с последовательными состояниями тй хД /за О , j Второй механизм предоставляет возможность находиться одновременно в нескольких невзаимосвязанных, "параллельных" состояниях, что изобража- ется с помощью разделения прямоугольника, изображающего состояние, па несколько полей пунктирными линиями (рис. 2.38). Это позволяет одно- временно управлять независимыми различными процессами. Я:: g|:. № В Рис. 2.38. Карта состояний с параллельными состояниями к: о . Jo Г Па рис. 2.38 изображен гиперузел А с двумя параллельными процессами. Такие гиперузлы будем называть параллельными. п к Переходя к нужному нам формализму, описывающему множество последо- вательных различных поведений, мы видим, что нам понадобятся: □ ориентированный граф с двумя типами узлов — простыми узлами и ги-1 перузлами, часть из которых помечена как начальные; Eh ЕШ Е □ множество дискретных переменных с заданными значениями, приписы- ваемых узлам графа; □ множество непрерывных переменных, описывающих непрерывное пове- дение; П множество предикатов над множеством непрерывных переменных для * определения условия перехода к новому текущему локальному поведе- | нию, приписываемых дугам;
Глава 2. От классических динамических систем к гибридным □ множество алгоритмов, приписываемых лугам для инициализации пове- дения при переходе в новое состояние. Начнем со случая, когда граф не содержит гиперузлов. Рассмотрим конеч- ное множество переменных Sc, являющихся аргументами или значениями как минимум непрерывных, а возможно и более гладких функций. Эти пе- ременные назовем непрерывными. Дополнительно выделим в отдельное множество SD — конечное множество дискретных переменных, которые могут принимать только дискретные значения. В совокупности эти пере- менные образуют фазовый вектор 5 = . Обозначим через Л: TxS->Sc функцию от непрерывных и дискретных переменных принадле- жащих 5, через Alg множество алгоритмов Alg = {alg} >...adgk } и через Pred — множество предикатов Pred = {pi\„..,prm} . Под алгоритмом Р, будем понимать отображение alg, .S -> S’, которое реали- зуется ’’мгновенно" и трактуется как действия, необходимые для подготовки нового локального поведения. При этом после завершения работы алгорит- ма все дискретные переменные сохраняют свое новое значение на протяже- нии всего нового текущего локального поведения. Под локальным поведе- нием будем понимать отображение ГА Т х S —> 5е на промежутке где ij — время перехода в очередное текущее состояние, с заданными началь- ными условиями. Как обычно, предикат — это отображение /?/; Т х S —> [false, true) Определение Гибридным автоматом Hsc ~ {S,SC,QQ,P\PredtAlg} (обобщенной картой со- стояний) над множеством переменных 5 = {Sf,SD}, называется граф SC~{Q,E} с множеством узлов (состояний) Q - {ср, и множеством ориентированных дуг £ = {(^,^), цу = 1,и}, и функция F: Т х S S(, опре- деляющая характер изменения непрерывных переменных во времени, в зависи- мости от значения дискретных переменных. Узлы графа могут быть простыми и параллельными или последовательными гиперузлами Каждому узлу графа по- ставлена в соответствие совокупность дискретных переменных, принимающих постоянное значение в данном состоянии, а каждой дуге— пара, состоящая из предиката и алгоритма {pr^alg^Э, / - l./<; j = . Множество ^определяет множество начальных состояний. Отсутствие предиката на дуге трактуется как отображение со значением true для любых значений переменных, а отсутствие алгоритма, как отобра- жение, нс меняющее значение переменных. Подразумевается, что существу-
72 Практическое моделирование динамических систем ет механизм продвижения непрерывного времени г, обеспечивающий изме- | некие непрерывных переменных. Приведенное определение соответствует автомату подсистемы StateFlow, используемому для описания гибридных систем в пакете Simulink. Формализм, основанный на картах состояний, предполагает сведение сово- купного непрерывного поведения к достаточно сложному описанию ото- бражения F, зависящего от кусочно-постоянных коэффициентов. Это не всегда удобно с практической точки зрения. Рассмотрим функцию, изображенную на рис. 2.39. Это та же петля гистере- зиса, но теперь вместо разрывов появляются линейные участки. Если ис- пользовать предыдущее описание, то придется ввести дополнительные ко- эффициенты, что, даже в этом простом случае, сделает его достаточно громоздким. Попробуем чуточку иначе трактовать понятие состояния и не- изменности поведения. Ранее в каждом локальном состоянии сохранялись значения коэффициентов при неизменной форме описания непрерывного поведения. У нас же теперь четыре "постоянных" формы описания поведе- ния функции — на двух участках функция постоянна, но принимает значе- ния различных знаков СГ.j' ~-a и С2:у = д (предыдущий вариант), а на двух других— это различные линейные функции L1:у = r/1-л + vl и L2 : >’ = dl х + у 2 , и эта "постоянность" связана не со всем графом, а с от- дельными узлами. Рис. 2.39. Петля гистерезиса, у которой разрывы первого рода заменены линейными участками Пусть переменная х непрерывно меняется от —100 до 100, а затем в "обратном направлении" от 100 до -100. В этом случае (рис. 2.39) мы снача- ла окажемся в состоянии О, затем последовательно перейдем в LI, С2, L2 и вновь вернемся в С1. Откажемся от единого описания непрерывного по- ведения и разрешим использовать различные описания в каждом узле (рис. 2.40).
| Глава 2. От классических динамических систем к гибридным 73 Будем теперь трактовать непрерывное поведение как множество отображе- ний F = (Лгм//,/|, fj'. TxS->Sc, i = l,p. Специальная функция Null соответствует отображению, не меняющему ни одной их переменной, и по- зволяет моделировать карты состояний. Определение Гибридным автоматом Н 1ч - {S^SC^.F^Pred^Alg} (картой поведения) над множеством переменных 5' = {Sl ,Sl)}, называется граф SC = {Q,E} с множест- вом узлов (состояний) Q - и множеством ориентированных дуг Е = {(qitq j = !,«}, каждому узлу которого поставлена в соответствие одна из функций /f: 7’х5 —> 5е, а каждой дуге — пара (pr^algj), i ~ 1, /<; j = 1,/n , со- стоящая из предиката и алгоритма. Каждый узел может быть либо простым уз- лом, либо последовательным гиперузлом. Множество (^определяет множест- во начальных состояний. Рис. 2.40. Карта поведения для петли гистерезиса с линейными участками На наш взгляд последнее определение, позволяющее связывать с узлом опи- сание локального поведения, более наглядно и удобно с практической точки зрения, в то время как предыдущее более привлекательно с точки зрения теории. Помимо уже упомянутого отличия, связанного с изменением формы описания непрерывного поведения, есть еще одно очень важное изменение — гиперузлы не могут быть параллельными. Это означает, что так определен-
74 Практическое моделирование динамических систем лая карга поведения предназначена только для последовательных действий Параллельные действия можно реализовать, только используя несколько карт поведения одновременно. Мы считаем, что проектирование и анализ нескольких последовательных карт поведения проще исследования одной карты с последовательными и параллельными гиперузлами К этому вопросу мы вернемся в главе 3, обсуждая различные подходы к декомпозиции иссле- дуемой системы па подсистемы и конструированию новых систем из уже существующих блоков. Будем называть гибридный автомат, заданный в форме карты повеления, термнннрованным, если в каждый момент непрерывною времени падугах, исхо- дящих из текущего состояния, может стать истинным только один предикат. Во всех рассмотренных ниже примерах карты поведения детерминированы. Типы гибридного поведения Характеризовать поведение гибридного автомата можно последовательно- стью нар Кц ~ iCRo-й)’•-->([/iЛ+i . в которых фиксируются текущие состояния Sr &Q и — времена пре- бывания в них. Из определения карты поведения следует, что возможен мгно- венный переход в новое состояние. Это происходит, если предикат, определяющий условия выхода из узла, оказывается истинным уже для на- чальных значений переменных. Такая ситуация может повторяться неодно- кратно При этом в точке /. = /.+1 непрерывное время "останавливается" и ка- ждый новый текущий узел "присваивает" фазовым переменным новые значения, нс "продвишя" вперед время. Точка на оси времени, соответствую- щая неоднозначности фазовых переменных, называется временной щелью Последовательность только временных интервалов Ъ/ = ШоЛ]’---,!// Ли в которой возможно равенство Z. = Г/+] для некоторых интервалов, будем называть гибридным временем. Перепишем ее в виде Тц ^{г0,гнг2,...,г,г. / = В этой последовательности возможны три типа интервалов: с конечной, ну- левой и бесконечной длительностью: 0-i , г и ij^[ г,=^о. 'i+i =
Глава 2. От классических динамических систем к гибридным 75 Появление последнего, бесконечного интервала обусловлено тем, что клас- сическая динамическая система является частным случаем гибридного авто- мата. Рассмотрим различные типы поведения гибридных систем. Гибридная система называется нигде нс останавливающейся системой, если ее поведение представлено последовательностью пар ), у которой все временные интервалы [г.,/(т1] конечны. Гибридная система называется системой с притягивающим состоянием, ес- ли ее поведение характеризуется конечным множеством пар ), /-0,1,2..ди, и у последней пары временной интервал [/ (1.оо) бес- конечен. Примером могут служить простейшие гибридные системы, основанные на линейных дифференциальных уравнениях. Рассмотрим систему линейных дифференциальных уравнений второго порядка л(0) = а:о; а'= [а, ,а'2]7 ; Л = at f/ll П12 a21 a11 В зависимости от значений коэффициентов матрицы А эта система может демонстрировать различное поведение. Рассмотрим только шесть из десяти возможных типов поведения, определяемых типом особых точек: "седло", устойчивый и неустойчивый '’узел", устойчивый и неустойчивый "фокус" и 'центр". На плоскости (5p(A),det(A)), где Sp(A) = + а22 — след матрицы, a det(A) = (7j- п12н2[ •— ее определитель, существуют непересекающиеся области, образованные координатными осями и кривой Sp2(A) -4det(</) - О, в которых наблюдается только один тин поведения (рис. 2.41) Рис. 2.41. Расположение областей с различными кипами особых точек: I — седло, II — неустойчивый "узел", III — неустойчивый "фокус”, IV— "центр", V — устойчивый "фокус", VI — устойчивый "узел" В гибридной системе, которую мы хотим построить, свяжем состояния с областями, где классическая динамическая система демонстрирует различ-
76 Практическое моделирование динамических систем ное поведение, и поставим своей целью циклически обходить все области, пребывая в них конечное время. Таким образом, мы построим нигде не ос- танавливающуюся гибридную систему. Будет ли система пребывать в какой- либо области конечное или бесконечное время, зависит от предикатов, оп- ределяющих условия смены состояний, поэтому можно просто ограничить время пребывания в каждой области заданной величиной. Более интерес- ным является случай, когда предикаты зависят от координат решения, и тогда этот пример можно превратить в тестовую задачу, т. к. решение можно вычислить аналитически. Например, если обходить все области, за исклю- чением IV, и в областях, где норма решения возрастает, в качестве предика- та выбирать ||х(г)|| > с, при условии ||х(0)|| < с,, а в областях, где норма умень- шается, ||х(г)|| < с2, при условии ||л'(0)|| > с2, то получим нигде не оста- навливающуюся систему. Для построения примера гибридной системы будем формировать последова- тельность Tk,k = 0.1,2... по правилу Tk=Tk_]+f- 16 и с ее помощью вычислять в каждой области коэффициенты матриц Sp(A) = sin(7}.); det(/l) - cos(7’A.); = a22 ~ ' £ 7 ’ rt2l = 1* = cos(^)_flfH^22- Если положить параметр А отличным от нуля, то получим нигде не оста- навливающуюся систему (рис. 2.42). Но, если выбрать с) =0, то мы однажды попадем в область IV и, при выбранных нами предикатах, никогда ее не по- кинем (см. рис. 2.43). Оба типа систем можно считать "правильными" гибридными системами, т. к. объекты с такими свойствами можно наблюдать на практике. Перейдем к рассмотрению не встречающихся в реальных объектах поведений. Наша модель гибридного автомата предполагает, что с каждым состоянием связано некоторое длительное действие, но позволяет и мгновенно покидать его, если предикаты на дугах при данных начальных условиях оказались ис- тинными. Однако, если таких мгновенных смен состояния бесконечно много, J то гибридная система демонстрирует "неправильное", не наблюдаемое на практике поведение. Этот эффект наблюдается в случае, если в фафе карты поведения существуют замкнутые пути, состоящие из дуг с предикатами, принимающими значение true при начальных значениях переменных того состояния, из которого они исходят. Непрерывное модельное время останав- ливается и гибридная система "зацикливается". Если в предыдущем примере с предикатами |л(/)||>с( и правилами выбора начальных условий ||x(0)||<ct (||х(/)|| < с2 и ||х(0)|| > с2) изменить выбор начальных условий в областях с точ-
Глава 2. От классических динамических систем к гибридным 77 кой "седло", неустойчивые "узел" и "фокус" ||.г(0)|| = с,, то гибридная система будет мгновенно покидать все области с нсусюичивыми решениями. Зацик- ливающаяся система получится в случае, если во всех областях изменить спо- соб выбора новых начальных условий ||л'(0)|| = и ||.г(0)|| = с2 - Рис. 2.42. Фазовая траектория нигде не останавливающей гибридной системы. Хорошо видно, как меняется характер поведения в зависимости от типа особой точки. Параметр 3 отличен от нуля Рис. 2.43. Фазовая траектория гибридной системы с притягивающим состоянием. Параметр (5 равен нулю. Посетив области с особыми точками типа ’’седло", неустойчивые “узел" и "фокус", система "навсегда” остается в области с точкой "центр". Слово ’’навсегда" взято в кавычки потому, что не всякий численный метод может правильно воспроизводить движение систем с чисто комплексными собственными числами
78 Практическое моделирование динамических систем Другим примером нереализуемого на практике поведения является гибрид- ный автомат Зенона, названный так в честь древнегреческого философа, известного своими парадоксальными примерами о движении и времени. Напомним один из его парадоксов. Представим себе Ахилла, догоняющего черепаху. Мысленно зафиксируем положение Ахилла и черепахи в началь- ный момент времени и вычислим расстояние между ними. Пустим часы и дадим Ахиллу возможность сделать шаг, равный исходному расстоянию.! Пока он делает этот шаг, черепаха также переместится чуть дальше и Ахилл снова окажется в роли догоняющего. Рассуждая таким образом, получаем, что Ахилл никогда не догонит черепаху, хотя расстояние между ними будет ] с каждым новым шагом уменьшаться. Пример такого поведения лает уже гибридная система, основанная на лн-Ц нейных уравнениях первого порядка г/.х , b ~ = -л- 4- /?; а (0) = л'о < с < 77; dx b | - = х + Л; а-(О) = хо<г<^ । решения которых ищутся на промежутке ге[0д*]; гае /* — корень уравне-J ния а(/*)-с = 0. В качестве примера рассмотрим карту поведения с двумя состояниями, каж-| дому из которых приписано одно из приведенных уравнений. Пусть в каж- дом состоянии выбираются одинаковые начальные условия, и состояния последовательно сменяют друг друга при выполнении условия л(/*)-с = 0.Я Одна из возможных траекторий такой системы приведена на рис. 2.44. Вре- мя пребывания в областях с экспоненциальным ростом и убыванием ре-1 шения легко вычислить из уравнения -с = 0. Теперь изменим правила выбора начальных условий при очередной (Аг -той) 'И смене состояния, так чтобы времена пребывания в областях стремились к нулю: Рис. 2.45, 2.46 и 2.47 иллюстрируют характер изменения поведения системы I .. с ростом показателя степенной зависимости и демонстрируют, как останав- ливается "непрерывное время" для второго и третьего случая.
Гпава 2. От классических динамических систем к гибридным 79 Рис. 2.44. Поведение исходной гибридной системы. Начальные условия в любом состоянии одни и ге же Рис. 2.45. Начинаем уменьшать время пребывания в каждой области. Показатель степени равен единице. Ступенчатая функция показывает суммарное время пребывания во всех областях ["Поведение Зенона" обычно связывают с существованием у последователь- ности Ти ~ / = 0,1,2.... конечного предела суммы s(TIf ) = lim^r(. Приведем пример системы, для которой этот предел можно i вычислить явно (этот пример заимствован из лекций по гибридным систе- мам, которые можно найти на сайте http://robotic.eecs.berkley .edu/~lygcros/rreaching/ee291 E.html).
80 Практическое моделирование динамических систем Рис. 2.46. Показатель степени равен двум. Решение стремится к "устойчивому решению" Л' * (/) ~ 10, непрерывное время "останавливается” Рис. 2.47. Показатель степени равен трем. Непрерывное время останавливается еще раньше Рассмотрим два бака одинаковых размеров с выходными трубами, в которых уровень воды понижается со скоростью у, и г2 соответственно (рис. 2.48). Для каждого бака существует свой предельный уровень воды и г2, при достижении которого следует начинать доливать воду. Кран для доливки воды один, и если из него вода поступает в любой бак с закрытой выходной
[лава 2. От классических динамических систем к гибридным 81 трубой, то уровень воды в нем увеличивается со скоростью it . Предполо- жим, что мы начинаем доливать воду в момент, когда вода в первом бакс достигла критического уровня, а во втором еще его превышает. Доливка во- ды в первый бак будет продолжаться (max{vI,v2} < w) до тех пор, пока уро- вень воды во втором бакс не достигнет критического уровня, после чего начнется пополнение второго бака. Рис. 2.48. Пример системы, демонстрирующей "поведение Зенона" Н"" Гибридный автомат будет иметь два состояния q},q2 с уравнениями и пре- дикатами: dx\ (1х-у ----— - IT dt ПОЛОЖИМ Tj = О л*! = 0; х2 = Л > 0 . tfii x2<i dxx dxj ~dT~~V[> и r2-0. Начальным будем считать состояние, когда Пусть дополнительно скорости выбраны так, что удовле- творяются неравенства max{v1,v21 < lv < vi + v2 • Вычислим интересующий нас предел. При первом переключении будет иметь место Г0=();Г|=—; X1(r]) = (H,_Vl)_; д2(Г1)=0. V2 V2 При втором г2 = И + (И’ -1’|)---------; Х| (г2) = 0; х2 (г2) = (и1 - V’,)(уг - г2)---------------. ’lv2 'jv2
82 Практическое моделирование динамических систем Окончательно имеем /=о h v, + г2 - 1Т Рис. 2.49. Так выглядит "поведение Зенона" в численном эксперименте. На графике хорошо видно, как струя воды "мечется" между баками, и с каждым разом порция доливаемой воды уменьшается Графики изменения уровней воды х! и х2 в первом и втором баках при зна- чениях параметров h = 4; iv = 2ф: V] = 2; v2 = 1 приведены на рис. 2.49. С "поведением Зенона" тесно связано явление скольжения. Построим гибрид- ный автомате двумя состояниями |3] с уравнениями и предикатами:
Ё Глава 2. От классических динамических систем к гибридным 83 представляющий модель следящей системы с коэффициентом усиления Л\ и обеспечивающий асимптотическую устойчивость нулевого решения при условии л>0, произвольном Ь и параметре А, удовлетворяющем двум не- равенствам А2 - a А = b < К: 0<Л< + - + . -—Ь уК. 2 V 4 Если построить фазовый портрет динамической системы, соответствующей данному гибридному автомату, с разрывной правой частью, то выяснится, что в какой бы начальной точке не находилась система, ее фазовая траекто- | рия через конечное время окажется на прямой Ах + у - 0. Фазовые траек- 1 тории, "втыкающиеся" в одну и ту же точку этой прямой с разных сторон, будут направлены навстречу друг другу, и под таким углом, что системе ни- чего не останется, как двигаться вдоль этой прямой к началу координат. Ут- | верждается, что при этих условиях уравнением прямой! скольжения будет -~-Ах. Построенная для данной динамической системы функция Ляпу- d! нова у = (Ь + к)2х2 -ь у2 будет иметь различную производную, взятую в силу' решения, в различных областях фазового пространства — = -2av2 и dt d\> , — = -2лу" + 4 Югу > но всюду будет нс положительной, что также нодтвер- dt г ждаст асимптотическую устойчивость нулевого решения. ' Попробуем построить решение для этой гибридной системы с релейным К управлением (рис. 2.50). Мы видим, что фазовая траектория действительно f; доходит до прямой скольжения, по самого скольжения мы не наблюдаем. Для объяснения этого явления построим более сложный автомат (рис. 2.51). || У нового автомата четыре состояния вместо двух исходных, и два различных предиката. С помощью этого автомата можно построить более реалистич- ную модель системы управления, учитывающую ошибки определения линии переключения А^А, и задержки управляющего сигнала ерх0. На рис 2.52 показано, что происходит с системой, если а на рис. 2.53, г если еря Ф 0 и Д Аг Анализируя все три кривые, можно сделать вывод, что гибридные системы с поверхностями скольжения следует отнести к "ошибочным". В таких систе- мах непрерывное время также останавливается, как и в автоматах Зенона, но уже по другой причине.
84 Практическое моделирование динамических систем Рис. 2.50. Предсказываемый теорией, но не наблюдаемый при численном моделировании режим скольжения. В момент, помеченный '’крестиком", движение системы практически замирает Рис. 2.51. Карта поведения модели релейной системы управления с учетом погрешностей, возникающих при определении условий переключения и задержек управляющего сигнала В заключение рассмотрим примеры построения гибридного автомата для очень простой нигде не останавливающейся системы и системы с притяги- вающим состоянием. Я Система с притягивающим состоянием Расположим на положительной полупрямой а в точках л, и х2 две точеч- ные массы, частицы ?н1 и ш2(ш2 > Ш]) так, чтобы частица с меныпей массой оказалась бы ближе к началу координат х. < л2 (рис. 2.54).
Гпава 2. От классических динамических систем к гибридным 85 Рис. 2.52. Появление скольжения при учете задержек управляющего сигнала Рис. 2.53. Фазовая траектория с учетом задержек управляющего сигнала и погрешностью определения линии переключения Рис. 2.54. Две частицы на полупрямой с барьером в начале координат. При любом расположении частиц и любых начальных скоростях "маленькая" частица сначала мечется между барьером и "большой" частицей, но затем столкновения навсегда прекращаются
86 Практическое моделирование динамических систем Пусть частицы движутся равномерно с начальными скоростями у]() и у20. Поставим в начале координат массивную стенку и будем наблюдать за абсо- лютно упругим столкновением частиц. Утверждается [9], что число столкно- вений между частицами всегда конечно и не превосходит arctg. где квадратные скобки обозначают целую часть вещественного числа. По- строим гибридный автомат, моделирующий поведение частиц. Выделим четы- ре состояния: moving, bai±_baii, bail_wall, ball _baii_wai]. Будем считать, что мы всегда начинаем наблюдать за поведением уже движущихся частиц. Движение частиц определяется уравнениями dx2 с заданными начальными значениями скоростей. В момент столкновения новые скорости частиц и} и определяются из уравнений /др/, ч- т,н2 = ту, 4- m2V24- m2n2 - Vt2 4- m2V2 » полученных из закона сохранения импульса и энергии. При численном ре- шении этих уравнений необходимо задавать начальное приближение иско- мым значениям. Очевидно, что значения скоростей V] и У2 столкнове- ния также удовлетворяют уравнениям и нс могут рассматриваться в качестве начальных приближений. Проблема автоматического выбора подходящих начальных приближений пока остается нерешенной. К счастью в нашем случае значения м, и /л можно указать явно 111\ + п12 (Г, - Г,); »2 = Г2 + 2........"'1-..(Ц - Г,) Н1} 4- 1И2 или, если мы все-таки хотим искать их численно, то можно воспользоваться специально подобранными начальными приближениями, например, //, Рассмотрим автомат, предусматривающий численное реше- ние системы (рис. 2.55). Гибридный автомат работает следующим образом. Начальный узел inint в данном случае играет вспомогательную роль и мгновенно передает "уп- равление” главному для данной задачи узлу moving, которому приписаны уравнения свободного движения Equations_2. Согласно утверждению о ко- нечном числе возможных столкновений между частицами он и является притягивающим. Всегда наступает момент, когда частицы начинают уда- ляться от барьера со скоростями, исключающими соударение (рис. 2.56).
87 Гпава 2. От классических динамических систем к гибридным when (xl <=С) and (х2<=£Г) and (V1 <0) and (V2<0) “------------------------------------------ actions { Vl.-Vl; V2:=-V2; kbbw.=kbbw+1; ball ball wall J when (xl >=x2) and (xl >0) and (VI >G) / actions { / iiixiV?- ' actions { „ : do Equations J v V1>-V1; kbb;=kbb+1; taul :=err/abs(V1-V2); when (V1 >0) end (V2>0) and (x2>x1) and (V2>V1) actions {Stop;} Рис. 2.55. Гибридный автомат для моделирования двух частиц на полупрямой с барьером в начале координат Рис. 2.56. Временная и фазовая диаграмма движения и столкновения двух шаров с сильно различающимися массами. "Большая" частица направлялась к барьеру, но "маленькая" постепенно изменила ее скорость так, что она стала двигаться в противоположную сторону Наблюдать за равномерным движением частиц неинтересно, поэтому узел stop_exe прекращает работу модели как только становится ясным, что 4 3:т. 1261
88 Практическое моделирование динамических систем дальнейшие столкновения невозможны (VI > 0 and V2> 0 and V2 > VI). Новые значения скоростей после столкновения двух частиц вдали от барье- ра определяются в узле ball ball. Обратите внимание, что хотя узлу и приписаны уравнения Equation 1, он покидается мгновенно, т. к единст- венному исходящему переходу предписаны только мгновенные действия. При входе в узел bail ball переменным u{ и присваиваются необходи- мые начальные значения, и решается система нелинейных алгебраических уравнений. Все эти действия с точки зрения непрерывного времени являют- ся мгновенными, и происходят во временной щели. Аналогичное поведение мы имеем и в узлах ball__wa.il и ball_ball_wall, с той лишь разницей, что новые значения скоростей вычисляются по формулам. Нигде не останавливающаяся система Рассмотренная нами модель, если ее слегка изменить, может демонстрировать поведение с бесконечным числом соударений, т. е. периодически посещать все узлы соответствующего гибридного автомата. Поставим на полупрямую еще один барьер и поместим частицы между ними (рис. 2.57). Можно пока- зать, что в этой системе существуют периодические движения, при которых столкновения возможны только в конечном числе точек отрезка, ограничен- ного барьерами, и существуют ''апериодические" движения, при которых точ- ки, где происходят столкновения, всюду плотно его заполняют. Рис. 2.57. Две частицы на полупрямой с двумя барьерами лг * Р»| 1 ип движения зависит от значения угла a = arctg|—L, и при значениях V ,П2 а = ~?-ч— реализуется апериодическое движение, во всех остальных случа- 3 4 6 ях возникает периодическое движение. С нашей точки зрения, гибридный автомат, порождающий оба типа движения, относится к числу нигде нс ос- та н а вл и ва ю щ и хся а вто матов.
Глава 3 Компонентные модели В предыдущей главе мы ввели понятие гибридного автомата и показали, что его работа сводится к последовательному воспроизведению поведения клас- сических динамических систем. Непрерывная составляющая поведения гиб- ридной динамической системы определяется на каждом участке непрерыв- ности локальной системой алгебро-дифференциальных уравнений и формул, а дискретная представлена графом автомата и алгоритмическими процедурами, выполняемыми при смене состояний. В описании гибридного автомата "спрятано" все множество возможных траекторий, каждая же кон- кретная траектория формируется по ходу решения, в зависимости от вы- бранных начальных условий и реализовавшихся событий. Решения локальных систем алгебро-дифференциальных уравнении для каж- дой конкретной траектории приходится находить численно. Форма записи уравнений, доступная пользователю, обычно отличается от формы, необхо- димой численному алгоритму, и определяется существующим программным обеспечением. Каждая написанная пользователем система уравнений, со- провождаемая набором вспомогательных формул, должна быть приведена к некоторому каноническому виду, по которому можно судить о се разреши- мости, автоматически преобразована в процедуру вычисления правой части, необходимую программной реализации численного метода (численному ре- шателю), а формулы — отсортированы в правильном порядке. С практиче- ской точки зрения важно при разработке графического образа гибридного автомата для входного языка пакета найти такую сто форму, в частности форму записи уравнений, чтобы она была легко проверяемой и удобной для пользователя. В то же время, хотелось бы переложить все вспомогательные трудоемкие и требующие повышенного внимания операции, такие как сор- тировка формул и преобразование систем уравнений к форме, требуемой программной реализацией численного метода, на вычислительную машину. Наиболее распространенной исходной формой уравнений для программных реализаций численных методов решения систем обыкновенных дифферен- циальных уравнений является система дифференциальных уравнений пер- вого порядка, разрешенная относительно первых производных: “ = л(0) = з-0 . at
90 Практическое моделирование динамических систем Существуют программы, разрешающие пользователю задавать исходные системы в виде систем дифференциальных уравнений второго порядка: г/2 у — = №/), .у(0) = 5о, -v'(0W(t- dr Многие программные реализации численных методов решения систем диф- ференциальных уравнений допускают в качестве исходной запись систем вида Л(0)-5() , at у коюрых матрица Л может быть вырожденной и тогда она превращается в систему алгебро-дифферециальных уравнений. С точки зрения пользователя такая форма более привлекательна, г. к. от него не требуется самому разре- шать систему относительно первых производных. И, наконец, существуют программы, правда их чрезвычайно мало, допус- кающие в качестве исходной нелинейную систему дифференциальных урав- нений первого порядка, не разрешенную относительно первых производных М), л(0) = *о- dt Очевидно, что чем более сложной оказывается исходная форма записи уравнений, тем больше трудностей испытывает численный решатель. В тех случаях, когда вы можете от исходной записи уравнений самостоя- тельно перейти к форме, необходимой численному решателю, то дальней- шее зависит от качества численных методов и их программных реализаций. Предположим, что ваша система является классической динамической сис- темой (гибридным автоматом с одним узлом и отсутствием переходов) и вы построили требуемую систему обыкновенных дифференциальных уравнений в форме Коши. В этом случае к вашим услугам набор прекрасных математи- ческих пакетов, таких как Matlab, Matheinatica, Maple, а также широко ис- пользуемый "математический калькулятор" MathCAD. И, скорее всего, за- тратив некоторое время на освоение этих пакетов, вы уже не будете стремиться применять для решения таких уравнений пакеты визуального моделирования. В этой книге мы всегда будем подчеркивать различие между математиче- ским и компьютерным моделированием, понимая под компьютерным моде- лированием проектирование сложных инженерных систем с помощью гра- фических сред. Математическое моделирование — это, прежде всего, изучение глобальных свойств новых теоретических моделей с помощью но- вых численных методов и их реализация в условиях выбранной машинной арифметики. Изучаемая модель в этом случае обычно является уникальным математическим объектом, и вопросы ее получения, формы записи, моди-
Гпава 3. Компонентные модели 91 фикации являются вторичными по сравнению с проблемой изучения се свойств и поиска новых методов решения. При проектировании же в основ- ном решают новые технические задачи, применяя изученные модели и из- вестные численные методы. И здесь на первый план выходят проблемы ав- томатизации процесса построения математической модели, внесения в существующие модели изменений, удобства проведения численных экспе- риментов и визуализации результатов расчета. Предметом изучения стано- вятся нс глобальные, а специфические свойства, зависящие от конструктив- ных параметров изучаемого объекта. При проектировании использовать пакеты Matlab, Mathematica, Maple, MathCAD даже для исследования простейших технических систем, заданных единственным гибридным автоматом, затруднительно. Дело в том, что гиб- ридный автомат, во-первых, очень сложно описывать, используя только тек- стовую форму языка, а во-вторых, потому, что ио ходу решения текущей сис- темы уравнений необходимо следить за условиями срабатывания переходов или, как говорят, искать точку переключения гибридного автомата из одного состояния в другое. Выполнять эту операцию умеют не все численные мето- ды, и не многие пользователи могут сами написать требуемые процедуры, да- же если язык пакета предоставляет такую возможность. Но если мы и доосна- стим существующие математические пакеты численными методами для воспроизведения поведения гибридных автоматов, мы все равно не удовлетво- рим всех потребностей проектировщиков сложных инженерных систем. Практически важные сложные системы редко удается описать только одной класси чес кой динамической системой, или только одним гибридным авто- матом. К тому же, совокупная система для классической динамической сис- темы или несколько совокупных систем гибридного автомата в виде необо- зримого числа уравнений и формул и трудно построить, и трудно интер- претировать. Прежде всего это касается структурно "сложных" моделируемых объектов. Обычно такой объект имеет естественную структуру, информация о которой должна быть сохранена в модели. Наличие структуры уже само по себе явля- ется косвенным свидетельством сложности системы. Поскольку оперативные возможности человека ограничены (по закону Миллера человек в состоянии оперативно обрабатывать 7±2 смысловых единиц информации), то исследова- телю или инженеру удобно сосредотачиваться сначала на поведении отдель- ных компонентов, а затем на их взаимодействиях. Практически все техниче- ские системы имеют естественную структуру, часто иерархическую. Далее, возможно, что компоненты моделируемой технической системы яв- ляются типовыми для данной прикладной области и их модели, математиче- ские или структурные, уже разработаны и помещены в специальные биб- лиотеки типовых компонентов. Один из современных подходов к автома- тизированному проектированию заключается в том, что инженер просто
92 Практическое моделирование динамических систем "собирает" разрабатываемую систему на виртуальном стенде из типовых компонентов (таких, например, как электродвигатель, редуктор и регулятор) так же, как он делает это на реальном стенде "в металле", совсем не задумы- ваясь о математических моделях, уравнениях, картах состояний, и предпо- лагая, что компоненты в его компьютерной модели будут взаимодействовать так же, как они взаимодействовали бы в реальном мире. Наконец, совсем особым случаем являются системы с динамической струк- турой, в которых состав компонентов изменяется во времени. Примером может служить комплекс противовоздушной обороны, в котором воздушные цели появляются в зоне видимости локатора, выходят из нее, поражаются ракетами, в свою очередь ракеты стартуют, а затем либо поражают цели, | либо самоуничтожаются. Системы этого типа практически не воспроизво- димы в пакетах математического моделирования. | Таким образом, существует область моделирования, которую следует назвать | "компонентным моделированием" или "проектированием систем". В этом | случае пакет моделирования должен сначала автоматически получить сове- I купную математическую модель системы из моделей компонентов и описа- пия их связей, привести се к виду, пригодному для численного решения, а уже затем найти фазовые траектории системы. Собственно, в этом обычно и | видится разница между "математическими пакетами" и "пакетами моделиро- | вания", а под "пакетом моделирования" всегда понимается "пакет компо- нентного моделирования". f Иерархические системы Ш Основой любой системы моделирования является блок, аналог реального р устройства или компонента. Блоки можно соединять между собой, образуя | расположенные на плоскости функциональные схемы. Любая функционалы е пая схема может рассматриваться как сложный блок. Такие сложные блоки со своей внутренней структурой вновь можно соединять между собой, строя | иерархические, многоуровневые системы. I Блок — это независимый, функционирующий по своим внутренним зако- f нам, элемент, взаимодействующий с внешним миром (другими блоками) через заданный набор переменных, называемых интерфейсными. Блок I обычно рисуют в виде прямоугольника, изображая рядом с ним интерфейс- | ные переменные различных видов, например, эти переменные могут быть I "входами-выходами" или "контактами" (рис. 3.1). Вид интерфейсных пере- мерных определяет способ автоматического построения совокупной систе- I мы по заданному описанию отдельных блоков и их связей. | Будем различать задачу построения классификации компонентов, из кото- | рых строится будущая система, и задачу конструирования конкретной сис- b темы из имеющихся компонентов. В мире реальных физических объектов |
Гпава 3. Компонентные модели 93 существует набор стандартных компонентов и множество устройств, в кото- рых они используются как готовые элементы. В пакетах моделирования им соответствуют библиотеки классов и блочно-функциональные схемы проек- тируемых устройств, построенные из экземпляров имеющихся классов. В любой функциональной схеме можно различать использованные для ее по- строения типы блоков (классы) и конкретные блоки (экземпляры классов). Рис. 3.1. Блок с входами и выходами и блок с контактами Простейшей системой является совокупность невзаимосвязанных элемен- тов, а ее математической моделью может служить конечное множество Система ={блок_1, блок_2, .... , 6jtok_N) Если изобразить элемент в виде прямоугольника, то простейшая система будет выглядеть так (рис. 3.2): Рис. 3.2. Блок-кон гейнер, или охватывающий блок, содержащий четыре независимых компонента Заметим, что на рис. 3.2 присутствуют не только четыре независимых эле- мента, которые мы и называем блоками, но и "охватывающий" блок (блок- контейнер) или система. Нас также может интересовать только список клас- сов, экземпляры которых использованы при конструировании функцио- нальной схемы, и тогда система будет представлена в следующем виде: Система = {класс_1, класс_2, .. , класс _М}, М <- N На функциональных схемах обычно изображаются взаимосвязанные эле- менты. Связи несут информацию о том, какие интерфейсные переменные
94 Практическое моделирование динамических систем следует считать эквивалентными, и что эта эквивалентность означает (рис. 3.3). Рис. 3.3. Составные блоки: а — с ориентированными связями; б — с неориентированными связями Математической моделью системы, состоящей из взаимосвязанных элемен- тов, является граф: Функциональная_схема={{Множество блоков}, {Множество связей}} ИЛИ Функциснальная_схема={{Множество контактов), {Множество компонентов}}. Граф может быть неориентированным (используются только блоки с ’контактами"), и ориентированным (используются блоки с "входами- выходами"), в зависимости от того, имеем ли мы дело с ориентированными или неориентированными связями. 13 случае, если на функциональных схе- мах разрешается использовать блоки как с "контактами", так и с "входами- выходами", у графа появляется два типа дуг — ориентированные и неорисн- 5 тированные. Представив систему в виде взаимосвязанных простых, не имеющих собст- венной внутренней структуры элементов, можно пойти дальше, и рассмат- ривать каждый такой блок как новую подсистему, если в этом возникает необходимость. Пусть нам дано множество элементов Элементная_база={блок_1, блок_2, блок_1,.... блок__Ы). Построим множество подсистем, новую укрупненную элементную базу, объединив все блоки в непересекающисся группы, которые назовем подсис- темами: Элементная база_1-{подсистема II, подсистема 12,.... полсистема_1К} Продолжая этот процесс, построим новую элементную базу: Элементная база_2-{ под система 2.1 подсистема_22,.... подсистема 2L) и будем действовать так, пока в нашем множестве подсистем не останется одна подсистема. Ее то мы и назовем иерархической системой. Если таких
Глава 3. Компонентные модели 95 шагов было проделано Л/, то мы получили Л/-уровневую иерархическую систему, которую удобно изображать в виде дерева (рис. 3.4), если опять- таки нас интересует ее состав (входящие в нес блоки или классы). Вместо использования иерархического дерева можно изобразить каждый уровень иерархии на отдельном листе, представляя подсистему прямоуголь- ником, обведенным двойной линией. Фрагмент этой же системы изображен на рис. 3.5. Рис. 3.5. Три фрагмента описания иерархической системы. Каждый уровень изображается на отдельном листе. Двойная линия указывает на го, что изображенный блок является составным Рис. 3.6. Многоуровневые функциональные схемы: а — с ориеншрованными связями; б — с неориентированными связями
96 Практическое моделирование динамических систем Из этих укрупненных элементов можно строить многоуровневые функцио- нальные схемы, подобные представленным на рис. 3.6 Блоки и связи. Различные подходы Наличие связи между двумя интерфейсными переменными всегда предпо- лагает как минимум равенство значении этих переменных в любой момент времени, будь то ’’вход-выход" или "контакт". То есть наличие связи между двумя интерфейсными переменными А и В эквивалентно в общем случае появлению в поведении охватывающего блока-контейнера одного алгебраи- ческого уравнения О = А - В. В этой главе мы рассмотрим достаточно подробно три характерных подхода к компонентному моделированию, которые мы условно назовем по наиме- нованиям соответствующих пакетов "подходом Simulink", "подходом Mode- lica" и "подходом MVS". Они различаются допустимым видом интерфейсных переменных и типом используемых блоков. Различия в подходах к компонентному моделированию состоят в основном в разных ответах на два вопроса: □ Как задается математическая модель элементарного блока? □ Какие ограничения накладываются на интерфейсные переменные блоков? На первый вопрос существует два ответа: □ Пользователь может задать математическую модель блока, используя ес- тественные математические нотации (алгебро-дифференциальные урав- нения и формулы в естественной математической записи, карты состоя- ния, графы — в традиционной графической форме). Такого подхода придерживаются авторы языка Modclica и авторы графической среды MVS. Их пользователи получают возможность строить произвольные но- вые блоки с помощью почти "естественного языка". □ Пользователь может собрать прикладной элементарный блок из типовых универсальных блоков (таких как интегратор, дифференциатор или сум- матор) или вынужден писать новый программный код на одном из про- цедурных языков. Такой ответ дается авторами пакета Simulink и других аналогичных пакетов, использующих предопределенные блоки и графи- ческие аналоги электронных схем. Нам кажется, что первый подход более универсален и удобен для пользова- теля (кстати, никто нс запрещает применять и типовые универсальные бло- ки, если это удобно). Достаточно сложную систему уравнений гораздо про- ще записать в естественной математической форме, нежели собирать эквивалентную схему из десятков интеграторов, сумматоров и усилителей, в
Глава 3. Компонентные модели 97 которой исходный вид уравнений распознать с первого взгляда практически невозможно. Критики второго подхода называют его реликтом периода моделирования на аналоговых вычислительных машинах. Однако следует признать, что и этот подход имеет некоторые преимущества: он очень прост для неподготовлен- ного пользователя; нс требует сложного транслятора, необходимого в пер- вом подходе; позволяет эффективно интерпретировать модели, в то время как при первом подходе практически неизбежно требуется компилятор. На второй вопрос также существует два ответа: П На интерфейсные переменные не накладывается никаких ограничений. С математической точки зрения это означает, что связываемые перемен- ные могут находиться и в левой, и в правой частях уравнений своего блока, а с "физической", что их значения могут изменяться как "изнутри" блока, так и "снаружи". Этот подход часто называется "физическим" под- ходом, не требующим явного указания причинно-следственных отноше- ний ("non-casual") между связываемыми переменными, а блок с такими внешними переменными — неориентированным. □ Внешние переменные четко разделяются на входные, которые могут быть изменены только вне блока, и выходные, которые могут быть изменены только внутри блока. С математической точки зрения эго означает, что передаваемые "извне" переменные могут находиться только в правой час- ти уравнений своего блока. Такой подход часто называют (на наш взгляд нс совсем удачно) блочным подходом, требующим явного описания при- чинно-следственных отношений ("casual"), а блок — ориентированным. "Неудачность" этого термина заключается в том, что блок как независимая структурная единица используется в обоих подходах, и нужен для "скрытия" деталей реализации (инкапсуляции). Другое дело, какие ограничения накла- дывает тот или иной блок на форму описания повеления и интерфейса, и какие трудности при этом возникают при соединении блоков в систему. Как и в предыдущем случае, нам первый подход представляется более пер- спективным и удобным для пользователя. Однако возникающие при его реализации технические трудности столь велики, что в настоящее время до- минирует второй подход. Неориентированные блоки мы рассмотрим под- робно при изложении основных положений "подхода Modelica". Ориентированные блоки и связи Ориентированный блок служит для проектирования систем "вход- состояние-выход". Какие бы конкретно блоки нс были выбраны, предопре- деленные как в Simulink, или "произвольные", основанные на гибридных автоматах, как в MVS, применение ориентированных блоков предполагает
98 Практическое моделирование динамических систем ЭД •i Я введение ограничений на использование переменных фазового вектора при | составлении уравнений, описывающих повеление. "Переменная состояния" (state variable) — это внутренняя переменная блока, которой можно присвоить новое значение только "внутри" блока. Перемен- ная состояния может стоять в левой части оператора присваивания в дейст- | виях переходов, в левой части формул и дифференциальных уравнений, a J также являться искомой переменной в алгебраических уравнениях. "Вход" (input) — это внешняя переменная, которой можно присвоить значе-| ние только "извне". Переменная этого вида может стоять только в правых | частях дифференциальных уравнений, формул и операторов присваивания, ] и не может быть искомой в алгебраических уравнениях. Собственное пове-| дсние блока нс может изменить значение входа. "Вход” может являться при-1 емником в функциональной связи (только в одной!). В этом случае значение входа-приемника всегда равно значению источника в этой связи. "Входы"=| блока, не участвующие в функциональных связях, называются свободными. Значения свободных "входов" могут изменяться поведением охватывающего блока или менеджером вычислительного эксперимента. "Вход" обычно изо-t Сражается входящей стрелкой или треугольником (рис. 3.7). Рис. 3.7. Принятая во многих пакетах форма изображения переменных типа "вход-выход” "Выход" (output) — это внешняя переменная, которой можно присвоить зна- чение только "внутри" блока. Выходная переменная, как и переменная со- стояния, может стоять в левой части оператора присваивания в действиях переходов, в левой части формул и дифференциальных уравнений, а также являться искомой переменной в алгебраических уравнениях. "Выход" может | являться источником в функциональных связях (из одного выхода может I исходить сколько угодно связей!). "Выход" обычно изображается исходящей стрелкой или треугольником (рис. 3.7). Функциональные связи, соединяющие "входы" и "выходы" ориентированных блоков, в силу свойств этих внешних переменных являются ориентирован- ными. Описание взаимодействий с помощью "входов" и "выходов" поэтому! и называют "причинно-следственным" (casual) подходом в проектировании, т. к. в направленной связи только источник может влиять на приемники, но не наоборот. Ориентированные связи являются естественной абстракцией ! для описания информационных связей в технических системах, в которых ]
Гпава 3. Компонентные модели 99 принимаются специальные меры для исключения обратного влияния. Такие связи изначально вводятся как однонаправленные. Совокупная система Декомпозиция системы на блоки и возможность их связывания в новые блоки чрезвычайно удобна для пользователя, но при этом мы должны четко осознавать, что совокупную систему уравнений придется строить автомати- чески. В случае ориентированных блоков построить совокупную систему достаточно просто. Рассмотрим, какую работу выполняет пользователь, а какую — система мо- делирования сначала на примере устройства, состоящего из "естественных", наблюдаемых в реальной жизни компонентов. Пусть нам дана электрическая пень, изображенная на рис. 3.8, с управляе- мым извне ключом, значения тока в которой можно в дальнейшем измерять каким-либо прибором. Нам надо построить блок, способный менять свое поведение под действием внешнего, управляющего сигнала ("вход") и пока- зать изменения значения тока как функции от времени ("выход"). Обсудим возможные подходы. Рис. 3.8. Электрическая цепь Рассмотрим сначала подход, основанный на использовании гибридного ав- томата (подход MVS). Наличие ключа в этой цепи говорит о существовании двух режимов работы, т. с. мы имеем дело с гибридной системой. Эта гибридная система имеет два состояния, две системы локальных уравнений, и ее невозможно составить из более простых элементов, чем один гибридный автомат, т. е. мы не мо- жем сохранить "естественную" структуру цепи, и вынуждены будем вручную строить совокупную систему для всей цепи. Пусть для начала мы рассматриваем поведение пени, в которой в момент / = 0 происходит замыкание ключа (рис. 3.9). В исходном состоянии авто- мата ток / равен нулю (состояние А1), /(0) = 0,
100 Практическое моделирование динамических систем | а в последующие моменты (состояние А2) определяется уравнением Jr 1 р IR + L — i—\Idr + E = 0, dt С J о где I,R,C,E — параметры элементов цепи. Рис. 3.9. Гибридный автомат, соответствующий цепи с переключателем Представленное уравнение составлено на основании закона Кирхгофа и, вместе с заданными начальными условиями / -0, полностью определяет поведение токов и напряжений в цепи после замыкания ключа. Предположим, что система моделирования требует представления локального поведения в гибридном автомате в форме систем уравнений первого порядка, разрешенных относительно первых производных. В этом случае мы должны вручную, последовательно преобразовать исходное уравнение к виду. !R +L —+ U + Е = dt (7 = —j/rfr; О dU i_ dt С и разрешить полученную систему уравнений относительно первых произ- водных: = z(0) = 0; dt L Г(О) = О. dt С Последняя система и представляет описание поведения "сложной" динами- ческой системы "электрическая цепь", в которой только коэффициенты /,R,C,L,E напоминают о ее компонентной структуре. Теперь мы можем модифицировать гибридный автомат так, чтобы переклю- чения происходили по сигналу управления. Дня простоты используем булев-
Гпава 3. Компонентные модели 101 скую переменную Switch, значение true которой трактуется (переход из состояния Л! в А2) как замыкание цепи, a false — как размыкание (переход из состояния А2 в Л1) (рис. 3.10) Рис. 3.10. Функциональная схема электрической цени с управляемым извне переключателем Добавим в описание новые интерфейсные переменные — switch и I. Со- вершенно очевидно, что полученная система уравнений написана "пра- вильно", т. е. имеет единственное решение и может быть решена численно, но это должен проверить сам пользователь. Таким образом, в данном случае, когда мы хотим непосредственно восполь- зоваться формализмом гибридного автомата, мы можем построить только один единственный ориентированный блок, проделав всю необходимую подготовительную работу вручную. Теперь рассмотрим подход, основанный на передаточных функциях (подход Simulink). Язык пакета Simulink определяет набор ориентированных блоков, из которых следует строить любые системы. Для этого необходимо описать поведение в терминах "вход-выход", а точнее предварительно построить пе- редаточную функцию нужного звена. В данном примере это особенно про- сто, т. к. мы имеем дело с линейным дифференциальным уравнением вто- рого порядка. Действительно, продифференцируем исходное уравнение цепи (закон Кирхгофа для напряжений), справедливое после замыкания ключа: 1R + L— + — fMr+E=0 dt С 0 и получим новое уравнение ^«+£^ + ^/ = 0; = ; /<()) = 0 dt dr С di L о которое можно записать на языке передаточных функций.
102 Практическое моделирование динамических систем Используем символику компонентов, принятую в Model Vision Studium и i практически не отличающуюся от принятой в пакете Simulink. Разница ; лишь в том, что в пакете Simulink вы не можете заглянуть "во внутрь" блока ; и поменять там что-либо по своему желанию, а в MVS такая возможность ' предусмотрена. Главное, что в обоих пакетах — это ориентированные блоки. На рис. 3.11 приведены всего четыре элемента, из них два соответствуют блокам с передаточными функциями 1/р и К, обычно называемым интегра-3 тором и усилителем соответствен но, а последние два — это сумматор и пе- реключатель, они являются вспомогательными и необходимы для получения совокупной системы. Используя перечисленные блоки, можно построить нужную нам систему (рис. 3.12). S Рис. 3.11. Блоки пакета MVS, используемые для моделирования электрической цепи с управляемым ключом 7 за «5я .41 1 Рис. 3.12. Функциональная схема электрической цепи, реализованная с помощью "подхода Simulink”
Глава 3. Компонентные модели 103 Переменная z, определенная в блоке dev_7 ("переключатель”), и выходная переменная y второго блока dev_1 (''интегратор"), становятся соответствен- но "входом" и "выходом" блока контейнера. Ориентированные блоки обла- дают одним замечательным свойством: если локальные системы уравнений блоков корректны (то есть написаны вручную или приведены пакетом к | форме, необходимой для получения численного решения), то и эквивалент- пая система уравнений блока-контейнера, собранного из этих блоков, также является корректной (существует алгоритм, позволяющий автоматически привести систему к нужной форме на основании описания отдельных бло- Е ков с учетом связей). | При соединении блоков, в которых дня описания внутреннего поведения {используются гибридные автоматы с жестко фиксированной формой алгеб- ро-дифференциальных уравнений и разделением фазовых переменных па "входы", "выходы", "состояния", результат объединения всегда приводит к разрешимой системе. Это происходит потому, что эквивалентная локальная система уравнений объединяемых блоков в этом случае является механиче- ским объединением локальных систем уравнений блоков-компопенгов. Действительно, в силу свойств "входов’' и "выходов", "входы" могут присут- ствовать только в правых частях дифференциальных уравнений или формул и не могут быть искомыми переменными в алгебраических уравнениях. Ра- венства "вход-выход" и "выход-вход", являющиеся в общем случае алгебраи- ческими уравнениями, соответствующими связям, очевидным образом пре- вращаются в формулы. Действительно, если "выход" А является источником в ориентированной связи, а "вход" В приемником, то общее алгебраическое I уравнение связи 0 = очевидно трансформируется в формулу В = А. Поскольку при численном решении все формулы заменяются на отсортиро- ванную последовательность соответствующих операторов присваивания, яс- но, что эффективность численного решения для ориентированных связей существенно выше, чем для неориентированных, когда необходимо как ми- нимум решать систему дополнительных алгебраических уравнений, соответ- ствующих связям. Это замечательное свойство ориентированных блоков особенно пенно для моделей гибридных систем, в которых в результате срабатывания переходов в картах состояния локальные системы уравнений могут динамически изме- [ пяться и, следовательно, эквивалентная система уравнений тоже должна пе- рестраиваться динамически. В случае ориентированных блоков старые урав- нения просто изымаются из эквивалентной системы уравнений, а новые добавляются! При этом формулы, конечно, нужно пересортировывать дина- мически. К сожалению, в этой бочке мела как обычно имеется своя ложка дегтя. При наличии в поведении блоков формул, преобразующих значения "входов" в значения "выходов", соединение таких блоков однонаправленными связями
1 104 Практическое моделирование динамических систем может привести к появлению "алгебраических циклов". На рис. 3.13 изобра- жена система, включающая в себя идеальный усилитель, охваченный отри- цательной обратной связью. 1 11 J О Рис. 3.13. Функциональная блок-схема, приводящая к образованию "алгебраических циклов" Функционирование каждого элемента этой системы описывается одной простой формулой: Sbt: Z = X - Y; | Gl:¥=Kl X; | G2: Y = К2 X. I Однако, наличие связей приводит к циклу: GI. Y -> G2.X -> G2.Y -> Sbt.Y -» Sbt.X -> G1 .X -» G1 .Y. I Обычно пакеты моделирования после обнаружения алгебраического цикл: автоматически заменяют одну из образующих цикл связей (например, G1.Y -> G2.X) на алгебраическое уравнение 0 — G2.X — G1.Y и величина G2.X начинает определяться как численное решение этого уравнения. Ясно, чд при использовании карт состояния проверка наличия алгебраических цик- лов и их разрыв должны выполняться, как и сортировка формул, во время моделирования каждый раз, когда какой-нибудь узел с непрерывным ло- кальным поведением становится или перестает быть текущим. Избежать появления алгебраических циклов можно и по-другому, а именно преобразовать участок схемы, содержащий цикл, в единый блок с поведени- ем, задаваемым формулой Y- К1 Х/(1 + К1 К2). Я I Однако этот способ требует аналитического преобразования формул, кого рое достаточно сложно выполнять динамически. Теперь перейдем к соединению двух ориентированных блоков, соответст- вующих гибридным автоматам, в единую систему (рис. 3.14). - з
[лава 3. Компонентные модели 105 Рис. 3.14. Электрическая схема, допускающая разделения на независимые компоненты, каждый из которых может быть представлен отдельным гибридным автоматом Если рассматривать эту схему как единый гибридный автомат, то мы долж- ны будем записать следующую систему уравнений, соответствующую замк- нутому положению ключа: Перепишем уравнения относительно токов в матричном виде, введя матри- цу А: * вектор-столбец b и вектор-столбец токов / = |7 что позволяет аналитически разрешить уравнения и тем самым прийти к форме уравнений, разрешенных относительно производных. В данном слу- чае, если мы создаем один гибридный автомат, и у нас есть программы, раз-
106 :И Практическое моделирование динамических систем решающие записывать исходные уравнения в неразрешенном виде, этого можно было и не делать. По нам бы хотелось, используя явное разделение исходного объекта на два независимых контура, представить ее как соеди- нение двух ориентированных блоков (рис. 3.15). «•a ? J Рис. 3.15. Функциональная схема электрической цепи, состоящей из двух контуров, связанных взаимной индуктивностью . I :г| Н л >,5 ? I ; Я If- Для удобства будем считать, что константы С..С9, являются гло- [ я! бальными для рассматриваемых блоков (принадлежат охватывающему их [ блоку) и ’’видны" внутри каждого блока. Возможность такого представления хорошо видна из формы разрешенной системы уравнений • г 1 . *1 _ Г I / I D . ь- . ТГ S’ X , А.ЛТ Г) , И Г Y1- dt dJ tit I.}L2-M2 I 2 - М I Для первого автомата ток 1\ и напряжение Ц являются переменными со- стояния (и одновременно выходными переменными), а. ток /2 и напряжен ние (А — входными переменными. Аналогично строится описание второго автомата. Дополнительной входной переменной обоих автоматов является переменная Switch, управляющая положением ключа. и Таким образом, локальные системы уравнений первого автомата выглядят i как 1 3 dh_. dt 2 1
/ лава 3. Компонентные модели 107 а второго -Г = ——urtWiI- Е + ЦС,)- /И(/,Я2 + 11,С,)], ™ lxl2-m с1‘1 dt 1 L{L2-M2 [О -lx(i2r2 +?лс2)]. Как видим, в этом примере локальные системы обоих автоматов механиче- ски объединяются, как и утверждалось выше. Можно показать, что и в случае использования ориентированных блоков пакета MVS, и блоков пакета Simulink мы всегда приходим к совокупной системе алгебро-дифференциальных уравнений, которая и является таким образом "минимальной” по сложности формой описания. Описание гибридных систем В "подходе MVS" прямо используется гибридный автомат, отражающий по- ведение гибридной системы в наиболее естественной форме. В "подходе Simulink" для описания разных видов гибридною повеления приходится использовать различные приемы. В простейшем случае, когда [система уравнений остается неизменной, а скачками изменяются значения некоторых переменных, вполне достаточно включения в функциональную схему дискретных блоков, функционирующих вместе с непрерывными. Са- мым общим случаем дискретного блока является карга состояний Харела, задаваемая в подсистеме Stateflow (см. главу 4). В случае, когда состав и чис- ло уравнений изменяются, собирается функциональная схема, соответст- вующая объединению всех уравнений, и используются специальные блоки — коммутаторы связей для подключения нужных и отключения ненужных уча- стков схемы в соответствующие моменты времени. Коммутаторы управля- емся дискретными переменными (см. рис. 3.12), значения которых могут, в частности, изменяться картами состояний. | В приложении 2 рассмотрена так называемая "задача о двух баках" — извест- ный пример гибридной системы. Подробно изложено построение моделей этой системы в пакетах MVS и Simulink. Объектно-ориентированное I моделирование j В подходе MVS" пользователь может либо использовать типовые классы бло- ков из библиотек, либо явно описать свои собственные, задав переменные, ^поведение и/или функциональную схему нового блока. Объект в этом подходе рассматривается как расширение активного объекта UML (см. главу 6).
108 Практическое моделирование динамических систем В "подходе Simulink" преимущественно используются типовые блоки. Одна-! ко пользователь может декларировать некоторую созданную им функцио- нальную схему как новый тип блока. Неориентированные блоки и связи Идея использовать в качестве компонентов неориентированные блоки воз- никла очень давно, и особенно ярко проявляет себя при конструировании электрических схем. Вернемся к описанию электрической цепи (см. рис. 3.8) и для простоты рассмотрим только состояние, когда ключ замкнут. Введем, две фазовые переменные V и /, а также три элемента R,C,L со следую- щими компонентными уравнениями: z.c"'; U-L*, J R dt dt и предположим, что их графические изображения соответствуют рис. 3.16, На рисунке помимо самого элемента изображены места соединений — кон- такты. Рис. 3.16. Изображение элемента с контактами | Для реализации цепи необходим еще и источник питания, у которого на- пряжение постоянно и не зависит от протекающего по цепи тока — U = 1 и I произвольное. Давая имя конкретному элементу, например, сопро- тивлению, будем предполагать, что этому имени автоматически сопоставля- ется компонентное уравнение / - ^1 ' Я Совокупная система | Одних компонентных уравнений недостаточно для описания поведения со- бранного устройства. Для этого необходимы уравнения, составленные на основании законов Кирхгофа, их также называют топологическими уравне- ниями, подчеркивая этим зависимость их окончательной формы от конфи-1 гурации цепи. Первый закон Кирхгофа утверждает, что сумма падений на- пряжений в любом замкнутом контуре равна нулю, а второй, что сумма токов в любом узле равна нулю. I
Глава 3. Компонентные модели 109 При таком подходе пользователю предоставляют возможность рисовать схе- мы, а программе приходится выявлять на схеме замкнутые контуры и узлы и на их основе получать топологические уравнения. Покажем, что информации, имеющейся на чертеже электрической схемы, достаточно для построения совокупной системы уравнений, определяющей поведение цепи. Электрической схеме с замкнутым ключом поставим в со- ответствие граф, причем контакты схемы отображаются в узлы графа. Поме- ченные дуги, соответствуют включенным между контактами элементам Рис. 3.17. Граф, узлам которого соответствуют контакты, а дугам — электрические компоненты Для этого графа построим нормальное дерево, т. е. дерево (связный граф без циклов), охватывающее все узлы, ребра которого образованы включением элементов схемы в определенной последовательности — сначала все источ- ники напряжения, затем элементы R, G L (рис. 3.18). Если в состав схемы входят источники тока, они включаются в последнюю очередь. (Источники тока сохраняют постоянное значение тока при любом напряжении.) Рис, 3.18. Нормальное дерево, соответствующее исход! юму графу На основании построенного дерева разделим фазовые переменные на две группы. В первую включим токи и напряжения элементов, входящих в состав дерева. В нашем случае это векторы Ц = [!E,ICJк\, = [UEtU( ,UR]. Во вто- рую — остальные, не включенные нами в дерево. У нас в состав дерева не включена дуга, соответствующая индуктивности — 12 =[/; ] и U2 - [t/L]. I:
110 Практическое моделирование динамических систем | д Составим матрицу (табл. 3.1), столбцы которой пометим именами ребер де- рева, а строки — именами оставшихся ребер графа. Таблица 3.1. Матрица, необходимая для построения совокупной система Е С R L П 1 1 1 Выберем направления токов на ребрах и поставим на пересечении соответ-1 ствующих строк и столбцов следующие знаки: Г Г] плюс единицу, если дуга, указанная в строке, и дуга, указанная в столбце,| входят в состав одного цикла, и направления токов у них совпадают; г □ минус единицу, если дуга, указанная в строке, и дуга, указанная в столб-1 це, входят в состав одного цикла, но направления токов у них не совпа- дают; □ ноль, если они не входят в цикл, возникающий при добавлении очередной! дуги в дерево (рассмотрение каждой строки этой матрицы эквивалентно! добавлению нового ребра в дерево и анализу появившегося цикла). ij Если обозначить полученную матрицу через Л/, а транспонированную через| Л/', то можно показать, что уравнения I Яр ми, + U2 = 0; : J соответствуют двум рассмотренным нами топологическим уравнениям к имеют следующий вид: Е ’’ R е~ 1L Ч 1 L " В совокупности с компонентными уравнениями, определенными выше, ит. учетом свойства идеального источника напряжения при любом токе в цепи поддерживать на своих контактах постоянное напряжение, получим замкну- тую систему уравнений относительно выбранных переменных. Таким образом, можно получать совокупные системы уравнений для элек- трических, механических и гидравлических систем, т. е. там, где существуют аналоги рассмотренных базовых компонентов и топологические уравнений, аналогичные уравнениям Кирхгофа [1, 21]. Если ввести специальные ком- поненты. преобразующие один вид энергии в другой, то появляется воз-1 можность строить и "смешанные системы", например электромеханические!
Глава 3. Компонентные модели 111 Алгоритм получения системы уравнений, пригодной для численного интег- рирования, достаточно прост благодаря тому, что мы ввели специальные формы компонентных уравнений и сумели правильно учесть уравнения свя- зи, возникающие после соединения элементов через контакты. Развитием такого подхода является соединение через контакты блоков, со- держащих описание повеления в виде систем алгебраических и дифферен- циальных уравнений. Основная идея подхода очень удачно выражена в определении "язык для моделирования физических систем". Дело в том, что при использовании традиционного подхода блочного моделирования для описания ряда реаль- ных систем возникают серьезные ограничения на вид блоков. Рассмотрим конкретный пример. Пусть мы имеем два готовых устройства —- электродвигатель постоянного тока М и пропеллер Р — и хотим построить из них систему-вентилятор, соединив их жестким валом (рис. 3.19). Рис. 3.19. Соединение двигателя и пропеллера в единую систему-вентилятор По замыслу авторов этого подхода моделирование физических систем долж- но допускать естественное разбиение на блоки, соответствующие реальным физическим компонентам. В данном примере мы имеем два очевидных бло- ка — двигатель М и пропеллер Р, поведение которых упрощенно задастся следующи м и уравне н и я м и: г I (М) < | do) _ к}1 + Т di ~ J t ’ (P)J di V-k2o>~RaI do) Г—кр(О [dt J,, • [<" 1-., где одТ — угловая скорость и момент на валу двигателя и пропеллера; V — напряжение на двигателе; / — ток якоря; JafRa,Ll. — момент инерции, омическое и индуктивное сопротивление якоря соответственно; J — мо- мент инерции пропеллера; Аз,As,А', — специальные коэффициенты. Очсвид- Е но, что переменные Л/.Р, Л/.лтМТ являются внешними для блока М, а не-
112 Практическое моделирование динамических систем ременные Р.со,РТ — для блока Р, в том смысле, что мы имеем модели ’’двигателя, врашаюшего нагрузку" и "нагрузки, вращаемой двигателем". И если задать коэффициенты дифференциальных уравнений электродвигателя -и нагрузки, то мы получим классические динамические системы независимых физических объектов. Теперь попробуем создать ориентированные блоки с "входами-выходами"! соединить их в единое устройство, имитируя процесс создания вентилятора из двух готовых типовых элементов. При соединении двигателя и пропелле- ра абсолютно жестким валом возникают еще два уравнения: г I Л/.<у = Р.со\ Посмотрим на эти пять уравнений внимательно. Величины М.со.Р.со одно- временно удовлетворяют двум дифференциальным уравнениям, т. к. они являются переменными состояния для каждого из блоков и удовлетворяю: каждая своему дифференциальному уравнению, в которые также входят ве- личины М.Т и Р.ТУ связанные соотношением М.Т= ~Р.Т. Они также долж- ны быть равны друг другу, т. к. соединены дополнительной связью. Следо- вательно, физическая связь между двигателем и пропеллером не может быть описана с помощью ориентированной связи, принятой в традиционном блочном моделировании, а сами эти физические блоки не являются ориен- тированными блоками. В рамках традиционного подхода эта система может быть описана только в виде одного ориентированного блока, т. е. вентиля- тор целиком, где (управляющее напряжение — "вход", а угловая скорость вращения — "выход": dco Р Ja+Jp dl V-k2(o~RaI dl "а Для получения приведенного описания в виде системы уравнений первою порядка необходимо рассмотреть два "одинаковых" уравнения, dco k\I + Т dco _ -Т -kpco I исключить из них Т (знак Т во втором уравнении изменен с учетом урав- нения Л/.Г + Р.Т = 0) и получить искомую систему.
Глава 3. Компонентные модели 113 | Ориентированными, как правило, можно считать лишь искусственные тех- нические блоки, в которых инженеры приложили усилия для исключения обратного влияния (например, поставили соответствующие развязки). В фи- зических системах такие развязки могут и отсутствовать. Авторы Modelica [справедливо отмечают, что использование только однонаправленных связей и ориентированных блоков (причинно-следственный подход) практически (закрывает возможность создания библиотек типовых блоков для различных (прикладных областей и, следовательно, препятствует широкому использова- нию математического моделирования в современном инженерном деле. Язык Modelica предлагает "физический" подход, заключающийся в исполь- |зовании неориентированных блоков и двунаправленных связей. Неориенти- рованный блок может взаимодействовать с внешним окружением через гиконтакты" или "порты”, т. е. внешние переменные, которые могут быть из- менены как изнутри, так и извне блока. Контакты могут быть соединены двунаправленной связью. Если '’контакт" А соединен одной связью с "контактом" В, а другой связью с "контактом" С (рис. 3.20), то в эквивалент- ной математической модели системы появляются два алгебраических урав- нения: Рис. 3.20. Двунаправленные связи, приводящие к алгебраическим уравнениям Дзя нашего примера "контактами" явно являются переменные Мм и Рш. Для переменных типа вращательных моментов или токов Modelica вводит особую разновидность переменных-контактов или называемую "потоком". Предполагается, что для двунаправленных связей, соединяющих переменные- потоки, автоматически выполняются аналоги законов Кирхгофа. Например, если на рис. 3.20 переменные А, В и С — это "потоки", то в эквивалентной математической модели системы появляется алгебраическое уравнение | А + В + С = 0. В нашем примере потоками явно являются переменные МТ, РТ. Однако теперь получается, что для описания одной физической связи — аб- солютно жесткого вала — в модели нужно использовать две абстрактные
114 Практическое моделирование динамических систем связи. Это тоже нс очень наглядно. Очень хотелось бы, чтобы инженеры могли строить системы на являющемся воображаемым стендом экране ком- пьютера так же, как они строили бы его на реальном испытательном стенде, нс думая о тонких формализмах языка моделирования (об этом должны ду- мать разработчики библиотек стандартных блоков). Поэтому Modelica вво- дит понятие "коннектора", или "разъема", в котором агрегируются различ- ные внешние компоненты, которые должны участвовать во внешних соединениях только вместе. В нашем примере нужно описать "коннектор" shaft, в котором объединяются "контакты" со и поток Т. В синтаксисе языка Modelica это выглядит следующим образом: connector Shaft Real Omega (start flow T (scart==0) ; 0) ; Описания блоков выглядят так: model DCM input Real V (start«0); Shaft S; parameter Real .Ta; parameter Real Ra; parameter Real La; parameter Real, kl; parameter Real k2; protected Real I - (st.art=0); equation J a * der (S. One ga) - k 1 * I - S. T; La ’der;1) = V- k2 * S. Omega - Ra * I; end DCM; model Frope1ler Shaft S; parameter Real Jp; parameter Real kp; equation Jp*der (S. Omega} = S.T-kp* S. Omega; end Propeller;
ь Глава 3. Компонентные модели 115 Обратите внимание, что там, где внешнюю переменную можно рассматри- вать как входную или выходную, это делается (входное напряжение в двига- И, наконец, блок-контейнер вентилятор. model Fan DCF М {Ja=lF-4, f.a-0.01, R.a=10, U---0.01, И2-0.С1) ; Егоре .1 1 e г P (Jp~5, kp=O. 21 ; equation connect (M. S, P. S) ; ¥::: р- Итак, все получилось здорово, удобно и красиво. Однако умудренный жиз- нью читатель должен спросить теперь, чем за все эго удобство придется расплачиваться? К сожалению, довольно многим. Снова посмотрим на пять i уравнений нашего примера внимательно. Эта система, алгебро-дифферсн- i циальных уравнений может быть решена численно только в том случае, если программа умеет решать уравнения, неразрешенные относительно первых производных, в общем случае нелинейные. Для большинства программ не- обходимо предварительное аналитическое преобразование в приемлемую для численного решения форму, например, в такую: г , . I г// dl V-k2co-RaI dl ~ F Подобное автоматическое аналитическое преобразование в настоящее вре- мя доступно только математическим пакетам, умеющим производить сим- вольные вычисления (Maple, Mathematica), и является довольно трудоемким процессом. Кроме того, для его выполнения требуется практически полная исходная информация о блоках и их связях, так что его желательно выпол- нять на стадии компиляции модели. Кстати, необходимостью предваритель- ных аналитических преобразований и объясняется легкость, с которой Mod- elica позволяет записывать дифференциальные уравнения, не разрешенные ^относительно производных ("все одно нехорошо"). Численно решать систе- мы, не разрешенные относительно производных, возможно лишь с исполь- зованием отдельных программ, и при этом нс все специалисты уверены, что делают они это хорошо. Напомним, что в подходах, использующих ориентированные блоки, эта проблема не возникает. В классическом блочном моделировании (Simulink, Vissim) систему сразу строят, соединяя стандартные ориентированные бло- ки, а в пакетах с определяемыми блоками (MVS) производится жесткий
116 Практическое моделирование динамических систем контроль локальных систем уравнений. Имеются также подходы, позво ляющие строить описания систем с использованием двунаправленных свя зей из ограниченного набора неориентированных блоков, для которого раз работамы специальные эффективные алгоритмы преобразования (примером такого подхода может служить, например, отечественная система MARS |lj. Проблема преобразования уравнений особенно актуальна для гибридных моделей. Действительно, всякий раз, когда в каком-нибудь блоке изменяет ся его локальное поведение (одна локальная система уравнений заменяется на другую), необходимо заново получать эквивалентную совокупную систе му уравнений с учетом связей блоков, решая все сопутствующие проблемы (например, заново сортируя формулы). На стадии компиляции мы не можем знать конкретной последовательности переключений, которая реализуется при прогоне модели (она может зависеть от сочетания параметров, от внеш них воздействий, может быть вообще случайной). Таким образом, построй ние эквивалентной системы уравнений необходимо выполнять во врем* прогона модели. Выполнение же аналитических преобразований во вре| прогона модели в настоящее ши мой задачей. Тем не менее, очевидно, что предложенный в языке Modelica подход ) блочному описанию сложных систем весьма перспективен. Рассмотрим еще один "классический'’ пример модели физической системы- электрическую схему, показанную на рис. 3.21. время не представляется практически разре 1 Рис. 3.21. Вид функциональной схемы электрической цепи в пакете Modelica № I Я Автоматическое получение совокупной системы уравнений но описания! отдельных элементов электрической цепи и их соединений не по силам ни- какому пакету с ориентированными блоками. Здесь явно выраженные дв£ направленные связи. Описание этого примера на языке Modelica выгляди достаточно изящно (заодно иллюстрируется и объектно-ориентированный подход). Сравните два подхода: данный и использованный для цепи, kotcJ .
Глава 3. Компонентные модели 117 рая изображена на рис. 3.8. Сначала определим "контакт" pin, который ха- рактеризуется двумя величинами — током и напряжением: type Voltage - Real<unit="V"); type Current = Real(unic="A"); connector Fin Voltage V; flow Current I; end Pin; Обратите внимание: мы предварительно ввели специальные типы данных ^напряжение" и "ток", указав, что это вещественные величины с единицами измерения "вольт" и "ампер". Такое указание уже само по себе полезно для пользователя, но, кроме того, предполагается, что компилятор будет прове- рять размерность разных частей выражений и выдавать сообщение об ошиб- ке, если единицы измерения не совпадают. Например, в формуле W-V-A (переменная W должна иметь размерность "VA". Теперь определим абстрактный класс OnePort (двухполюсник), который от- ражает самые общие свойства любого элемента электрической цепи. partial model OnePort | Pin p,n; "Положительный и отрицательный контакты" Voltage V; "Падение напряжения между контактами" Current I; "Ток через элемент" equation | V = p.V-n.V; | I *= p.I; |; 0 = p. I +n. U; end OnePort; Взяв за основу это определение двухполюсника, введем модели пассивного сопротивления, индуктивности и емкости, добавляя всякий раз специфиче- ские физические зависимости для тока и напряжения: model Resistor "Идеальный резистор" extends OnePort; |f parameter Real R (unit="Om") "Сопротивление"; equation Ц R*I - V; // закон Ома end Resistor; model Capacitor "Идеальный конденсатор" extends OnePort;
118 Практическое моделирование динамических систем parameter Real С (unit-"Г"} 'Емкость'; equation CMer(V) = I; end Capacitor; model Inductor "Идеальная индуктивность" ex tends OnePort; fl parameter Real L (unit="H") "Индуктивность; fl equation Lxder(I) = V; end Inductor; И, наконец, определяем источник напряжения и ’’землю”: model VsourceAC "Источник синусоидального напряжения" extends One Ро г t; parameter Voltage VA * 220 "Амплитуда"; parameter Real F (unit="Hz"; "Частота"; constant Real Pi = 3.1416; equation V — VA*sin (2*Pi*F,’rtime); •i end V sOUгсc AC; model Ground "Земля" 4^ Pin p; equation 0; P end Ground; :di Теперь из созданных элементов собираем модель всей электрической цепи (в графическом пакете моделирования этот текст будет получаться автома- тически из изображения электрической схемы). model Circuit я. (R~1C'; Capa Inductor L VsourсеАС АС equation connect (AC. p, R1. p);
Глава 3. Компонентные модели 119 к? connect (Rl .n,C.p); connect {C. n,AC.nj; connect {Rl -p,R2. p) ; connect (R2 .it, L.p) ; connect (L. n, C.n}; connect (AC end Circuit; части реализации с Modelica, и потому в Modelica (это положе- ] I I Описание гибридных систем Ответ па вопрос, является ли ModeLca полноценным языком моделирования гибридных систем, неоднозначен. С одной стороны, язык содержит доста- i точный набор конструкций, позволяющих адекватно описать практически к любую гибридную систему. Правда, конструкции эти достаточно "низко- уровневые" по сравнению с формализмом гибридного автомата, так что лю- I бой гибридный автомат можно описать в терминах Modelica, но вот одно- I значно восстановить исходный автомат по этому описанию сложно. С другой стороны, некоторые конструкции, необходимые для моделирова- ния гибридных систем, очень плохо вяжутся в Е "физ и чсе ки м" н одходом, соста вл я юi ц и м "из ю м и ji ку " настоящее время не поддерживаются в реализациях ние, видимо, сохранится и в обозримом будущем). Рассмотрим эти языковые средства подробнее. С гибридностыо первого типа (скачкообразные изменения значений фазовых переменных во временных I июлях) Modelica справляется достаточно легко. Для этого в секцию 'уравнения" описания блока вводятся реакции на дискретные события, ана- логичные переходам типа when-acti^is в гибридной карте состояний. Дис- кретные события не вводятся прямо (как, например, переменные типа "сигнал"), но доступны косвенно, например, через предопределенную функ- цию edge (к}, возвращающую значение true на "фронтах" изменения дис- кретного выражения х (целого, булевского или перечислимого типа) и false во всех остальных точках. Сравните это определение е определением сигнала. Рассмотрим в качестве примера генератор пилообразного сигнала, на входе которого задаются наклон "пилы" к и амплитуда сигнала а. К' rodel SawGen Д input Real К = 1; |:i input Real A = 1; I: output Real У ~ 0; equation der'Y) = K; 1 i when Y>-A then
1 120 Практическое моделирование динамических систем reinit(Y,0) ; end when; end SawGen; Заметим, что хотя содержимое блока when и называется уравнениями, но по сути является правильно упорядоченным набор формул (операторов присваи- вания), г. е. это полный аналог действий в переходе карты состояния. Пере- менные, которые изменяются только во временных шелях, называются дис- кретными (пусть даже они и имеют тип Real) и для них можно указывать просто формулы (например, y = о). Для непрерывных переменных (a у в приведенном примере таковой и является, поскольку является интегрируемой переменной на интервалах между временными щелями) нужно использовать специальный оператор reinit (скорее всего для того, чтобы дать понять чис- ленному решателю, что численный метод нужно "переразгонять" заново). Посмотрим, как будет выглядеть на Modelica "традиционный" пример гибЦ ридной системы — "прыгающий мячик" (для простоты без учета сопротив- ления воздуха). model Bounci.ngBall parameter Real. VO = 100; parameter Real TetaO = 0.0; Real Vx (start= V0*cos(TetaO)); Real Vy (start«V0*sin(TetaO)); Real X (start= 0); Real Y (start= 0}; equation der{X) = Vx; der(Y) = Vy; der(Vy) = -9.8066; when (Vy<0) and (Y<=0) then reinit(Vy,-Vy); end when; end BouncingBall; Сложнее обстоит дело с гибридностью второго типа (во временной щели одна система уравнений заменяется на другую). В частном случае, когда из- меняются только правые части уравнений, а набор искомых переменных остается неизменным, можно использовать условные выражения. Например, блок-ограничитель входного сигнала выглядит следующим образом: model Limiter input Rea1 X; input Re a1 Xma x;
Гпава 3. Компонентные модели 121 output Real Y; equation Y = if abs (X) <Xmax then X else Xmax*sign(X); end Limiter; Однако в общем случае меняется и набор уравнений, и состав фазового век- тора. В руководстве по Modelica приводится пример с маятником, у кото- рого в определенный момент перерезается нитка: model BreajingPendulum parameter Real m-1, g=9.81, L=1; input Boolean Broken; Real pos [ 2 ], ve .1 [ 2 ] ; constant Real Pi-3.1416; Real phi (start=Pi/4), phid; equation vel = der(pos); if not Broken then pos = (L*sin(phi), -L*cos(phi}; ph .id = der {phi ) ; m* L* L der (ph id) -fc* g * s in(ph i ) = 0 else m*der{vel) = ir.*{G, -g}; end if; end Breaking?©!iduluni; Для такой модели потребуется автоматическое преобразование уравнений к виду, пригодному для численного интегрирования, выполняемого во время моделирования. В настоящее время это невозможно и потому приведенная конструкция является запрещенной к использованию. Предлагаемая альтер- натива — разделение этого описания на два блока (обычный маятник и свободный полет). До обрыва нити на выход системы подается положение обычного маятника. По дискретному событию "обрыв нити” текущее поло- жение и скорость присваиваются в качестве начальных значений соответст- вующим переменным свободно летящего маятника и его положение начина- ет подаваться на выход системы. Это полностью совпадает с решением проблемы в системах блочного моделирования (например, Simulink). Объектно-ориентированное моделирование В описании языка Modelica (смотри следующую главу) декларируется, что все определения являются классами. Выделяются важные семантические
..в 122 Практическое моделирование динамических систем Я •Я разновидности классов (стереотипы в терминах UML): model (неориен- тированный блок), Моск (ориентированный блок), connector (соединитель)! и т. д. Между классами возможно отношение наследования. Класс-потомок наследует все элементы описания класса-предка. В приведенном выше при- мере с электрической цепью резистор, конденсатор и емкость являются по- томками абстрактного класса 'двухполюсник’’ и наследуют от него контакты р и п, переменные v и т, а также два уравнения. Ни удалить, ни переопреде- лить унаследованные элементы описания нельзя. Например, если вы хотите использовать модель сопротивления, в которой учитывается влияние темпе- ратуры, вы не сможете ввести класс TempResistor как потомок класса й Resistor, поскольку вам нужно заменить соотношение r*i = v другими уравнением, {R+rt*(Т-ТО)}= v и потому придется наследовать класс Т empRe s 1 s L о г ОТ ДВухПОЛ ЮС11И КВ. В то же время имеется такая возможность параметризации класса, которая позволяет переопределять переменные при наследовании этого класса. На- пример, если в том же примере мы определим переменную ri в клаесДЯ Circuit как model Circuit replaceable Resistor Rl (R=10); 1 ••• I end Circuit; 3| то мы можем создать класс circuit.2 — потомок circuit, в котором иде-1 альное сопротивление ri будет заменено сопротивлением, зависящим от температуры: Jnl model Circuit2 extends Circuit ( redeclare TempResistor Rl {RT-u.Ol)}; end Circuit2; Возможность замены экземпляра класса Resistor на экземпляр классе TempResistor может вызвать некоторое недоумение: в большинстве объект- но-ориентированных языков такая замена возможна только если класс TempResistor является потомком класса Resistor, чего нет в данном случаев ) Однако в языке Modelica совместимыми считаются классы, которые имеют совместимые внешние интерфейсы, т. с замещающий класс имеет те же внешние компоненты с совместимыми типами, что и замещаемый класс м (полиморфизм по внешнему интерфейсу). Поэтому, например, идеальный резистор ri можно заменить конденсатором: И model Circuits extends Circuit ( redeclare Capacitor Rl (C-O.OC1)); end Circuits; .Ml :s I is
Глава 3. Компонентные модели 123 I Описание неявных взаимодействий компонентов модели В некоторых случаях явно описывать взаимодействия компонентов модели через функциональные связи не очень удобно. Это относится к функцио- нальным связям типа "один со всеми" или "все со всеми", а также к систе- мам с динамической структурой. Функциональные связи тина "один со всеми'’ или "все со всеми" характерны для моделирования физических полей. Например, на все заряженные части- цы, находящиеся между пластинами конденсатора, воздействует одно и то же электрическое поле, изменяющееся во времени (связь "один со всеми"). Примером связи "все со всеми1’ может служить модель планетной системы, где напряженность гравитационного ноля в определенной точке является результатом суперпозиции гравитационных полей всех материальных тел, входящих в систему. Конечно, можно рассматривать ноле как отдельную компоненту системы и провести все эти связи явно (масса и вектор поло- жения от компонента "тело" к компоненту "поле" и вектор напряженности поля в обратном направлении). Однако, при значительном числе компонен- тов результирующая структурная схема, будет совершенно нечитаемой. Вспомним также последний пример предыдущий главы, где рассматрива- лось движение частиц на полупрямой с барьерами в начале координат. При построении библиотеки классов, можно создать классы ван и Field, воз- ложив на последний только контроль за столкновениями и вычисление но- вых значений скоростей (рис. 3.22). Карта поведения класса Ball в этом [случае будет содержать только один единственный узел, которому приписа- но уравнение движения частицы с заданной скоростью. У этого класса ско- рость частицы будет "входом", а ее положение па полупрямой "выходом". [гДаже если частиц всего две (рис. 3.23), функциональная схема с двумя эк- земплярами класса Bail и устройством Field выглядит неоправданно слож- ной, и нетрудно представить что будет, если частиц станет всего лишь пять. Гораздо привлекательнее ассоциировать иоле или единый для всех компо- । нентов закон управления не с отдельным локальным компонентом, а с охва- i тываюшим блоком-контейнером, в поведении которого будет реализован [конкретный алгоритм вычисления напряженности поля или единый для всех компонентов закон управления. Неявное взаимодействие "но воздуху" между охватывающим блоком и ло- кальными блоками можно организовать по-разному. В MVS "поведение" блока-контейнера "читает" значения выходных пере- | ионных локальных блоков, вычисляет необходимые величины и присваивает их свободным входным переменным локальных блоков. В примере с части- | нами на полупрямой теперь достаточно создать устройство-контейнер J Fieid_L (рис. 3.24), с картой поведения, изображенной на рис. 3.22, и дву- I мя экземплярами класса ван. Ki
124 Практическое моделирование динамических систем when (xl <=0) and (х2<=0) and (VI <0) and (V2<0) ----------------------------------------------7 actions { V1:=-V1; / V2;=-V2; balLbZTwall kbbw-kbbwl; J-------- when (x1>=x2) and (x1>0) and (Vl>0) j actions { V1--V1, kbw:»kbw+1. taul :=en/abs(V1); actions { u1:=V2; u2:=V1; hit when (xt <=0) and (x2>\1) and (VI <0) ^ball_wall actions { do Equations 1 X! =LQ' 4 “ V2:=u2; kbb.=kbb+1; taul :=err/abs(Vl-V2); ball_ball4 stop,exe when (VI >0) and (V2>0) and (x2>x1) and (V2>V1) actions {Stop;} Рис. 3.22. Вид карты поведения устройства Field при декомпозиции модели движения частиц на полупрямой с барьером на три компонента. Единственным отличием от аналогичной карты поведения из второй главы является то, что узлу Moving не приписано никакого длительного поведения Рис. 3.23. Вид функциональной схемы при декомпозиции модели движения частиц на полупрямой с барьером на три компонента
Гпава 3. Компонентные модели 125 Рис. 3.24. Вид функциональной схемы при построении модели движения частиц на полупрямой с использованием устройства-контейнера и передачей информации "по воздуху" В языке Modelica неявное взаимодействие между локальным блоком и охва- тывающим блоком осуществляется с помощью механизма внешних пере- менных или функций. Рассмотрим пример движения частиц в центральном поле тяготения. В опи- сании отдельной частицы мы ссылаемся на некоторую внешнюю функцию gravity, спецификация (сигнатура) которой известна. partial function gravityInterface input Real r[3] "position"; output Real g[3] "griivity acceleration"; end gravityInterface; model Га r t ic1e parameter Real m = 1; outer function gravity = gravityinterface; Real r|3] (start {1,1,0)) "position"; Real v[3] (start - {0,1,0}) "velocity"; equation der(r) = v; der(v) - gravity(r); end Particle; В языке Modelica предполагается, что если в локальном блоке определена внешняя функция или переменная, помеченная как outer, то компилятор или исполняющая система будут искать соответствующую функцию или пе- ременную, помеченную как inner, во всех охватывающих блоках, начиная с ближайшего уровня. Пусть в нашем примере такая функция будет определе- на в модели окружения, а собственно ее реализация — функция Point Gravity — В пакете fields.
126 Практическое моделирование динамических систем modal Env i. г опте г; t import Fields.pointGravi ty; inner function gravity = pointGravity (k-2); Particle pl, p2, p3; end Environment; package Fields -a function poinLGravity extends gravity!nterface; parameter Real к = 1; protected Real n|3}; algorithm n := -r/sqrt(r*r); g := к/(r*r)*n; end pointGravity; end Fields; В следующей главе будет показано, как рассмотренные различные подходы к компонентному моделированию реализуются в конкретных пакетах моде-
Глава 4 Современные программные средства В этой главе мы рассмотрим три группы пакетов: □ Simulink и Stateflow; □ Omsim и Omola, Dymola и Modelica; □ Model Vision Stadium, иллюстрирующих три различных подхода к моделированию сложных систем. Пакеты Simulink и Stateflow', работающие вместе с Matlab, постепенно при- обретают в нашей стране все большее распространение. Материала о них приведенного ниже, вполне достаточно для первого ознакомления с техно- логией работы в этих средах, но главное, он иллюстрирует подход к по- строению гибридных систем, базирующийся на картах состояния Харела. Карты состояния прекрасно зарекомендовали себя при разработке дискрет- ных систем, их пытаются применить и для проектирования гибридных сис- тем. Простейшее решение предполагает раздельное описание дискретного и непрерывного поведения и использование карт состояний для управления непрерывными процессами. В предыдущих версиях пакета Model Vision мы, как и разработчики StateFlow, использовали именно этот подход, но потом отказались от него. На наш взгляд, раздельное описание непрерывных и дискретных процессов является источником ошибок при описании гибрид- ного поведения. У пользователей пакета Simulink возникают дополнитель- ные трудности, т. к. сочетание существующего графического языка для по- строения моделей и карт состояния пакета StateFlow приводит к очень сложно воспринимаемой модели. В пакете Simulink пользователь имеет дело с графической формой языка мо- делирования, в которой классы представлены в виде устройств (блоков) двух типов: "вход-выход" (например integrator (Интегратор)) и "вход-выход- состояние (например State-space (Линейная система вход-выход- состоянис)). На самом деле они явно нс определены, но для простоты из- ложения будем считать, что мы имеем дело именно с ними. Различные по функциональному назначению классы собраны в библиотеки: непрерывные, дискретные, нелинейные, математические блоки, источники, приемники, генераторы.
128 Практическое моделирование динамических систем В результате выполнения операции drag-and-drop (переместить графический объект в заданное место при помощи мыши) графический образ класса пе- реносится из библиотеки классов в устройсгво-контейнер (окно модели) и создается экземпляр класса со значениями параметров, заданными по умол- чанию, которые, при необходимости могут быть изменены. Пользователю доступны "входы", "выходы" и "параметры" экземпляра блока. Все остальные детали реализации библиотечного класса скрыты (инкапсулированы) внутри него. Новый пользовательский класс может быть собран только из сущест- вующих и оформлен как библиотечный класс Subsystem (Подсистема). Еще одним примером класса может служить сама модель, играющая роль уст- ройства-контейнера для проектирования новых устройств и испытательным стендом при запуске модели по команде Simulation/Run. Отношение "родитель-потомок" между классами в явном виде в Simulink также нс существует, но легко узнаваемо. Например, можно считать, что сумматор с числом входов, большим двух, является потомком класса sum (Сумматор), имеющего по умолчанию два входа. Наличие в Simulink непре- рывных и дискретных блоков и возможность их одновременного использо- вания уже позволяет говорить о гибридных системах. Для описания систем е различным типом поведения ("смена уравнений ) в Simulink могут быть ис- пользованы устройства типа switch (Переключатель) или предопределенный набор блоков, реализующих кусочно-непрерывные периодические функции Для описания устройств, у которых скачком меняются лишь параметры ("смена значений параметров"), лучше всего использовать средства, предос- тавляемые дополнительным программным продуктом StatcFlow, основан- ном, как мы уже отмечали, на использовании карт состояния Харела. Пакет Omsim и язык моделирования Omola являются предшественниками пакета Dymola и языка Modelica [30, 31, 50, 52]. О пакете Omsim и языки моделирования Omola можно было бы не упоминать, хотя бы уже потому, что они предназначены для рабочих станций и под MS Windows не модифщ J цировались, но в них можно найти многое из того, что было потом перене- сено в пакет Dymola и язык Modelica. Язык Modelica интенсивно развивает- ся и модифицируется в последнее время и о его законченной форме покз говорить еще рано, поэтому мы решили лишь кратко описать и саму среду моделирования, и язык. В нашей стране эти пакеты пока еще мало распро- странены. Приводимый ниже материал выбран нами, как пример реализо- ванного подхода к конструированию классов при объектно-ориентиро- ванном моделировании. Обсуждению проблем объектно-ориентированного моделирования посвящена глава 6. Рассматриваемые пакеты и языки интересны также тем, что поддерживают блоки с ненаправленными связями. Как отмечалось в главе 3, использование блоков с ненаправленными связями чрезвычайно привлекательно, но воз- никающие при этом математические проблемы не столь просты, как утвер- ждают сторонники этого подхода. Однако, судя по изменениям, вносимым
Глава 4. Современные программные средства 129 во входной язык, авторы начинают'осознавать серьезность проблем, возни- кающих при решении алгебро-дифференциальных уравнений. Издательство Kluwer Academic Publishers, www.wkap.nl, объявило о выходе в свет первой книги по пакету Modelica: "Introduction to Physical Modeling with Modelica", написанной M. Тиллером. Графическая среда Model Vision Studium является примером подхода, бази- рующегося на понятии гибридного автомата, рассмотренного в главе 2. Сре- да подробно описана в работе [13], но и она претерпевает постоянные изме- нения. Начинающих мы отсылаем к нашей предыдущей книге, а здесь приводим краткое описание современного ее состояния. В приложении можно найти сегодняшнюю версию языка MVL. В сочетании со справоч- ными файлами демонстрационной версии этого достаточно для освоения пакета теми, кто уже имел дело с графическими средами моделирования. Подсистема Simulink пакета Matlab л Среди большого числа пакетов визуального .моделирования пакет Matlab за- нимает особое место. Первоначально ориентированный на исследовательские проекты, пакет в последние годы стал рабочим инструментом инженеров- проектировщиков, преподавателей и студентов. Одной из основных причин широкого использования Matlab является широкий набор средств, предостав- ляемых пользователю для решения разнообразных инженерных и научных задач. Среди этих средств особое место занимает подсистема Simulink. э В J а 5 :! L ••s 40 Основные свойства подсистемы Simulink Подсистема Simulink — это интерактивная среда для моделирования и ана- лиза широкого класса динамических систем, использующая графический язык блок-диаграмм. Подсистема Simulink: г □ предоставляет возможность моделирования непрерывных, дискретных и гибридных — как линейных, так и нелинейных — систем; включает в себя обширную библиотеку блоков (непрерывные элементы, дискретные элементы, математические функции, нелинейные элементы, источники сигналов, средства отображения, дополнительные блоки), ко- торые можно использовать для создания новых систем; позволяет объединять блок-диаграммы в составные блоки, что обеспечи- вает иерархическое представление структуры модели; содержит средства для создания блоков и библиотек, определяемых поль- зователем;
130 Практическое моделирование динамических систем □ дает возможность проектировать подсистемы, имеющие изменяемую во времени структуру, но эти возможности весьма ограничены. Начиная с версии 3.0, в Simulink появились специализированные приложе- ния, значительно расширившие ее возможности, в частности: □ подсистема StateFlow — дает возможность моделировать поведение гиб- ридных или сложных событийно-управляемых систем, базируясь на кар- тах состояния Харела. Уже созданные пользователями пакета Simulink модели рассматриваются как объекты, закон управления которыми реа- лизуется в StateFlow (смотри определение гибридного автомата, бази- рующееся на картах состояния главы 2); □ подсистема Stateflow Coder предназначена для генерация С-кода при реа- лизации диаграмм Stateflow. Применяя Stateflow и Stateflow Coder, полт зоватсль может генерировать нужный кол на алгоритмическом языке С только для управляющих моделью блоков, реализованных с помощью Stateflow; Jg □ подсистема Real-Time Workshop дополняет Simulink и Stateflow Coder, обеспечивая автоматическую генерацию кода С для моделей, разработан- ных в Simulink; □ подсистема Simulink Report Generator позволяет создавать и настраивать отчеты из моделей Simulink и Stateflow в различных форматах, среди ко- торых HTML, RTF, XML и SGML. | В данной главе рассматриваются только сама подсистема Simulink и ее са- мое существенное дополнение — Stateflow. Этапы построения модели в подсистеме Simulink Запуск подсистемы Simulink Перед построением модели необходимо предварительно загрузить систему Matlab и запустить подсистему Simulink. Для запуска системы Matlab доста- точно выбрать в меню Пуск (если работа производится в операционной сис? теме Windows) пункт Программы/Matlab/Matlab 5.3. В результате появится основное окно пакета MATLAB Command Window. После появления символа приглашения >>, можно вводить команды пакета или производить запуск приложений. Запуск подсистемы Simulink выполняется из основного окна, для чего необходимо щелкнуть левой кнопкой мыши на кнопке запуска этой подсистемы, находящейся в верхней части окна, либо набрать в основ- ном окне команду Simulink, как показано на рис. 4.1.
131 Глава 4. Современные программные средства MATLAB ComWMrtd W •File Edit View Window Help | D £ A ! ffllg I Ш I ? =| To get started, type one oF these: helpwin, helpdesk, or demo. For product information, type tour or visit www.mathworks.com. » simulink Рис. 4.1. Вызов пакета Simulink из среды Matlab В том и другом случае откроется окно Simulink Library Browser (Система просмотра библиотек Simulink), изображенное на рис, 4.2. В верхней части этого окна две крайние левые кнопки служат для создания новой и откры- тия существующей модели соответственно. После нажатия левой кнопки на экране появится окно для построения новой модели (рис. 4.3). SimulinkLUr.vy Simulink i+. Stateflow +i Simulink Extras Ibis is the 'simulinkS’ library I Рис. 4.2. Библиотека устройств подсистемы Simulink
132 Практическое моделирование динамических систем Рис. 4.3. Окно для проектирования новой модели Процесс построения модели Simulink включает в себя компоновку и задание необходимых параметров. Компоновка заключается в выборе из библиотек | Simulink необходимых блоков, размещение их в открывшемся окне и зада-Д ние межблочных связей. Далее для каждого блока устанавливаются соответ-Я ствующие параметры, отвечающие требованиям моделируемой системы. Для того чтобы построить модель Simulink, необходимо знать, какие типы бло- ков предоставляются пользователю. Библиотеки блоков Simulink 1 Основным "строительным" элементом в процессе построения модели в па- кете Simulink является блок. Блок представляет собой систему типа "вход- выход-состояние" (или просто "вход-выход") и может быть как простым, так и составным Пользуясь терминологией, аналогичной используемой в объектно-ориен-Я тированных языках, можно сказать, что каждый блок из любой библиотеки блоков пакета Simulink является классом. Как только пользователь перено-Ц сит блок из библиотеки в окно построения модели, он тем самым создает экземпляр данного класса. В этом экземпляре он может изменять значение параметров блока в зависимости от требовании, предъявляемых к модели-3 руемой системе. С помощью связей экземпляры блоков объединяются в единую схему, кото-1 рая создается в окне построения модели или может быть собрана сразу в составном устройстве-контейнере, экземпляр которого предварительно по- мещается в окно. Процедура поиска и перемещения блоков из библиотек Simulink в окно mo-J дели во многом напоминает операции копирования и перемещения файлов в среде Windows. В частности, технология работы в Simulink Library Browser (см. рис. 4.2) аналогична работе с Проводником Windows (Windows Explorer). Для того чтобы переместить необходимый блок из библиотеки в окно по-3
Глава 4. Современные программные средства 133 строения модели, необходимо найти его в списке стандартных блоков Simulink. Для этого в окне Simulink Library Browser следует выбрать пункт Simulink, затем выделить и раскрыть соответствующий пункт в появившемся списке библиотек (аналогично тому, как раскрывается каталог в Проводни- ке Windows). В результате, окно Simulink Library Browser примет вид, ана- логичный показанному на рис. 4.4. Для перемещения курсор мыши устанав- ливается на нужный блок. Затем, нажав левую клавишу мыши, блок перемещают в окно модели. Также, кроме непосредственного просмотра содержимого библиотек, любой блок может быть найден по имени, введен- ному в текстовое поле, которое расположено в правой верхней части окна Simulink Library Browser (рис. 4.4). • •-——----r- ' » ыЬМ Simulink Library врНИЙт'£ Nonlinear i+; Signals 6/ Systems С -9 Simulink' loaded iSimulink 9 Рис. 4.4. Библиотека предопределенных блоков пакета Simulink i-j Continuous Derivative Integrator Memory State-Space Transfer Fen Transport Delay Variable Transport Delay Zero-Pole ft Discrete :+, Functions & Tables Рис. 4.5. Диалоговое окно блока Constant
134 Практическое моделирование динамических систем После того как блок появился в окне построения .модели, можно установите для него соответствующие параметры. Для этого достаточно сделать двойной щелчок левой кнопкой мыши по пиктограмме блока и установить необхо- димые параметры. На рис. 4.5 представлено окно редактирования парамет- ров блока constant (Постоянная) Ниже, выборочно и кратко, рассмотрены библиотеки блоков, содержащиеся в Simulink. Библиотека Sources Данная библиотека включает в себя источники сигналов, такие как signal Gen- erator (Генератор сигналов), Random Number (Генератор случайных чисел), Repeating Sequence (Генератор пилообразных сигналов), clock (Часы) и т. д. Пример 1 Одним из способов получения косинусоидального сигнала Cos / может послу- жить взятие интеграла от синусоиды. Для этого достаточно подать на вход бло- ка Integrator сигнал с выхода блока Sine Wave (Генератор синусоиды), предварительно установив для него соответствующие параметры. На выходе блока integrator можно наблюдать косинусоиду, подключив к нему б.по» Scope (Осциллограф), как показано на рис. 4.6. Sine Wave Мих s Integrator Scope Рис. 4.6. Пример применения блоков Integrator, Sine Wave Мох и Scope Библиотека Sinks Данная библиотека включает средства отображения сигналов, возникающие на выходе блоков. Сюда входят блоки scope, то File (Вывод результатов в файл), а также блок stop (Остановка выполнения). Использование блока Scope было рассмотрено в предыдущем примере. Рис. 4.7. Прекращение моделирования с помощью блока stop
Глава 4. Современные программные средства 135 Пример 2 Следующий пример иллюстрирует применение блока Stop. Как только значе- ние времени станет больше или равно 15 с, модель прекращает выполняться (рис. 4.7). Библиотека Discrete Данная библиотека включает в себя блоки, функционирующие в дискретном времени, такие как Discrete-Time integrator (Интегратор с дискретным временем), Discrete Filter (Дискретный фильтр) и т. д. В библиотеке со- держатся блоки, которые позволяют решать разностные уравнения, описы- вающие системы, с помощью дискретного преобразования Лапласа или так называемого z-преобразования. Решение уравнения находится с помощью передаточной функции, имеющей следующий вид: . num(z) ntmiyz" + nun^z'1^ +...+ nummzn~Mi ~------------------------—------------» den(z) den^z" + deiilzn +... + den„ где числитель и знаменатель содержат соответственно m + 1 и n + 1 слагае- мых, представляющих собой степенные функции от z с соответствующими коэффициентами. Переменные num и den являются векторами коэффици- ентов числителя и знаменателя соответственно. Их значения устанавливают- ся пользователем в диалоговом окне блока. Длина вектора den должна быть больше или равна длине вектора num. Пример 3 В данном примере, аналогично примеру 1, "интегрируется" синусоида, но уже с использованием блока Discrete-Time Integrator (рис. 4 8). Библиотека Continuous Данная библиотека включает в себя непрерывные элементы, такие как integrator, Derivative (Дифференциатор), state-space, и другие, зада- ваемые с помощью передаточных функций.
136 Практическое моделирование динамических систем Пример 4 Дано дифференциальное уравнение: х'(/) = -2х(0I где u(i) — прямоугольная волна с амплитудой 1 и частотой 1 рад/с. Требуется построить его численное решение, Для решения этой задачи необходимо ис- пользовать блок integrator. На епз вход подается производная х', а на вы- ходе получают величину х. Два других блока— Sum и Gain (Усилитель) — необходимы для формирования значения х' в соответствии с вышеописанным уравнением. Для получения сигнала u(t) используется блок signal Generator (Генератор сигналов), в котором необходимо произвести соответ- ствующие условиям задачи установки Полученное в результате значение x(t) подается на вход блока Scope (рис. 4.9): Рис. 4.9. Эга громоздкая схема нужна для решения линейного дифференциального уравнения первого порядка I Библиотека Nonlinear Данная библиотека включает в себя блоки, реализующие нелинейные функ- ции, такие как Relay (Релейное звено), switch и другие весьма опасные функции, если они используются в правых частях решаемых дифференци- альных уравнений. В лучшем случае, возникают правые части, не обладаю- щие непрерывной производной. Такие задачи при численном интегрирова- нии требуют особого подхода. Блок switch используется для описания событийно зависимого поведения. Пример 5 Допустим, необходимо получить сигнал, который первые 20 с будет прямо- угольной волной, а последующее время — пилообразным. Для этого необхо- димо использовать блок Switch. В блоке Switch устанавливается пороговая величина 20, на первый вход подается пилообразный сигнал, на второй — сиг- нал часов, на третий — прямоугольная волна. Первые 20 с значение времени будет меньше порогового, поэтому будет активным третий вход. Как только время превысит порог, активным становится первый вход и на выходе появля- ется пилообразный сигнал (рис. 4.10).
Глава 4. Современные программныесредства 137 Рис. 4.10. Изменение характера поведения можно реализовать с помощью блока Switch Библиотека Math Данная библиотека включает в себя блоки, реализующие математические функции, такие как Abs (Абсолютное значение), combinatorial Logic (Комбинаторная логика), Complex to Real-Tmag (Выделение вещественной и мнимой части комплексного числа) и другие стандартные математические функции, которые в данном случае приходится оформлять как отдельные блоки, что чрезвычайно усложняет восприятие блок-диаграмм. Некоторые блоки этой библиотеки использовались ранее. Так, блок Relational Operator (Отношения) встречался в примере 2, а блок Gain — в примере 4. Пример 6 Еще одним примером использования блока библиотеки Math может послужить получение косинусоидального сигнала Cos /. Для этого достаточно подать на вход блока Trigonometric Function выходной сигнал блока Clock, пред- варительно в установках блока Trigonometric Function выбрав пункт cos). В результате, на выходе блока Trigonometric Function появится косину- соида, которую можно наблюдать, подключив к выходу блок Scope, как показа- но на рис. 4 11. Clock —► СОЗ ------- T rigonometric Function Scope Рис. 4.11. Пример использования стандартных математических функций
138 Практическое моделирование динамических систем Библиотека Functions & Tables Данная библиотека включает в себя блоки, позволяющие реализовывать функции, отсутствующие в библиотеке математических функций, и работать с табличными функциями. К ним относятся matlab Fen (Функции пакета Matlab), S-Function (S-функция), блок Interpol a Lion (n-D) using РгеЬоок- up (Интерполяция), предназначенный для линейной интерполяции. Пример 7 Предположим, что необходимо построить функцию следующего вида sin(cos(/) -exp[2,l (-sin(z))]). Это очень просто сделать, используя блок Fen (Функции). Для этого достаточно подать на его вход вектор, первым элементом которого является значение cos(/), а вторым— sin(/) В установках блока не- обходимо описать требуемую функцию. Ее можно наблюдать, подключив к вы- ходу блск Scope, как показано на рис. 4.12. Рис. 4.12. Конструирование новых функций с помощью специального блока Есп Я Я I Библиотека Signals & Systems Данная библиотека включает в себя такие блоки, как мих (Мультиплексор) и DeMux (Демультиплексор), ini (Входной сигнал) и outl (Выходной сиг- нал), Subsystem, Hit Crossing (Поиск точки перехода через ноль) и другие, необходимые для построения и работы с новыми блоками. В предыдущем | примере 7 представлен один из способов использования блока мих этой j библиотеки. Также одним из наиболее часто используемых является блок : Subsystem. Его удобно применять для построения иерархической блок- 1 диаграммы. Выделяя необходимые части системы в подсистемы и распада-1 гая их в блоках-контейнерах Subsystem, можно избежать загромождения диаграммы запутанными схемами, в хитросплетениях которых трудно разе- | браться даже самому автору.
Глава 4, Современные программные средства 139 Пример 8 Пусть необходимо построить описанную в предыдущем примере функцию sin(cos(/) cxp[2,l (“Sin(z))]), а также еще две функции, отличающихся от дан- ной только значением коэффициента в показателе экспоненты — sin(cos(0 exp[l,l (-sin(r))]) и sin(cos(/) exp[3,l-(-sin(/))]). Даже в этом про- стом примере удобно схему, описывающую первую функцию, поместить в от- дельный блок Subsystem, а затем, скопировав этот блок, произвести в схеме минимальные изменения — задать значения соответствующего коэффициента в описаниях блока Fen. Для удобства можно просмотреть полученные решения с помощью одного блока Scope, используя для его подключения к выходу од- ной из подсистем блок Мих. Вид основного окна при этом показан на рис. 4 13 Рис. 4.13. Иерархическая блок-диаграмма, построенная с помощью блока Subsystem Все подсистемы будут одинаковыми. Одна из них показана на рис. 4.14. Рис. 4.14. Нижний уровень иерархической блок-диаграммы для предыдущего примера
140 Практическое моделирование динамических систем В окне Simulink Library Browser расположены две библиотеки: Stateflow (блок диаграммы подсистемы Stateflow) и Simulink Extras (дополнительные г- \ I 1 к 3 Соединение и дублирование блоков Для объединения блоков в систему необходимо соединить их входные и вы- | ходные порты, которые на пиктограммах блоков отмечены значком (рис. 4.15). Для того чтобы соединить два блока между собой, надо подвести курсор мыши к порту одного из соединяемых блоков (при этом курсор при- 1 мет форму "крестика"), нажать левую кнопку мыши и, удерживая ее в нажа- том положении, переместить курсор к порту другого блока (курсор примет вид "крестика"), после чего отпустить удерживаемую кнопку. i I .1 я Рис. 4.15. Любой блок из библиотеки блоков можно поместить в устройство-контейнер с помощью операции drag-and-drop III I ”1 I Я 1 л Если в модели необходимо использовать несколько экземпляров одного и |: того же блока, то, конечно, можно многократно повторять процедуру пере- | мешения одного и того же блока из библиотеки в окно создаваемой модели- Однако Simulink позволяет создавать копии (дубликаты) блоков из имею- щихся в окне модели. Для создания копии надо установить курсор на тре- буемый блок в окне модели, нажать на клавиатуре клавишу <Ctrl> и затем - левую кнопку мыши. В результате, слева от курсора появится "крестик". За- тем, удерживая кнопку' в нажатом положении, следует переместить в нужное место курсор и отпустить клавишу и кнопку. При построении модели часто требуется не только соединять блоки между собой, но и делать ответвления от существующих соединительных линий. Проведение связи между входным портом какого-либо блока и существую- щей линией выполняется аналогично дублированию блоков, т. е. при нажа- той клавише <Ctrl>. Разница лишь в том, что в этом случае курсор мыши | устанавливается на линию, от которой проводится ответвление, и переме- | щается к входному порту соединяемого блока. Если же вести ответвление от блока к линии, то даже нажатие <CtrI> не обязательно.
[лава 4. Современные программные средства 141 Объединение блок-диаграмм в составные блоки Как уже говорилось ранее, блок-диаграммы Simulink можно объединять в составные блоки, что позволяет использовать иерархическое представление структуры модели. Для того чтобы выделить часть системы в составной блок, можно пойти стандартным путем: перенести из библиотеки блок Subsystem, как раз и представляющий собой составной блок, и, раскрыв его окно, сформировать в нем структуру подсистемы. Но в пакете Simulink предусмотрен и другой способ: построив блок-диаграмму в основном окне создаваемой модели, можно выделить ее часть (ту, что необходимо объединить в составной блок) и выбрать пункт меню Edit/Create Subsystem. В результате в основном окне будет образован составной блок, включающий выделенную часть бяок- диаграммы. Часть блок-диаграммы можно выделить, нажав левую кнопку мыши в одном из углов предполагаемой рамки, в которую необходимо за- ключить выделяемый фрагмент диаграммы, и, удерживая левую кнопку мыши, растянуть появившуюся рамку до необходимых размеров. После лого кнопку необходимо отпустить. Непрерывное и дискретное время В пакете Simulink различают два "времени": непрерывное и дискретное, /видеть различие между этими двумя способами задания времени можно на простейшем примере: взяв блоки Clock и Digital Clock (Дискретные ча- сы), подадим их выходы на входы блока них, и выход блока них соединим с входом блока scope. Полученная схема представлена на рис. 4.16. Clock Mux —► -------- 12:34 Scope Digital Clock Рис. 4.16. Блок-диаграмма, иллюстрирующая особенности непрерывных и дискретных часов Как видно из рис. 4.17, непрерывное время задастся линейной функцией у - /, а дискретное время представляет' собой ступенчатую возрастающую функцию. В пакете Simulink дискретное время задается скалярной величи- ной, определяющей величину "ступеньки". Так как в данной работе основ- ным предметом рассмотрения является гибридная система, то встает вопрос
142 Практическое моделирование динамических систем о юм. каким образом происходит совмещение работы непрерывных и дис- кретных блоков в рамках одной модели. Рис. 4.17. Так выглядят непрерывное и дискретное время на графике несколько Fc В пакете Simulink с точки зрения задания времени существует типов блоков: О непрерывные блоки (такие как Integrator, Derivative, Transfer (Передаточная функция) и т. д.) работают в непрерывном времени; О бток const поддерживает на выходе заданное постоянное значение и яв- ляется нейтральным; П дискретные блоки (такие как Zero-Order Hold, Unit Delay, Discrete Transfer Fen) работают в дискретном времени, параметры которого зада- ются в диалоговом окне блоков; □ остальные блоки (такие как например, Gain) имеют неявную установку на работу в дискретном времени. Но если блок Gain следует за блоком Integrator, ТО ОН работает в непрерывном времени, Т. К. Integrator яв- ляется блоком с непрерывным временем. Если этот же самый блок GaiS следует за zero-order Hold, то он работает как дискретный блок, причем в том же дискретном времени, что и Zero-Order Hold. Если на входы блока подаются сигналы с различными установками дис- кретного времени, то блок автоматически выбирает из них для работы дис- кретное время е минимальным шагом. Важно отметить, что блоки мах и Demux просто группируют проходящие через них сигналы и сохраняют всю информацию, необходимую для синхронизации.
Глава 4. Современные программные средства 143 Сигналы Для реализации гибридного поведения в пакете Simulink предусмотрены специальные устройства, реагирующие на особые события и вырабатываю- щие специальные сигналы. К ним относятся блоки Enable (Доступен), Trigger? (Скачок) и Hit Crossing (Локализация момента смены знака). Рис. 4.18. Пример подсистемы, способной воспринимать сигналы Рис. 4.19. Пример подсистемы с фиггерным входом
144 Практическое моделирование динамических систем Первый, Enable, реагирует на появление у переменной отрицательных зна- чений, и отключает блок, внутри которою он расположен, до тех пор, пока значение переменной опять не станет положительным. Пример его исполь- зования и работы приведен на рис. 4.18. Второй, Trigger, имеет два входа, и реагирует на "скачок", подаваемый на специальный вход, запоминая при этом значение переменной, подаваемой на второй вход. Пример работы приведен на рис. 4.19. Третий, Hit cressing, способен найти значение времени, при котором входной сигнал принимает нулевое значение и выдать соответствующий сигнал. Подсистема Stateflow Как уже отмечалось ранее, Siateflow представляет собой графический инст- рументарий для проектирования сложных систем управления и является са- мым значительным дополнением к среде Simulink. Она дает возможность моделировать поведение сложных событийно-управляемых систем, базиру- ясь на картах состояния Харела. Создание блока управления Stateflow I Процесс создания модели системы управления в Stateflow обычно подразу- мевает следующие этапы: □ создание новой модели управляемого объекта в Simulink или использова- ние уже существующей модели; Рис. 4.20. Основное окно подсистемы Stateflow (chart)
| [лава 4. Современные программные средства 145 П создание диаграммы в Stateflow; П добавление к State flow-блоку интерфейса событий и данных; □ отладка модели; j генерация кола. Для создания Stateflow-диаграммы необходимо сначала создать модель в Simulink или открыть уже существующую (как было описано в предыдущих пунктах). Затем нужно выбрать в библиотеке блок, обозначающий диаграм- му Statcflow, и перенести его в свою модель. После двойного щелчка по не- му мышью, откроется окно Statcflow (chart) (рис. 4.20), в котором, пользу- ясь меню и панелью инструментов, можно описывать сами состояния, связи между ними, определять переменные, условия переключения и другие, не- обходимые для управления элементы. Основные элементы диаграмм Stateflow На диаграмме Stateflow различают две основные группы элементов: графи- ческие и неграфические. Все графические элементы диаграммы представле- ны на левой панели основного окна — Statcflow (chart) (см. рис. 4.20), гра- фического редактора карг состояний. Это — state (состояние), default transition (переход по умолчанию), history junction (переход в последнее ак- тивное состояние) и connective junction (соединительный переход). Неявно на диаграмме задастся еще один графический элемент — transition (переход). Состояния могут быть простыми и сложными (то есть имеющими иерархи- ческую структуру), они также могут объединяться в цепочки состояний, функционирующих параллельно (и независимо друг от друга) и последова- тельно. В число графически непредставимых элементов входят data (пере- менные) и event (событие). В основе Stateflow лежит специальная форма представления гибридного по- дведения — карта состояний. Основные элементы карты состояний — это состояние (state) и переход (trasition). State Каждое состояние описывает один режим работы событийно-управляемой системы. Состояние становится активным, если получает значение "истина" | условие перехода, (срабатывает переход), ведущего к нему, или если это со- стояние является начальным. Каждое состояние на диаграмме Stateflow име- | ет "родителя", которым, по умолчанию, является сама диаграмма Statcflow. Для создания графического образа состояния необходимо, выбрав на панели кнопку щелкнуть кнопкой мыши в том месте, где его необходимо раз- местить.
146 Практическое моделирование динамических систем Состояние имеет текстовые метки, которые определяют действия, выпол- няемые во время его активности. Имя состояния вводится первым. При описании самого состояния могут быть определены следующие действия: Д П entry — действие, выполняемое на входе в состояние; □ during — действие, выполняемое, пока состояние активно; П exit ~ действие, выполняемое на выходе из состояния; □ он : <имя собыгпия> — действие, выполняемое в момент появления собы- тия (имя которого указано в угловых скобках) при условии, что система будет находиться в данном состоянии. Создание подсостояний г. Подсостояние — это состояние, которое может оыть активно, только если активно состояние, называемое его родителем. Для того что бы создать под- состояние, необходимо, выбрав кнопку State, щелкнуть кнопкой мыши в поле того состояния, которое должно быть родительским, причем вложен- ность подсостояний может быть произвольной (рис. 4.21). Для того чтобы сменить родителя, следует "подхватить" мышью необходимое подсостояние и "перетащить" его из поля предыдущего родителя в поле нового родителя. Состояние с его полсосгояниями можно сгруппировать в единое целое. Это удобно при перемещении такого состояния с одного места на другое без на- рушения расположения его подсостояний относительно друг друга Для этою необходимо, щелкнув правой кнопкой мыши, выбрать в появившемся меню пункт Make Contents/Group, или просто дважды щелкнуть левой кнопкой мыши в поле состояния. Сгруппированные состояния Simulink вы- деляет, обводя утолщенной линией. Разгруппировать состояния можно опять же, дважды щелкнув в поле состояния кнопкой мыши. Я Рис. 4.21. Иерархическая карта состояний i
Глава 4. Современные программные средства 147 Параллелизм Система с параллелизмом допускает существование нескольких активных состояний одновременно. Каждое из них работает независимо от других та- ких же состояний. Представленные на рис. 4.22 отдельные параллельные состояния (они обведены пунктирной линией) являются подсос гояниями некого сложно организованного родительского состояния A u С см п о b i 1 е. Рис. 4.22. Фрагмент карты состояний с параллельными процессами Transition Переход — это объект, связывающий между собой два состояния. На диа- грамме Stateflow он представляется стрелкой, начало которой относится к состоянию-источнику, а конец — к состоянию-адресату. Для того чтобы на- рисовать переход, достаточно, установив мышь у состояния-источника, на- жать ее левую кнопку и, удерживая ее, протянуть появившуюся стрелку до состоя ния - адресата. • Переход имеет метку', которая описывает условия срабатывания перехода и выполняемые при этом действия (рис. 4.23). |Текст метки имеет следующий формат: ; event [condition]{condition action}/transition_action Ьде | event — определяет событие, которое инициирует переход. Если событие не указано, то переход инициируется при выполнении булевского выражения
148 Практическое моделирование динамических систем Если событий, инициирующих данный переход, несколько, то они все ука- зываются, при этом разделяются оператором OR. Например, на рис. 4.23 метка представляет переход, который срабатывет, если при возникновении события Е становится истинным выражение off_count==0. 1 Рис. 4.23. Переход с приписанным ему условием срабатывания condition. — булевское выражение, инициирующее переход, становясь ис- тинным. В данном примере выражение of£_count==0, как только оно стано- вится истинным, инициирует действие off count++. condition action — действие, выполняемое после того, как стало истин- ным условие перехода, но до того, как весь переход определился истинным (и определилось состояние-адресат). В данном примере, как только стано- вится истинным условие off_count^«0, мгновенно выполняется действие off_countI t. transition action — определяет действия, совершаемые при переходе, если все описанные ранее условия истинны и уже определено состояние-адресат. В данном примере действие Light_off выполняется, если условие off_count--= о истинно и найдено состояние-адресат. Default transition Переход по умолчанию — это переход с заданным адресатом, но без задан- ного источника. Его используют как аналог начального состояния, а также в сложных состояниях для того, чтобы определить, какое подсостояние стано- вится активным, когда система попадает в данное сложное состояние (рис. 4.24). Для того чтобы установить на диаграмме переход по умолчанию, необходимо, выбрав в меню кнопку о', установить курсор мыши недалеко от границы того состояния, к которому надо подсоединить переход и нажать ее левую кнопку. Переход по умолчанию присоединяют, протянув курсор к гран и не состоя н ия.
Глава 4. Современные программные средства 149 [fl I I В Lights Рис. 4.24. Так помечается начальное состояние I History junction Представим себе, что система покидает некоторое сложно организованное состояние с множеством подсостояний. Через некоторое время она возвраща- ется в него же, и по определению должна возобновить работу с начального состояния, а нам бы хотелось, чтобы она продолжила работу с предыдущего активного состояния. Вот для этого и нужен переход в последнее активное состояние (history junction). Он срабатывает на том уровне иерархии, где был определен (рис. 4.25). Переход в последнее активное состояние отменяет все заданные по умолчанию переходы в данном сложном состоянии. Идя того чтобы создать на диаграмме переход в последнее активное состоя- ние, необходимо, выбрав в меню кнопку указать место в поле того сложного состояния, где его требуется разместить. Если дважды щелкнуть ливой кнопкой мыши по соответствующей кнопке, то можно устанавливать несколько переходов в последнее активное состоя- ние, не выбирая соответствующую кнопку каждый раз. Чтобы отменить та- кой выбор, достаточно щелкнуть правой кнопкой мыши. щелчком левой кнопки мыши Рис. 4.25. Карта состояний с переходом в последнее активное состояние
150 Практическое моделирование динамических систем Connective junction | Соединительный переход — это графический объект, который позволяет I упрощать диаграммы Stateflow и генерировать более эффективный код Со- 1[ единительный переход можно трактовать как состояние, в котором ничего № нс происходит, а лишь ожидается выполнение условий перехода. Его можне I использовать, если у состояния существует два перехода, ожидающих одного I и того же события, но срабатывающих при истинном значении различных В булевских выражений. Соединительный переход можно помещать на диа- | грамме теми же способами что и переход в последнее активное состояние с I помощью кнопки меню . ft На рис. 4.26 представлена иллюстрация использования соединительного пе рсхода в случае, когда реакция на произошедшее событие многовариантна и зависит от уточняющей информации. ^9 ' 1 ;:ж I & Data Переменные — это неграфические объекты на диаграмме Stateflow, предка значенные для хранения числовых данных. Переменные можно использо вать на любом уровне иерархии. Различают следующие виды переменных: □ входные; □ выходные; О локальные; □ константы; П существующие только в течение определенного временного интервала; О определенные в рабочем пространстве Matlab; П импортируемые из источника, внешнего относительно диаграмм Statetio* и Simulink; & I к * ф i ::
К Глава 4. Современные программные средства 151 7J экспортируемые адресату, внешнему относительно диаграмм Stateflow и Simulink. Для того чтобы создать входные (выходные и т. д.) переменные в блоке Stateflow, необходимо в окне соответствующей диаграммы Stateflow выбрать соответствующий пункт меню: Add/Data/Input from Simulink для создания входной, Add/Data/Output to Simulink для создания выходной и Add/Data/ Local для создания локальной церемонной, и в открывшемся диалоговом окне Data (рис. 4.27) ввести имя переменной и другие ее характеристики. '«С*’ ** Wk*!* Name: ["data Parent: (chart] uniitled/Chart Units: | Scope- jTnput from Simulink Type: [double Port: h initias Value r Limit Range Firxl | f“ Watch in Debugger Description: Docuinen? Link: | OK Minimum: | -inf Maximum. [ inf у I Е.к •went События — это неграфические объекты на диаграмме Stateflow, управляю- щие диаграммой. Все события, имеющие отношение к диаграмме Stateflow, должны быть определены. Различают следующие виды событий: О входные; Е « и выходные; О локальные; □ импортируемые из источника, внешнего относительно диаграмм Stateflow и Simulink; К: О экспортируемые адресату, внешнему относительно диаграмм Stateflow и Simulink. 6 Зак. I26I I Carn el j Help Apply Рис. 4.27. Диалоговое окно Data
152 Практическое моделирование динамических систем Дзя того чтобы создать входные (выходные и т. д.) события в блоке Staleflow, необходимо в окне соответствующей диаграммы Stateflow выбрать соответст- вующий пункт меню: Add/Event/Input from Simulink для создания входного и Add/Event/Output to Simulink для создания выходного события, и в открывшемся диалоговом окне Event (рис. 4.28) ввести его имя и другие характеристики. / Event; event Scope: Name: j event Parent (chart) until ЫЛ hert Scope: |Input fromSirnulink ,nde«- [i 3 T,'99«: ^Rising Edg Debugger breakpoints: Г" Start of broadcast Г End of broadcast Description: OK I Cancel I Help 1 Apply I .............J — »- « '' Docurwnt Link' [ • L* 1* :&. Рис. 4.28. Диалоговое окно Event Запуск модели Simulink Я После того как проектирование всех необходимых компонентов модели бу- дет завершено, можно приступать к ее исследованию с помощью Simulink. Прежде всего, надо указать условия проведения вычислительного экспери- мента. Для этого следует выбрать в меню окна разработанной модели пункт Simulation/Paranieters и в открывшемся диалоге указать модельное время, в течение которого будет проводиться эксперимент; выбрать метод интегриро- вания, если это необходимо, и указать желаемые погрешности, с которыми j должно быть получено численное решение. Рекомендуем, прежде чем начинать собственно моделирование (команда j Simulation/Start), сохранить информацию о разработанной модели с помо- щью команды File/Save. По команде Simulation/Start Simulink прежде всего проверяет правильность разработанной модели, и, если не обнаруживает ошибок, переходит к моделированию. OmSim и Omola Пакет OmSim — это интерактивная оболочка для создания и исследования динамических систем, использующая язык моделирования Omola. Оболочка работает под управлением X Windows на рабочих станциях Sun. Руководство
Глава 4. Современные программные средства 153 пользователя, написанное Матсом Андерсоном (Институт Технологии горо- да Лунда, Швеция) и сам пакет, распространяемый бесплатно можно найти в Интернете (см. например соответствующие ссылки на сайте http:// ww.modelica.org). Оболочка включает в себя: П Omola parser. Блок грамматического контроля. Обеспечивает проверку грамматики описания создаваемой модели. □ Library browser. Визуализатор библиотечных файлов. Обеспечивает доступ к библиотекам, подключенным к пакету в момент загрузки. □ Model editor. Редактор моделей. Предназначен для визуального проетиро- вания. □ Simulator. Компилятор моделей и испытательный стенд, со встроенной библиотекой численных методов и средствами отображения результатов выч и ел ител ытого э кспери ме нта. О Command language interpreter. Интерпретатор командного языка для пла- нирования вычислительного эксперимента. OmSim Основное окно пакета OmSim содержит меню File, Tools и Display, а также два дочерних окна для просмотра содержимого библиотек и вывода инфор- мации о допущенных при создании описания модели ошибках: □ Library Browser — для просмотра содержимого основной библиотеки Base и рабочей — Scratch. □ Omsim Log — для отображения информации об ошибках и другой отла- дочной и нформаци и. Создание простейших моделей Процесс работы с оболочкой авторы руководства рассматривают на примере модели, заданной с помощью уравнения Ван-дер-Поля: d2y , 2 ,.dv n —+ -b)-~- + y = 0, dr dt которая на языке Omola будет выглядеть так: VanDerPol ISA Model with a,b, ISA Parameters WITH defalt:1.0; END; у TYPE REAL; y" +a* (y*y-b) у' +y^0; END;
154 Практическое моделирование динамических систем Различные модели, как стандартные, так и пользовательские, хранятся в ви- де текстовых файлов на языке Omola и ’'подгружаются" пользователем либо одновременно с вызовом библиотеки, либо во время работы. Выбранная для демонстрации авторами модель находится в библиотеке учебных моделей, поэтому достаточно найти нужный файл и загрузить его в пакет OmSim. Созданная модель может быть исследована с помощью Simulator (генератора выполнимого кода и испытательного стенда одновременно) Экземпляр Simulator создается по команде Tools/Simulate. Подготовка модели к чис- ленному исследованию включает в себя: 1. Проверку правильности, с точки зрения грамматики, введенного описа-1 ния модели. 2. Формирование совокупной системы уравнений в результате объединения уравнений отдельных классов. 3. Создание исполняемого кода. Окно Simulator содержит следующие .меню: □ Config. (Настройка). Команды этого меню предназначены для выбора численных методов и их параметров. □ Access (Доступ к переменным). Команды этого меню предназначены для отображения списка всех переменных модели, их значений, заданных при описании модели, и присвоения начальных значений тем перемен- ным, значения которых не были заданы при редактировании □ In/Out (Ввод/вывод). Команды этого меню создают экземпляр окна Plotter (Построитель графиков) и связывают его с отображаемыми переменными?! В начале очередного эксперимента пользователь указывает желаемое на- чальное и конечное модельное время и управляет экспериментом с помо- щью кнопок Start (Старт), Stop (Стоп), Continue (Продолжить) и Reset (Восстановить исходное состояние). 11 Создание структурированных моделей Пакет OmSim позволяет работать и со структурированными моделями. Струк- турированная модель может содержать элементарные и составные модели* Поведение элементарной модели определяется только ее уравнениями. Струк- турированная модель строится из экземпляров библиотечных классов, а ее совокупная система уравнений — из уравнений входящих в нее подмоделей, с учетом связей между блоками и их направленности или ненаправленности. Как и обычно, помимо локальных переменных класса, инкапсулированных в его теле, часть переменных модели можно объявлять интерфейсными, что де- лает их доступными для других блоков. Эти специальные интерфейсные пе- ременные называются terminals (клеммами). Экземпляры клемм помещают в тело класса-модели. Клеммы могут быть элементарными и составными.
Глава 4. Современные программные средства 155 Клеммы различных моделей можно соединять между собой с помощью соп- Eections (Соединений). Соединения определяют отношения между взаимо- связанными клеммами. Соединения также могут быть элементарными и со- ставными Роль клемм и соединений наиболее наглядно видна на примере специаль- •. ной библиотеки для проектирования электрических схем из стандартных [ компонентов, таких как сопротивления, конденсаторы, катушки индуктив- ности. В отличие от механических систем, ненаправленные связи в данном случае приводят к хорошо воспринимаемым уравнениям, вытекающим из законов Кирхгофа. Библиотека содержит классы трех типов: terminals, base classes (Основные классы), electrical components (Компоненты В5: электрических цепей). Основным классом в группе terminals — является : Electrical Terminal (Электрическая клемма). Эта структурированная : клемма содержит два элементарных компонента: voitageTerminal и cur- \ renLTerminai. Данный класс представляет собой элементарное электриче- ское соединение, соответствующее, например, одному из проводов, подхо- I дящих к сопротивлению. В качестве основного в группе base classes можно рассматривать класс sleetгicTwoPole (Электрический двухполюсник). Он является родителем | большинства электрических элементов, у которых имеются две клеммы. Его клеммы называются Т1 п Т2. Класс содержит две локальные переменные, V (Напряжение) и I (Ток). Ток внутри двухполюсника протекает от клеммы Т1 к клемме Т2. fc. Класс Elect г icTwoPoie выглядит так: ElectricTwoPole ISA BasicElectrical: :ElectricModel WITH T1 ISA BasicElectr.Leal::ElectricTerminal WITH END; T2 ISA BasicElectrical::ElectricTerminal WITH Й ENO; |, V TYPE Real; : I TYPE Real; ВЬ, ; T1.I4-T2.I-O; . V=T1.V-T2.V; I [ J>T1.1; s END;
156 Практическое моделирование динамических систем В описании этого классе! легко узнаваемы локальные классы, описания пе- ременных и уравнения для тока и напряжения. На его основе строятся классы Resistor (Сопротивление), Capacitor (Конденсатор), VoitagnGer.erator (Генератор напряжения). Компонентное моделирование предполагает наличие разнообразных биб- лиотек, и поэтому становится важным уметь представлять их в удобной Для восприятия форме. При просмотре библиотек в OmSim можно использован различные древовидные представления: дерево классов, дерево, отражающее компонентный состав модели (дерево экземпляров), дерево подмоделей (структуру модели), и, конечно же, определение любого класса. Model block diagram editor (графический редактор моделей), предназначеь для построения структурированных моделей. Его окно показано на рис. 4.29. В графическом редакторе можно создавать новую модель, используя готовые компоненты. Их помещают в окно, а клеммы соединяют. Это дела- ется с помощью команд меню Insert (Вставить) и Connect (Соединить). Рис. 4.29. Рисунок электрической схемы из руководства ' i 3 i 1 I .4 Специальный командный язык OCL (Omola Command Language) позволяет автоматизировать проведение вычислительного эксперимента. Программа на этом языке записывается в виде текстового файла, ее можно загрузить в OmSim и выполнить. Язык Omola Sil Как это часто случается, первые версии будущих промышленных пакетов, т. е. пакетов, для которых требования надежности работы, дружествен носы по отношению к пользователю, тщательной документированности являются кдючом к коммерческому успеху, именно этими свойствами и не обладают. Коммерческий успех весьма коварное свойство любых технических разрабо- ток, и в частности программных комплексов. Благодаря ему авторы "раскрученного'' пакета, вместо того, чтобы способствовать реализации но-
Глава 4. Современные программные средства 157 вых методов, в течение многих лет старательно сохраняют стремительно ус- таревающие подходы. Первые версии обычно создаются небольшими коллективами, воспринима- ются настороженно, к ним предъявляется множество справедливых претен- зий, но главное — они работают, и убеждают всех, что выбранный путь при- водит к успеху. Еще одним достоинством первых версий является наличие в них "сырых", еще не достаточно тщательно отработанных новых методов и (подходов, которым не место в коммерческих проектах. Многие из них так никогда и не будут реализованы, но часть будет дожидаться своего часа, и составит основу новых "первых версий". I Язык моделирования Omola является предшественником языка Modelica, и на j наш взгляд, в части, касающейся гибридных моделей, богаче последнего. Он I проще для восприятия, чем Modelica, и прекрасно подходит для иллюстрации основных отличий классов, используемых при объектно-ориентированном J программировании, от классов, необходимых для объектно-ориентированного I моделирования. В этой главе мы лишь кратко опишем данный язык, а всех I заинтересованных читателей отсылаем к оригинальному руководству. I Классы У Классы объектно-ориентированного языка Omola, как и обычно, использу- I ются для построения дерева классов, а их экземпляры — для построения | структурированных моделей. I Напомним еще раз, что впервые классы были введены авторами языка I Simula-67 в те годы, когда господствовали Fortran, Algol-60 и Cobol. Потреб- I ность в классах возникла потому, что обычный программный блок Алгола-60, I а именно этот язык и расширяет Simula-67, было трудно использовать для мо- I цедирования по двум причинам. Во-первых, в моделировании принципиально I важно уметь разбивать исходную задачу на компоненты, похожие, но тождест- I венные друг другу, а во-вторых, надо учитывать, что компоненты работают 1 параллельно. Существовавшие алгоритмические языки не содержали трсбуе- I мых механизмов ни для описания компонентов, ни для поддержания их па- 1 раздельного функционирования. Ведение понятий класса и экземпляра в Iе Simula-67, прежде всего, облегчило решение задачи компонентного проекти- рования — исчезла необходимость в утомительном создании программных 1 блоков для множества слегка отличающихся компонентов. Использование 1 инкапсуляции, наследования и полиморфизма для удобного структурирования I модели в виде дерева классов получило широкое распространение позже, уже |в объектно-ориентированном программировании, и вернулось в объектио- I ориентированное моделирование в виде отлаженной технологии. Но эта тех- нология хорошо работает при решении "чисто программистских" задач, и не г
158 Практическое моделирование динамических систем переносима впрямую в объектно-ориентированное моделирование (подробно эта проблема обсуждается в главе 6). Язык Omola интересен тем, что определяет классы, исходя уже из потребно- стей моделирования, т, е. учитывает структуру моделей, способ их соединения в более сложные структуры и поведение, которое может описываться различ- ными видами уравнении и зависит от наступления различных событий. Класс высшего уровня иерархии языка Omola называется глобальным. От него могут порождаться классы более низких уровней. Любой порожденный класс может содержать в качестве атрибутов другие классы, называемые ло- кальными, и имеет собственное имя (<паше>), своего родителя ^super- class^ и тело (<class body>), где содержатся определения атрибутов. Общее определение класса имеет вид: спалю > ISA csuper class> WITH cclass body> I END; ..Zag Атрибуты класса Атрибутами класса могут быть: □ компоненты, представляющие собой подмодели, клеммы, параметры; □ переменные; □ уравнения; □ соединения; П события. Компонентом называется определение класса, размещенное в другом клас- се-модели в качестве атрибута. В приведенном ниже примере мы имеем де^| ло с многокомпонентной моделью, содержащей устройства Tanki и Tank2. TankSystem ISA Model WITH Tankl, Tank2 ISA TANKModel END; Класс, как и обычно, скрывает (инкапсулирует) свои собственные перемен- ные от несанкционированного доступа. Эти локальные переменные требуют описания. Описания располагаются в специальной области в теле класса,^ области описаний. Example ISA Class WITH x TYPE Real :=1.0; у TYPE Real :=2.0; END;
Глава 4. Современные программные средства 159 Переменные имеют имя и тип, а их значения могут меняться во время прогона модели, т. к. обычно это фазовые переменные. И это уже является существенным отличием от классов, используемых при объектно- ориентированном программировании. В экземплярах классов, предназна- ченных для моделирования, переменные непрерывно меняются в соответст- вии с заданными уравнениями. В языке существует пять скалярных типов данных: целые, вещественные, строковые, символьные и перечислимые пе- ременные. Поддерживается один структурированный тип — матрицы. При определении переменных их можно связывать с выражениями или константами. Под связыванием понимается упрощенная форма описания пронедуры-функции, которая существует в том же Fortran. Переменной ста- вится в соответствие не только тип, но формула, по которой следует вычис- лять ее значение. Функция, всегда сохраняющая свое значение, т. е. кон- станта, также попадает под это определение Если переменная связана с константой, то эта константа сохраняет неизменное значение во всех экзем- плярах и во время прогона. При связывании переменной с выражением се тип и тип выражения должны быть совместимыми. Exapmle ISA Class WITH G ISA Parameter; z TYPE Real :=G4-2.G; END; Несвязанные переменные называются свободными. Уравнения Основной формой описания поведения гибридных систем являются уравне- ния различного типа, представленные в разнообразной форме. Тип уравне- ния определяется прикладной областью, где используется пакет, и в нашем случае речь идет об алгебраических, обыкновенных дифференциальных и алгебро-дифференциальных уравнениях. Допустимая синтаксическая форма представления уравнений, прежде всего, определяется наличием програм- много обеспечения, способного их решать, но должна быть также удобна разработчику, т. к. их запись в форме, присущей алгоритмическим языкам, приводит к многочисленным, трудно замечаемым ошибкам. Помимо урав- нений, для описания поведения используют и обычные функциональные зависимости, которые можно трактовать как явное решение уравнений. Многообразие различных форм уравнений удобно для пользователя, но ус- ложняет компилятор или интерпретатор. Таким образом, авторы различают два типа уравнений, которые они назы- вают соответственно ’'уравнения" и "присваивания". На наш взгляд, трактов- ка функциональных зависимостей как специального типа уравнении, только усложняет понимание языка, и было бы проще всего ввести классификацию уравнений и выражений.
160 Практическое моделирование динамических систем Уравнения имеют вид: | <expression>=<exprkession> | и могут разрешаться относительно любых входящих в выражения переменных. I Присваивания записываются в форме: | <variable name >:=<expression> | По мнению разработчиков языка, присваивания это те же уравнения, н< в i них явно указано, какую переменную следует считать неизвестной и по к«- | кой формуле вычислять. Авторы называют их также уравнениями, от|ж I жающими причинно-следственные отношения. Присваивания трактуются I точно так же, как переменные, связанные с выражением, но отделенные pi Е своею описания. Присваивания в теле класса переопределяют наследуемые | присваивания и связанные с выражениями переменные. j Уравнения могут содержать арифметические и логические операторы, имена переменных, а также первые и вторые производные переменных, обознэ- I чаемые с помощью одинарной или двойной кавычек, присоединенных в I виде суффикса к имени переменной. Допустимо использование и более вы | соких производных, но для это следует использовать специальный оператор I явно указывающий имя и порядок производной. | Наследование | Класс наследует все атрибуты своего предка. Если в описании класса появ- i ляется переменная с тем же именем, что и у предка, то локальная персмен| мая потомка переопределяет соответствующую переменную предка. Переоп- ределять статус (описание) переменной не разрешается. По определению множество атрибутов класса есть множество локальных атрибутов и множество непереопределенных атрибутов предка. Уравнения переопределять нельзя, у них нет имен, в то же время можно переопределять присваива!<ия. Вопрос о наследовании в объектно-ориентированном моделировании сло- жен уже потому, что усовершенствование технических устройств, находящее свое отражение в классах-потомках, предполагает сохранение основных свойств родительского класса и класса-потомка, и требует введения меры "близости" двух классов. Среди трех основных составляющих классов для моделирования структуры, поведения и динамического образа, видимр только в наследовании структуры имеется относительная ясность. Что же касается наследования поведения, даже если речь идет только о наследова- нии уравнений и последовательном видоизменений их так, чтобы потомки демонстрировали усложненное поведение одного типа, то здесь, как гово- рится, "еще даже конь не валялся". Наследование динамического образа, и сю модификация в классе-потомке — проблема скорее техническою харак-
Глава 4. Современные программные средства 161 тера, ио и она до сих пор не решена, если судить по реально существующим Iрафическим оболочкам Основная библиотека Основная библиотека определяет несколько базовых классов. Terminal — класс-родит ель всех клемм. Существует несколько разновидно- стей клемм-потомков класса Terminal. Рассмотрим некоторые из них. Basi cTermj nal используется как родитель всех классов, имеющих одну ин- терфейсную переменную. Имеет следующие атрибуты: :□ value — значение переменной; □ quantity — строка, в которой определяется физическая сущность пере- менной (существует список разрешенных сущностей); □ unit — единица измерения; □ variability — признак, говорящий о том, что переменная сохраняет присвоенное ей значение на протяжении прогона; default — значение по умолчанию, используемое в случае, если интер- фейсная переменная остается свободной, т. е. нс подключенной ни к ка- кой другой клемме. SiiapleTerminal. Разновидность Класса BasicTerrninal С ДОПОЛНИТСЛЬНЫМ .атрибутом causality, признаком причинно-следственных отношений. Ат- рибут может принимать значения — input (вход) или output (выход) Класс zeroSumTermiai — это разновидность класса BasicTerminai с ука- занием направления — direction, необходимого для правильного форми- рования совокупных уравнений. Направление указывается, например, для потоков и сил. 1 — используется для построения устройств, у которых может □ RecordTermi быть много различных интерфейсных переменных. Model (модель) — это родитель всех моделей. Parameter (параметр) является родителем всех параметров. LVariable (переменная) — это родитель всех переменных. Connection (связь) является родителем всех соединений. Соединения Соединения — это локальные классы, определяющие тип соединения клемм (см. главу 3, где подробно рассматриваются направленные и ненаправленные связи). Синтаксис определения соединения выглядит следующим образом: cterminal name> AT < terminal name>.
162 Практическое моделирование динамических систем Соединения транслируются в уравнения, тип которых зависит от вида со единений, и удовлетворяют следующим правилам: □ Структура клемм должна быть идентичной. □ Сущности клемм должны совпадать. □ Типы клемм должны совпадать. □ Значения клемм-констант должны совпадать. При соединении входов-выходов виды переменных должны удовлетворят соответствующим правилам. Дело в том, что в языках моделирования имее> ся несколько различных классификаций переменных. Первая связана с Ти- пом переменной, т. е. описанием области значений и допустимых операций Вторая делит переменные на входы-выходы, переменные состояния, юте*? мы, что имеет принципиальное значение при проверке правильности соединения блоков и составлении совокупной системы уравнений дли многокомпонентной модели. Возможно также деление переменных на не- прерывные и дискретные, и в этом случае необходим соответствующий кон троль за правильностью использования этих переменных ных или разностных уравнениях. в дифференциала События В языке Omola можно описывать гибридное поведение, описании гибридного поведения играют события, (события) содержит описание logical expression (условий его возникно- вения) и описание action (предпринимаемых мгновенных действии): ONEVENT <condition> <action>; Ключевую роль f Описание evenS В случае, если реакция на событие представляет собой сложную операцию и требует программного кода в виде последовательности операторов, описа ние может иметь следующую форму: ONEVENT <logical cxprcssion> DO <action statements> END; z- "I Существует возможность присваивать событиям имена. События с именам:! могут быть определены с помощью потомков классов Event и Event Те rminal, например: Е ISZVN Event; ONEVENT <condition> CAUSE Е; ONEVENT Е DO <action statemcnts> END; При возникновении событий допустимы следующие мгновенные действия: О Присваивание новых начальных значений переменным. Сначала создай- ся копия новой переменной, а затем ей присваивается новое значение new(X):~ <experession>.
163 Гпава 4. Современные программные средства □ Порождение НОВЫХ событий — ONEVENT <or~expression> CAUSE <list of event names>. □ Передача событий по связям. Клеммы можно использовать для передачи сообщений о событиях, если они определены соответствующим образом. Передача происходит в обоих направлениях, если клеммы ненаправлен- ные, и от "входа” к "выходу", если они направленные. События могут "задерживаться" на заданное время. Для это предусмотрен специальный оператор, связывающий имя события с временем задержки. Дискретные переменные В языке определены два вида переменных: непрерывные и дискретные, т. е. определенные на непрерывном и дискретном времени. Дискретные переменные требуют специального определения: X TYPE DISCRETE Real; Если вид переменной не указан, то се относят к непрерывным. Выражения, содержащие дискретные переменные являются дискретными, и могут назы- ваться уравнениями (в частности, это могут быть разностные уравнения) и дискретными присваиваниями. Термин "дискретные уравнения' на наш взгляд нс совсем удачен, т. к. относится и к уравнениям, определенным на дискретном времени (разностные или сеточные уравнения), и к любым ^уравнениям, решаемым во временной "щели", т. е. в момент, когда выбира- ется и формируется новое текущее непрерывное поведение. Дискретные присваивания могут быть определены в мгновенных действиях или в любом другом фрагменте в модели. Если дискретные присваивания или уравнения ^.определены нс в мгновенных действиях, то они трактуются во время испол- нения как равенства, и меняются только в тех случаях, когда происходят события, влияющие па значения переменных в правых частях. С помощью дискретных присваиваний реализуются разностные уравнения: ONEVENT Е2 DO new(х):=Х+1.0; END; что эквивалентно л>+1 = xk + 1. Dymola и Dymosim Dymola и Dymosim — это две независимые интерактивные оболочки для моделирования и исследования динамических систем, пришедшие на смену OmSim. Подходы, наблюдаемые при проектировании графических сред для моделирования динамических систем, столь же различны, как и при проек- тировании языков. В одних случаях проектировщики совмещают в одном программном продук- те и редактор моделей и испытательный стенд, в другом — для каждой из
л 164 Практическое моделирова ние дина мических систем операций создают свою собственную оболочку. Оформление испытатель- I ного стенда как самостоятельного продукта это шаг на пути к стандартиза- ции вычислительною эксперимента. Появляется возможность работать с моделями, написанными на различных языках, и воспроизводить их пове- дение с помощью единой библиотеки численных методов Надо отметить, что во всех оболочках библиотеки численных методов очень похожи друг на друга, как вы увидите из сравнения пакетов Dymosim и Model Vision Stu- dium. В то же время их разработка весьма трудоемка, и это связано не толь- ко с их объемом, но с жесткими требованиями к надежности работы. На- пример, отсутствие численных библиотек на языке Java сдерживает появление полноценных межплатформенных оболочек, и они пока еще ус- тупают оболочкам, использующим программные реализации численных ме- тодов, написанные на Fortran. По-разному решаются вопросы, связанные с организацией проведения вы- числительного эксперимента и обработки полученных результатов. Нагляд- ность вычислительного эксперимента вступает в противоречие со скоростью моделирования, и для проведения длительных, многовариантных расчетов предусматривается возможность генерация "быстрого кода", без визуализа- ции поведения Обработка и документирование результатов могут прово- диться собственными средствами оболочки, которая в этом случае неминуе- мо превращается в очень громоздкую систему, а могут передаваться спе- циализированным пакетам. Наконец, существуют различные мнения о том, каким должен быть язык, не- обходимый для проведения вычислительного эксперимента. Выбор того или иного уровня сложности языка определяется тем, на кого ориентирован пакет. С одной стороны, моделирование стремительно проникает во все сферы чело- веческой деятельности, и, следовательно, язык вычислительного эксперимента должен быть простым и интуитивно понятным. С другой стороны, с помощью графических сред моделирования уже сейчас решаются очень сложные задачи, а простота языка в этом случае является недостатком. Авторы Dymola выбрали простой и интуитивно понятный язык проведения! вычислительного эксперимента. Dymola или лаборатория моделирования , динамических систем Основное окно оболочки Dymola содержит четыре дочерних окна: О для контроля процесса разработки и исследования модели; □ для визуального моделирования; П исходно минимизированное анимационное окно; □ исходно минимизированное окно для математической графики,
|.j Глава 4. Современные программные средства 165 Г а также пять кнопок: □ Run a command script (Выполнить программу на командном языке); □ Modify parameter values (Модифицировать значения параметров); □ Modify initial conditions (Модифицировать начальные условия); □ Specify simulation run (Задать параметры вычислительного эксперимента); □ Perfofm simulation (Осуществить прогон); и четыре меню: □ File (Работа с файлами); □ Experiment (Эксперимент); □ Simulation (Прогон); □ Help (Справка). Простейшая модель Единственное открытое по умолчанию графическое окно предназначено для Г графического описания класса, соответствующего новой модели. Как и обычно, класс может быть составным и элементарным. Элементарный класс содержит только уравнения. Для редактирования уравнении предусмотрен текстовый редактор в виде окна Equation, содержащего два редактируемых поля — поле описаний и поле уравнений. В первом из них записывают, на- j пример: г Real х(scart^l); parameter Real а=1; I а во втором1 der (х)--а*х, что соответствует уравнению первого порядка. Описание уравнений это все, что необходимо для создания простейшей модели. Для реализации вычисли- тельного эксперимента достаточно: □ оттранслировать созданное описание; □ задать параметры прогона и осуществить его; □ затем открыть окно Математической графики и указать переменные, ко- торые вы хотите видеть. После того как модель создана, начальные значения переменных и значения параметров можно менять при очередном прогоне. Для этого и служат кнопки Modify initial conditions, Modify Parameter Values.
fl 166 Практическое моделирование динамических сиате), Создание структурированных моделей Структурированные модели можно создавать из существующих компонентов и вновь созданных классов, которые для этой цели помещают в библиотек} классов. Как и в пакете OmSim, в пакете Dymola существует библиотека EiLib (электрические компоненты), а также библиотека Mbs Lib (меха- нические компоненты), содержащие наиболее распространенные компонен- ты для проектирования электрических схем и механических систем Создание компонентной модели производится в специальном графическом окне с помощью операции drag-and-drop. Графический элемент нового уст- ройства — это прямоугольник с контактами (cut), представляющими ин- терфейсные переменные. Существует шесть типов контактов. Контакты - это классы, атрибуты которых можно редактировать. Тип контакта опреде- ляет результирующую систему уравнений. Контакты компонентов соедини ются связями, образуя схему нового устройства. *if При разработке нового устройства (нового класса) создают компонентную схему, добавляют уравнения, описывающие собственное поведение, и тре- буемое число контактов. Создание анимированных моделей В пакете Dymola с каждой моделью можно ассоциировать и 3-мерный образ поведение которого можно наблюдать в специальном анимационном окне. Для механических систем соединение компонентов в единую систему приво- дит к объединению в единый образ, составленные из образов компонентов Командный язык Командный язык пакета Dymola позволяет загрузить и выполнить текст на командном языке, описать характеристики вычислительного эксперимента (метод, точность, количество выводимой информации), характеристики прогона (начало, конец), осуществить прогон и вызвать программу в ука- занной операционной среде. Визуальное моделирование в пакете Dymola Пакет Dymola использует для описания моделей язык Modelica. Основой языка Modelica является класс. Классы можно использовать: О для описания модели (класс); □ для писания способов соединения отдельных компонентов в единое це- лое (соединения); □ для создания структурированных моделей (пакет). Класс может быть представлен в графической форме: □ значком; □ функциональной диаграммой
Глава 4. Современные программные средства 167 или в текстовой форме: □ текстом на языке моделирования; □ уравнениями с соответствующим описанием переменных; □ текстами классов, использованных внутри данного класса. Для каждого класса хранится информация о расположении его графических элементов, нс зависящая от размера экрана и размера окна (абсолютная система координат). Графический редактор моделей позволяет помещать нужные компоненты, соединять их и редактировать. Редактировать элементы классов можно в соответствии с принятыми правилами наследования. Графический редактор содержит следующие примитивы: □ линии и многоугольники; □ прямоугольники и эллипсы; □ текст. Дня просмотра результатов моделирования предусмотрено два окна — анимации и математической графики. Dymosim Dymosim — это специальная программа, предназначенная только для воспро- изведения поведения моделей, описанных дифференциальными, алгебро-диф- ференциальными и переопределенными алгебро-дифференциальными урав- нениями. Модели могу]’ быть построены различными графическими оболоч- ками, но должны быть представлены в виде текстового файла специального вида. Правые части уравнений могут меняться в зависимости от событий, свя- занных с наступлением конкретного времени, достижением переменными указанных значений и поступающих с постоянным временным шагом сигна- лов. Это означает, что по ходу интегрирования оболочка будет следить за по- явлением событий, приостанавливать численное интегрирование при их обна- ружении, вычислять координаты события с требуемой точностью, выполнять необходимые мгновенные действия и только после этого продолжать интегри- рование текущей или новой системы уравнений. Dymosim может работать с моделями, созданными в Dymola, Matlab и напи- санными на языке AN DECS. Созданная программа может быть вызвана как функция языка С (C-function). Модели, написанные на Fortran, либо на С, должны иметь специальный интерфейс, называемый Dsblock. Первая версия программы Dymosim была написана в 1991 г. Версия 4.0 была создана в 1994 г. (подробнее об условиях продажи см. http://www. modelica.org).
168 Практическое моделирование динамических систем 1 Исходный текст программы для Dymosim должен быть подготовлен в виде текстового файла (Dymola и Matlab умеют это делать), в который включает- ся информация об условиях проведения численного эксперимента, и этот файл компилируется в выполняемый модуль dymosim.exe. Осуществляется прогон, и программа завершает работу. По умолчанию результаты моделирования сохраняются в файле двоичного формата пакета Matlab. При необходимости можно вызвать программу печа- ти графиков, являющуюся частью специальной программы Dymoview, или использовать Matlab для просмотра и анализа результатов. ! " - Численные методы Dymosim В приводимой ниже табл. 4.1 перечислены названия программных реализа- ций численных методов, существующих в оболочке. i Таблица 4.1. Программные реализации численных методов ____________________________________________л Корни № Название Тип* Порядок Жесткие Плотный программы вывод 1 1 DEABM ODE 1-12 нет да нет 2 LSODE1 ODE 1-12 нет Да нет 3 LSODE2 ODE 1-5 да да нет 4 LSODAR ODE 1-12, 1-5 да да Да 5 Dopri5 ODE 5 нет нет нет 6 Dopri8 ODE 8 нет нет нет 7 GRK4T ODE 4 нет нет нет 8 DASSL DAE 1-5 Да Да Да 9 ODASSL ODAE 1-5 да Да да 10 МЕХХ ODAE 1-24 нет Да нет j * ODE — дифференциальные уравнения; DAE — алгебро-дифференциальные; ODAE — пе- реопределенные алгебро-дифференциальные. lb з I * -Я "Да" в графе "Корни" табл. 4.1 — означает, что в интегратор встроена проце- дура поиска корней функции на решении уравнения. Она позволяет уско- рить поиск точки переключения (так называется операция вычисления ко- ординат события с заданной точностью), если событие описано не в виде предиката, а как корень уравнения. Например, вместо л>0 можно написать л-0 и быть уверенным, что корень будет найден, если точно известно, что| он существует, и единственный. В этом случае вместо "медленной" процеду- I я
Глава 4. Современные программные средства 169 ры деления отрезка ионолам можно применять "быстрые’’ алгоритмы поиска корней, такие как метол Ньютона. Modelica Язык Modelica разработан ассоциацией "Modelica", штаб-квартира которой расположена в городе Линкопинг, Швеция. В авторском коллективе вы найдете представителей многих европейских стран. Язык Modelica свободно распространяемый, объектно-ориентированный язык для моделирования больших, сложных и физически разнородных сис- тем. Их компоненты могут иметь различную физическую природу, как, на- пример, у мехатронных систем в робототехнике, автомобилестроении, воз- духоплавании, где одновременно используются механические, электри- ческие, гидравлические блоки и электронные системы управления. Авторы языка стремились к тому, чтобы пользователю было удобно созда- вать новые библиотеки и многократно использовать и модифицировать уже существующие модели. Модели строятся из независимых компонентов, оформленных в виде классов, в результате чего автоматически строится со- вокупная система алгебро-дифференциальных уравнений. Основным отли- чием и достоинством языка авторы считают возможность строить модели из компонентов с ненаправленными связями (см. примеры главы 3). В языке Modelica, как и в языке Omola, четко разделяются непрерывные и дискретные процессы. Непрерывные процессы описываются в виде уравне- ний (equation), дискретные — с помощью алгоритмов (algorithm). Форма уравнений может меняться в зависимости от наступления событий. Классы Язык Modelica оперирует только с классами. Даже переменные описываются с их помощью. Авторы оправдывают это тем, что, во-первых, единообразное описание облегчает изучение и использование языка, а во-вторых, перемен- ные в языках моделирования имеют больше свойств, чем переменные в ал- горитмических языках. Необходимо учитывать и их размерность, и исполь- зование их как входов-выходов, или контактов, и их связь с непрерывным или дискретным временем. Для удобства введены различные тины клас- сов — model, connector, record, block, type, package И собственно class. Вместо class может быть использован любой из называемых служебными классов — record, type, connector, model, block, package, function, C уче- том следующих ограничений: □ record (запись). Данный класс не может иметь уравнений ни в каком из своих компонентов. Его нельзя использовать в соединениях;
170 Практическое моделирование динамических систем О type (тип). Класс может быть расширением предопределенных классов, записей или типов; ~Ч" □ connector (соединения). Недопустимы уравнения ни в одном из компо- нентов сосди н итсля; П model (модель). Этот класс не может быть использован в соединениях, определяемых ниже, □ block. Фиксированы причинно-следственные отношения. Данный класс предназначен для моделей типа "вход-выход-состояние"; 1 О package (пакет). Может содержать только определения классов и кон- стант; П function (функция). Те же ограничения, что для блока, но нс может со- держать уравнений и в ней разрешена только одна алгоритмическая сек- ция. Модель —- основная структурная единица, которая может включать в себя □ Предопределенные компоненты, такие как Real, Integer, Boolean 1 □ структурированные компоненты, неооходимые для создания исрархиче ских моделей; □ массивы различных типов (array) — векторы, матрицы, массивы моделей; □ уравнения (equation) и/илИ алгоритмы (algorithm); □ соединения; □ функции. К предопределенным типам относятся типы, которые можно найти в любом алгоритмическом языке: Real, Integer, Boolean, Soring. При объявлении переменных можно использовать префиксы: Cl flow О parameter О input Благодаря префиксам можно следить за правильностью использования пере- менных. Префиксы discrete (дискретная переменная), parameter (параметр),; (константа) характеризуют, как меняются переменные с течением времени. Префиксы parameter или constant указываю! на то, что перемен- ная всегда сохраняет свое значение. Отличие их в том, что переменным типа parameter можно присваивать новые значения непосредственно перед оче-| редным прогоном модели, на протяжении которого они и остаются неизмен- ными. Префикс discrete — означает, что переменная кусочно-постоянная, и меняет свое значение, только когда останавливается непрерывное время и формируется новая система уравнений. К этим переменным неприменим оператор der О (вычисление производной). Непрерывные переменные могут
Глава 4. Современные программные средства 171 менять свое значение в любой момент времени. Подразумевается, что они имеют префикс continuous, который, однако, явно не указывается Префикс также определяет правила использования переменных в различных языковых конструкциях, связанных с непрерывным и дискретным повеле- нием. Например, если переменная типа Real имеет префикс discrete, то она может появиться в левой части оператора when. С помощью этого опе- ратора можно поменять текущее значение кусочно-постоянной функции при возникновении особого события. Если переменная не была объявлена как discrete, но появилась в левой части when, она считается таковой. Пе- ременная не объявленная как discrete, не встречающаяся в левых частях операторов when и нс имеющая никакого префикса, считается непрерывной переменной. Переменные типов integer, string. Boolean по определению ОТНОСЯТСЯ К типу discrete. Следующая группа ключевых слов связана с защитой классов от несанкцио- нированного использования. Элементы класса могут быть объединены в группы с заголовками public и protected. Заголовки public и protected не наследуются. Отсутствие заголовка трактуется как public. Если extends появился под заголовком protected, то все элементы базового класса стано- вятся защищенными в текущем классе. Если extends появилось под заго- ловком public, то все элементы базового класса наследуются в том виде, как они были объявлены в базовом классе. Защищенные элементы не могут быть ни модифицированы, ни переопределены. Любой элемент описания может быть объявлен как немодифицируемый (final). Это означает, что данный элемент не может быть ни изменен, ни модифицирован, даже если он объявлен как параметр. Конструкция redeclaration переопределяет элемент базового класса. Класс, элементы которого можно переопределять, сопровождается конст- рукцией repicicebie. Переопределенный класс должен быть подтипом ис- ходного. Существуют следующие ограничения на переопределение: О можно переопределять только классы и компоненты, объявленные как replaceble', □ класс, объявленный как repiaceble, может содержать только элементы, объявленные как public; □ константы не переопределяются; □ параметры могут быть объявлены заново или как параметры, или как константы; □ дискретные переменные могут быть вновь объявлены как дискретные, параметры или константы; П функция может быть переопределена только как функция; □ потоковая переменная только как потоковая;
172 Практическое моделирование динамических систем □ элемент, не являющийся потоковой переменной, может быть переопре- делен только как потоковая переменная; □ можно переопределять размерности массивов. При определении функции ее можно связать с ее производной, оформлен-1 ной также в виде функции. Таким образом, можно получить набор функ- ций, каждая из которых является производной предыдущей. Уравнения и алгоритмы Для описания непрерывного и дискретного поведения используются секции equation и algorithm. Уравнения и алгоритмы из соответствующих секций переносятся в реализацию (выполняемый код) без каких-либо изменений. Знаки равенства ' —" используются только в уравнениях, а знаки присваива- ния — только в алгоритмах. Приведенные ниже алгоритмические конструкции обеспечивают возможность менять поведение в зависимости от наступления тех или иных событий. Оператор if В секции equation, не содержащей специальных выражений-параметров, используемых как условия переключения, оператор if должен обязательно сопровождаться оператором else, и каждая ветвь должна определять одина- ковое число уравнений. Число уравнений во время прогона меняться не может! Оператор when | В алгоритмах и уравнениях операторы when активизируются только если ста- новится истинным булевское условие Оператор when можно использовать в секции equation, если уравнения задаются следующими выражениями: □ v^expr □ (out 1,outk) =function_call (in_l, in_2,...} □ c помощью операторов assert (), terminate (}, reint () П операторами for и if — с их ограничениями Уравнения в секции equation можно не упорядочивать. Если уравнения из- быточны, то в теле оператора надо явно указать с помощью правильно на- писанной формулы, что считается неизвестным, а что параметром. Порядо* уравнений и операторов when в секции algorithm существенен, и от неге зависит результат вычислений. Операторы when не могут быть вложенными В качестве условия в них может быть использован оператор edge(), нахо- дящий границу области переключения.
Глава 4. Современные программные средства 173 Соединения Способ соединения объектов определяется оператором connect, располо- женным в секции equation. Оператор должен содержать две ссылки на со- единители, каждый из которых либо является элементом тою же класса, что и оператор connect, либо элементом одного из его компонентов. Для по- строения итоговой системы уравнений необходимо по описаниям отдельных классов: П построить множество соединений; □ сгенерировать полную систему уравнений для всей модели. Множество соединений — это множество переменных, соединяемых с по- мощью оператора connect. Множество соединений может содержать либо только потоковые переменные, либо только непотоковые. Перед тем как построить систему уравнений, определяется множество пере- менных, которые будут участвовать в уравнениях, с учетом иерархии. Затем формируются либо равенства для соответствующих переменных, либо ра- венство нулю их сумм, с учетом знаков. Если переменная-контакт нс участ- вует в соединениях, ее обнуляют. При анализе введенных уравнении пакет может разрешать уравнения, пере- упорядочивать выражения и нс вычислять те из них, что не влияют на ход вычислений. Для векторов и матриц определены стандартные операции ли- нейной алгебры. Чтобы построить конкретные функции, можно определять и использовать класс. События и синхронизация При появлении любого события интегрирование останавливается и начина- ется поиск точки переключения. В общем случае точки переключения ищутся с помощью процедуры деления отрезка пополам, но если точка пе- реключения задана специальным оператором noSVENT, — используются ме- тоды ньютоновского типа. Язык Modelica использует принцип синхронизации потока данных, что оз- начает: □ переменная сохраняет свое значение, до тех пор пока нс будет явно из- менена. Переменным можно присвоить значения как во время непре- рывной, так и дискретной фазы вычислений; □ уравнения, решаемые в непрерывную фазу, удовлетворяются одновременно; □ дискретные вычисления не меняют непрерывного времени; □ общее число неизвестных всегда равно числу уравнений. Таким образом, выполняются только детерминированные вычисления.
174 Практическое моделирование динамических систем Никакие два события не могут появиться одновременно, но за этим должен следить программист при описании модели. Математическое описание. Гибридные системы алгебро-дифференциальных уравнений По введенной пользователем модели Modelica строит совокупную систему уравнений. Для этого, прежде всего, иерархическое описание переводится з линейное, образуя единую систему уравнений и алгоритмов. Выполняются сл еду ющи е 1г реобразо ва н и я: □ начиная с модели верхнего уровня, последовательно объединяются в секции GGLl&tion II ci 1 GO11 LiiiTi, ПрИСуТСТВуЮЩИС В рОДИТСЛЬСКИХ KJIdCCdX, П добавляются уравнения, описанные в соединениях; □ все алгоритмы превращаются в уравнения; П все операторы when развертываются в уравнения. результате возникают дифференциальные, алгебраические и дискретные уравнения вида V:=[х';х;у;t; m; pre(m);p] la с: (relation (v) ) lb m: -- fri {v, c} lc 0=fx(v,c) где: p — параметры или константы; t — независимое время; x(t) — непрерывные переменные, имеющие ненулевые производные; m(te) — дискретные неизвестные, меняющие свои значения только в мо- мент tc возникновения событий, pre(m) — это значения, которые они име- ли в предыдущей непрерывной фазе; y 't) — вещественные переменные, не попавшие ни в какую другую катего- рию (алгебраические); c{te) — все условия операторов if, включая преобразованные операторы when; relation tv) — все отношения над переменными v. Под анализом поведения понимается решение системы алгебро- дифференциальных уравнений с известными начальными условиям в каж- дом состоянии. Система DAE может иметь разрывы, переменную структуру, которые возникают пол действием событий.
Глава 4. Современные программные средства 175 Вычисление осуществляется следующим образом: П решаются уравнения 1с, соответствующие классической динамической системе; О все отношения, входящие в 1с контролируются. При изменении значе- ния отношения ищется точка переключения. Особо выделяются отноше- ния, которые зависят только от времени; О в каждой точке te решается дискретная система уравнений, куда могут входить как дискретные, так и непрерывные переменные: □ как только вычисляются новые значения дискретных переменных, ингег- рироBai I ие продолжае гея. Model Vision Studium — инструмент для визуального объектно-ориентированного моделирования сложных динамических систем Model Vision Studium (MVS) — это интегрированная графическая оболочка для быстрого создания интерактивных визуальных моделей сложных дина- мических систем и проведения вычислительных экспериментов с ними. Па- кет MVS 3.0 работает на Intel-совмсстимых компьютерах в среде MS Windows 95/98/NT/2000. Пакет занимает примерно 15 Мбайт на жест- ком диске и нс предъявляет к компьютеру никаких особых требований, кроме наличия аппаратной поддержки операций с плавающей точкой. Су- ществует также пакет MV 2.1 для MS Windows 3.1. Пакет MVS 3.0 (регистрационное свидетельство Роспатента N990643 от 06 09.99.) разработан исследовательской группой "Экспериментальные объ- ектные технологии" (XJ), созданной при кафедре "Распределенные вычис- ления и компьютерные сети" факультета Технической Кибернетики Санкт- Петербургского Государственного Технического Университета. Свободно распространяемая бесплатная версия пакета всегда доступна на сайтах www.xjtek.com и www.exponeiita.ru. Ключевыми проблемами при разработке MVS 3.0 являлись: □ поддержка технологии объектно-ориентированного моделирования f (ООМ); 0 удобное и адекватное описание гибридных (непрерывно-дискретных) систем;
176 Практическое моделирование динамических систем □ обеспечение достоверности численного решения; □ обеспечение моделирования и визуализации результатов без написании какого-либо программного кода. Подробный анализ этих проблем, обоснование принятых решений и срав- нение MVS с другими визуальными средствами моделирования можно най- ти в ЦЗ]. -Я Технология моделирования в MVS Как и в большинстве других современных графических инструментов моде- лирования, в основе технологии MVS лежит понятие виртуального лабора- торного стенда. На этом стенде размещаются различные виртуальные блоки моделируемой системы — вновь создаваемые и стандартные, такие как 'генераторы сигналов", "измерительные приборы", "устройства отображе- ния", соединенные виртуальными "кабелями". Вся виртуальная квазиаппара- тура функционирует независимо и параллельно, подобно ее физическим двойникам "в металле". Для получения виртуального стенда необходимо описать моделируемую сис- тему на входном языке пакета и создать соответствующий этому описанию программный код, выполнение которого компьютером и будет восприни- маться как работа стенда. Структура пакета MVS приведена на рис. 4.30. я Интегрированная оболочка пакета представляет собой многооконную среду, позволяющую редактировать проект, автоматически преобразовывать графи- ческое описание модели в текстовое и текстовое в графическое, подключать библиотеки классов, создавать свои библиотеки классов, создавать выпол- няемые модели и запускать их, а также запускать специальные подсистемы (оптимизации и символического анализа). Предполагается, что каждой модели (проекту) соответствует определенная папка, в которой хранятся файл внутреннего представления проекта (mvb), файлы установок проекта и выполняемой модели (ini), а также картинки для анимации, DLL пользователя и т. п. Описание проекта и библиотек классов хранится в виде дерева объектов в объектно-ориентированной базе данных MVBase (отдельный файл с расширением mvb на каждый проект и библио- теку классов). Библиотеки классов (за исключением стандартной библиоте- ки SysLib) являются обычными проектами, их могут создавать и редактиро- вать пользователи. Описание проекта пользователь может вводить и редактировать как в визу- альном, так и в текстовом виде. При открытии в интегрированной среде ка- кого-либо проекта его внутреннее представление автоматически разворачива- ется в визуальное представление. В любой момент с помощью специальной команды может быть получено текстовое описание проекта на специальном языке Model Vision Language (MVL), включающее в себя два текстовых файла:
Глава 4. Современные программные средства 177 собственно функциональное описание (расширение mvl) и описание визуаль- ных элементов (расширение рта). Импорт проекта из текстового представле- ния осуществляется специальным MVL-компилятором. Текстовое представление проекта Графический интерфейс пользователя Специальные подсистемы Рис. 4.30. Структура пакета MVS Описание проекта включает в себя описание классов устройств, глобальных констант и алгоритмических процедур и функций, а также описание коп-
178 Практическое моделирование динамических систем кретной конфигурации виртуального стенда, с которой будет проводиться I вычислительный эксперимент. Предполагается, что виртуальный стенд яв- ляется устройством-контейнером TestBench — экземпляром предопределен- [ ного класса _cTestBench. Пользователю необходимо поместить в его ло- | кальную структуру конкретные локальные устройства— экземпляры I классов, определенных в данном проекте или импортируемых из подклю- I ценных к проекту библиотек классов. Стандартная библиотека классов | SysLib, включающая определения типовых блоков (линейные и нелинейные ! блоки, генераторы сигналов и т. д.), подключена к любому проекту по умол- I манию. При создании выполняемой модели программный код создается I только для классов, реально используемых (прямо или косвенно, через [ другие классы) В TestBench. | Все визуальные редакторы работают в режиме так называемой "инкре- | ментальной компиляции", т. е. по завершении ввода какой-либо закончен- I ной конструкции они немедленно проверяют се синтаксическую и семанти- | ческую правильность в контексте уже существующего описания и при обна- | ружении ошибок выводят соответствующие сообщения. При генерации выполняемой модели сначала проводится полный ком- I плексный контроль классов, используемых в TestBench, а затем для каждого I класса генерируется соответствующий программный модуль на промежуток- [ ном языке программирования и в зависимости от типа модели генерируется J соответствующий главный модуль программы. Затем полученная программа компилируется с помощью компилятора командной строки для промежу- точною языка. На этом этапе к сгенерированным модулям присоединяются I стандартные модули промежуточного языка и библиотека периода исполне- ния (RTL) пакета MVS для данного промежуточного языка. В MVS 3.0 возможны три типа выполняемых моделей: ' :Я □ визуальная интерактивная модель в виде 32-разрядного приложения доя MS Windows; ' □ "скрытая" модель в виде 32-разрядной DLL для MS Windows; □ визуальная интерактивная модель в виде Java-приложения, выполняемая на любой платформе, где имеется виртуальная машина Java. В версии 3.0 визуальная Java-модель не поддерживает векторных и матричных пере- менных, а также анимации. При генерации моделей для Windows в качестве промежуточного языка ис- пользуется Object Pascal 10.0 (Borland Delphi 3). Необходимые для компиля- ции модули устанавливаются автоматически при инсталляции пакета MVS. О При генерации Java-модели пользователь должен предварительно установить на своем компьютере JDK 1.2 или более позднюю версию (этот инструмен- тальный пакет бесплатный, его можно найти, например, на сайте фирмы JavaSoft). I
Глава 4. Современные программные средства 179 В описании проекта пользователь может употреблять собственные внешние процедуры и функции, программную реализацию которых он должен вы- полнить в соответствующих DLL или Java-классах. В пакете MVS предусмотрена возможность установки специальных подсис- тем (ToolBoxes), нс входящих в стандартный комплект. Такими в настоящий момент являются подсистема оптимизации и подсистема символического .анализа. При обращении к специальной подсистеме интегрированная среда сначала автоматически генерирует "скрытую” модель в виде DLL, а затем запускает соответствующую программу. Входной язык При работе над этой книгой мы не ставили своей целью поместить в нее полное и подробное описание входного языка пакета Model Vision, с помо- щью которого разработаны все иллюстративные и учебные модели, исполь- зованные нами. В первых главах, приводя функциональные схемы и окна без подробных комментариев, мы надеялись на то, что их понимание нс вы- зовет затруднений. В этом разделе мы также не даем подробных объясне- ний, а лишь хотим показать, как устроен пакет и чем он отличается от дру- гих программных средств моделирования сложных динамических систем. Этот раздел может читаться независимо от других, и предназначен тем чита- телям, кто еще только подыскивает необходимое программное обеспечение. Полная спецификация входного языка приведена в приложении 1. Блоки и связи Основным "строительным элементом" описания в MVS 3.0 является блок, называемый устройством. Устройство — это некоторый активный объект, функционирующий параллельно и независимо от других объектов в непре- рывном времени / с 7’ |Т ~[0,сс]. Устройство является ориентированным бло- ком, т. е. все взаимодействия устройства с окружающим миром осуществля- ются только через его входы и выходы, составляющие интерфейс устройства. Все остальные свойства устройст ва инкапсулированы внутри него. В общем случае в описании устройства содержатся следующие элементы: входы, вы- ходы, параметры конструктора, переменные состояния, поведение, локаль- ная структура. Входы, выходы и переменные состояния являются фазовыми переменными и все вместе составляют фазовый вектор устройства. При написании строк можно пользоваться как русским, так и английским алфавитом. Типы данных включают в себя скалярные и регулярные. Скалярными могут быть вещественные, целые, булевский, перечислимые, символьный и стро- ковый типы. Регулярными являются матрицы и векторы с вещественными
180 Практическое моделирование динамических систем элементами. Для передачи информации о дискретных событиях использует- ся специальный тип — сигнал. Описание устройства всегда строится как описание класса устройств. Для конкретных экземпляров устройства могут быть указаны специальные зна- чения параметров конструктора. Все устройства являются потомками базо- вого класса CDevice. Устройства могут соединяться между собой однонаправленными функцио- нальными связями и входить в состав других устройств, образуя иерархиче- скую структуру связей. Следует отметить, что однонаправленность связей является осознанным ограничением, вызванным проблемами с получением численного решения для композиции гибридных блоков (см. раздел "Чи& ленное решение"). Поведение Предполагается, что поведение любого блока является гибридным. Для за- дания гибридного поведения авторами пакета выбран формализм гибрид- ного автомата, как самый наглядный и мощный (отрицательным следствием этого выбора являются некоторые проблемы с численным решением, но мы предполагаем, что эти проблемы в перспективе разрешимы). Гибридным автоматом называется граф переходов, узлам которого приписа- ны некоторые непрерывные отображения, а дугам — условия переходов и выполняемые действия. В настоящее время для формального описания дис- кретных "машин состояний" стандартом de facto стала "карта состояний" (statechart), придуманная Д. Харелом [411 и "канонизированная" в стандарте UML [23, 33]. Карта состояний, узлам которой приписаны некоторые не- прерывные отображения, называется гибридной картой состояний. Она пред- ставляет собой простую и очень наглядную форму визуального представле- ния смены поведений. В MVS используется специальное ограничение гибридной карты состояний, называемое картой поведения. Карта поведения (bihavior chart или B-chart) — это ориентированный граф, в котором узлам приписываются некоторые локальные поведения, а дугам, на- зываемым переходами, — условия перехода от одного поведения к другому и выполняемые при этом действия. Узел, в котором система находится в каж- дый конкретный момент времени, называется текущим. Один из узлов дол- жен быть предварительно помечен как начальный, он автоматически стано- вится текущим при создании карты состояний. Соответствующее ему на- чальное поведение создастся при создании экземпляра устройства. Смена текущего узла происходит в результате срабатывания переходов. Когда узел становится текущим, создается экземпляр приписанного ему локального поведения. Созданный экземпляр уничтожается, как только узел перестает быть текущим. Именно в этом и состоит отличие карты поведения от карте
Глава 4. Современные программные средства 181 : состояний — в последней локальное поведение существует всегда и можно вернуться в его текущее состояние (history indicator). Локальное поведение может быть описано как: □ непрерывное поведение; □ карта поведения (в этом случае узел называется гипсрузлом); □ пустое поведение (null). к.? Графический образ карты поведения позволяет в наглядной форме представ- лять множества допустимых локальных поведений устройства, их области оп- ределения в фазовом пространстве и времена переходов от одного локального поведения к другому. При описании локальных поведений предусмотрена возможность вводить локальные переменные (аналогичные локальным пере- менным программных единиц). В принятом в MVS подходе, когда локальные поведения создаются и уничтожаются одновременно с изменением поведения системы, текущий фазовый вектор может менять размерность. В общем случае переход Т из начального узла Nb в конечный узел No харак- теризуется: охраняющим предикатом G, запускающим событием Е, и дейст- виями Возможны три типа запускающего события: □ Некоторое логическое условие стало истинным (change event). Л Поступил внешний сигнал (signal event). □ Истекло определенное время после того как начальный узел Nb стал те- Ь кутим (time event). Семантика перехода следующая. Если узел Nb являет- ся текущим и предикат G истинен или отсутствует, переход Т становится открытым, в противном случае переход закрыт. Если событие Е нс ука- зано, то открытый переход немедленно срабатывает. Если указано собы- тие Е, то открытый переход сработает только при его появлении и ис- тинности предиката G (до появления события Е переход может зак- рыться, если предикат G перестает быть истинным или узел Nb теку- щим). Срабатывание представляет собой приведенную ниже последова- дельность мгновенных действий: • выполняется мгновенная последовательность выходных действий узла Nb; • узел Nb перестает быть текущим; • выполняется последовательность действий А; • узел Ne становится текущим; • выполняется мгновенная последовательность входных действий узла Ne. Непрерывное поведение в общем случае задастся совокупностью обыкновенных дифференциальных — = F(.v,jj) и алгебраических уравнений G(s,y,t) = 0 , а dt также формул вида s = <выражение, не зависящее от з>. Уравнения и фор-
182 л Практическое моделирование динамических систем 1 мулы могут задаваться как в скалярной, так и в матричной форме. В рамках версии 3.0 также планируется доработка, связанная с введением функций вре ме н н о го зап аз д ы ван ия. В действиях переходов и узлов возможно использование алгоритмических функций и процедур, а в правых частях уравнений и формул — использова- ние алгоритмических функций, задаваемых либо с помощью встроенного алгоритмического языка, подмножества языка Ada, либо во внешних про- граммных модулях. В частном случае устройства с чисто дискретным поведением всем узлам карты поведения следует приписать пустые локальные поведения и тогда она превращается в обычную карту состояний (с указанным выше отличий ем). Элемент с чисто непрерывным поведением трактуется как гибридный с картой поведения, состоящей из единственного узла, которому приписано непрерывное поведение. Таким образом, дискретные аспекты поведения в MVS отражаются с помощью хорошо знакомого языка карт состояния, а непрерывные аспекты — с помощью привычного языка систем уравнений и формул. I Классы и экземпляры В MVS существует два вида классов — классы устройств (блоков) и локаль ные классы поведений, имеющие смысл только в контексте соответствую- щего класса блока. Статический экземпляр локального устройства создается автоматически при создании экземпляра составного устройства. Статический экземпляр глав- ного устройства модели (TestBench) создается исполняющей системой при прогоне модели и уничтожается по его окончании. Динамические экземпля- ры устройств в версии 3.0 не поддерживаются. Динамический экземпляр локального поведения в узле карты поведения создастся автоматически, когда этот узел становится текущим и уничтожает- ся, когда этот узел перестает быть текущим. Новый класс устройств может наследовать свойства другого класса. Все уст- ройства являются потомками предопределенного класса CDevice, которому приписаны все предопределенные соглашения о взаимодействии с испол^ няющей системой MVS. В классе-потомке (субклассе, производном классе) вы можете добавлять но-j вые элементы описания (новые параметры, фазовые переменные, констан- ты, алгоритмические процедуры и функции, локальные поведения, лока>-| ные устройства и связи), но не можете удалить никакой элемент, оп- ределенный в классе-предке (суперклассе, базовом классе). Вы можете так- же добавить новые узлы и переходы в унаследованной карте поведения (в этом случае автоматически появляется поведение-потомок). В карте поведи 1 ЭД
\ Глава 4. Современные программные средства 183 ния вы можете переопределить локальное поведение в узле, входные и вы- ходные действия в узле, условия и действия в переходе. В рамках версии 3.0 также планируется доработка, связанная с трактовкой анимации как элемента описания класса устройств, а не экземпляра {см. разд. "Визуальная модель"). Выполняемая модель Как отмечалось выше, в MVS существуют выполняемые модели двух видов: П визуальная модель; □ "скрытая" модель (в данный момент реализована только для Windows). Выполняемая модель любого вида является независимым программным мо- дулем и может использоваться как самостоятельная программа. 'I Визуальная модель Образом визуальной интерактивной модели является испытательный фонд, на котором со всех "приборов" сняты крышки, так что пользователь может наблюдать процесс их функционирования и в любой момент изменять на- стройки. В визуальной модели пользователь может видеть все и во все вме- шиваться (естественно, визуальная модель требует значительно больших вы- числительных ресурсов, чем "скрытая") Визуальная модель для Windows — это 32-разряд]юе приложение (схс), а для Java — Java-приложение. Вычислительный эксперимент с визуальной моделью представляет совокуп- ность прогонов модели от начального состояния (модельное время равно 0, переменные имеют исходные начальные значения) до конечного. Прогон модели включает в себя точки останова, в которых модельное время не из- меняется, и интервалы выполнения, в течение которых имитируется функ- ционирование модели в модельном времени. Переход из точки останова к выполнению, от выполнения к точке останова, а также возврат к начально- му состоянию модели производятся с помощью соответствующих команд. Вычисление значений фазовых переменных модели производится в некото- ром модельном времени. Текущее значение модельного времени в условных единицах измерения отображается в левом углу инструментальной панели. В то же время, пользователь наблюдает за ходом прогона модели и интерак- тивно вмешивается в него в реальном физическом времени. Соотношение мо- дельного и физического времени зависит от производительности процессора и сложности совокупного поведения моделируемой системы и в общем случае изменяется по ходу прогона. Отображение значений модельного времени и значений переменных в окнах фазового вектора и матричных переменных, а также ввод значений от интерактивных анимационных компонентов произво- 7 Зак 1ЛЯ
184 Практическое моделирование динамических систем дится в реальном времени с частотой 2—10 Гц. Начальное значение частоту вывода 10 Гц. Если компьютер медленный или уравнений очень много, часто- та вывода понижается, но остается нс менее 2 Гц. Моделирование может осуществляться "как получается" или с выдерживани- ем определенного соотношения модельного и реального времени. По умол- чанию используется первый режим. В этом случае прогон модели идет так быстро, как позволяет мощность процессора. Переменное соотношение скорости изменения модельного и реального времени неудобно при наблю- дении анимации или в случае работы с реальной аппаратурой. В этом случае следует установить второй режим и задать определенное соотношение ско- ростей модельного и реального времени. В этом режиме значение модель- ного времени отображается красным цветом, если на данном компьютере не удается выдержать заданное соотношение. В любом случае происходит пе- риодическая синхронизация процесса моделирования с течением реального времени. Я Для задания внешних воздействий в ходе прогона пользователь может соз- дать план прогона — линейную последовательность в модельном времени операторов присваивания значений переменным модели, посылки сигналов и вывода сообщений. Отладочные возможности визуальной модели включают в себя задание точ- ки останова по истинности некоторого логического выражения, по срабаты- ванию перехода (заданного или любого) и по входу в заданный узел карты поведения. При появлении ошибки в ходе вычислений определяется блок и локальное поведение, где она произошла, а в отладочном режиме (установлен по умол- чанию) дополнительно выводится текстовый вид уравнения или оператора, при выполнении которого она была обнаружена. В отличие от большинства пакетов блочного моделирования в визуальной модели MVS вспомогательные средства визуализации (диаграммы, анимато- ры) не должны входить в описание моделируемой системы, а присоединя- ются прямо в визуальной модели (можно создать несколько вариантов вир- туального стенда и запомнить их в соответствующих установках визуальной модели). Пользователю доступны следующие стандартные окна: □ Test Bench (Испытательный стенд); □ Phase Vector (Фазовый вектор); П Behavior (Карта поведения); О Time diagram (Временная или фазовая диаграмма); □ Ix)cal structure (Локальная структура); □ 2D-animation (Двумерная анимация);
Глава 4. Современные программные средства 185 11 " ' '• ' .................. ... " '• ' ‘ П 3D-aniination (Трехмерная анимация); □ Formula calculator (Калькулятор выражений). В окне Phase Vector динамически отображаются текущие значения всех фа- зовых переменных (параметров, входов, выходов и переменных состояния) выбранного устройства. Значение переменной отображается в соответствии с ее типом. Значения векторов и матриц выводятся в виде матричных лите- ралов, которые могут быть представлены либо в строчном виде, либо ото- бражаться с помощью специального окна. Если значение вектора или мат- рицы не умещается в строке, то это обозначается многоточием в квадратных скобках ([...]). В этом случае значение координат можно посмотреть в спе- циальном окне для отображения "больших" матричных объектов. Постоян- ные фазовые переменные (переменные, определенные в классе) отобража- ются черным цветом, временные фазовые переменные (переменные, определенные в текущем локальном поведении), отображаются серым цве- том. При помещении курсора мыши на изображение переменной появляет- ся подсказка, соответствующая комментарию к данной переменной, если он был указан в тексте программы. Значения переменных можно изменять по ходу эксперимента. По нажатии клавиши <Entcr> или двойному нажатии левой кнопки мыши, а также по специальной команде всплывающего меню происходит переход в диалоговый режим редактирования текущего значения компонента в соответствии с его классом и типом. В качестве нового значе- ния можно задать любое выражение, включающее переменные модели. Для тою чтобы присвоить переменной модели новое значение, нужно обеспе- чить синхронность с процессом моделирования. Точкой синхронизации мо- жет оказаться ближайшее дискретное событие, окончание шага интегриро- вания или точка синхронизации модельного и реального времени В окне Behavior отображается его динамика: текущий узел, активные пере- ходы и сработавший переход. Текущий узел окрашивается синим цветом. Линии активных переходов ярче пассивных. Линия срабатывающего перехо- да подсвечивается в момент перехода. Окно главной карты поведения мож- но открыть с помощью команды всплывающего меню окна Local structure, появляющемся при нажатии правой кнопки мыши на изображении соответ- ствующего устройства. Окно локальной карты поведения, приписанной ка- кому-либо узлу главной карты поведения (изображается двойной линией), можно открыть с помощью двойного щелчка мышью на этом узле или пу- тем выделения этого узла и нажатия клавиши <Ешег> и т. д. но уровням вложенности. Окно Time diagram представляет собой график, в котором по оси X отклады- вается либо значение модельного времени (временная диаграмма), либо значение одной из переменных (фазовая диаграмма), а по оси Y — значения переменных. Переменные связываются с окном Time diagram путем их бук- сировки из окон фазового вектора, матричной переменной или структуры.
186 Практическое моделирование динамических систем Если вы хотите отображать в окне Time diagram переменную векторного или матричного типа, следует дополнительно указать конкретные компоненты^ В отличие от многих других пакетов, в нашем случае окно Time diagram строится одновременно с производимыми вычислениями, а не после их за- вершения. По умолчанию окно является автомасштабируемым, но масштаб можно выбирать и самостоятельно. В окне могут отображаться веществен-3 ные переменные, переменные перечислимого тина и сигналы. Все вещест- венные переменные могут отображаться в едином масштабе или каждая в своем собственном — иногда бывает удобным изображать на одном графике переменные с существенно различными диапазонами значений. Отображе-5; нпе перечислимых переменных не имеет общепринятого стандарта. Мы воспользовались тем, что на наши графики нанесена сетка. Клетки сетки и соответствуют различным значениям переменной перечислимого типа. Для отображения каждого дискретного значения выбираются точки, отстоящие по вертикали от ближайшего значения на одну клетку. Графики, соответст- вующие переменным перечислимого типа, имеют еще одну особенность. Два и больше таких графиков, вообще говоря, нельзя изображать в одних осях, как мы это делаем для вещественных переменных, т. к переменные перечислимого типа нс сравнимы. Мы, тем не менее, отображаем такие графики в одних осях друг под другом. Сигналы изображаются вертикаль- ными линиями длиной в одну клетку. "Я При работе с гибридными моделями на временных диаграммах возникают изображения, соответствующие многозначным функциям. То есть одной и той же временной точке могут соответствовать различные значения одной и той же переменной. Это связано с тем, что на графике достаточно сложно отделить точку, соответствующую моменту срабатывания перехода, от точек интервала, где реализуется непрерывное локальное поведение. Например. ; если переменная сначала изменялась по некоторому закону, а в момент сра- i батывания перехода Т изменяется скачком в действиях перехода, то в точке диаграммы, соответствующей моменту Т, будет отображено и последнее значение переменной, соответствующее функции локального поведения, и новое, присвоенное ей в действиях перехода. Окно Time diagram не только показывает графики переменных, но хранил4 всю информацию, необходи- мую дня их повторного просмотра без проведения повторных вычислений. Все занесенные на диаграмму точки сохраняются, пока окно открыто. Та- ким образом, из точки приостановки можно вернуться в начало экспери- мента или любую другую временную точку, перестроить график в другом масштабе, превратить временную диаграмму в фазовую и наоборот. В окне Local structure отображается структурная схема выбранного состав- ного устройства. Контуры графических обозначений элементарных уст- ройств обозначаются одинарными линиями, составных — двойными. При| прогоне модели изменения значений на линии связи могут отображаться кратковременным выделением цветом (таким образом, непрерывное изме-
Глава 4. Современные программные средства 187 ненис будет отображаться постоянным выделением линии цветом). При на- жатии правой кнопки мыши на изображении устройства появляется всплы- вающее меню, с помощью команд которого можно открыть окно фазового вектора, локальной структуры или главной карты поведения этого устройст- ва. Окно локальной структуры можно также открыть, дважды щелкнув мы- шью на его изображении. Таким образом, окно структуры TestBench являет- ся своего рола "проводником" по всей модели. При двойном нажатии левой кнопки мыши на изображении входа или выхода появляется диалог измене- ния значения (моделирование временно приостанавливается). В точке оста- нова при перемещении курсора мыши на изображении входа или выхода выводится окно подсказки с текущим значением этой переменной. С вхо- дом или выходом можно связать один из стандартных 20-анимационных компонентов, среди которых есть интерактивные. Окно Formula calculator позволяет вычислить в точке останова значения одного или нескольких выражений, в которые мо1уг входить переменные модели. В визуальной модели пользователь может использовать средства 2D и 3D- алимации (см. разд. "Анимация", окна 2D-animation и 3D-animation). Визуальная модель одновременно является сервером автоматизации, под- держивающим интерфейс IMVSAuto. Он позволяет осуществлять чтение и запись значений переменных моделей и управление прогоном модели из друп 1 х 11 рил0ЖС11 и й 'Скрытая" модель "Скрытая1 модель является исключительно вычислительной и не имеет ни окон, ни визуальных элементов управления. Все, что она может, это вычис- лить значения переменных модели в заданной временной точке, но делает опа это значительно быстрее, чем визуальная. В MVS 3.0 "скрытая' мо- дель — это DLL, включающая код модели и часть кода исполняющей сис- темы MVS и экспортирующая набор процедур и функций, обеспечивающих возможность использования этой DLL внешним приложением. Внешнее приложение имеет возможность получить список всех устройств и переменных модели, прочитать и записать значение переменной, продви- нуть модельное время на интервал, продвинуть модельное время до выпол- нения некоторого условия, начать новый прогон модели, вычислить значение выражения и т. д. Комбинация "скрытой" модели и внешнего приложения очень удобна для вычислительных экспериментов, требующих многократ- ных прогонов модели но определенному алгоритму или при разработке спе- циал ы юй ai i и мани и. Таким образом, MVS разрешает пользователю, предварительно отладив опи- сание моделируемой системы и проверив его адекватность с помощью удоб- ной, но громоздкой и медленной визуальной модели, автоматически создать
188 Практическое моделирование динамических систем - затем компактную и быструю "скрытую" модель и встроить ее в свое специ- альное приложение. Анимация Поддержка анимации является одной из важнейших возможностей совре менных инструментов моделирования. Однако создание сложной анимации даже при использовании стандартной графической библиотеки (такой как OpenGL или DirectX) является сложной задачей даже для специалистов и не по силам подавляющему числу пользователей. Поэтому разработчики паке- тов моделирования при определении встроенных средств анимации вынуж- дены идти на определенные компромиссы. В визуальных моделях MVS 3.0 поддерживается встроенная 2D- и 3D- анимация (только для Windows). || Имеется набор стандартных 2D-KOMnoneHTOB в стиле Lab View (линейные индикаторы, стрелочный индикатор, линейный движок, поворотный регуля- тор, цветовой индикатор, кнопки), которые можно поместить либо в окне 2D~aniination, либо в окно Local structure (структурная схема в этом случае играет роль мнемосхемы). Окно 2D-aniination предназначено для размещения на некоторой фоновся подложке совокупности стандартных анимационных компонентов, снабжен- ных пояснительными надписями. Например, это может быть образ пульта управления или мнемосхемы моделируемой системы с соответствующими ин- дикаторами. Стандартные компоненты размещаются в окне с помощью мыши (аналогично работе в редакторе Delphi). Чтобы связать анимационный компо- нент с переменными модели, нужно просто выделить нужную переменную' окне фазового вектора или в окис структуры, затем с помощью операции drag-and-drop переместить ее на изображение анимационного компонента После того текущее значение переменной будет однозначно связано, напри мер, с углом поворота стрелки и при изменении значения переменной в ходе прогона стрелка на индикаторе будет отклоняться. Для интерактивных ком- понентов, напротив, перемещение с помощью мыши движка или поворот ручки регулятора вызовет (после синхронизации с решателем) изменение зна- чения ассоциированной с регулятором переменной модели и далее — измене- j ние фазовой траектории модели. Таким образом, пользователь может непо- средственно с помощью мыши задавать различные внешние воздействия и наблюдать реакцию на них моделируемой системы. Окно 3D-animation позволяет строить динамические трехмерные изображе- ния, представляющие совокупности трехмерных примитивов (линия, шар, I цилиндр, конус и т. д.). Поддержка ЗО-анимации требует наличия на ком- пьютере библиотеки OpenGL (в случае Windows NT/98/2000 эта библиотека устанавливается вместе с операционной системой). Изменение параметров
Глава 4. Современные программные средства 189 сцены, задание требуемого набора трехмерных примитивов и связывание их параметров с переменными модели осуществляется в окне специального редактора. В любой момент вы можете изменить точку наблюдения, нажав левую кнопку мыши и перемещая ее. В окне 3D~animation доступны следующие примитивы: □ линия; П тор; □ стрелка; □ сфера; □ спираль; О поверхность; □ цилиндр; П брус; □ текст. □ конус; □ четырехугольник; С помощью этого набора примитивов можно построить достаточно сложные трехмерные конструкции. Для создания более сложной анимации следует использовать внешнее приложение и "скрытую" модель. Исполняющая система Исполняющая система MVS имеет ряд особенностей, связанных, во-первых, с использованием гибридной карты состояний и, во-вторых, с интерактив- ностью визуальной модели и синхронной визуализацией. Текущее глобальное непрерывное поведение модели представляет собой су- перпозицию локальных непрерывных поведений в текущих узлах всех вхо- дящих в нес устройств. Для гибридной модели оно изменяется всякий раз, когда перестает быть текущим, или становится текущим узел с непустым локальным непрерывным поведением. Использование в MVS ориентиро- ванных блоков позволяет проводить на стадии компиляции модели локаль- ный анализ каждого непрерывного поведения в отдельности, без учета свя- зей между блоками. Однако глобальный анализ непрерывного поведения всей модели на стадии компиляции потребовал бы анализа всех сочетаний поведений в узлах для всех устройств модели. Поэтому при использовании карты поведения часть работы по анализу неизбежно переносится на этап исполнения. Па стадии компиляции выполняется наиболее трудоемкая часть анализа, требующая исходной информации о проекте, и вырабатыва- ется предельно простая для дальнейшего анализа на стадии исполнения промежуточная информация. Для совокупности формул одного непрерывного поведения, которые не за- висят от связей, генерируется одна процедура — метод программного клас- са, соответствующего поведению. В се теле находится код локально отсор- тированной последовательности формул — своего рода макроформула. Для формул, зависящих от связей, генерируются отдельные процедуры. Это по- зволяет сэкономить время на глобальной сортировке во время исполнения модели, которое возрастает пропорционально как минимум квадрату числа формул. Во время компиляции определяется и передается на этап исподне-
Т| 190 Практическое моделирование динамических систем ния перечень входных переменных, являющихся приемниками в связях и входящих в правые части формул. Эта информация необходима для гло- 1 бальной сортировки формул во время исполнения модели. На стадии исполнения всякий раз после завершения всех срабатываний пере- ходов в данной временной точке определяется, изменилось ли глобальное не- т прерывное поведение и, если изменилось, проводится анализ нового поведе- ния (напомним, что на стадии исполнения анализатору доступны только информация о программном коде модели и промежуточная информация, вы- работанная на стадии компиляции). Целями глобального анализа являются: О сортировка формул с учетом связей; П обнаружение и разрыв алгебраических циклов; П определение типа глобальной системы уравнений и выбор адекватного ч и еле н но 1 о ме тода. .Я Сортировка формул производится на основе промежуточной информации, в которой входные переменные заменяются соответствующими выходными! переменными других блоков с учетом реально существующих связей (ад динамической структуры может не существовать экземпляров некоторых блоков и. следовательно, всех исходящих от них связей). Макроформулы могут вычисляться предварительно в любом порядке. Проверка на алгебраические циклы проводится в случае, если два или более локальных поведения, входящих в глобальную суперпозицию, имеют выра- ботанный на стадии компиляции признак наличия "транзитных цепочек". В случае обнаружения алгебраического цикла одна из образующих его свя- зей разрывается и заменяется соответствующим алгебраическим уравнением (адя пользователя выводится предупреждающее сообщение), после чего сно- ва проводится проверка на алгебраические циклы до тех пор, пока все ал- гебраические циклы нс будут разорваны. При изменении локальных поведе- ний, входящих в циклы, дополнительные алгебраические уравнения ликвидируются и связи восстанавливаются. Исполняющая система определяет вид новой глобальной системы уравне-Я ний (алгебраическая, дифференциальная или алгебро-дифференциальная) и выбирает указанный в установках численный метод (см. ниже) для этого вида уравнений. По умолчанию используются "методы-автоматы”. В любом i случае после дискретного события численный метод заново инициализиру- ется, т. к. в результате мгновенных действий в переходах и узлах может скачком измениться значение правых частей уравнений. Другой проблемой, связанной с гибридностью модели, является поиск точ-Я ки переключения непрерывных поведений. Точка переключения может быть обусловлена: □ изменением значения логического предиката дискретного перехода (change event);
191 Глава 4. Современные программные средства □ переходом на другую логическую ветвь условного выражения в правых частях уравнений и формул или условного оператора в функциях, вызы- ваемых из правых частей ("скрытое’' дискретное событие). При решении текущей системы уравнений на каждом шаге проверяется на- личие переключения. Если оно обнаружено, то методом половинного деле- ния находятся решения системы для двух временных точек и 7j, таких, еще нет переключения, а в 7] оно уже есть, а разность фазовых времени в этих точках удовлетворяют заданным в установках что в 7q переменных и погрешностям, и за точку переключения принимается точка 7j. В рамках версии 3.0 планируется доработка, связанная с дополнительным анализом характера повеления функций, определяющих предикат change event, для самого распространенного случая, когда предикат является логи- ческой комбинацией отношений вещественных выражении. Это позволит находить точку переключения более быстро и нс пропустить переключения при больших значениях шага интегрирования. Особыми событиями, прерывающими процесс численного решения ("реша- тель" реализован в виде отдельного потока, независимого от визуальной оболочки), являются интерактивное вмешательство или точка визуализации. При изменении положения интерактивного анимационного элемента или при двойном щелчке мыши на изображении фазовой переменной выставляется спе- циальный флаг, по которому по окончании очередного шага интегрирования процесс решения прерывается, вводится новое значение соответствующей пе- ременной, а затем решение продолжается с новыми начальными условиями. В отличие от многих пакетов моделирования, в MVS визуализация результа- тов осуществляется не после, а во время прогона модели. Момент (в мо- дельном времени) вывода очередной точки на временную диаграмму опре- деляется выбранным масштабом по оси времени (его единица измерения пикселов в секунду). Вывод новой точки на фазовой диаграмме, а также обновление окон фазового вектора и анимационных окон и компонентов производится с определенной частотой в реальном времени пользователя (в зависимости от производительности компьютера она регулируется автомати- чески в пределах 2—10 Гн). Точка визуализации является особым дискрет- ным событием, которое нс требует переинициализации численного метода. Численные методы При проектировании визуальных сред моделирования особое внимание приходится уделять проектированию численных библиотек. Прежде всего, хочется воспользоваться уже разработанным профессионалами програм- мным обеспечением, что делает необходимым доступ к библиотекам, напи- санным на Fortran. Прямой перенос готового программного кода невозмо- жен, и поэтому хочется, чтобы вносимые изменения были бы минимальны- ми, что не избавляет от необходимости тщательного тестирования. При
192 I /рактическое моделирование динамических систем встраивании в среду существующих программных реализаций численных методов приходится ограничивать возможности пользователя настраивать программу на конкретную задачу, т. к. это требует высокой квалификации пользователя и сложно организованного диалога. Наконец, необходимо пре- доставить пользователю возможность использовать свои собственные чис- ленные методы. В совокупности эти требования могут оказаться противоре- чивыми. В среде Model Vision мы прменили свободно распространяемые библиотеки численных методов, написав к ним специальные управляющие модули, цель которых облегчить использование методов, если к ним обра- щаются непосредственно из MVL, и обеспечить автоматическую обработку потока сообщении, возникающих при решении конкретной задачи, с тем чтобы либо получить ответ с нужной точностью, либо диагностировать при- чину, по которой метод не может справиться с ней. Организация библиотеки численных методов Схематически библиотеку численных методов MVS можно изобразить сле- дующим образом (табл. 4.2). Таблица 4.2. Схема библиотеки численных методов MVS Уровень Названия библиотек 1 BLAS FLOAT 2 LINPACK EISPACK MINPACK 3 LA GNA 4 NAESLV ODE SLV DAE SLV Программы библиотеки представляют’ собой иерархическую структуру. Уров- ни (строки таблицы) являются независимыми группами, использующими только программы предыдущих уровней. Их назначение указано в табл. 4.3. Таблица 4.3. Назначение библиотек численных методов Название Назначение библиотеки библиотеки ............. ..... ... -- —.................... - - -- - _ . ------ BLAS Систематизированная коллекция подпрограмм [56], реализует ос- новные элементарные операции линейной алгебры. Используется для структуризации и ускорения работы программ высшего уровня, таких как решение систем линейных алгебраических уравнений FLOAT Подпрограммы [36] этого раздела вычисляют основные характери- стики машинной арифметики LINPACK Систематизированная коллекция подпрограмм [38], предназначен- ная для решения систем линейных алгебраических уравнений с мат- рицами различного типа
Глава 4. Современные программные средства 193 Таблица 4.3 (окончание) Название библиотеки Назначение библиотеки EISPACK Систематизированная коллекция подпрограмм [39, 62], предназначен- ная для решения алгебраической проблемы собственных значений MINPACK Систематизированная коллекция подпрограмм [40, 53], предназна- ченная для нахождения минимумов функционалов и решения систем нелинейных алгебраических уравнений LA Подпрограммы этой группы реализуют основные матричные операции GNA Группа подпрограмм [12, 25], предназначенная для решения основ- ных задач численного анализа общего назначения NAE.SLV Группа подпрограмм, предназначенная для решения систем нели- нейных алгебраических уравнений [16, 53], возникающих при описа- нии поведения ODE_SLV Группа подпрограмм, предназначенная для решения систем обыкно- венных дифференциальных уравнений [26, 27, 42, 43, 44, 45], возни- кающих при описании поведения DAE_SLV Группа подпрограмм, предназначенная для решения систем алгебро- дифференциальных уравнений [27, 58], возникающих при описании поведения Нужная программа подключается автоматически с учетом типа текущего совокупного непрерывного поведения и выбранного численного метода. Структура решателей Для решения каждой из основных задач (систем нелинейных алгебраиче- ских, дифференциальных и алгебро-лифференциалыгых уравнений) пользо- вателю предлагается на выбор несколько программных реализаций числен- ных методов. Указать заранее наиболее подходящий метод решения конкретной задачи удается редко, поэтому важной особенностью современ- ных графических оболочек является простота процедуры смелы численного метода. В MVS это можно делать даже в процессе решения. В то же время существует значительная категория пользователей, которой безразлично, каким методом будет получено решение, лишь бы оно правильно отражало поведение объекта. Аналогичное отношение к численным методам наблюда- ется и на этапе отладки. При отладке, когда модель демонстрирует "не- объяснимое" поведение, бывает важно просто "двигать" время вперед любым доступным способом и смотреть, что произойдет с ключевыми переменны- ми. Программные реализации численных методов, гарантирующие получе- ние решения с заданной точностью, нс способны, как правило, справиться с задачами, возникающими при отладке, и приходится применять очень при- митивные решатели, вплоть до методов с постоянным шагом.
194 Практическое моделирование динамических сиитек Исходя из сказанного, в MVS пользователю предлагаются три категории программных реализаций численных методов. □ Автоматические решатели. Их назначение •— автоматически осуществить подбор наименее трудоемкой программной реализации численного метШ да для решения конкретной задачи, а в случае неудачи предоставить пользователю максимально подробную информацию о встреченных труд- ностях. Анализируя поведение автоматического решателя, пользователь может затем выбрать конкретный метод. П Программные реализации для решения задач конкретного типа. Если поль- зователю известен тип решаемой задачи, то достаточно просто выбрать один из предлагаемых на выбор методов соответствующего класса. Одна- ко и в этом случае, пользователь имеет дело не непосредственно с про- граммной реализацией из соответствующей систематизированной ког- лекции, а с управляющей программой, анализирующей коды завершения вызываемой подпрограммы и, в случае необходимости, меняющей ее па- раметры так, чтобы обеспечить получение решения на всем интернате моделирования. Например, если программная реализация не может обес- печить получение решения с указанной пользователем точностью, т управляющая программа сначала попытается изменить точность, а если это не поможет, то только тогда прекратит счет и выдаст аварийное сс- общение. Выбор конкретного метода осуществляется пользователем в диалоговом режиме, простейший вариант которого сводится к использо- ванию "метода по умолчанию". В качестве "метода по умолчанию" преп- лагается автоматический решатель. Автоматический решатель в заданной последовательности перебирает включенные в него методы, чтобы обее лечить получение решения на всем временном промежутке. Аварийная остановка любого метода сопровождается диагностическим сообщением В случае аварийного завершения работы можно попытаться сменить ме- тод, но лучше устранить причину прекращения счета. "Плохие" числен- ные задачи, конечно же, существуют, но практика показывает, что плохо сформулированных задач гораздо больше. □ Программные, реализации для отладки. Цель этой группы методов — про- двигать модельное время вперед как можно дальше, чтобы дать возмфк ность пользователю понять природу ошибок. Из методов решения диф- ференциальных уравнений к этой группе относятся явный и неявная методы Эйлера с автоматическим выбором шага и метол Рунге-Кутта четвертого порядка с постоянным шагом. Для отладки моделей, основан- ных на нелинейных алгебраических и алгебро-дифференциальных уру- нениях, специальных методов не предусмотрено. Мы различаем три основные численные задачи и три группы соответствую*, щих методов (табл. 4.4).
Глава 4. Современные программные средства 195 Таблица 4.4. Типы численных задач и методы, применяемые для их решения Задача Автомат Конкретные программы Решение систем не- Automatic линейных алгебраи- ческих уравнений Различные модификации метода Ньютона (Fast Newton, Modified Newton, Classical Newton). Гиб- ридные методы (Hybrid Powell method) Решение систем Automatic дифференциаль- ных уравнений Нежесткие задачи: • явные методы Рунге-Кутта (RKF45, RKF78, RKF853); • методы Адамса {Adams methods). Жесткие задачи; • неявные методы Рунге-Кутта (Implicit Runge- Kutta method); • методы, основанные на формулах дифференци рования назад (BDF methods). Отладка: явный и неявный методы Эйлера с автоматическим выбо- ром шага (Simple automatic); • метод Рунге-Кутта четвертого порядка с постоян- ным шагом (RK4) Решение систем не- Automatic линейных алгебраи- ческих уравнений Явные методы (RKF45+Newrton, RKF78+Newton, RKF853+Newton). Неявные методы (DDassel) Решение системы нелинейных алгебраических уравнений Решение системы нелинейных алгебраических уравнений как основная за- дача возникает при соответствующем способе описания поведения, и как вспомогательная — при реализации неявных методов решения систем алгеб- ро-дифференциальных уравнений. В том и другом случае, за исключением начальной точки, начальное приближение к решению можно считать доста- точно хорошо известным, что позволяет ориентироваться в основном на различные модификации метода Ньютона. В начальный момент времени ситуация значительно усложняется, г. к. у пользователя может отсутствовать информация об удовлетворительном начальном приближении. Для решения систем нелинейных уравнений, возникающих при описании поводе! I ия, и с 1 юл ьзу ются: О Fast Newton — "быстрый" метод Ньютона, позволяющий не вычислять матрицу Якоби в очередной временной точке заново, а использовать со- храненное значение предыдущей точки (пересчет матрицы Якоби через каждые пять итераций). □ Modified Newton — модифицированный метод Ньютона (пересчет матрицы Якоби через фиксированное число итераций или по мере уменьшения скорости сходимости).
196 Практическое моделирование динамических систем □ Classical Newton — классический вариант метода Ньютона (пересчет мат- рицы Якоби на каждой итерации). □ Hybrid Powell method — гибридный метод Пауэлла (MinPack). □ Automatic — автомат пытается последовательно применять методы (1, 2, 3, 4). В случае неудачи очередного метода, колы завершения игнорируются, и делается попытка применить следующий метод. На следующем вре- менном шаге вновь возвращаемся к самому простому методу, а именно к Fast Newton. Аварийная остановка означает, что для данного начального приближения, взятого с предыдущего шага, ни один из методов не нашел уд о вл етвори тел ьно го решен и я. Для реализации методов Ньютона используется подпрограмма ntdfb, пред- ставляющая собой традиционную реализацию метода Ньютона. Помимо методов ньютоновского типа, на практике часто применяют методы минимизации специально построенных функционалов, точка минимума ко- торых совпадает с корнем исходного уравнения. К их числу относится гиб- ридный метод Пауэлла (MinPack). Этот метод часто не требует знания хо- рошего начального приближения. В то же время, возможно, что программа найдет нс корень уравнения, а локальный минимум вспомогательного функционала. Если ваша система допускает нахождение решения различ- ными методами, старайтесь это делать для проверки. Для реализации автомата используется специальная подпрограмма auto мае. Решение системы обыкновенных дифференциальных уравнений Для решения систем обыкновенных дифференциальных уравнений применяв ются либо одношаговые (для получения решения в новой точке используется информация только предыдущей временной точки), либо линейные много- шаговые методы (используется информация, полученная на нескольких пре- дыдущих точках). И те, и другие могут быть как явными (для решения неже- стких задач), так и неявными (для решения жестких задач). Свойство жесткости существенно влияет на время, затраченное на получение решения. Во всех программах-автоматах, предназначенных для решения задач, тип которых заранее неизвестен пользователю, система первоначально считается нежесткой, т. к. решение нежестких уравнений чаще оказывается менее тру- доемким процессом, чем решение жестких. При возникновении жесткости такие подпрограммы автоматически переключаются на программные реали- зации, предназначенные для решения жестких уравнений. Наиболее широко для реализации автоматов используется подпрограмма lsoda, построенная на линейных многошаговых методах. Подпрограмм-автоматов, построенных на одношаговых методах, практически не существует. В MVS в качестве ав- томата предлагается использовать подпрограмму auto ode, которая-сначала
Глава 4. Современные программные средства 197 пытается применить явный одношаговый, а при обнаружении жесткости — неявный многошаговый метод. Существуют также специализированные программы, предназначенные для решения только соответствующего типа задач. Некоторые программы для решения нежестких уравнений могут обнаруживать возникновение жестко- сти по ходу решения и предупреждать об этом. Группа подпрограмм для решения нежестких уравнений содержит реализа- ции различных вариантов метода Рунге-Кутта (rkf45, RKF853, rkfb) и одну реализацию линейных многошаговых методов (Adams methods). Методы RKF45 и RKF853 автоматически выбирают начальный шаг и преду- преждают пользователя о появлении свойства жесткости у решаемой задачи. Метод RKF7 8 механизма оценки жесткости не имеет. О возникновении этого явления при его использовании можно судить только косвенно, если число допуст имых вычислении правой части превысило заданное значение и при этом задача имеет достаточно медленно изменяющееся решение на значи- тельной части промежутка интегрирования. Явные линейные многошаговые методы реализуются подпрограммой lsodejx, которая является управляющей для подпрограммы lsode при вы- боре значения параметра mf-io. Группа подпрограмм для решения жестких уравнений включает подпро- грамму lsode_b, основанную на неявных многошаговых методах (BDF- methods), а также подпрограммой radaus из коллекции, реализующей неяв- ный метод Рунге-Кутта (Implicit Runge-Kutta method). Подпрограмма lsode b является управляющей для подпрограммы lsode при выборе параметра mf=22. Метод Automatic реализуется подпрограммой autocode, которая предназна- чена для того, чтобы избавить пользователя от необходимости выбирать ме- тод и предоставить информацию о типе решаемой численной задачи. Подпрограмма auto_ode начинает работу7 с вызова подпрограммы RKF45, пред- назначенной дтя решения нежестких задач. Она способна оценивать жесткость решаемой задачи, что позволяет автоматически переключиться на соответст- вующий метод Для решения жестких задач выбрана подпрограмма i.soda, в свою очередь способная "почувствовать", что решаемая задача вновь стала неже- сткой. Подпрограмма auto ode следит за значением соответствующих перемен- ных и автоматически переключается с одной подпрограммы на другую. Отладочные методы Simple automatic и Fixed step RK4 реализуются подпро- граммами simple, и RK4. Потребность в таких методах иногда возникает при отладке, когда "плохое" поведение может быть обусловлено просто ошибка- ми. Отладочные методы нс следует применять для интегрирования отлажен- ных задач.
198 Практическое моделирование динамических систем Подпрограмма simple отличается от lsoda тем, что в ней введено ограниче- ние на порядок применяемых методов, а именно — применяются только явный и неявный методы Эйлера. Такой выбор порядка обусловлен тем, что для задач с сильно меняющейся правой частью одношаговые методы часто способны преодолеть трупные участки лучше многошаговых. Решение системы алгебро-дифференциальных уравнений Системы ал гебро-дифференциальных уравнений могут представлять значи- тельные трудности для существующих численных методов. Алгебро-дифференциальные уравнения могул быть записаны в различной форме. В данной версии пакета MVS рассматривается самая простая форма - дифференциальные уравнения должны быть системой уравнений первого порядка, разрешенных относительно производных, и к ним следует добавить для получения замкнутой системы необходимое число алгебраических урав- нений. Назовем фазовые переменные, входящие в левую часть дифференциальных уравнений, дифференциальными, а оставшиеся — алгебраическими. Выбранное нами представление позволяет решать систему алгебро- дифференциальных уравнений двумя способами. Первый способ заключается в следующем. Предположим, что в каждой вре- менной точке алгебраическая система может быть разрешена относительно алгебраических переменных и полученные выражения можно подставить в правую часть дифференциальных уравнений. Полученная система диффе- ренциальных уравнений решается любым подходящим методом. Рассчиты- вать на аналитическое решение алгебраической системы не приходится, по- этому будем решать ее численно, например методом Ньютона. Если! начальное приближение для численного решения алгебраической системы брать из предыдущей временной точки или строить его экстраполяцию, то во многих случаях можно рассчитывать на успех. Хуже обстоит дело с на- чальным приближением в исходной точке. Желательно знать точное значе- ние алгебраических компонентов для начальных дифференциальных. Такие значения будем называть согласованными. Для гибридных систем знать за- ранее согласованные начальные условия практически невозможно, поэтому нужны специальные процедуры их поиска. Второй способ основывается на том, что систему алгебро-диф- ференциальных уравнений можно рассматривать как предел специально по- строенной системы дифференциальных уравнений: dx/dt— eps^y/r//=G(/,x,^) при eps, стремящемся к нулю. Если к такой системе применить неявные методы и считать eps = 0, то мы получим правильный ответ. Первый способ будем называть явным, а второй — неявным.
Глава 4. Современные программные средства 199 Для реализации первого подхода (Explicit methods) мы выбрали метод Нью- тона для решения алгебраических систем, подпрограмму auto_nak для на- хождения согласованных начальных условии и явные методы Рунге-Кутта для решения дифференциальных систем. Второй подход (Implicit methods) представлен методом DDassel, реализуемым подпрограммой DDASSL. Дня реализации метода Automatic при решении алгебро-дифференциальных уравнений используется подпрограмма lsodi. Примеры Следящий электропривод Компонентная модель электропривода Все рассмотренные ниже примеры читатель найдет на приложенном к книге компакт-диске. Для этого достаточно установить графическую среду Model Vision на своем компьютере, и в разделе Examples найти нужный пример. Проект находится на прилагаемом к книге компакт-диске в папке \Examples\Ads.\ed. mvb. Электропривод включает в себя двигатель постоянного тока (осм), редуктор (rgb) и нагрузку (Load). Нагрузка представляет собой нечто вроде "массивного вентилятора", момент реакции которого зависит от ускорения и от скорости. Перечисленные три устройства связаны жесткой кинематической связью, т. е. углы поворота, угловые скорости и ускорения на выходе двигателя та- кие же, как на входе редуктора, а на выходе редуктора — такие же, как на входе нагрузки. Поскольку в MVS не поддерживаются двунаправленные свя- зи, необходимо передавать момент сопротивления от нагрузки к электро- двигателю (ml). В приведенной схеме (рис. 4.31) формулы образуют алгеб- раический цикл, который автоматически разрывается гибридным решателем при запуске модели (одна из формул рассматривается как алгебраическое уравнение и решается численно).
200 Практическое моделирование динамических систем Модель (рис. 4.32) состоит из электропривода (ed), на вход которого подает-1 ся синусоидальный входной сигнал. Рис. 4.32. Функциональная диаграмма электропривода с генератором входных сигналов Следящий электропривод с аналоговым пропорционально-дифференциальным регулятором Проект находится на прилагаемом к книге компакт-диске в папке \Examples\Ads\ads_a. m vb. Модель (рис. 4.33) включает в себя электропривод (ed), усилитель (Amp), регуля- тор (си) и генератор программного значения регулируемой величины (Gen). Рис. 4.33. Испытательный стенд с различными измерительными приборами и панелями управления - :У
Глава 4. Современные программные средства 201 В выполняемой модели вы можете интерактивно изменять коэффициенты усиления по ошибке ке и по производной ошибки ка и наблюдать измене- ние характера переходных процессов (в частности, система может стать не- уС1 ойчивой). Следящий электропривод с дискретным пропорционально-дифференциальным регулятором Проект находится на прилагаемом к книге компакт-диске в папке \Exam ples\Ads\ads_d. m vb. Модель (рис. 4.34) включает в себя электропривод (ed), усилитель (лф), регулятор (си), генератор программного значения регулируемой величины (Ger.), цифро-аналоговый (вас) и аналого-цифровой (adc) преобразователи. В выполняемой модели вы можете интерактивно изменять коэффициенты усиления по ошибке ке и по производной ошибки Kd. а также период регу- лирования (период дискретизации) т и относительное запаздывание управ- ляющего воздействия относительно измерения Таи и наблюдать изменение характера переходных процессов. Рис. 4.34. Функциональная схема устройства может быть дополнена измерительными и управляющими приборами, и том самым стать прообразом реального испытательного стенда
i 202 Практическое моделирование динамических систем J3 Алгебраические циклы При компонентном моделировании два блока, реализующие заданные явной формулой функциональные зависимости между входом и выходом и связан- ные обратной связью, приводят к появлению нелинейных алгебраических уравнений. Простой алгебраический цикл gi.x = sbt.z; G2.X =* gi.y; Sbt.Y = G2.Y — возникает ’’алгебраический цикл" (переменная в левой части формулы кос- венно входит и в правую часть) и эта совокупность формул превращается и систему алгебраических уравнений.
Глава 4. Современные программные средства 203 Эта ситуация распознается гибридным решателем MVS при сортировке формул, выполняемой всякий раз при изменении совокупного непрерыв- ного поведения. Выдается предупреждающее сообщение, одна из связей (в данном случае связь gi.y -> G2.x) автоматически разрывается и вместо нее начинает решаться алгебраическое уравнение "О - G2.x - gi. Y" с искомой ВСЛИЧИНОЙ G2.X. Аналитическое преобразование исходных формул дает следующий результат: GJ..Y = Gl.K*Sbt.X/(1,iG1.K*G2.K). При коэффициентах усиления, равных 1, результирующий выход должен быть вдвое меньше входа. Тот же результат получается при численном ре- шении (рис. 4.36). Рис. 4.36. Для того, чтобы убедиться в правильности поведения построенной модели, достаточно взглянуть на рисунок Двойной алгебраический цикл Проект находится на прилагаемом к книге компакт-диске в папке \Examples\Algloop\twoalgloop/mvb. В этом примере в качестве усилителя gi использован усилитель, охваченный безынерционной обратной связью как в предыдущем примере Возникают два алгебраических цикла. Решатель разрывает их оба путем замены одной общей связи на алгебраическое уравнение. Маятник с подвижным подвесом Проект находится на прилагаемом к книге компакт-диске в папке \ExainpIes\Penduluins\Pend2.rnvb. Две точечные массы и ш2 соединены жестким стержнем длины L. Точ- ка подвеса (vjjj) не закреплена и может двигаться ио оси X (рис. 4.37).
204 Практическое моделирование динамических систем Рис. 4.37. Схематическое изображение маятника со свободным подвесом Таким образом, возникает первое ограничение _Р]=0. Второе ограничение связано с жесткостью стержня — (х, -х2) + >’2 = L2. I Опираясь на уравнения Лагранжа, получим: (/7Z| +m->)—-L + zn2Lcostz—— = //Z2^Sincr(-) * dr dr dt < rf2x. _ d2a cos#—— + L—— = -esina. dt2 dt2 В проекте Pcnd2.mvb эти уравнения разрешены аналитически относительно вторых производных. Совокупное непрерывное поведение представляет со- бой систему дифференциальных уравнений и набор формул. В проекте Pend2A.mvb исходные уравнения численно решаются относитель- но вторых производных, а найденные значения интегрируются. Таким обра- зом, мы имеем систему алгебро-дифференциальных уравнений. Результат вычислений в обоих случаях одинаковый (рис. 4.38), но нервы» вариант решается быстрее. Прыгающий мячик Проект находится на прилагаемом к книге компакт-диске в папке \ExamplesBall\\Ball I .mvb. fl Рассмотрим материальную точку, брошенную под некоторым углом к юри зонтальной плоскости и абсолютно упруго соударяющуюся с этой плоско- стью. Данная модель (см. рис. 4.38) стала почти обязательной в демонстра- ционном наборе примеров пакетов моделирования. Действительно, jto типичная гибридная система с непрерывным поведением (полет в поле тя- готения) и дискретными событиями (отскоки). Процесс создания этой модели и ее анимации очень подробно разобран в Help демо-версии MVS (разделы "Как создать модель в MVS" и "Как аними- ровать модель в MVS".
Глава 4. Современные программные средства 205 На этом примере иллюстрируется также и объектно-ориснтированный подход к моделированию: мячик, летящий в атмосфере, является потомком мячика, летящего в безвоздушном пространстве, и автоматически наследует все общие черты, добавляя при этом свои особенности поведения (рис. 4.39). Рис. 4.38. Пример использования трехмерной анимации. Изображение маятника со свободным подвесом, построенное в MVS Рис. 4.39. Пример использования двумерной анимации. Вместо материальной точки использован футбольный мяч
206 Практическое моделирование динамических систем Система терморегулирования дома Проект находится на прилагаемом к книге компакт-диске в папке \Examples\Thermo\Thermo.mvb. Этот пример мы позаимствовали из демо-версии пакета Simulink. При этом мы оставили естественную структуру системы регулирования и восстанови- ли исходные системы уравнений из блок-схем, задающих поведение. В опи- сании термостата мы использовали стандартные классы (сумматор и релей- ное звено) из стандартной библиотеки классов MVS. Для иллюстрации поведения системы в модели используются компоненты 20-анимации (рис. 4.40): "термометры" показывают температуру внутри и снаружи дома, изображение нагревателя краснеет, когда он включен, и тем- неет, когда он выключен, счетчик показывает расходы (видимо, в долларах) на оплату электроэнергии. Кстати, в этой модели любопытно поэкспери- ментировать с разными параметрами и константами (толщина стен, число окон и т. п.), вы быстро установите, что тепло (и деньги) действительно в основном вылетают в окна. Рис. 4.40. Функциональная схема, оснащенная измерительными и управляющими приборами, и график дополняют друг друга и помогают лучше понять поведение системы „• 1 1
Глава 4. Современные программные средства 207 Десятичный счетчик Проект находится на прилагаемом к книге компакт-диске в папке \Examples\Counter\Coiiiit 1 .mvb. Рис. 4.41. Пример изображения десятичного счетчика Эта модель является чисто дискретной и иллюстрирует работу с сигналами. Система представляет собой генератор сигналов и три одноразрядных деся- тичных счетчика, сигналы переполнения которых заведены на вход следую- щего счетчика (рис. 4.41). Вся схема является трехразрядным индикатором Живое сердце Проект находится на прилагаемом к книге компакт-диске в папке \Examples\Heart\Heart.mvb. Рис. 4.42. Простейшая модель поведения сердечной мышцы
I 208 Практическое моделирование динамических систем " . ..... . . ........— ......— ........- .. .... .... — Идею этого примера и изображения сердца мы позаимствовали из демо- версии пакета VisSym. Однако запутанную блок-схему поведения мы заме- нили на простые автоколебательные уравнения из статьи Зимина [29]. В ок- не 20-анимации вы можете наблюдать биения сердца (рис. 4.42). Изображе- ния соответствуют трем качественным состояниям сердца: расслабленному, сжатому и промежуточному. Модели с "жесткими" дифференциальными уравнениями Проекты находятся на прилагаемом к книге компакт-диске в папках: \Exaniples\Stin\Adiabat_R\Adiabat_R.mvb, \Examples\Siifi\Jab\Jabl.mvb. Первая модель описывает адиабатический реактор, в котором медленное течение реакции в определенный момент приобретает взрывной характер (рис. 4.43). Рис. 4.43. Взрывной характер поведения может создать трудности при его воспроизведении Рис. 4.44. Еще один пример трудного для численного воспроизведения поведения
лава 4. Современные программные средства 209 Вторая модель описывает один из вариантов циклической реакции Белоусо- ва-Жаботинекого. Изменение переменных в этой модели также меняется от плавного к взрывоподобному и обратно (рис. 4.44). Автоматические решатели, выбираемые по умолчанию, распознают момент, когда система уравнений становится "жесткой", и переключаются на подхо- дящий численный метод. Однако после того, как вы обнаружили, что ваша модель "жесткая", лучше подобрать один из специальных методов, который, как правило, будет работать значительно быстрее. Для примера измените метод решения в модели Jabl со специального на автомат и вы увидите, на- сколько медленнее стала работать модель.
Глава 5 Унифицированный язык моделирования UML I Предпосылки создания UML .1 Попытки создать унифицированные языки в различных областях прсдпри- I нимались всегда и будут предприниматься еще неоднократно. Сколько уже а языков объявлялись единственно необходимыми, всеобъемлющими, но со | временем о них забывали, как, например, забыли о языке программирова- 1 ним PL1. Давайте честно признаемся, что мы имеем дело с мифом об уни- | версальности. Однако нс будем ни отказывать себе в удовольствии помеч- I тать о недостижимом, ни охлаждать своими пессимистическими заявле- I днями пыл желающих построить светлое будущее. Новый язык, метод пли Iтехнология всегда сопровождаются волной необоснованных ожиданий, I "жаждой чуда". Но проходит время, накапливается опыт, выясняются грани- цы применимости, оценивается эффективность, и бывший универсальный I метод занимает положенное ему место среди конкурентов. [В результате многолетних исследовании был разработан и опробован так называемый объектно-ориентированный подход (ООП) (в 1967 г. создан пер- I вый язык, основанный на данном подходе — Siinula-67[8|, в 1983 г. — язык IC++). Главная причина возникновения ООП связана с поиском простых I путей для создания сложных программ. ООП наследует лучшие черты Iструктурного программирования и комбинирует их с некоторыми новыми подходами. Одно из основных преимуществ ООП по сравнению с более Iранними методами построения программных систем — тесная связь данных I и кода, работающего с ними То есть данные стали объединять с соответст- вующими операциями их обработки в некие структуры, называемые объек- тами. В ООП были реализованы механизмы, позволяющие: In описывать структуру объекта; 10 описывать действия с объектами; 10 использовать специальные правила наследования объектов; 10 передавать сообщения между объектами. «Вместе с развитием объектно-ориентированного программирования стали развиваться и общие объектно-ориентированные методы разработки ПО. «Ведь основной задачей этапов разработки ПО, предшествующих неносред-
212 Практическое моделирование динамических систем ственному программированию, является спецификация предметной области в терминах, удобных для дальнейшего применения в процессе разработки. Таким образом, осуществляется перевод информации из вида, в котором она существует в сознании специалистов предметной области, на язык программистов. Роль объектно-ориентированного подхода в программировании всем известна, он всеми признан как весьма эффективный, и сейчас делаются попытки рас- пространить его на другие области. Парадоксально, что подход, возникший для решения задач моделирования (язык Simula-67), именно в этой области долгие годы и не был востребован, и только сейчас начинает достаточно робко вопло- щаться в реальные разработки (Omola, Dymola, Model Vision, Any Logic). В моде- лировании этот подход называют объектно-ориентированным моделированием, его суть мы кратко изложили во введении. Во многих хорошо известных инженерам задачах структура изучаемого объ- екта выступает столь рельефно, а библиотеки классов уже разработаны и требуются минимальные усилия для их реализации в нужной форме, что необходимость перехода на новую технологию не вызывает сомнения. Более того, можно смело утверждать, что инженерное проектирование всегда объ- являлось ли это в явном виде или нет, придерживалось объектно- ориентированной технологии. Однако пока проектирование велось на ’’физическом" уровне и инженер оперировал с реальными блоками и прибо- рами, это было не столь заметно. Переход к компьютерному моделированию только подчеркнул эти всегда присущие инженерному труду черты. Многие разработчики современных программных средств моделирования давно обратили внимание на то, что классы идеально подходят для описа- ния реальных объектов. Однако программные классы с их набором методов необходимо заменить "классам и-устройствами" с набором поведений, свой- ственных данному объекту. Если базовые классы априорно заданы, то кон- струирование на вычислительной машине ничем не отличается от конструи- рования традиционного. Определяем элементную базу, выясняем, каких уникальных блоков не хватает, конструируем их и из получившихся элемен- тов создаем сложное устройство. Другое дело, когда мы пытаемся построить модель системы, поведение ко- торой до сих пор еще не изучалось с помощью компьютерного моделирова- ния, и необходимо начинать с "нуля" — выявлять элементы системы, их взаимосвязи, структуру, базовые модели для описания поведения. Этот этап проектирования трудно формализовать. Он обычно занимает много времени и сил, и поэтому давно привлекает к себе внимание. Одним из способов преодолеть эти трудности является попытка с первых же шагов придержи- ваться объектно-ориентированного подхода и следовать достаточно строго определенной последовательности операций, хорошо знакомой большинству разработчиков.
Гпава 5 Унифицированный язык моделирования UML 213 Благодаря энтузиазму группы исследователей был создан новый язык UML (Unified Modeling Language, унифицированный язык моделирования) {23, 33J, позволяющий стандартизовать этапы работы над проектом. Авторы | языка считают, что в дальнейшем удастся создать программный продукт, с помощью которого можно будет не только описывать проект в единых для J всех терминах, но автоматически по этому описанию создавать программ- ный код (См. программные продукты фирмы Rational Software Corporation). I Назначение и основные I компоненты UML I Назначение UML I Унифицированный язык моделирования или в дальнейшем UML представ- ляет собой универсальный язык, позволяющий одновременно с анализом J создавать документацию для проектирования сложных иерархических сис- тем, с тем, чтобы потом воплощать ее в работоспособный код на любом из языков программирования. Авторы языка приложили много усилий, чтобы UML строго описывал процесс создания программного обеспечения. | UML относится к языкам визуального моделирования. Он предназначен для 3 общения разработчиков при работе над одним проектом и для единообраз- 5 кого описания различных проектов. UML объектно-ориентирован, но в то | же время никак не связан с конкретными объектно-ориентированными | языками программирования. Разработанный в терминах UML проект можно | легко воплотить на любом существующем языке, поддерживающем объект- I но-ориентированную технологию. UML не настаивает также и на конкрет- I ной технологии реализации готового проекта, и в этом смысле выступает в | роли универсального языка. л Используя UML, можно содержательно описывать классы, объекты (мы со- I храняем здесь терминологию LJML и, вместо термина "экземпляр класса” I используем термин "объект", который более уместен для описания модели- I руемого устройства) и компоненты, принадлежащие различным предметным ] областям, часто сильно отдирающимся друг от друга. I Применение объектно-ориентированного I подхода в UML j UML реализует объектно-ориентированный подход к разработке сложных I систем следующими средствами: I □ программная система (читай дальше просто система) представляется в виде множества самостоятельных сущностей, взаимодействующих друг с J другом. Каждая сущность сама отвечает за хранение информации, необ- I I
214 Практическое моделирование динамических систем холимой для се функционирования, и, кроме того, она имеет (реализует) J свое собственное поведение. С каждой сущностью связано понятие клас- са и объекта; □ класс — это группа сущностей (объектов), обладающих сходными свойст- вами, а именно, данными и поведением. В дальнейшем отдельного пред- ставителя некоторого класса будем называть объектом класса или просто объектом; □ каждый объект затишен системой правил, не позволяющих окружаю-; шим объектам произвольно менять его данные или влиять на его поведе- ние. Данные правила определяют способ взаимодействия с окружением (интерфейс), и скрывают детали реализации, иными словами — данные и методы инкапсулированы в объекте; □ под поведением объекта в UML понимаются любые правила взаимодейст- вия объекта с внешним миром и с данными самого объекта; □ процесс разделения сущностей на классы и построение общей классифи-1 кании осуществляются с помощью механизма наследования и полимор- физма; □ наследование — это отношение, определяющее уровень иерархии кон-jl кретного класса в дереве классов, и говорящее о том, что потомки кон- кретного класса являются разновидностью класса-родителя. Механизм наследования реализуется с помощью копирования всех атрибутов предка | (наследования) и их частичного переопределения. Переопределять можно | как данные, так и поведения (методы); ' О полиморфизм — касается переопределения поведения объектов. В UML | для описания полиморфизма вводятся понятия операции и У классов еспэ операции, которые определяют его поведение. Они насле- 1 дуются потомками, но каждый потомок класса может предоставить свой I метод реализации любой унаследованной операции, отличный от соот- | ветствующего метода предка. Подчеркнем, что с операцией связано каче-'.| ственное описание поведения объекта, а с методом — его конкретная | реализация. Таким образом становится возможным, наследуя операции/! придавать им нужные свойства, присущие объектам класса-потомка; | И □ для удобства иерархического представления больших систем классы | можно объединять в группы (пакеты) или использовать модульный пол-1 ход при проектировании. J Общие понятия И .< Авторы UML прежде всего объясняют, что при моделировании все изучае- О мыс сущности рассматриваются с двух точек зрения. Прежде всего мы пыта- I емся найти группы близких по своим свойствам элементов, и создать общее I
Глава 5. Унифицированный язык моделирования UML 215 для всех них описание. На этом этапе мы абстрагируемся от индивидуаль- ьых свойств элементов. Затем мы указываем механизм, позволяющий из гбетрактного элемента получить конкретный, с присущими ему индивиду- альными чертами, и используем получившиеся элементы для конструирова- ния системы. Таким образом, сущности представляются парами тип — эк- земпляр. Таких пар несколько, например — класс-объект, ассоциация-связь, параметр-значение, операция-вызов процедуры. Для изображения элементов ^тих пар на диаграммах обобщение и конкретный экземпляр геометрически представляются одинаково, так что можно встретить и диаграммы, напри- мер, классов, и диаграммы объектов. Для всех типов диаграмм существует ряд общих элементов: □ строки. Как и обычно, — это последовательности литералов, которые В могут включать в себя практически любые символы. Строки могут объе- диняться в параграфы. Среди строк выделяют: • имена — располагаются в специально от веденных местах элементов диаграмм); • пути — локализуют соответствующий элемент в иерархии описаний; В-; • метки — несут дополнительную информацию об элементе, располага- ются вблизи объекта и составляют с ним единое целое; • строки-характеристики — имеют заданный синтаксис и несут инфор- мацию об индивидуальных свойствах объекта, выражающуюся в при- своении атрибуту конкретного значения; | □ типы Разница между типом и классом весьма условна (например, вы If можете встретить языки, где целая переменная является экземпляром К: класса "целые"), но UML различает эти два понятия, говоря, что атрибу- ты, переменные и параметры могут пригкщлежать к определенному типу. Сами типы не определяются, хотя предполагается, что они могут быть и предопределенными, и пользовательским Вы можете создать специаль- ный класс "TypeExpression" и поместить туда все необходимые определе- ния и правила. [Основные компоненты UML Bst: Основные компоненты, составляющие UME, включают описание семантики UML, его графической нотации и дополнительных понятий, позволяющих расширить смысл основных понятий языка. Документация по UML содер- жит подробное описание этих компонентов и вместе с формальным описа- нием UML в виде семи pdf-файлов представлена на сайге Rational Software (www.rational.com). Описание языка, представленное в данной работе, явля- ется сокращенным, но содержит все основные понятия языка. 1261
216 Практическое моделирование динамических систем UML — это графический язык и его изучение следует начинать с изучения применяемых в нем графических образов ( Notation Guide"). Для правиль- ной трактовки графических образов необходимо познакомится с их содер- жательной стороной ("UML Semantics"). Авторами также описаны и воз- можные расширения языка, приспособленные к конкретным технологиям, но мы их касаться не будем. Для описания семантики авторы использовали сам язык UML, а там, где не хватало его возможностей, — английский. В процессе разработки система представляется в виде объединения несколь- ких проекций, каждая из которых описывает определенный аспект разраба- тываемой системы, а вместе они определяют систему во всей ее полноте. Эти проекции представляются в UML следующими диаграммами: □ диаграммы классов (class diagrams). Диаграммы классов показывают стати- ческую структуру системы, т. е. определяют типы объектов системы и различного рода статические связи и отношения между ними. Диаграммы классов содержат набор статических (декларативных) элементов, таких как классы, типы и их связи, изображенных в виде графа. Диаграммы классов могут быть логически объединены в пакеты; О диаграммы вариантов использования (use case diagrams). Обычно у сложных систем много функций и существует много вариантов их использоваииг (сценариев). Одно и то же действующее лицо (actor) редко использует все j функции системы, поэтому все действующие лица можно условно разде- | лить на группы, в соответствии с типичными сценариями использования определенных функций. Для каждой группы можно составить свой объе- диненный групповой сценарий (use case), представляющий собой набор | всех возможных сценариев применения той или иной части системы Список всех групповых сценариев определяет функциональные требова ния к системе, с помощью которых может быть сформулировано тсхни- I ческос задание. Диаграммы вариантов использования представляют со- бой граф, с помощью которого показаны все типичные действующие лица и их взаимодействие с системой. Взаимодействие представлено сце- нариями применения; □ диаграммы взаимодействия (interaction diagrams) подразделяются на диа- граммы последовательности и кооперативные диаграммы. На обеих диа- граммах представлена временная поеледователыюсть использования объ- ектов при реализации конкретного сценария и сообщений, которыми они при этом обмениваются. Здесь мы сталкиваемся с имеющейся в язы- ке избыточностью, т. к. обе диаграммы, по сути, отличаются лишь фор мой. Более того, как нам кажется, они скорее применимы на этапе "ручного" проектирования, когда мы пытаемся с помощью карандаша г бумаги представить себе будущую систему, и в силу своей громоздкости не могут быть положены в основу машинного графического языка;
Глава 5. Унифицированный язык моделирования UML 217 О диаграммы последовательности (sequence diagrams) показывают, в какой последовательности появляются объекты при выполнении той или иной операции (сценария) и какой поток сообщений при этом возникает. Диаграммы последовательности имеют две оси: вертикальная представля- ет время, горизонтальная — различные объекты. Обычно интерес пред- ставляет только последовательность появления объектов по мере выпол- нения операции, но в случае систем реального времени могут пона- добиться и конкретные значения времени; □ кооперативные диаграммы (collaboration diagrams). Цель этой диаграммы та же, что и диаграммы последовательности, но возможно кому-то она по- кажется более удобной. На диаграмме в виде графа изображаются объек- ты, участвующие в выполнении операции, их связь и последовательность появления. Обычно это дерево, ибо для более сложных случаев такие диаграммы становятся очень сложными для восприятия. Сообщения, ко- торыми обмениваются объекты, изображены в виде стрелок, чтобы отра- жать их временную последовательность, каждая стрелка пронумерована; □ диаграммы состояний (state diagrams). Любой объект системы может ме- нять свое поведение в зависимости от происходящих внутренних или внешних событий, или иными словами он может реагировать на собы- тия, меняя свое состояние. Диаграммы состояний показывают последова- тельность состояний, в которых может оказаться объект, в зависимости от происходящих событий, вместе с их реакциями на эти события. Диа- граммы состояний описывают состояние только одного класса или объ- екта. Состояния в UML трактуются так же, как в карте состояний Харе- ла, т. е. когда система находится в одном из состояний, фиксируется некоторый набор значений переменных системы, установившихся в ответ на произошедшее событие; П диаграммы деятельностей (activity diagrams). Во многих случаях мы на- блюдаем смену состояний объекта, вызываемую только внутренними причинами. Внутри объекта выполняются последовательно или парал- лельно предопределенные длительные действия. Для такого типа систем UML и предлагает использовать диаграммы деятельностей. Такая диа- грамма предназначена для того, чтобы отразить переходы, вызванные внутренними процессами (в противоположность внешним событиям, с которыми имеет дело диаграмма состояния). Диаграммы деятельностей используются для описания сложного поведения класса или сценария и представления сложных операций в виде последовательности параллель- ных и последовательных длительных действий. Как видно из краткого описания этого типа диаграмм, мы опять-таки имеем дело с избыточно- стью, вряд ли целесообразной для практического применения. Практика показывает, что ни диаграммы состояний в том виде как они описаны в UML, ни диаграммы деятельностей не являются удовлетворительным
218 Практическое моделирование динамических систем способом событийно-управляемых систем. Нас привлекает формализм под названием "гибридный автомат", о котором мы расскажем в даль- нейшем. Его можно с полным правом считать расширением диаграмм состояний и диаграмм деятельностей, приспособленным для моделиро- ван ия событийно-управляемых систем. Прежде, переходить к перечислению оставшихся диаграмм, мы хотим под- черкнуть, что используем UML в этой книге не как язык для проектирова- ния больших программных комплексов — а как Унифицированный Язык Моделирования. подразумевая под моделью в основном модели технических систем. С позиций авторов UML одинаково подходит для проектирования того и другого. Нужно лишь выбрать в UML подходящие конструкции. На наш взгляд между этими двумя процессами есть столь существенное разли- чие, что имеет смысл не объединять технологии, а разделять их, группируя отдельно методы и средства проектирования больших программных ком- плексов и методы и средства проектирования систем. Приведенные ниже диаграммы имеют к моделированию косвенное отношение, и приведены лишь для полноты картины: □ диаграммы реализации (implementation diagrams). Диаграммы реализации состоят из компонентных диаграмм и диаграмм применения (разверты- вания). Они, в отличие от диаграмм состояния, взаимодействия, исполь- зования и классов, являющихся логическими представлениями системы в процессе ее разработки, дают физическое представления системы; □ компонентные диаграммы (component diagrams) Компонентные диаграммы показывают взаимосвязи между компонентами ПО, включая компоненты в исходном коде, бинарные компоненты и исполняемые компоненты. Некоторые компоненты могут существовать только во время исполнения, связывания (linking) или компиляции; О диаграммы применения (развертывания) (deployment diagrams). Используют- ся для представления схемы расположения процессоров и устройств, за- действованных в реализации системы, а также изображения соединений между ними — маршрутов передачи информации. Дальнейшие понятия мы будем иллюстрировать на конкретном примере, основа которого заимствована нами из работы [ 17|. Груз на пружине жесткости С, который мы будем рассматривать, как простей- шую модель автомобиля с массой т, который движется с заданной постоянной горизонтальной скоростью У по дороге, имеющей профиль у=у(а), вторая д21 производная которого —-- известна Предполагается, что колесо от дороги не 5/ отрывается, и колебания груза происходят только в вертикальной плоскости Ц (рис. 5.1).
Глава 5. Унифицированный язык моделирования UML 219 Рис. 5.1. Груз на пружине Составим уравнения движения автомобиля в подвижной системе координат (4,77), начало которой жестко связано с центром колеса. Ось £ совместим с вертикальной осью подвески, а ось р расположим на расстоянии L от трофиля дороги. L относительном покое. Таким образом, при движении по неровности абсолютная вертикальная коор- дината yt начала подвижной координатной системы определяется выражением — высота расположения центра тяжести груза при ею переносное вертикальное ускорение при постоянной скорости x = V t определяется как а переносная сила инерции груза Q имеет следующий вид: or в результате чего получаем уравнение dr т т Способ задания профиля поясняется рис. 5.2. Горизонтальный участок >- = 0. 0 < .г < /[ сменяет подъем “ ZZjO-expC-Tvv)), /,<л</2 ! за которым следует спуск у = /Л ехр(-7?А), l2 < X < /3 , затем мы вновь попадаем в начало пути
220 Практическое моделирование динамических систем Длины всех трех участков /?- и коэффициенты подъема и спуска у,- можно варьировать, как и высоту Hi. Дополнительно предположим, что над дорогой есть навес, высотой tfmax, и, если при движении размах колебаний превышает Ятах, вырабатывается сигнал тревоги и по нему водитель автомобиля, например, может снижать скорость движения на 10 процентов. Второй сигнал тревоги, вырабатывает- ся, если тряска (модуль первой производной) превышает заданную величи- ну, и опять-таки следует снижать скорость. Если сигнал тревоги не возника- ет на протяжении заданного промежутка времени Т, система управления автоматически пытается увеличить скорость на 5 процентов. . Мы хотим изучить движение автомобиля по дорогам с разными профилями ? и создать тренажер, в котором бы водитель мог самостоятельно выбирать скорость после получения соответствующих сигналов, "двигаясь" по дорогах* | с различным профилем (//П]ах,) на различных автомобилях (ш,С). | Начиная проектировать систему, выделим, прежде всего, в ней независимые компоненты — автомобиль и дорогу. Автомобиль представим как подвеску, движущуюся по закону где Q(i) — некоторое заданное возмущение, зависящее от dr in ' m скорости движения. Установим на подвеске: датчик высоты центра тяжести, I датчик вертикальной составляющей скорости, датчик "крутизны" дороги и [ систему управления скоростью. Система управления отображает сигналы I тревоги, показывает "крутизну" дороги, позволяет снижать скорость па дс- | сять процентов нажатием кнопки "скорость" и автоматически повышав- | скорость, если сигнал тревоги отсутствует на протяжении времени Т. |
Глава 5. Унифицированный язык моделирования UML 221 Диаграммы вариантов использования Диаграммы вариантов использования являются графическим представлением взаимодействия пользователя и компьютерной системы, в нашем случае компьютерной модели. Каждый вариант использования охватывает некото- рую очевидную для пользователей функцию системы и решает некоторую дискретную задачу пользователя. Список всех вариантов использования фактически определяет функциональные требования к системе, с помощью которых может быть сформулировано техническое задание, поэтому диа- грамма вариантов использования является необходимым средством при ана- лизе требований, выдвигаемых по отношению к проектируемой системе. Основные элементы диаграммы Диаграмма вариантов использования представляет собой граф, описываю- щий взаимодействие действующих лиц с системой, представленное вариан- тами использования. Действующее лицо — это пользователь с некоторыми четко фиксированными требованиями к модели. Вариант использования представляет собой типичное взаимодействие пользователя и компьютерной системы и решает некую дискретную задачу пользователя. Каждый вариант использования — эго потенциальное требование к системе Нотация вари- анта использования не должна содержать в себе подробные описания, дос- таточно несколькими предложениями описать выдвигаемое требование. Рис. 5.3. Диаграмма вариантов использования Зри гель
222 Практическое моделирование динамических систем Действующее лицо можно представить па диаграмме прямоугольником (аналогично классу) со стереотипом "actor". Но, чаще всего, действующее лицо представляют пиктограммой в виде фигурки человечка, а имя дейст- ву к> тего л и па рас i1 ол а га ется 11 од ф и гур ко й. Вариант использования представляется на диаграмме эллипсом, внутри ко- торого располагается его имя. Имя варианта использования может быть рас- положено и под эллипсом (рис. 5.3). Мы предполагаем, что нашу модель будут применять три типа пользователей: □ зрители, которые могут только наблюдать за движением конкретного ав- томобиля по конкретной трассе; □ ученики, которым позволено выбирать автомобиль и трассу; □ испытатели, имеющие право выбирать значения параметров трассы. Связи в диаграмме вариантов использования В диаграмме вариантов использования значимыми являются следующие связи (рис. 5.3—5.4): □ коммуникация (communicates) — показывает участие действующего лица в варианте использования, соединяя символ действующего лица с симво- лом варианта использования сплошной линией. Действующее лицо ’'общается1' с вариантом использования по этой связи (рис. 5.3), □ расширение (extends) — линия со стереотипом "extends", с незаполненной стрелкой на конне, соединяет базовый вариант использования с расши- ряющим его вариантом использования. Конец с незаполненной стрелкой указывает на вариант использования, являющийся расширением базового варианта. Такой тип связи используется, если один вариант использова- ния подобен другому, но несет дополнительную нагрузку. Особенно удобно использовать такой тип связи при описании обработки аварий- ных ситуаций, возникающих в системе, чтобы не перегружать основной вариант использования, описывающий нормальное поведение системы, излишней логикой (рис. 5.4); О использование (uses) линия с надписью ’’uses”, с незаполненной стрел- кой на конце, соединяет один вариант использования с другим вариан- том, который он использует. Такой тип связи называется использование, и применяется в тех случаях, когда имеется какой-либо фрагмент поведе- ния системы, который повторяется более чем в одном варианте исполь- зования, и нс хочется копировать его в каждом из этих вариантов. В этом случае данный фрагмент оформляется как отдельный вариант использо- вания, и к нему проводятся соответствующие связи от других вариантов (рис. 5.4).
Глава 5, Унифицированный язык моделирования UML 223 На последнем рисунке поясняется, чем отличается вариант использования испытателя от варианта использования ученика. Предполагается, что перво- начально по новой трассе проезжает испытатель и подбирает параметры так, чтобы при определенном навыке управления по ней можно было проехать, не ударясь "головой" о потолок, и не испытывая чрезмерной тряски, а затем фиксирует их. Так появляется новая трасса для ученика. Примечание В ряде языков моделирования "сценарии" использования моделей заранее предопределены, и различные варианты использования не нужно "проектиро- вать", они выполняются автоматически. Например, если сценарий заключается в поиске оптимальных параметров, то бывает достаточно обратиться к соот- ветствующей процедуре. Современные программные средства моделирования обычно предоставляют пользователю как возможность использовать готовые сценарии, так и писать свои.
224 Практическое моделирование динамических систем Диаграммы классов Диаграммы классов (class diagrams) показывают статическую структуру систе- мы, т. е. определяют тины объектов системы и различного рода статические связи и отношения между ними. Диаграммы классов содержат набор стати- ческих элементов, как, например, классы, типы и их связи, объединенные в граф. Среди связей особо выделяют ассоциации и подтипы. На диаграммах классов также изображаются атрибуты классов, операции классов и ограни- чения, которые накладываются на связи между объектами. Диаграммы клас- сов могут быть логически объединены в пакеты. Класс Класс (class) — это сущность, описывающая множество объектов со сходной структурой, поведением и связями с другими объектами. На диаграммах класс изображается в виде прямоугольника со сплошной границей, разделенного горизонтальными линиями на 3 секции (см. рис. 5.5). Машина масса: Real жесткость: Real сила инерции : Real движенне() Рис. 5.5. Класс Кашина Верхняя секция (секция имени) содержит имя класса и другие общие свой- ства (в частности, тип класса, о чем будет рассказано позже). В средней секции содержится список атрибутов, а в нижней — список операций. Ат- рибуты хранят инкапсулированные данные класса, а операции описывают поведение объектов класса. Любая из последних двух секций — атрибутов и операций — может не изо- бражаться. Для отсутствующей секции не нужно рисовать разделительную линию и как-либо указывать на наличие или отсутствие элементов в ней. Классы могул объединяться в более крупные компоненты, называемые па- кетами. Область видимости класса — это пакет, в котором он описан. Это означает, что имена классов должны быть уникальны среди имен классов того же пакета. По умолчанию считается, что указываемый класс определен
Глава 5. Унифицированный язык моделирования UML 225 в текущем пакете. Если необходимо сослаться на класс из другого пакета, это указывается явно: <имя пакета>::<имя класса> Так как иерархия пакетов может иметь глубину вложенности большую, чем 1, то путь к классу может содержать более чем одну ссылку, при этом путь начинается от корня иерархии пакетов: < жя пакета!>::Симя пакета2>::...::<имя пакетаП>::<имя класса> В секции имени класса могут находиться (по порядку сверху вниз): □ тип класса (и/или значок типа в правом верхнем углу) — необязательное поле, опускается, если речь идет о нсспсцифицированном классе; □ имя класса (если класс абстрактный — курсивом); □ дополнительные свойства — имя автора и т. п. (необязательное поле) Средняя и нижняя секции прямоугольника класса содержат списки его ат- рибутов и операций. При описании класса не обязательно сразу их запол- нять. Это возможно лишь в том случае, когда имеется четкое представление о том, какие операции должен выполнять данный класс и какие атрибуты для этого необходимы. На начальной стадии описания это может быть еще не ясно, поэтому для начала содержимое этих полей может быть опушено. Атрибут Прежде всего, представим, как трактует понятие "атрибут" UML. Атрибут (attribute) — это элемент данных класса, т. е. элемент данных, ко- торый содержится в объекте, принадлежащем описываемому классу. У атрибута должен быть тип (type expression), который может представлять собой простой тип или быть сложным: Array, Real, Vector, Matrix. Детали, касающиеся типов атрибутов, не специфицированы UML. Более подробное описание типа зависит от того, какой язык программирования ист 1 ол ьзуется разработч и к ам и Атрибут изображается в виде текстовой строки, отражающей различные его свойства: <признак видшиости><имя>::<тип>=<значение по умолчаник» {свойства} Могут быть следующие свойства: □ признак видимости имеет С++-семантику видимости членов класса: • общий атрибут (public) (помечается символом +) означает, что любая сущность, имеющая доступ к объекту определяемого класса, имеет доступ и к этому атрибуту;
226 Практическое моделирование динамических систем • защищенный атрибут (protected) (обозначается символом #) доступен! только для методов класса и его потомков; • приватный атрибут (private) (обозначается символом -) доступен толь- ко методам класса; • признак области видимости может изображаться ключевым словом "public", "private" или "protected" или может быть опущен. Это означа- ет, что область видимости не показывается (а нс то, что она нс опре- делена или "public" по умолчанию); □ имя — это идентификатор, представляющий имя атрибута; □ тип — зависящее от языка реализации описание типа атрибута; П значение по умолчанию — зависящее от языка реализации выражение, за-1 дающее начальное значение для атрибута вновь созданного объекта. Эта | часть определения атрибута не обязательна; □ свойства — строка дополнительных свойств элемента (необязательная часть). Если свойства не указываются, скобки о опускаются. Примером свойства может служить имя автора: {Author = smith}. По умолчанию атрибут является изменяемым. Указав в его свойствах помет- ку {frozen}, можно объявить атрибут неизменяемым. Для атрибута можно указывать его множественность. Если она не обозначе- на, то предполагается, что атрибут может хранить ровно одно значение. | Множественность может быть определена в квадратных скобках сразу после имени атрибута: coords[3]: integer Примечание В системах моделирования атрибуты имеют чрезвычайно важные свойства, не отраженные в данном определении, зависящие от вида атрибута. Конечно же, их можно было бы отнести к группе дополнительных свойств, если бы не их важ- ность. Дело в том. что объект (или экземпляр класса) в языках моделирования1! обычно ассоциируется с конкретным устройством, или его элементом. Даже про- стые технические системы обычно состоят из нескольких взаимосвязанных объ- ектов, способных воспринимать и передавать информацию. Рассмотрим, напри- мер, объекты, принадлежащие к моделям типа "вход-выход-состояние", у которых естественным образом имеются три вида переменных — "вход", "выход'1, "состояние". Если речь пойдет об объектах типа "сопротивление" или "конденсатор", то нужно будет ввести еще один вид переменной — "контакт". Вид определяет как правила видимости этой переменной, так и правила ее использо- вания внутри устройства. "Входы" и "выходы" видны всем окружающим устройст- вам в пределах данной подсистемы, а "переменные состояния" — только внутри устройства. Внутри устройства переменные вида "вход" не могут появиться в ле- вых частях уравнений, описывающих поведение, переменные вида "выход" могут меняться только самим устройством. Так что речь идет не только о правилах ви-
227 Глава 5. Унифицированный язык моделирования UML I И димости, но и о правилах использования внутри самого класса, чего мы не на- блюдаем при использовании программных классов. I Ilf Операция И в этом разделе мы наблюдаем ориентацию на профаммныс классы, в кото- рых операции и методы трактуются как программные процедуры, время вы- fполнения которых не имеет значения и будет уточняться дичее в диаграммах состояний и деятельностей. С точки зрения моделирования длительность (непрерывные и дискретные процессы) тех или иных операций чрезвычайно важна на самом раннем этапе — если длительностью некоторой операции можно пренебречь, то модель может существенно упроститься. Операция (operation) — это сущность, определяющая некое действие, которое может быть выполнено представителем класса У операции есть имя и спи- сок аргументов. Операция изображается текстовой строкой, имеющей следующую грамматику: <признак видикюсти><имя>(список параметров):<тип выражения, возвра- щающего значения> {свойства}, где: признак видимости, имя и свойства имеют тот же смысл, что и для атрибута; слисок параметров — список формальных параметров, разделенных запятыми; тип выражения, возвращающего значения — зависящее от языка реализации описание типа значения, возвращаемого функцией. Если оно не указано, то предполагается, что функция нс возвращает значения (void для C/C++). Каждый элемент списка параметров имеет следующий вид: <имя>:<тип>-<значение по умолчанию>, где: имя — имя параметра; тип — зависящее от языка реализации описание типа параметра; значение по умолчанию — значение параметра по умолчанию &- [Т:- Примечание В последней версии UML предусмотрена также возможность указания вида па- раметра (входной, выходной или смешанного типа). Г 11 I Все операции, определенные в классе, можно разделить на две группы: опе- рации класса и операции представителя. Операции класса присущи не объ- ектам класса, а самому классу. Отсюда, в частности, следует, что операции класса не имеют доступа к атрибутам. Типичный пример операции класса — функция создания нового объекта (представителя) класса. Операции класса выделяются подчеркиванием: new (Машина){масса=100,жесткость=]СО]; J
228 Практическое моделирование динамических систем | ..... .. * .......1111.....ИИ .Г .. ... I..— — —...... Операция, не изменяющая состояние системы, помечается следующим об- разом: в список свойств операции помещается свойство {query}. Элементы списков атрибутов и операций можно группировать по некото- рым признакам. В этом случае перед группой элементов ставится заключен- ная в кавычки строка, определяющая свойство, причем это свойство рас- пространяется на все нижестоящие элементы до нового свойства. Эта возможность хорошо иллюстрируется следующим примером: " параметры машины" жесткость подвески масса машины В заключение заметим, что у каждой секции прямоугольника класса может быть имя. При этом, т. к. секция "имя класса" обязательна, то ее имя не указывается (рис. 5.6). Машина «атрибуты» масса: Real жесткость: Real сила инерции : Real «поведение» движеиис() Рис. 5.6. Класс Машина с именами секций Объект Одним из самых важных понятий объектно-ориентированного программи- рования является понятие объекта (object). Объект или экземпляр класса 1гаделен и иди видуал ьн ы ми чертам и. Объекты могут исполнять определенные роли. Роль определяет отношение между классом и его экземплярами, выделяя определенное их подмножест- | во. Считается, что все эти объекты похожи по своему поведению и состоя- ниям, которые они могут принимать. На диаграмме объект представляется как прямоугольник с двумя секциями (рис. 5.7). Верхняя секция содержит в себе имя объекта и его класса, под-I черкнутое сплошной линией и имеющего синтаксис: о Оъе кт а >: < имя ю i а. с с а >
Глава 5. Унифицированный язык моделирования UML 229 Имя класса, при необходимости, может содержать в себе полный путь к ^данному классу. Имена пакетов должны следовать перед именем класса и разделяться парами двоеточий. Например: вертикаленая координата : : Подвеска : : Машина Имя объекта может быть опушено. В этом случае в первой секции пишется двоеточие и имя класса. Имя класса данного объекта также может быть опущено (вместе с двоеточием). Вторая секция содержит в себе список имен атрибутов с их типами и значе- ниями. Каждая строка из списка имеет следующий синтаксис: <имя атрибута>:<тип>=<значение> Указание типа атрибута и его значения не является обязательным Некото- рые из атрибутов, не представляющие интереса, также могут быть опущены. Объект может принимать некоторые состояния. Чтобы обозначить это, ря- !дом с именем объекта в квадратных скобках указывается список сю состоя- ний, содержащий состояния объекта, в которых он может находиться в те- чение жизненного цикла. Состояния объекта формируются на этапе анализа проектируемой системы, т. е. выделяются некоторые основные фазы, в ко- торых может находиться объект. Далее при проектировании системы эти состояния можно корректировать. машина: Грузовик 1 машина Жесткость - 100 масса = 200 :Грузовик 1 машина: Грузовик I I рузовик Рис. 5.7. Объекты Составной объект (composite object) представляет собой экземпляр составного класса, т. с. класса, имеющего отношение композиции с другими классами (понятие композиции см. ниже). Таким образом, составной объект состоит из других (возможно, также составных) объектов.
230 Практическое моделирование динамических систем Составной объект представляется на диаграмме так же, как и простой объ- ект Имя объекта располагается в верхней секции прямоугольника, а в ниж- ней секции вместо атрибутов объекта располагаются части составного объ- екта (рис. 5.8). Содержание составного объекта может быть опущено и сообщения, предна- значенные для внутренних составляющих объекта, могут обращаться непо- средственно к самому объекту. Внутренние сообщения, которыми обмени- ваются составляющие объекта, также могут быть опущены. Сообщения обычно показываются на одной диаграмме вместе с составляю- щими объекта. Новый полигон : Полигон Т расса 1 :Дорог а «.тряска» «удар» Гру?овик:Автомобн.ть Рис. 5.8. Составной объект :1 1 I I Я Активный объект | Активный объект (active object) имеет возможность инициировать действие. Пассивный объект может содержать в себе данные, но не может иницииро- вать действия. Однако пассивный объект может посылать сообщения в про-. J цессе обработки запроса, который он получил. Примечание С точки зрения моделирования, здесь вводится деление на непрерывные и дискретные действия Активный объект — это объект, имеющий поток управления. Он представ- ляется на диаграмме как обычный объект, обведенный толстой сплошной
Глава 5. Унифицированный язык моделирования UML 231 линией. Часто он представляется как композиция из вложенных частей (рис. 5.9). Новый полигон : Полигон Рис. 5.9. Активный составной объект Типы связей между классами Чтобы на диаграмме можно было показать, что классы взаимодействуют или посылают друг другу сообщения, между ними необходимо обозначить связь. Возможны связи следующих типов: ассоциации, зависимости, агрегации и сообщения. Ассоциация Ассоциация (association) определяет логическую связь между классами. Когда в системе создаются представители ассоциированных классов, они связыва- ются так, как определяет данная ассоциация. В UML одна ассоциация может специфицировать связь между двумя и не- сколькими (более чем двумя) классами. Ассоциации первою типа называ- ются бинарными, а второго типа — N-арными. Бинарная ассоциация (binary’ association) характеризует логическую связь меж- ду двумя классами. Возможна также связь класса с самим собой, которая называется рефлексивной ассоциацией. Изображается ассоциация в виде сплошной линии, соединяющей символы классов. Каждая ассоциация, как и любая связь, обладает направлением или в терминах UML — ролью (association role). Ролей может быть две, чтобы иметь возможность подчеркнуть возможные различия во "взаимоотно-
232 Практическое моделирование динамических систем щениях" между классами, например у "Начальника" могут быть сосредото- чены все права, а у "Подчиненного" — только обязанности На линии (рядом с линией), изображающей ассоциацию, могут быть сле- дующие пометки: П имя ассоциации — определяет необязательное имя ассоциации; □ класс ассоциации — класс, позволяющий определять для ассоциаций ат- рибуты, операции и другие свойства (соединяется с линией ассоциации пунктиром). Эта метка используется в случае, если необходимо присое- динить к ассоциации некую дополнительную информацию. Роль Роль (association role) — это неотделимая часть ассоциации, описывающая роль класса в данной ассоциации. У роли могут быть следующие свойства: □ имя роли — строка, стоящая рядом с концом линии ассоциации. Поле не обязательное, но если имя задано, оно должно отображаться на диаграмме; □ навигация. Возможность навигации в направлении роли означает, что партнеры ассоциации могут просматривать объекты, соответствующие этой роли. Если в направлении, соответствующем роли, поддерживается навигация, на конце линии может быть изображена стрелка; О множественность показывает количество конкретных объектов, которые могут быть связаны с данным партнером ассоциации. В общем случае множественность показывает нижнюю и верхнюю границы количества объектов, которые могут участвовать в ассоциации; □ квалификатор представляет собой список атрибутов класса с противопо- ложного конца линии ассоциации, по значениям которых можно одно- значно разбить множество объектов этого класса на подмножества. Ис- пользуется для связи объекта класса-партнера ассоциации с группой объектов другого класса-партнера ассоциации; О агрегация показывает, что ассоциация является отношением типа це- лос/часть. Примечание Я В последней версии UML предусмотрена возможность указания изменяемости ассоциации. Если ассоциация изменяема, т. е. может быть добавлена, удалена и перемещена, то никаких дополнительных пометок не нужно. В противном случае в строке свойств может присутствовать метка {f rozen}, указывающая, что ассоциацию нельзя добавлять, удалять и перемещать.
Глава 5. Унифицированный язык моделирования UML 233 Множественность Множественность (multiplicity) показывает возможное количество объектов, которые могут быть связаны в соответствии с этой ассоциацией. Множест- венность указывается для ролей ассоциации и имеет следующий формат (рис. 5.10): <нижияя траница>.-<верхняя граница> Верхняя граница и нижняя граница указывают минимальное и максималь- ное количество объектов, участвующих в ассоциации. Если для верхней гра- ницы стоит символ • * •, то это значит, что она бесконечна. Пример | 0..1 10 0. . * 3..5,10..20,100,200..* Рис. 5.10. Пример ассоциации с указанием множественности Квалификатор В работающей системе между объектами ассоциированных классов устанав- ливаются связи (экземпляры ассоциации). Но в некоторых случаях требует- ся, чтобы можно было разбить множество объектов одного класса, которые будут связаны с объектом другого класса в соответствии с данной ассоциа- цией, на подмножества по значениям некоторых атрибутов этих объектов, и наложить ограничения на число объектов в том или ином подмножестве. В UML предоставляется такая возможность: у ассоциации может быть атри- бут под названием квалификатор (qualifier), который содержит один или не- сколько атрибутов класса, прикрепленного к другому концу ассоциации. Именно по значению этих атрибутов происходит групповая выборка объек- тов этого класса со стороны объекта противоположною (по данной ассо- циации) класса. Квалификатор изображается в виде маленького прямоугольника, присоеди- ненного к началу линии ассоциации (рис. 5.И). В нем указываются атрибу- ты другого класса-партнера ассоциации.
234 Практическое моделирование динамических систем Рис. 5.11. Квалификатор Квалификатор, приведенный на рис. 5.11, можно трактовать, как ограниче- ние на использование трассы машинами с определенным весом, и на коли- чество одновременно проезжающих по этой трассе машин. Агрегация Если у роли ассоциации установлен атрибут "aggregation", то вся ассоциа- ция является отношением агрегации. Такой атрибут может быть установлен только у одной из ролей. Агрегация (aggregation) — это отношение между классами типа целое/частБ, Агрегируемый класс в той или иной форме является частью агрегата. На практике это может быть реализовано по-разному. Например, объект клас- са-агрегата может хранить объект агрегируемого класса, или хранить ссылку на него. I В UML допускается возможность агрегации одного класса многими, т. е, один класс может являться частью нескольких целых. Но имеется специаль- ный вид агрегации, называемый композицией (composition), который этого не допускает. Композиция является специальным видом агрегации (так называемая силь- ная агрегация). Она указывает на то, что данный класс может являться ча- стыо только одного класса. В частности, агрегируемый обьект может быть создан только тогда, когда создан агрегат, а с уничтожением агрегата унич- тожаются и все агрегируемые объекты. Агрегация изображается на диаграмме полым ромбом на конце линии ассо- циации со стороны агрегирующего класса (агрегата). Композиция показыва- ется так же, как и агрегация, но ромбик рисуется не пустым, а заполненным (рис. 5.12).
Глава 5. Унифицированный язык моделирования UML Рис. 5.12. Пример композиции 235 к >1 •Г 3 □ Kf: и Зависимость В некоторых случаях два и более элемента модели могут быть семантически связаны. Например, класс А использует методы класса В. Тогда при изме- нении класса В необходимо произвести соответствующие изменения в клас- се А. Поэтому в нотации UML предусмотрено такое отношение, как зависи- мость (dependency). Для рассмотренного примера на диаграмме классов необходимо указать, что класс А зависит от класса В. Отношение зависимо- сти является универсальным, т. е. с помощью него можно связывать различ- ные типы сущностей UML. Зависимость изображается пунктирной линией, проведенной между двумя элементами диаграммы, и считается, что элемент, "привязанный" к концу стрелки, зависит от элемента, "привязанного" к началу этой стрелки. Зави- симость может быть снабжена именем и спецификатором. Существуют следующие виды зависимостей: □ trace показывает историческую связь между двумя элементами, которые представляли одно и то же понятие на разных этапах; refine — историческая связь между элементами, как правило, показывает, что один элемент как бы произошел от другого; uses — ситуация, когда один элемент модели использует другой; bind — устанавливается между шаблоном и экземпляром шаблона; □ friend — аналог ключевого слова C++ friend. Наследование Наследование (inheritance) — это отношение типа "общее-частное” между элемеj пами модел и.
236 Практическое моделирование динамических систем Наследование обозначается сплошной линией, идущей от частного элемента к более общему (в терминологии ООП — от потомка к предку, от сына к отцу, или от подкласса к суперклассу). Со стороны более общего элемента рисуется большой полый треугольник. Один из атрибутов отношения наследования — дискриминатор (discrimina- tor) — строка, задающая имя группы потомков. Его использование полезно, если у данного класса много потомков, и необходимо разбить их на не- сколько групп. Отсутствие дискриминатора означает, что дискриминатор — пустая строка (дискриминатор по умолчанию). Изображается дискримина- тор текстовой строкой, стоящей возле линии наследования. На рис. 5.13 профиль — это дискриминатор, а {крутизна} — его дополни-1 тельное свойство. Расширения понятия класса в UML В UML существует несколько разновидностей класса: интерфейс, шаблон, утилита и др. Интерфейс (interface) — класс, задающий набор операций, но не содержа- щий в себе поля и реализации этих операций. Класс, реализующий интер- фейс, сам определяет содержимое этих операций. Шаблон (template) или параметризованный класс (parameterized class). Шабло- ны UML очень похожи на шаблоны C++. Они определяю! семейство клас- сов, отличающихся значением некоторых формальных параметров. Утилита (utility) — класс, объединяющий группу общедоступных (глобаль- ных) переменных и процедур. Для указания вида класса в UML введено понятие стереотипа (stereotype). Стереотип как бы определяет подтип некоего глобального типа класс. Соот- ветственно, классы-интерфейсы имеют стереотип ’’interface", а классы-1
237 Глава 5. Унифицированный язык моделирования UML утилиты — "utility". Существует стандартный набор стереотипов, кото- рый, при необходимости, можно расширять. Интерфейс Интерфейс (interface) в UML фактически является описанием (без реализа- ции) группы функций, которые он предоставляет для использования друго- му классу. Логика работы этих функций не определяется. Имеется лишь возможность задать неформальное (например, на естественном языке) опи- сание того, что от них требуется. Класс поддерживает (или реализует) интерфейс, если он содержит методы, реализующие все операции интерфейса Между двумя интерфейсами можно задать отношение наследования. Оно будет означать обычное теоретико- множественное объединение списков операций предка и потомка. На диаграмме классов UML интерфейс можно изобразить двумя способами, развернутым и сокращенным. В случае развернутого способа интерфейс изображается на диаграмме как класс со стереотипом "interface" и без секции атрибутов (рис. 5.14). Допустимо также сокращенное изображение интерфейса — небольшой кружок с именем интерфейса возле него. Рис. 5.14. Класс, реализующий интерфейс На рис. 5.14 изображен класс грузовая машина, который реализует интер- фейс машина. Связь между ними называется детализация и представляется на диаграмме в виде пунктирной линии с полым треугольником на конце. Таким образом, класс грузовая машина должен предоставить метод, реали- зующий операцию Движение, унаследованную от интерфейса Машина. На рис. 5.15 изображен класс грузовая машина, использующий интерфейс машина. Связь между ними называется зависимостью и представляется на Диаграмме в виде пунктирной линии со стрелкой на конце. Такая связь го- ворит О ТОМ, ЧТО если Интерфейс Машина ИЗМСНИТЬ, ТО класс Грузовая маши- на тоже может претерпеть некоторые изменения. Поэтому при конструиро- вании диаграмм необходимо сводить число зависимостей к минимуму во
238 Практическое моделирование динамических систем избежание влияния вносимых изменений. (Более подробно о зависимостях будет сказано ниже). Грузовая машина ...J_______ «interface» Машина Движение () Рис. 5.15. Использование интерфейса классом Параметризованные классы (шаблоны) В некоторых случаях в модели необходимы классы со схожей структурой, которые отличаются некоторыми параметрами. Например, имеется описа! ние нескольких динамических массивов для элементов разных типов, а многие операции над их элементами совпадают. Тогда было бы целесооб-j разно определить такую структуру данных, чтобы с ее помощью было бы легко получить динамические массивы, и делать это можно было бы уточ- нением параметров. Для этого в UML вводится понятие параметризованных классов (parameterized class), которые еще называют шаблонами (template). Параметризованный класс или шаблон — это описание множества классов с одним или более неопределенным формальным параметром, т. е. это семей- ство классов, где каждый класс отличается значениями этих неопределсн*| ных параметров. Таким образом, шаблон определяется в терминах формальных параметров и| следовательно, его нельзя использовать напрямую как обычный класс, т. к. его параметры должны быть привязаны к определенным значениям. Шаблон не может участвовать в большинстве обычных отношений между классами. Существует всего два вида отношений, в которых он может участ- вовать — связи между шаблоном и классом, порожденным от него подста- новкой параметров (помечается ключевым словом "bind"), и направленные ассоциации. Направленная ассоциация должна идти от шаблона (то есть навигация в направлении от шаблона). Необходимо отметить, что объявление новых атрибутов и операции в экзем- пляре шаблона невозможно. В связи с этим операции и атрибуты экземпля- ров шаблонов не отображаются на диаграмме. Но иногда требуется добавить новые свойства в класс, и в таких случаях следует создать новый класс, j
Глава 5. Унифицированный язык моделирования UML 239 чьим предком будет экземпляр шаблона, и далее добавить нужные операции и атрибуты. Утилиты В некоторых случаях при описании классов приходится часто пользоваться некоторыми глобальными функциями и переменными. Поэтому для удобства программирования введено такое понятие, как утилита (utility), класс специ- ального вида, в котором собираются подобные функции и переменные. На диаграмме утилита изображается как класс со стереотипом "utility”, и может иметь как атрибуты, так и операции. Связи между объектами Аналогично ключевому понятию модели классов — понятию ассоциации, — для объектов существует понятие связи (link). Связь есть экземпляр ассоциации, установленной для объектов данных классов. Бинарная связь представляется как сплошная линия между двумя объектами. В случае рефлексивной ассоциации связь может соединять объ- ект сам с собой. Объекты-партнеры связи исполняют определенные роли, имена которых изображаются на соответствующих концах связи Но в отличие от ассоциа- ции, связь не имеет собственного имени, а характеризуется именами объек- тов, которые она соединяет. Поскольку связи являются экземплярами ассо- циаций, то для них не указывается множественность. Другие свойства, присущие ассоциациям, такие как агрегация, композиция, навигация, могут быть показаны на ролях связей аналогичным образом. Также можно указать и квалификатор, задающий тип связи (рис. 5.16). Квалификаторы бывают следующих видов: □ "association" — задает тип связи как экземпляр ассоциации, соеди- няющей соответствующие классы. Поскольку все связи есть экземпляры ассоциации, то указывать этот квалификатор не имеет особого смысла, т. к. соответствующий ему тип связи выставляется по умолчанию; □ "parameter" — этот квалификатор указывает, что объект является пара- метром операции другого объекта-партнера связи; П "local" — показывает, что объект есть локальный параметр операции или метода другого объекта-партнера связи; О "global" — аналогично предыдущему, только здесь — глобальный параметр; П "self" — применяется для обозначения связи объекта с самим собой. Используется, например, для обозначения возможности посылки объек- том сообщений самому себе.
240 Практическое моделирование динамических систем N-ариая связь представляется на диаграмме как ромб, от которого выходят соединения к объектам. Остальные атрибуты N-арной связи такие же, как и у бинарной связи. Рис. 5.16. Связи Пакеты В контексте диаграмм классов пакет (package) — это вместилище для неко- торого набора классов и других пакетов. Пакет является самостоятельным пространством имен. В UML нет каких-либо ограничении на правила, по которым разработчики могут или должны группировать классы в пакеты. Но есть некоторые стан-/ дартные случаи, когда такая группировка уместна, например, тесно взаимо- действующие классы, или более общий случай — разбиение системы на подсистемы. Рис. 5.17. Импортирование пакета
Глава 5. Унифицированный язык моделирования UML 241 Необходимо отмстить, что пакет физически содержит сущности, определен- ные в нем (говорится, что "сущности принадлежат пакету"). Это означает, что если будет уничтожен пакет, то будет уничтожено и все его содержимое При описании классов пакета нередко бывает полезно сослаться на класс, определенный в другом пакете. Это можно сделать, импортировав нужный пакет. Это означает, что в импортирующем пакете станут доступными все классы импортируемого пакета. При этом пространства имен не объединят- ся: для использования класса надо будет указать его имя с полным путем пакета, в котором он лежит. На рис. 5.17 показано, что пакет с именем "Трасса" импортирует пакет с именем "Подъем". Диаграммы взаимодействия Взаимодействия между объектами в системе представляются диаграммами взаимодействия (interaction diagrams). Диаграммы взаимодействия подразде- ляются на два основных типа диаграмм: диаграммы последовательности (sequence diagrams) и кооперативные диаграммы (collaboration diagrams). Диаграммы последовательности Диаграммы последовательности имеют две размерности: обычно по верти- кали представлено время, по горизонтали — различные объекты. Однако оси координат могут меняться местами, так что ось времени может располагать- ся горизонтально, слева направо, а список объектов — вертикально. Объект на диаграмме изображается в виде прямоугольника на вершине вер- тикальной пунктирной линии, называемой линией жизни объекта (lifeline). Она представляет собой фрагмент жизненного цикла объекта в процессе взаимодействия. Если объект создается или уничтожается на отрезке време- ни, представленном на диаграмме, то его линия жизни начинается и закан- чивается в соответствующих точках, в противном случае линия жизни объ- екта проводится от начала до конца диаграммы. Символ объекта рисуется в начале его линии жизни; если объект создается не в начале диаграммы, то сообщение о создании объекта рисуется со стрелкой, проведенной к симво- лу объекта. Если объект уничтожается не в конце диаграммы, то момент сю уничтожения помечается большим крестиком "X". Линия жизни может раз- ветвляться на две (и более) параллельные линии, показываемые условно. Каждая ответвляющаяся линия соответствует переходу в потоке сообщений. Линии жизни могут объединяться в некоторой последующей отметке.
242 Практическое моделирование динамических систем Датчик Система упг 1ВЛСНИЯ Преподаватель а b «b-с < Т72» с «с—<1 < Т72» d Экзамен нс сдан С in нал тревоги СтаРт Сигнал тревоги 1 < 1 Г| 1 я 1 •ЁЕ-З Я * 1 i Сигнал тревоги Сигнал тревоги Сигнал тревоги Сигнал тревоги — F Стоп Рис. 5.18. Диаграмма последовательности № 1
LT Глава 5. Унифицированный язык моделирования UML 243 Для того чтобы проиллюстрировать данный вил диаграмм, обратимся к на- шему примеру. Пусть ученик сдает экзамен на вождение. В этом случае трасса ученику не подбирается, и он едет по неизведанной трассе. Экзамен сдан, если на протяжении отрезка времени Т ученик получит не более двух сигналов тревоги (не важно, по какому поводу — превышения уровня Нтах или при тряске, превышающей некий пороговый уровень). При этом если между сигналами проходит отрезок времени больше Т'/2. то предыдущий сигнал аннулируется. Построим диаграмму последовательности для одной из ситуаций, когда экзамен не сдан (рис. 5.18). Сообщения и переходы Ж Сообщения (message) связывают на диаграмме последовательности объекты между собой и передают информацию о выполняемом действии. Каждое сообщение представляется на диаграмме сплошной линией со стрелкой на конце, проведенной от линии жизни одного объекта к линии жизни другою объекта. Возможна посылка сообщения объектом самому се- бе — самоделегирование. В этом случае линия может начинаться и заканчи- ваться около символа объекта. Линия помечается именем сообщения i (операция или сигнал) и значениями его аргументов. Сообщения могут быть помечены условием перехода, которое располагается в квадратных скобках Сообщения могут быть следующих типов: □ асинхронные сообщения рисуются линией с половинкой стрелки на кон- це. Они не блокируют работу вызывающего объекта, и он, таким обра- зом, может продолжать свой собственный процесс. Асинхронные сооб- щения можно использовать для создания нового объекта или для установления связи с уже выполняемой ветвью процесса; □ вызов процедуры рисуется как заполненная стрелка. Возвращение из про- цедуры подразумевается неявно и на диаграмме обычно нс отображается. Оно обозначается явно в том случае, если это необходимо для большей ясности и представляется меткой (короткая поперечная линия), располо- женной около адресата возврата. Обычно стрелка с сообщением рисуется горизонтально. Это символизирует, [что сообщение передается мгновенно и ничего не может произойти в мо- мент передачи. Если на передачу сообщения необходимо какое-то время, в течение которого может что-нибудь произойти (например, посылка сообщс- Iния в противоположном направлении), то линия со стрелкой может быть [ломаной (конец стрелки располагается ниже ее начала). [Объединенный набор сообщений может быть маркирован как итерация l(iteranon). Маркером итерации служит символ Для сценария итерация ука- пывает, что множество сообщений может передаваться многократно. Для
244 Практическое моделирование динамических систем процедуры условие продолжения итерации может указываться в конце ите- рации. Возможны случаи, когда часть сообщений является частью итерации,;; а остальные сообщения могут быть выполнены только однократно. Переходы (transition) рисуются как многократные стрелки, проведенные в одну точку, помеченные условием перехода. Переход может быть именован. Имя представляет собой время посылки сообщения (например: А). В случае, когда передача сообщения происходит не мгновенно, время получения от> мечастся именем с апострофом (например: А'). Имя может быть проставле- но слева от стрелки. Имя может быть использовано для выражения, ограни- чивающего время посылки сообщений. Ограничения помещаются в фигурных скобках. i Активация Диаграммы последовательности полезны дня представления параллельных процессов. Для этого в диаграммах последовательности вводятся активации (activation), показывающие период времени, в течение которого объект вы- полняет действия непосредственно или через зависимую процедуру. Активация представляется на диаграмме длинным тонким прямоугольником, верхняя часть которого выравнивается с моментом, когда метод данного объ- екта становится активным, а нижняя часть — с моментом завершения работы । данного метода. Выполняемое действие может быть помечено текстом справа ; от символа активации (или слева, в зависимости от стиля), поочередно вхо-1 дящие сообщения указывают действия, которые выполняются в данном мето- де. В потоке управления процедуры верхняя часть символа активации преду- преждает о входящем сообщении (которое инициирует действие), а нижняя часть является началом посылки возвращаемого сообщения. i Для параллельно работающих объектов (каждый из них с собственным по- током управления) активация показывает продолжительность выполнения операций каждым объектом. Для процедур активация показывает время, р течение которого процедура (или вложенная процедура) данного объекта] активна. В случае рекурсивного вызова объекта вторая активация рисуется ] слегка правее первой, с небольшим наложением на нес (рекурсивные вызо- | вы могут иметь произвольную глубину). Кооперативные диаграммы Я Кооперативные диаграммы (collaboration diagrams) предоставляют возможность! пространственно располагать объекты. В отличие от диаграмм последова-1 тельности, на кооперативных диаграммах экземпляры объектов показывают-! ся в виде пиктограмм. На диаграмме отображаются лишь объекты, прямо! или косвенно участвующие в выполнении данного варианта использования.I
Глава 5. Унифицированный язык моделирования UML 245 Так же, как на диаграмме последовательности, линии со стрелкой на конце обозначают сообщения, обмен которыми осуществляется в рамках данного варианта использования. Их временная последовательность, однако указы- I дается путем нумерации сообщений. Линия со стрелкой проводится около линии, соединяющей объекты, и ука- зывает в направлении объекта, которому посылается сообщение. Для помет- ки различных сообщений могут использоваться следующие типы стрелок: □ линия с заполненной стрелкой. Обозначает вызов процедуры. Может ис- пользоваться также между параллельно работающими активными объек- р там и для посылки сигналов и ожиданий; □ линия с половинкой стрелки. Асинхронный поток управления. Использует- ся для явного указания на асинхронный обмен сообщениями между дву- мя объектами; П другие разновидности. Могут представлять другие разновидности управле- ния, например, "balking" или "timeout", но они обычно воспринима- ются как дополнительные возможности UML. Сообщения на кооперативной диаграмме помечаются номерами. Нумерация сообщении делает восприятие их последовательности более трудным, чем в случае расположения линий на странице сверху вниз. Принято применять вложенную систему нумерации, т. к. это позволяет понять, какая операция [ что вызывает, хотя при этом может быть труднее разглядеть общую последо- : вательность. [ Внутренние сообщения о выполнении операции нумеруются, начиная с 1. В последовательности сообщений между объектами в параллельных процес- сах нумерация сообщений относится к одному уровню (нет вложенности). На кооперативной диаграмме сообщение можно снабдить такой же управ- I ляющей информацией, что и на диаграмме последовательности. I Пиктограмма объекта на кооперативной диаграмме помечается строкой I имени, имеющей вид: I |ИмяООъекта : ИмяКласса> I где имяОбъекта, либо имякласса могут отсутствовать. Обратите внимание, I что если имя объекта отсутствует, то перед именем класса для ясности со- I хранястся двоеточие. I Вызов взаимодействия на диаграмме может быть представлен символом дей- I ствующего лица. I [Г Примечание 3 Так как в описанном ранее примере о сдаче учеником экзамена важна не толь- ко временная последовательность событий, но и отрезки времени между ними,
246 Практическое моделирование динамических систем то в данной задаче нет необходимости использовать кооперативную диаграм- му Поэтому проиллюстрируем данный вид диаграммы на следующей последо- вательности действий: ученику подается команда "Старт", команда передается системе управления и начинается движение Если происходит какая-либо тре- вожная ситуация (удар о потолок или избыточная тряска), то датчик сигнализи- рует об этом системе управления машины ученика, а также преподавателям, принимающим экзамен. Система управления обязана на это отреагировать уменьшением скорости, а преподаватели — фиксацией ошибки ученика Диа- грамма, иллюстрирующая данный пример, представлена на рис. 5.19. 1:сигнал тревоги Система управления 2: уменьшить скорость 1а: сигнал тревоги 2а: защитать ошибку ученику Рис. 5.19. Кооперативная диаграмма № 1 Диаграммы состояний Диаграмма состояний (state diagram) определяет все возможные состояния, в которых может находиться конкретный объект, а также процесс смены со- стояний объекта в результате влияния некоторых событий. Диаграммы со- стояний строятся для единственного класса и описывают поведение единст- венного объекта. Эта диаграмма представляет собой граф состояний, в которых может нахо- диться объект, и связей между ними. Определения состояния и его семан- тика базируются на определении Девида Харела (за исключением небольших; отличий).
Глава 5. Унифицированный язык моделирования UML 247 Состояния Состояние (state) представляет собой отрезок времени в жизни объекта, в течение которого является истиной некоторое условие, выполняются некие действия или ожидается некоторое событие. Состояние представляется на диаграмме как прямоугольник с закругленны- ми углами (рис. 5.20). Он может иметь одну или несколько секций. В них содержатся: Л имя состояния. Указание имени состояния необязательно. Два символа состояния с одним и тем же именем представляют на диаграмме одно и то же состояние объекта. Использование нескольких символов одного и того же состояния используется в диаграмме для удобства представления (например, для того, чтобы не перегружать одно состояние подходящими к нему и исходящими из него связями); 1 переменные состояния. Указывается список переменных состояния, опре- деленных в данном состоянии или в его подсостояниях. Переменные со- стояния имеют форму атрибутов Выражение, описывающее их начальное значение, может содержать в себе атрибуты данного объекта, переменные состояния подсостояний и параметры входящих в состояние переходов (если они включены во все входящие маршруты); □ внутреннее поведение. Указывается список внутренних действий, выпол- няемых, когда объект находится в данном состоянии. Каждое действие описывается следующим образом: <имя событияхспиеок параметрон> '/' <действие> / Увеличение скорости \ V: Real entry / V:=l.OS*V Рис. 5.20. Сосюяние В одном состоянии имя события может быть использовано неоднократно. Однако существует три зарезервированных действия, имеющих тот же фор- мат описания, что и обычное действие, имена которых можно использовать только однократно: □ 'entry'’ V' <действие> — действие, выполняемое при входе в состояние; □ 'exit' '/' <дейс.тъие> — действие, выполняемое при выходе из состоя- ния; Пак Р(>1
248 Практическое моделирование динамических систем □ 'do' '/' <действие> — действие, выполняемое при нахождении в со- стоянии В этих выражениях могут использоваться переменные состояния данного со- стояния и его подсостояний, атрибуты данного объекта и параметры входя- щих в состояние переходов (если они включены во все входящие маршруты). Подсостояния Состояние может иметь иерархическую структуру. Каждое подсостояние (substate) можег иметь свое начальное и конечное псевдосостояния. Переход в такое состояние означает переход в начальное псевдосостояние внутри него. Переход в конечное псевдосостояние подсостояния означает заверше- ние работы данного подсостояния; завершение работы всех подсостояний означает завершение активности данного состояния и выход из него. Любое состояние может быть усовершенствовано введением в него последо- вательных подсостояний или параллельных подсостояний. Его подсостояния так же могут быть усовершенствованы первым или вторым способом. Расширение состояния представляют на диаграмме символом, аналогичным применяемому для изображения состояния. В нем, кроме секций для имени состояния, переменных состояния и внутреннего поведения, имеется секция для представления вложенной диаграммы состояний. Расширение состояния в виде параллельных подсостояний представляется как несколько окон, расположенных в данном состоянии одно под другим и разделенных пунктирной линией. Каждое подсостоянис может иметь свое имя и содержать вложенную диаграмму непересекающихся состоянии. Сек- ции с текстовой информацией при данном представлении отделяются сплошной линией. Диаграммы параллельных подсостояний используются в тех случаях, когЛа объект обладает набором независимых поведений. При попадании в такое сложное состояние, содержащее в себе несколько параллельно функциони- рующих подсостояний, объект начинает находиться в нескольких независи- мых состояниях одновременно. При выходе же из этих параллельных со- стояний объект оказывается в одном общем конечном состоянии (если, конечно, он не покинчл одну из параллельных ветвей ранее). Начальное пссвдосостояние представляется маленьким черным кружком. Пе- реход из начального псевдосостояния может быть помечен именем события — это говорит о переходе в активное состояние, вызванном данным событием. Если такой пометки нет, то считается, что происходит просто переход в ак- тивное состояние. Переход так же может иметь выполняемое действие. Конечное псевдосостояние представляется маленьким черным кружком, об веденным сплошной линией.
Глава 5. Унифицированный язык моделирования UML_____________________249 ЕЕ/ Пусть в нашем примере с трассой при сдаче экзамена учеником предусмат- ривается ситуация с проколом шины: на трассе существуют специальные / съезды с трассы, на которые должен быть отбуксирован автомобиль с про- колотой шиной. Там шину заменяют в течение времени Т и автомобиль возвращается на трассу. Этот' процесс смены проколотой шины удобно представить в качестве диаграммы состояний с последовательными подсос- Е тояниями (рис. 5 21). Рис. 5.22. Диаграмма состояний с параллельными подсосгояниями
250 Практическое моделирование динамических систем Предположим, что пока происходит замена проколотой шины, необходимо заполнить на нес квитанцию. Причем процесс заполнения квитанции и ее подписание происходит одновременно с заменой шины. В этой ситуации удобно использовать диаграмму состояний с параллельными подсостояния- ми (рис. 5 22). События Событием (event) называется заслуживающее внимания происшествие. В диаграмме состояний оно может вызывать переход из одного состояния в другое. События могут быть различных видов □ обозначенное условие, обычно описанное булевским выражением, стано- вится истинным. Описывается условием перехода без определения имени события; □ получение одним объектом сигнала от другого объекта. Описывается именем события, вызывающим переход; П истечение определенного промежутка времени после обозначенного со- бытия. Описывается временным интервалом, по истечении которого вы- зывается переход. Сигнал или вызов события может быть определен следующим образом: <имя соСытия>'('<параметр> ',' . , . ')' Параметры имеют следующий формат: <имя парвметра>':'<тип> Сигнал может быть представлен как класс со стереотипом "signal" на диаграмме классов. Параметры будут в этом случае атрибутами класса. Сиг- нал также может быть определен как подкласс другого сигнала (рис. 5.23). Рис. 5.23. Объявление сигнала
Глава 5 Унифицированный язык моделирования UML 251 Событие, связанное с истечением промежутка времени, описывается выра- жением, в котором указывается данный отрезок модельного времени, на- пример, ”5 seconds". По умолчанию, по истечении данного отрезка време- ни происходит выход из текущего состояния. В противном случае подобные события могут быть описаны условным выражением, например: [date = Jan. 1, 20001 ИЛИ [10 seconds since exit from state A]. События могут быть объявлены на диаграмме классов как класс со стерео- типом " event11» Простой переход Простой переход (simple transition) представляет собой связь между двумя со- стояниями объекта, показывающую, когда объект может перейти из первого состояния во второе, и обозначающее определенное действие, которое вы- полняется, если произошло определенное событие. Событие может иметь параметры, которые доступны для действий, определенных на переходе, или для действий, инициирующих последующее событие. События обрабатыва- ются мгновенно. Если событие не вызывает никакого перехода, то оно про- сто игнорируется. Если вызывается сразу несколько переходов, то иници- ируется только один из них; выбор может быть недетерминированным, если переходы нс имеют приоритетов. Переход на диаграмме состояний представляется сплошной линией со стрелкой на конце, проведенной от одного состояния (исходною) к другому (конечному), помеченной строкой перехода. Данная строка имеет следую- щий формат: «описание события> ' [' <условяое выраженио] '/' <действие>'л/ <посылка сооб- щения> где: описание события описывает событие и его аргументы: <имя события>' ('<лараметр> ' . . . ; условное выражение является булевским выражением, описывающим усло- вие, при выполнении которого происходит данное событие; действие есть выражение, выполняемое при инициации данного перехода. Оно может содержать в себе операции, атрибуты, данного объекта и пара- метры вызванного события; посылка сообщения определяет сообщение (или сигнал), посылаемое при возникновении данного события, и имеет следующий формат: <адресат> '.' <имя сообщения> ' ( '<параметр> '. ' . . . Переход может содержать несколько таких предложений. Порядок их расположения опре- деляет порядок их выполнения; адресат является выражением, определяющим объект (или множество объ- ектов), которому посылается сообщение (сигнал);
252 Практическое моделирование динамических систем имя сообщения содержит в себе имя события, о котором посылается сооб- щение (сигнал); параметры передаются вместе с данным сообщением (сигналом) объекгу- адресату. Сложный переход Один общий переход может иметь множество исходных и конечных состоя- ний. Это представляется синхронизацией и/или разделением управления между параллельными ветвями в параллельных гюдсостояниях. Если данный объект одновременно находится во всех исходных состояниях данного перехода, то переход осуществляется. Если условие перехода стано- вится истинным, то переход инициируется и выполняются действия, стоя- щие на данном переходе. Обычно все исходные состояния должны быть активны к тому моменту, когда инициируется сложный переход (complex transition). В более сложных ситуациях условие перехода может быть расширено разрешением начал пе- рехода при условии, что некоторое подмножество исходных состояний ак- тивно. Сложный переход представляется на диаграмме состояний вытянутым в вер- тикальном направлении закрашенным прямоугольником. От прямоугольни- ка может исходить одна или несколько линий со стрелками на конце, про- веденных к конечным состояниям. К символу сложного перехода могут быть проведены одна или несколько линий со стрелками на конце, прове- денных от исходных состояний. Строка, описывающая условия перехода, располагается около данного символа. Отдельные линии, проведенные к определенным состояниям, не могут иметь своих строк с описанием усло- вии перехода. Примечание Ни в пакете MVS, ни в подсистеме Simulink пакета Matlab данный вид перехода не поддерживается. Переход в состояние со сложной структурой I Переход в состояние со сложной структурой эквивалентен переходу в егб начальное псевдосостояние или в каждое из начальных псевдосостояний его подсостояний, расположенных параллельно друг другу. Переход в состояние со сложной структурой "наследуется" каждым из вложенных подсостояним (на каком уровне вложенности они бы не находились).
Глава 5. Унифицированный язык моделирования UML 253 Переход на диаграмме состояний, введенный за границу сложного состоя- ния, символизирует собой переход в сложное состояние. Это означает, что переход происходит в начальное пссвдосостояние/псевдосостояния (в случае параллельной структуры) внутри сложного состояния. Начальное псевдосос- тояние также может быть представлено на диаграмме. Переход может быть проведен непосредственно к любому из подсостояиий системы. Переход на диаграмме состояний, выходящий из-за границы сложного со- стояния, символизирует собой переход из сложного состояния в другое со- стояние. Переход может быть проведен непосредственно от любого подсос- тояния системы к состоянию, находящемуся вне сложного состояния. В случае перехода в сложное состояние для каждого из начальных подсо- стояиий выполняются необходимые входные ("entry”) действия. При выхо- де из сложного состояния дня каждого из конечных подсостояний выпол- няются необходимые выходные (• exit") действия. Состояние может содержать в себе индикатор предшествующего состояния (history’ state indicator), представляемый на диаграмме состояний как малень- кий кружок с буквой "Н” внутри. Индикатор предшествующего состояния может иметь любое количество входящих переходов, но нс может иметь вы- ходящих переходов. Если в него выполняется переход, то это означает, что объект возвращается в то состояние, в котором пребывал перед тем, как по- кинуть данное сложное состояние. Необходимые входные (" entry") дейст- вия при этом также выполняются Вложенность в сложном состоянии может быть скрыта. Переход во внут- реннее состояние в подсостоянии или выход из подсостояния представляет- ся как линия перехода, проведенная к так называемым условным псевдосос- тояниям (stubs). Условные псевдосостояния представляются на диаграмме как небольшие вертикальные линии, расположенные в поле сложного со- стояния. Условные псевдосостояния не могут представлять начальные или конечные пссвлосостояния подсостояний. Посылка сообщений Выполняемое в объекте действие посылает сообщения множеству объектов- адресатов. Последнее может содержать в себе от одного объекта до всей сис- темы. Посылка сообщения на диаграмме представляется сплошной линией со стрелкой на конце, проведенной от объекта-отправителя к объекту-адресату (рис.5.24). Стрелка помечается именем события и списком его аргументов. Посылка сообщений между диаграммами состояний представляется пунктир- ной линией со стрелкой на конце, проведенной от отправителя к адресату.
254 Практическое моделирование динамических систем I Диаграммы деятельностей 1 Диаграммы деятельностей (activity diagrams) предназначены для того, чтобы \ отразить переходы в рамках выполнения определенной задачи, вызванные | внутренними процессами (в противоположность внешним событиям). Ис- I пользуются для моделирования потоков работ в различных вариантах ис- i пользования, для анализа вариантов использования. |
. лава 5. Унифицированный язык моделирования UML 255 Основные элементы диаграммы I Основным элементом диаграммы деятельностей является состояние действия (action state). Оно представляет собой состояние, в котором определено внутреннее действие, и имеющее хотя бы один выходящий из него переход, включающий в себя неявное событие завершения данного внутреннего дей- ствия (при наличии условий перехода таких переходов может быть несколь- ку). Состояния действия не могут иметь внутренних или внешних исходя- щих переходов, основывающихся на явных событиях; в таких ситуациях нс пользуются обычные состояния. За одним состоянием действия следует другое состояние, вместе они образуют простую последовательность дейст- вий. Переходы, выходящие из состояния действия, неявно вызываются за- вершением некоего события в состоянии. Переходы могут включать в себя условия перехода и действия. Выполняемое действие может быть описано на естественном языке или на любом языке программирования. В диаграмме деятельностей может использоваться состояние, связанное с Iпринятием решения — решение (decision). Решение используется в тех случа- К1ях, когда в зависимости от условий перехода может иной переход на диаграмме. Может показаться, что диаграмма действий является Это не так. Рассмотрим диаграмму, представленную жить разницу можно, посмотрев на состояние действия Движение. Оно акти- визирует два действия, связанные с ожиданием ошибки и истечением отрез- ка времени Т. Предположим, что произошла ошибка и мы стали двигаться вниз по этому маршруту. Этот путь ведет к линейке синхронизации, с которой связана активизация двух деятельностей — Послать сообщение об ошибке Lпреподавателям И Послать сообщение об ошибке системе управления. Диаграмма указывает на то, что эти две деятельности могут выполняться параллельно и порядок их выполнения не играет роли. В этом и заключает- ся главное различие между блок-схемой и диаграммой деятельностей. Блок схемы ограничиваются последовательными процессами, а диаграммы дея- тельностей могут поддерживать параллельные процессы. Состояние действия на диаграмме представляется как прямоугольник со скругленными углами Выражение, описывающее выполняемое действие, располагается внутри прямоугольника. Выражения на одной диаграмме мо- I гут дублироваться. Решение представляется на диаграмме как ромб с одним или более входя- щим в него переходом и с одним или более выходящим переходом. быть выбран тот или аналогом блок-схемы, на рис. 5.25. Обнару- j j
256 Практическое моделирование динамических систем Рис. 5.25. Диаграмма деятельностей -----............ ' '................................................ < IW .М "Плавательные дорожки" Диаграммы деятельностей отражают происходящие события, однако онг ничего нс говорят о том, кто участвует в реализации того или иного процес- са. Один из способов решения этой проблемы — снабдить каждое состояние
гпава 5. Унифицированный язык моделирования UML 257 действия меткой класса, который за него отвечает Возможен и другой спо- соб — применение так называемых плавательных дорожек (swimlines). В этом случае диаграмма деятельное гей разделяется пунктирными линиями на вертикальные зоны. Каждая зона представляет собой зону ответственно- сти конкретного класса, как это представлено на рис. 5.26. Рис. 5.26. Плавательные дорожки
258 Практическое моделирование динамических систем Декомпозиция на диаграмме деятельностей Любое состояние действия на диаграмме деятельностей может быть под- вергнуто дальнейшей декомпозиции. Его описание может быть представле- но в виде текста, кола или другой диаграммы деятельностей. Если диаграмма деятельностей представляет собой декомпозицию состояния действия более высокого уровня, то на такой диаграмме должно быть только одно начальное псевдосостояние, но может быть несколько конечных псев- досостояний (в зависимости от того, сколько выходов имеется у состояния действия более высокого уровня).
Глава 6 Объектно-ориентированное моделирование Объектно-ориентированный подход в последнее время стал так прочно ас- социироваться с программированием (даже аббревиатуру ООП обычно рас- шифровывают как объектно-ориентированное Программирование), что мно- гие забывают о его прямой связи с моделированием — ведь первоначально он был использован в языке моделирования Simula-67 |8]. Однако в дальнейшем объектно-ориентированный подход развивался почти исключительно программистами. Своеобразным итогом тридцати лет него развития объектно-ориентированного программирования можно считать появление "унифицированного языка моделирования" UML, предназначен- ного для создания объектно-ориентированных спецификаций программных систем на ранних этапах разработки. И только в последние годы объектно- ориентированный подход стал востребованным в своей "родной области", моделировании. Объектно-ориентированное моделирование (ООМ) сегодня весьма модный термин, но на практике этот подход поддерживают нс так уж много пакетов. Победное шествие объекто-ориентированного программирования имеет для ООМ и свои плюсы, и минусы. С одной стороны, идеи объектно- ориентированного подхода широко уже используются многими, но далеко не всеми, пользователями. С другой стороны, основные понятия объектного подхода стали прочно ассоциироваться с их специфической интерпретацией в области программирования, однако понятия объекта, инкапсуляции, на- следования, полиморфизма применительно к моделированию имеют ряд важных особенностей В этой главе мы их рассмотрим, а также попытаемся сформулировать основные положения некоторого гипотетическою языка современного объектного моделирования, который условно назовем OOML. Безусловно, наиболее широко на сегодняшний день использует идеи ООМ язык Modelica, но он не может стать основой нашего гипотетическою языка OOML. Причина в том, что на наш взгляд, он недостаточно универсален. Язык Modelica его авторы недаром называют языком "физического" модели- рования. Вследствие этого на первый план естественно выдвигаются про- блемы компонентного моделирования с неориентированными блоками, а средства описания дискретных аспектов поведения и алгоритмических дей- ствий отступают на второй план и подчиняются исключительно требовали-
260 Практическое моделирование динамических систем ям автоматического анализа совокупной системы уравнений. Между тем, компонентное моделирование с неориентированными блоками является важной, но все же ограниченной областью моделирования при проектиро- вании современных технических систем. В сложной технической системе на верхних и средних уровнях иерархии предположение о направленности свя- зей обычно является вполне разумным (не случайно такие "традиционные" инструменты, как Simulink или VisSiin, продолжают широко использоваться, несмотря на свою "отсталость" в области ООМ). Современная сложная техническая система, как правило, является аппарат- но-программной, со встроенными управляющими компьютерами или мик- ропроцессорами. Если ешс десять лет назад к этому классу относились лишь системы преимущественно военного назначения, то сейчас такие объекты, как автомобиль, стиральная машина, микроволновая печь, музыкальный центр и другие бытовые устройства стремительно трансформируются в сложные технические комплексы с иерархическими системами управления. При проектировании таких систем далеко не всегда на ранних этапах ясно, какая часть функций будет реализована аппаратно, а какая программно, и дискретная составляющая поведения играет не меньшую, а возможно и большую роль, нежели непрерывная. Нам представляется, что современный язык ООМ должен обязательно поддерживать чрезвычайно актуальную в настоящее время технологию "сопроектирования" ("codesign") программной и аппаратной составляющих сложных технических систем. Таким образом, перспективный язык OOML должен явиться результатом 'скрещивания" результатов развития ООП. зафиксированных в UML, и со- временных достижений в области непрерывного моделирования (в том чис- ле, конечно, и идей, предложенных в Modelica). ООМ и языки программирования Первоначально практически все языки моделирования строились как рас- ширение некоторого универсального алгоритмического языка. Для этого существуют веские основания, т. к. практически в любых сколько-нибудь сложных моделях возникает необходимость в более мощных средствах, чем формулы или уравнения, а именно в алгоритмических конструкциях. Созда- вая новый язык моделирования, можно придумать свой алгоритмический язык, однако удобнее заимствовать универсальные алгоритмические конст- рукции из хорошо известных языков программирования. Конечно, можно выделить некоторое минимальное подмножество и поддерживать его в язы- 4 ке моделирования (например, в MVS используется небольшое подмножест- во конструкций языка Ada). Этого подмножества обычно вполне хватает для конструирования большинства моделей, но всегда найдутся модели со сложными алгоритмами обработки данных и для их создателей возможность использовать в модели для описания сложных алгоритмов все изобразитель-
Глава 6. Объектно-ориентированное моделирование 261 ные возможности мошною языка программирования чрезвычайно привле- кательна. Например, если вы моделируете следящую систему» в которой сигнал ошибки вырабатывается в виде разности реального и желаемого зна- чений, то никаких специальных алгоритмических конструкций нс понадо- бится. Но если вы проектируете систему управления ракеты с оптической головкой самонаведения, в которой сигнал ошибки вырабатывается сравне- нием эталонного изображения местности с наблюдаемым, то для описания алгоритма сравнения вам наверняка понадобятся довольно мощные алго- ритм и чес к и е констру к ци и. Выбору в качестве основы языка моделирования алгоритмического языка, способствовало еще и то обстоятельство, что первые языки программирова- ния (Fortran, Algol) являлись действительно алгоритмическими языками. Однако, в последствии в алгоритмические языки практически всегда вклю- чались низкоуровневые конструкции, полезные для повышения эффектив- ности кода, но чрезвычайно затрудняющие понимание программ (обычно приводимый пример — язык С). Как и положено, развитие программирования совершило очередной виток и i появился новый объектно-ориентированный язык программирования Java, который, несмотря на внешнюю похожесть его синтаксиса с используемым в С, снова является действительно алгоритмическим и не содержит никаких машинно-ориентированных конструкций. Мы считаем, что именно Java, а также очень близкий к нему C# являются реальными кандидатами на роль базового языка для OOML. ₽; Использование Java удобно и с чисто практической точки зрения. Совре- менный инструмент моделирования, входной язык которого допускает оп- ределение классов пользователем, должен быть компилирующим. Практиче- ски всегда в компилирующих пакетах моделирования используется некото- рый промежуточный язык программирования (Fortran, С, Pascal). При этом либо пользователь вынужден устанавливать у себя на компьютере вполне конкретную версию компилятора этого языка, либо эта версия должна уста- навливаться вместе с пакетом моделирования. Возникает ряд проблем, в том числе и правовых. Java как промежуточный язык программирования являет- ся почти идеальным вариантом: минимальный набор инструментальных средств доступен всем и распространяется бесплатно, имеются версии для всех практически используемых платформ, достаточно жестко отслеживает- ся совместимость версии "снизу-вверх", упрощается присоединение про- граммного кода пользователя. Непосредственное встраивание Java в язык моделирования (любая перемен- ная может быть объектом Java) имеет и ряд минусов' □ необходимость откладывать до стадии компиляции контроль синтаксиса алгоритмических операторов (представляется маловероятным, что разра- ботчики пакета моделирования захотят повторить весь транслятор Java);
262 Практическое моделирование динамических систем □ отсутствие апробированных библиотек численных методов (практически все библиотеки сейчас написаны на Fortran); □ несколько меньшая скорость выполнения модели по сравнению с "родным" для данной платформы кодом. В настоящее время единственным известным авторам инструментом моде- лирования гибридных систем с непосредственным встраиванием языка Java в качестве элемента языка моделирования является пакет Any Logic. Более разумным представляется компромиссный вариант, когда пакет моде- лирования непосредственно поддерживает небольшое подмножество базового ! алгоритмического языка, позволяя одновременно использовать внешние алго- ритмические объекты, написанные на базовом языке или других объектно-j ориентированных языках программирования и откомпилированные соответ- ствующим компилятором. Для этою компилятору пакета моделирования 1 должны быть доступны сведения о внешнем интерфейсе объектов. В случае ! использования Java это вполне возможно, если сам компилятор языка моде- лирования написан на Java. Особенно привлекательной для реализации такого! подхода является среда MS .NET Runtime, т. к.: О с помощью механизма рефлексии {reflection) доступна информация о внешнем интерфейсе объекта, созданного с помощью любого языка, поддерживающего соглашения этой среды; П можно без особых усилий использовать готовый программный код для Я платформы Intel-Windows, в частности, библиотеки на Fortran в форме DLL. Что такое объект в ООМ? 1 1 Объектом принято называть некоторую сущность, которая инкапсулирует в себе данные и методы как единое целое и взаимодействует с внешним ок-| ружением через определенный интерфейс. С понятием объекта тесно связа-Jj но отношение двойственности -- "класс-экземпляр". Каждый объект всегда является экземпляром какого-то класса (однако не каждый экземпляр клас- са — объект). Естественным кандидатом на роль объекта в компонентном моделировании является, конечно же, блок. Блок — это совокупность переменных и пове-Я дсния, он взаимодействует с внешним миром только через внешние пере- менные. Блок всегда — явно или неявно — экземпляр некоторого класса.! Например, когда вы в пакете Simulink, который формально не поддерживает! ООМ, размещаете на функциональной схеме новый усилитель, вы неявно порождаете новый экземпляр предопределенного класса Gain из библиотеки! Linear blocks. Если хотите, вы можете поменять установленные по умолча-Я нию значения параметра — коэффициента усиления — на нужное конкрет- ное значение. Два усилителя, использованные в схеме, имеют один и тот же
Глава 6. Объектно-ориентированное моделирование 263 набор переменных X,Y,K, один и тот же интерфейс взаимодействия с внешним миром — вход X и выход У, один и тот же закон функциониро- вания — описываемый формулой Y -К X, но могут иметь различные зна- чения переменных. В Simulink по умолчанию новые экземпляры анонимны (какой-то экземпляр класса Gain), но вы можете дать этим двум усилителям свои имена (например, gi и G2). Сточки зрения UML, объект — это совокупность данных (атрибутов), мето- дов и 'машины состояний" в случае активного объекта (см. далее), а “блок" (’’block") — это некоторый стереотип, указывающий на семантиче- ские ограничения для данной категории классов. Соответственно "параметр" ("parameter"), "вход” ("input”) И "выход" ("output") ЯВЛЯ- ЮТСЯ стереотипами, уточняющими семантику для этих групп переменных. Наличие внутренней структуры в блоке-контейнере с позиций ООМ означа- ет наличие внутренних переменных типа "блок" и дополнительных функ- ций, отражающих уравнения связей. К сожалению, точно уложиться в такую трактовку объекта для непрерывных блоков, как будет показано ниже, не всегда удается. В ООП различают объекты пассивные и активные. Пассивные объекты (большая часть объектов в программах) только "откликаются" на вызовы ме- тодов и сообщений извне, но сами ничего не делают, т. е. не могут изменять значения своих данных по собственной инициативе. Активные объекты (например, экземпляры класса Thread в языке Java) имеют свою собствен- ную "нить управления" и функционируют независимо от других объектов и параллельно с ними. В UML предлагается задавать функционирование ак- тивного объекта с помощью карты состояний, в которой узлам соответству- ют некоторые деятельности, протяженные во времени, а переходам — мгно- венные реакции на внешние и внутренние события. Бесспорно, карта состояний является сегодня наиболее удобным и выразительным средством описания дискретных поведений. Даже в различных публикациях, связан- ных с языком Modelica, в котором для описания дискретного поведения ис- пользуются низкоуровневые конструкции, их авторы сами часто вынуждены рисовать карты состояний, поскольку иначе просто трудно понять функ- ционирование моделируемой системы. Однако ее применение для непре- рывных блоков имеется ряд нюансов. Рассмотрим источник синусоидального сигнала, включающий в себя гене- ратор и усилитель (рис. 6.1). Генератор непрерывно изменяет значение выхо- да у согласно формуле у = sin(2^z + ^>0). Усилитель непрерывно преобразует значение входа в значение выхода согласно формуле Y = KX. Наконец, блок-контейнер непрерывно передает сигнал по связям согласно формулам Атр.Х - Gen.y и Y ~ Amp.Y. Такие активные объекты, осуществляющие не- которое непрерывное отображение, мы будем называть активными динами- ческими объектами. Можно также полагать, что эти блоки реализуют особый
264 Практическое моделирование динамических систем вид деятельности, заключающийся в непрерывном поиске решения задан- ных систем уравнений, и выдаче его точка за точкой на выход блока. В то же время, в UML деятельность все же предполагает наличие потока управ- ления, который выполняет некоторую последовательность действий (скорее всего циклическую) параллельно и независимо от других потоков. Непре- рывная деятельность не может выполняться независимо и параллельно. Можно лишь решать совокупную для всей модели систему уравнений. На- пример, для системы, показанной на рис. 6.1, совокупное непрерывное по- ведение задается системой формул: Gen.у - sin(2yTwz + ^0); Amp.X = Gen. у; Amp.Y = К Amp.X; У - Amp.Y. Рис. 6.1. Структурная схема источника синусоидального сигнала Формулы можно вычислять только в таком порядке, в любом ином случае | будет получено неверное решение. Таким образом, /гля реализации непрерывного поведения мы вынуждены обращаться к некоторому внешнему по отношению к блокам процессу, к исполняющей системе, которая и решает совокупную систему алгебро- дифференциальных уравнений. В реальном мире поведение определяется действующими в нем физическими законами. В то же время, с позиций ка- ждого отдельного узла в карте поведения, поведение непрерывного блока определяется только его собственными уравнениями в текущий момент, и изменение поведения сводится к добавлению некоторых уравнений или их исключению из совокупной системы. Таким образом, в описании дискрет- ной составляющей поведения остаются только дискретные действия, необ- ходимые для инициализации нового непрерывного поведения. С позиций UML чисто непрерывный блок должен иметь вырожденную кар- ту состояний, состоящую лишь из одного узла, которому приписана непре- рывная деятельность, задаваемая некоторой системой уравнений. На рис. 6.2
в | Глава 6. Объектно-ориентированное моделирование 265 показана карта состояний для генератора синусоиды, где под sineF подра- зумевается формула у = sin(2TWf + . 1 Рис. 6.2. Карта состояний генератора синусоиды Для гибридных блоков можно вводить дополнительные узлы и переходы между ними. Так, или почти так, задается непрерывное и гибридное пове- дение в пакете MVS. Однако опыт показал, что необходимость явно задавать карту состояний даже для чисто непрерывных блоков несколько запутывает пользователей. Представляется более удобным считать, что активный динамический объект всегда имеет вырожденную карту состояний верхнего уровня с анонимным начальным состоянием (узлом), а пользователь определяет лишь локальные деятельности (поведения) в этом состоянии. Эти локальные деятельности могут являться непрерывными (системы уравнений, в том числе и порожден- ные связями), дискретными (карта состояний — в этом случае начальное со- стояние будет являться гиперсостоянием) или комбинацией непрерывных и дискретных. Выполнение этих локальных деятельностей начинается при соз- дании экземпляра блока и прекращается при его уничтожении. Соответствен- но входные действия этою начального состояния будут выполняться при соз- дании экземпляра блока, а выходные действия — при его уничтожении. Опишем изображенную на рис. 6.1 систему с помощью OOML (нашей це- лью является иллюстрация основных идей ООМ, а не описание какого-то конкретного языка, поэтому в примерах используется Java-подобный син- таксис, не претендующий на полноту и строгость). block class CGain { parameter Real К = 1; input Real X - 0; output Real Y = 0; equation class main { El: Y — K*X; behavior ( do main; };
266 Практическое моделирование динамических систем }/*CGain*/ block class CSineGenerator { parameter Rea] Period = 2; parameter Real Initialphase = 0; output Real Y; equation class main { Real Omega = 2*Pi/Period; Y - sin (Omega*tJme+Initial Phase) ; }; behavior { do main; ); }/*CSineGenerator*/ block class CSineSource { parameter Real Amplitude = 1; parameter Real Frequency = 1; output Real Y; // structure CSineGenerator Gen = new CSineGenerator (Period=l/Frequency); CGain Amp = new CGain (K=Amplitude); behavior ( do equation class { connect{Gen.Y, Amp.X) ; connect(Amp. Y, Y); И 1 )/*CSineSource*/. Обратите внимание на то, что формула в непрерывном поведении блока Cgain помечена специальной меткой Е1. Как будет показано ниже, это не- обходимо для ее переопределения в классе-потомке. Экземпляры блока могут быть статическими и динамическими. Статический экземпляр блока создается автоматически при создании экземпляра охваты- вающего блока. Например, блоки Gen и Amp возникнут автоматически при создании экземпляра блока sineSource (см. рис. 6.1). Экземпляры блоков! самого верхнего уровня вложенности создаются при запуске модели. Таким образом, если все блоки модели статические, то время их существования совпадает с временем прогона модели. Динамические экземпляры блоков создаются и уничтожаются в результате выполнения специальных операто- ров в последовательности мгновенных действий (действий переходов, вход- ных или выходных действий узла) в карте состояния охватывающего устрой- ства. Время существования динамических экземпляров блоков в общем случае меньше времени прогона модели. Заметим, что если динамический
Глава 6. Объектно-ориентированное моделирование 267 [ блок имеет статическую структуру, то она создается и уничтожается вместе с этим блоком. Например, при динамическом создании блока sinesource |(рис. 6.1) б-юки Gen и Amp будут созданы автоматически и так же автомати- чески уничтожены при динамическом уничтожении блока. Заметим, что в I случае поддержки пакетом моделирования динамических блоков необходи- мо также поддерживать и динамическое создание и уничтожение связей ме- жду блоками. | В языках моделирования, как правило, принят способ обращения к конструк- тору объекта, несколько иной, чем в большинстве языков программирования. Некоторая группа внешних переменных выделяется как параметры. Значения параметров могут изменяться только при создании экземпляра блока, во вре- мя прогона модели этой константы. Например, для генератора синусоидаль- ного сигнала (рис. 6.1) такими параметрами могут являться амплитуда, период и начальная фаза сигнала. Если для данного экземпляра значение параметра должно быть отличным от указанного в определении класса, то это новое зна- чение параметра указывают в вызове конструктора класса, например, CSineGenerator Gen == new CSineGenerator(Period=l/Frequency); Весьма удобной является также возможность задания в вызове конструктора новых начальных значений переменных, отличных от указанных в опреде- лении класса, например, CBall Ball ~ new CBall(y-lO); В блоке могут быть также определены обычные алгоритмические процедуры и функции — методы объекта в программистском понимании. Их можно использовать в уравнениях и формулах, а также в последовательности мгно- венных действий карты состояний. С точки зрения видимости внешние переменные и методы имеют уровень public, а все остальные конструкции — уровень protected. В приведенных выше примерах на OOML отражена только функциональная сторона моделируемой системы. Между тем, при описании примеров мы использовали также рисунки (структурная схема, карта состояний). Именно визуальное представление является первичным для современных инструмен- тов моделирования, а соответствующее текстовое представление, как прави- ло, генерируется автоматически. Поэтому в OOML должны предусматри- ваться средства задания графических образов. В языке Modelica это делается с помощью специальных операторов языка, в пакете MVS с помощью спе- циального оператора pragma. Наконец, в современных визуальных инструментах моделирования активно используется 2D- и ЗО-анимация, позволяющая предельно наглядно пред- ставлять функционирование моделируемой системы. В основе анимации мо- дели лежит чрезвычайно простая идея: значение определенного параметра
268 Практическое моделирование динамических систем графического образа (координата, радиус, цвет и т п.) ставится в соответствие некоторой переменной модели и во время прогона модели при изменении значения этой переменной автоматически изменяется положение, размер или цвет графического образа. Тем не менее, анимация, несмотря на стремление разработчиков пакетов максимально упростить ее использование при модели- ровании, остается делом весьма трудоемким. Поэтому было бы чрезвычайно привлекательным — особенно при создании библиотек типовых блоков — делать анимационные окна атрибутом класса, а не экземпляра блока. Следо- вательно, OOML должен включать в себя средства задания анимации. Другим претендентом на звание "объект" является локальное поведение, т. е. деятельность, выполняемая в узле карты состояний. Локальное поведение мо- жет быть дискретным, т. с. вложенной картой состояний или непрерывным — системой алгебро-дифференциальных уравнений и формул. Оно может вклю- чать в себя собственные переменные, связанные с его спецификой и не ис- пользуемые нигде больше, а также описание функциональных зависимостей. Конкретное поведение может быть использовано как деятельность более чем в одном узле карты состояний. Очевидно, что поведение имеет смысл только в контексте своего блока, т. к. в уравнениях, формулах и мгновенных дейст- виях используются переменные блока. Таким образом, описание поведения можно рассматривать как внутренний (inner) класс в описании класса бло- ка (см. например внутренние классы Java или С#). С другой стороны, нс существует никакой принципиальной разницы между локальным поведением и элементарным блоком. Непрерывное локальное поведение — это классическая динамическая система (для ООМ таких сис- тем имеется, например, язык ObjMath — www.ida.liu.se/labs/pelab/omath/). Дискретное локальное поведение — это классическая карта состояний. Соб-1 ственно, гибридная карта состояний и задает элементарный гибридный блок | как "склейку" из классических блоков. Было бы заманчиво иметь возмож-1 ность использовать полезные локальные поведения как блоки, а также ис- пользовать уже готовые блоки как локальные поведения. Пусть, например, нам нужно создать комбинированный генератор сигнала, | который выдавал бы на выходе в зависимости от положения переключателя | (перечислимая переменная Mode) либо синусоиду, либо пилообразный сиг-1| нал, либо ничего. Конечно, можно написать формулу генерации синусоиды и нарисовать кар-| ту состояний дня генерации "пилы" (рис. 6.3). Однако готовые отлаженные генераторы синусоиды и "пилы" (пусть эти классы называются csinGen и csawGen) имеются в библиотеке стандартных блоков любого пакета модели- рования. Можно использовать главные поведения этих блоков как локаль- ные для соответствующих состояний. При этом необходимо только ассо- циировать их внешние переменные с переменными использующегося блока
Глава 6. Объектно-ориентированное моделирование 269 при создании экземпляра поведения (в данном примере выход v комбини- рованного генератора используется вместо выходов у в стандартных блоках): block class CGencrator { input enum {mNull, m3in,mSaw} Mode - mNull; output Real V - 0; statechart class main l initial state NullGen entry actions (У = 0;}; state SinGen do CSinGen(Period=2, V as Y); state SawGen do CSawGen (V as Y) ; transition from NullGen to 3inGen when Mode==mSin; transition from SinGen to NullGen when Mode!=mSin; transition from NulJGen to SawGen when Mode—mSaw; transition from SawGen to NullGen when Mode!--mSav.’; behavior do main; }/*CGenerator*/ Рис. 6.3. Гибридная карта состояний комбинированного генератора Если локальное поведение оформлено как класс, то при входе в соответст- вующий узел карты состояний должен создаваться экземпляр этого поведе- ния, а при выходе уничтожаться (так происходит в пакете MVS). Нс может быть выделена в отдельный класс локальная карта состояний, в которой имеются прямые переходы между локальными и внешними узлами, а также гак называемые "исторические' состояния. Такая карта состояний по существу не является локальной и принадлежит к тому же уровню, что и ее гиперсостояние.
270 Практическое моделирование динамических систем Наконец, некоторые переменные блока могут являться обычными про- граммными (алгоритмическими) объектами, например, Java-объектами. Рас- смотрим в свете вышесказанного модель маятника с обрезаемой нитью (см. главу 2). block class BrokenPendulum { parameter Real L ~ 1; input signal Break; Real Alpha - rad{90); Real Omega = 0; Real x = L*sin(Alpha); Real у = -L*cos(Alpha); equation class OscillationEq { El: d(Alpha)/dt - Omega; E2: d(Omega)/dt ~ -g*sin(Alpha); E3: x « L*sin(Alpha); E4: у = -L*cos(Alpha); }/’OscillationEq*/; equation class FlightEq ( Real Vx = Omega*L*cos(Alpha); Real Vy - Omega*L*sin(Alpha); El: d(x)/dt = Vx; E2: d(y)/dt - Vy; E3: d(Vy)/dt = -g; }/*FlightEq*/; statechart class Main { initial state Oscillation do OscillationEq; state Flight do FlightEq; transition from Oscillation to Flight when Break; }/*Main*/; behavior { do Main; }; }/*BrokenPendulum*/ Наследование в OOM | Наследование в OOM понимается примерно так же, как и в ООП: если вы объявляете класс С2 прямым потомком класса ci, то класс С2 наследует вес элементы класса cl: переменные, методы, карту состояний, локальные пове*| дения, локальную структуру — и все изменения в ci автоматически отражают- ся на С2. Для обозначения отношения классов ci и С2 помимо терминов "предок-потомок" часто используют также термины "родитель-наследник",
Глава 6. Объектно-ориентированное моделирование 271 [ "базовый-производный" (класс), а также ''суперкласс-подкласс" (superclass- subclass). В производном классе нельзя удалить элементы, унаследованные от базового класса. Часто используется еще и понятие косвенного наследования, когда экземп- | ляры одних классов входят как элементы в определение другого класса. На- I пример, блок-контейнер на рис. 6.1 является косвенным наследником клас- сов CSineGenerator И CGain. Целью наследования является модификация базового класса. Пусть, напри- мер, мы хотим создать усилитель с насыщением (его статическая характери- стика показана на рис. 6.4). UpperLirnit t Y-K’X Lowei Limit Рис. 6.4. Статическая характеристика усилителя с насыщением Естественно строить описание этого специального усилителя на базе обыч- ного линейного усилителя и сделать новый класс csaturation прямым на- следником класса CGain. Как провести соответствующую модификацию? Имеются два пути. Первый состоит в добавлении новых элементов описания, изменяющих ло- гику работы блока. Мы добавим две новые переменные Xmin=LowerLimit/K и Xmax«upperLimit/K, а также введем в карту состояний блока два новых узла и четыре перехода (рис. 6.5). Теперь новый блок ведет себя в линейной зоне как предок, а вне нес — своим особым образом. Аналогично можно добавить новые локальные уст- ройства и связи, процедуры и функции, анимационные отображения. block class CSaturation extends CGain { parameter Real Upper Limit. = 1; parameter Real LowerLimit = -UpperLirnit; statechart class Main { Real Xmax - if K>0 then UpperLimit/K else 0; Real Xmin = if K>0 then LowerLimit/К else 0;
272 Практическое моделирование динамических систем initial state LinearZone { do main; }; state U_Saturation { entry actions {Y = UpperLimit;}; In- state L_Saduration I entry actions {Y" - LowerLimit;}; }; transition from LinearZone to U_Saturation when X>=Xmax; transition from U_Saturarion to LinearZone when X<Xmax; transition from LinearZone to L_Saturation when XOXmin; transition from L_Saturation to LinearZone when X>Xmin; }/’Main*/; behavior ( do Main; }; }/*CSa turation*/ Рис. 6.5. Карта состояний усилителя с насыщением, полученная путем добавления в карту состояний линейного усилителя новых узлов и переходов || Новые элементы в производном классе могут иметь те же идентификаторы, которые использованы в базовом. Например, в классе csaturation можно ввести новую целую переменную с идентификатором к. Она будет скрывать, или замещать в определении класса csaturation вещественный параметр к класса eGain (например, в карте состояний Main будет использоваться цслак
Глава 6. Объектно-ориентированное моделирование 273 № переменная), в то время как в определении базового класса (уравнении Е1) | по-прежнему будет использоваться вещественный параметр к. В определе- |нии класса csaturation можно обратиться к параметру к но имени super.к. Такая трактовка замещения элементов характерна для языков программиро- вания. Однако, например, в языке Omola целая переменная к заменит веще- ственный параметр к и в базовом классе Второй путь состоит в переопределении элементов базового класса. В этом слу- чае элемент производного класса с тем же идентификатором, что и некоторый элемент базового класса, замешает его в базовом классе не только в определе- нии производного класса, но и в определении базового класса. Например, в приведенном примере можно не трогать карту состояний, а переопределить формулу Е1 в непрерывном поведении main, заменив ее на другую: Y = if X<Xmin then LowerLimit else if X>Xmax then UpperLimit else K*X s Почти все пакеты, работающие с гибридными системами, допускают подоб- ного рода условные выражения в правых частях дифференциальных уравне- | ний и формул (такие уравнения называются условными или гибридными). | На самом деле эта формула просто другим способом задает ту же модифи- цированную карту состояний и при прогоне модели переключения ветвей i условного выражения будут интерпретироваться как специальные дискрет- ные события и т. д. Однако дчя частного случая гибридной системы, когда состав уравнений не меняется, такой способ записи для пользователя гораз- до удобнее. block class CSaturation extends CGain { parameter Real UpperLimit = 1; 1 parameter Real LowerLim.it = -UpperLimit; i Real Xmax - if K>0 then UpperLimit/К else 0; ] Real Xinin = if K>0 then LowerLirnit/K else 0; override equation class main { ' Y = if X<Xmin then LowerLimit else if X>Xraax then UpperLimit else K*X; ! ]/*CSaturation*/ Заметим, что в данном случае мы переопределили всю систему уравнений main, заменив ее на другую. Для того чтобы переопределить именно нужное уравнение, оставив остальные (в данном случае их нет) без изменений, сле- дует написать так: override ma i n.E1: Y .== if X<Xmin then LowerLimi t
274 Практическое моделирование динамических систем else if X>Xmax then UpperLirnit else K*X; В этом варианте мы переопределяем только уравнение, помеченное как ei. Ясно, что если уравнение не помечено, мы никоим образом не сможем дога- даться, какое уравнение мы переопределяем. Может показаться, что необхо- димость использования меток уравнений может привести к некоторым труд- ностям. Например, если мы в потомке класса CGain добавили уравнение Е2, а потом автор класса eGain независимо тоже добавил в этот класс уравнение е2. Получится, что это уравнение переопределено, что на самом деле не так. Од- нако мы предполагаем, что текстовое представление модели все же является вспомогательным и генерируется пакетом визуального моделирования автома- тически. Для визуальных инструментов такой проблемы не существует: поль- зователь просто указывает' "вот это" уравнение, однозначно его идентифици- руя. А метки могут быть сгенерированы автоматически при выводе текстового представления. Так что, работая с визуальным интерфейсом, пользователь всех этих изысков ООМ просо не видит: для переопределения унаследован- ного уравнения нужно, например, просто дважды щелкнуть мышью на тексте| этого уравнения в окне класса-потомка и ввести новый текст, а все остальное! инструмент сделает сам. Мы здесь подробно останавливаемся на всех этих! деталях только для лучшего понимания вопроса. Продвинутым пользователям, которые могут самостоятельно редактировать текстовое представление, можно порекомендовать либо вводить осмысленные метки (типа движеииепоОсих), либо указывать имя класса как префикс. В главе 2 в качестве примера гибридной системы рассматривался прыгаю- щий мячик. При этом предполагалось, что сопротивление воздуха не учиты- вается. block class CBall { parameter Real VO = 100; parameter Real TetaO = rad(45); Real x ~ 0; Real у = 0/ Real Vx = V0*sin{TetaO}; Real Vy = V0*cos(TetaO); equation class FlightEq { 1| El: d(x}/dt = Vx; E2: d(y)/dt = Vy; ..Я E3: d{Vy)/dt = -g; }/*Flight*/; I statechart class Main { initial state Flight do FlightEq;
Глава 6. Объектно-ориентированное моделирование 275 transition from Flight to Flight when (y<=0) (Vy<Gj actions { Vy = -Vy; ); }/*Main*/; behavior ( do Main; ); }/*CBall*/ Попробуем теперь на основе этого класса построить новый класс CBaiiinAir, в котором учитывается сопротивление воздуха. Ясно, что дис- кретная составляющая поведения (карта состояний Main) в производном классе не изменится. Однако, в классе CBaiiinAir понадобятся новые пара- метры: коэффициент сопротивления сх, площадь среднею сечения sm и масса m (в среде с сопротивлением падение тела зависимо от массы). В не- прерывной составляющей (система уравнений FlightEq) появятся новые переменные (квадрат полной скорости V2, сила сопротивления воздуха F, синус и косинус угла наклона траектории sinTeta и cosTeta), а также но- вые уравнения, кроме того, изменится уравнение ез, в правой части кото- рого добавятся члены, учитывающие сопротивление воздуха. block class CBaiiinAir extends CBall { parameter Real Cx = 0.01; parameter Real Sm = 0.1; parameter Real in = 1; override equation class FlightEq extends super.FlightEq { Real V2; Real F; Real sinTeta; Real cosTeta; E3: d(Vy)/dt = -g-F*sinTeta/m; ' E4: d(Vx)/dt = -F*cosTeta/m; I E5: V2 “ Vx**2+Vy**2; E6: F = Cx*3m*RofcV2/2; }/*FlightEq*/; }/*CBallTnAir*Z Обратите внимание, что в уравнениях используются две константы: g и Ro. Предполагается, что они определены в пакете (см. ниже) данной модели. Точно так же можно переопределить иконку класса, заменив ее на М . В производном классе вы можете переопределить поведение в узле, входные и выходные действия в узле, условия и действия переходов, уравнения и формулы в системах уравнений, процедуры и функции, анимационные ото- бражения, начальные значения переменных, сами переменные, локальные блоки. Например, а пакете MVS можно переопределять входные/выходные
276 Практическое моделирование динамических систем действия и локальные поведения в узле карты состояний, а также условия и действия в переходах. Класс может быть декларирован как абстрактный (abstract или partial в языке Modelica), в этом случае нельзя создавать его экземпляры. Абстракт- ные классы иногда бывают необходимы для выстраивания требуемой цепоч- ки наследования. Любой элемент описания класса может быть декларирован как конечный (final). Он нс может быть переопределен в производных классах. Заметим, что в языке Modelica переопределение элементов базового класса за- прещено, по взамен предложен оригинальный подход параметризации типов. Полиморфизм в ООМ Полиморфизмом в объектно-ориентированном подходе называется возмож- ность использования вместо объектов одного декларированного класса объ- ектов другого класса, называемого замещающим, совместимого с первым. Аналогом в языках программирования являются передача в качестве дейст- вительного параметра объекта другого класса, нежели объявленный класс формального параметра, а также присваивание указателю на объект ссылки на экземпляр иного класса, нежели декларированный класс указателя. Со- вместимость классов в традиционном понимании означает, что либо заме- щающий класс является потомком декларированного класса, либо деклари- рован интерфейс, а замещающий класс реализует этот интерфейс. Таким образом, можно выделить "совместимость по наследованию" и "сов- местимость по интерфейсу”. Совместимость но интерфейсу играет очень важную роль в разработке сложных программных систем, поскольку вы- строить подходящую для всех случаев жизни цепочку наследования часто бывает очень сложно. В ООМ объекты также могут быть формальными параметрами процедур я функций, а в системах с динамической структурой возможны присваивания переменным, являющимся указателями на блоки. Собственно, даже в сис- теме со статической структурой локальные блоки и поведения можно рас- сматривать как указатели на экземпляры соответствующих классов, при- сваивание которым происходит один раз при создании блока-контейнера или модели в целом. Именно поэтому вопросы переопределения перемен- ных и локальных блоков тесно связаны с полиморфизмом. Совместимость по наследованию в ООМ ничем не отличается от ООП, а во? с совместимостью по интерфейсу все нс так просто. Интерфейсом в ООП называется совокупность спецификаций процедур и функций (методов) без указания их реализации, т. е. совокупность абстракт- ных методов. Считается, что класс реализует (implements) некоторый интер- фейс, если в определении класса имеются реализации для всех методов, ука-
Глава 6. Объектно-ориентированное моделирование 277 занных в определении интерфейса. Такое понимание интерфейса для про- граммных объектов вполне разумно, поскольку они взаимодействуют с внешним миром только через методы (по крайней мере, должны в теории, "голубой мечтой” ООП издавна является полная инкапсуляция всех данных). Совсем иное положение в ООМ. Посмотрим еще раз на систему, изобра- женную на рис. 6.1. Устройства Gen и Amp взаимодействуют с внешним ок- ружением через свои внешние переменные, значение которых изменяется непрерывно. Конечно, в практике программирования объектам случается взаимодействовать через свои видимые переменные, однако, при наличии в этих объектах параллельных нитей управления возникает проблема синхро- низации, одним из решении которой является, например, property (свойства), обращения к которым автоматически переводятся компилятором в вызов соответствующих методов. Для реальных физических систем эта проблема решается самой природой, а для модели правильная синхрониза- ция обеспечивается исполняющей системой пакета моделирования (сортировка формул, численные методы). Поэтому под интерфейсом в ООМ следует понимать некоторую совокуп- ность видимых компонентов объекта, т. с. для блока это внешние перемен- ные и видимые извне (public) процедуры и функции. Таким образом, если блок содержит совокупность видимых компонентов с теми же именами, что и в декларации интерфейса, и с совместимыми типами, то блок реализует этот интерфейс. Каждый блок неявно задает определенный интерфейс — совокупность всех своих внешних компонентов "Чистым" интерфейсом яв- ляется блок, у которого не определено поведение. С этих позиций усилитель в схеме на рис. 6.1 можно заменить усилителем с насыщением, который совместим с ним по наследованию и, как следствие, по интерфейсу. Однако усилитель может быть также заменен и на интегра- тор, задаваемый уравнением —~-R д, который тоже имеет вход А, выход У и параметр К того же вещественного типа и, следовательно, совместим с усилителем по интерфейсу, хотя и не имеет с ним ничего общего по насле- дованию! В языке Modelica в дополнение к паре "суперкласс-подкласс" (superclass- subclass) очень активно используется другая пара — "супертип-подтип" (supertype-subtype), ориентированная на совместимость по интерфейсу. Например, из класса CGain можно вывести производный класс (подкласс) CMuiDiv (умножитель-делитель). Усилитель с насыщением в Modelica нельзя вывести из простого усилителя, поскольку карт состояния этот язык не под- держивает, а уравнения переопределять запрещает. model CGain parameter Real К = 1;
278 Практическое моделирование динамических систем xnput Real X (start=O); output Real Y; equation Y = K*X; end CGain; model CMulDiv extends CGain; output Real Z; equation Z - X/K; end CMulDiv; Новый класс CMulDiv наследует от своего суперкласса CGain вход, выход, пара- метр и одно уравнение, а также добавляет один выход и одно уравнение. Определим теперь класс csaturation вне всякой связи с Cgain: model CSaturation parameter Real К = 1; parameter Real UpperLimit = 1; parameter Real LowerLim.it = -UpperLimit; input Real X (start=O); output Real Y; protected Real Xmin (start=LowerLimit/К); Real Xmax (startHJpperLimi/K) ; equation Y - if X>Xmax then UpperLimit else if X<Xmin then LowerLimit -I else K*X; end CSaturation; csaturation является подтипом класса eGain, а тот, в свою очередь супер- типом csaturation, поскольку каждому public-элементу класса eGain соот- ветствует совместимый но типу (в данном случае одного и того же типа) public-элемент csaturation. Для того чтобы в устройстве sinesource (см. рис. 6.1) простой усилитель можно было заменить на усилитель с насыщением, нужно этот блок пара-, метризовать: model CSineSource output Real Y; replaceable model CAmp = CGain;
279 I лава 6. Обьектно-ориентированное моделирование ................ ............................ protected CSineGenerator Gen (Amplitude^) ; CAmp Amp (K=0.6} ; equation connect(Gem.Y,Amp. X) ; connect'Amp. Y, Y); 1 I Далее нужно создать специальный класс CLimitedSineSource на основе i csineSource, переопределив параметризованный класс CAmp, и затем его использовать. Это можно сделать двумя способами: liiodw 1 С L irui t е dS i n.e Source extends CSineSource (redeclare CSaturation CAmp); end CLimiredSineSource; model CLimitedSiresource = Li-' CSineSource (redeclare model CA.mp = CSaturation} ; кТаким образом, Modelica разрешает переопределять локальные блоки по- средством параметризации класса. Аналогичным способом разрешается пе- реопределять и коннекторы. Типы данных Дтя моделирования непрерывных систем необходим минимальный набор типов данных: скалярный вещественный тип, а также типы "вектор" и "матрица" со своими традиционными операциями, а также целые числа для вычисления индексов векторов и матриц. Пакет Simulink, например, обхо- дится вообще без скалярных вещественных переменных, используя вместо них матрицу размерности 1x1. Для моделирования дискретных и гибридных систем необходимо также ; иметь более широкий спектр целых типов (байт, короткое целое, длинное целое), перечислимые, булевские, символьные и строковые типы, а также гочномерные и двумерные массивы с элементами любого скалярного типа. Для систем со сложной структурой крайне желательно наличие типа "за- |пись". С помошью этого тина очень удобно передавать в компактной форме набор взаимосвязанных данных (возможно различных типов) между блока- ми. Даже для чисто непрерывных моделей, где обычно arpei ированныс дан- \ ные передаются в виде векторов, гораздо удобнее передавать набор {.v,j,z,KYJz К}, чем вектор размерности 6 и помнить, что скорость по оси z “ это 5-й элемент вектора. 11(1 Зак !21:1
280 Е :е Практическое моделирование динамических систем Для моделирования систем со сложными алгоритмами функционирования желательна возможность использования обычных алгоритмических (прог- раммных) объектов и массивов объектов. Наконец, для систем с динамической и регулярной структурой необходимы переменные типа "блок" и массивы блоков. Кроме того, в моделировании очень актуально использование ограниченных типов (например, type Voltage = Real 0..24С;) и типов с указанием еди- ниц измерения. Таким образом, многообразие типов данных, необходимых для моделирова- ния, достаточно велико. В UML "тип" трактуется просто как особый класс. В принципе, было бы заманчиво считать, что любая переменная — это объ- ект и даже для стандартных типов, таких как вещественный и целый, ис- пользовать "классы-обертки" Double И Integer, как ЭТО ДСЛаСТСЯ, НЭПрИМСр, в Java. В языке Modelica тип также считается особым видом класса и ис- пользуется отношение наследования между типами (для ограничения облас ти значений или добавления новых компонентов в записи). Такой единой трактовке переменных мешает то, что переменная рассматри- вается как ссылка на экземпляр класса, а не как сам этот экземпляр, так что для задания формулы 3 нужно будет написать, если х, к и Y имеют тип Double, Y = new Double (К. double Value (} X.doublcValue (} j ; Очевидно, что при самой горячей любви к ООМ ни один пользователь в здравом уме это делать не станет. Поэтому приходится полагать, что переменная класса со стереотипом "тип1 рассматривается нс как ссылка на объект, а как сам объект и присваивание ей означает не копирование ссылки, а копирование значений (аналогично структурным типам в языке С#). В то же время переменные обычных клас- I сов должны трактоваться как ссылочные (например, переменные, которым присваиваются ссылки на экземпляры динамических блоков). Пакеты Когда вы разрабатываете какую-то конкретную модель, то достаточно сле- дить за тем, чтобы ее компоненты (классы, константы, алгоритмические функции) имели уникальные имена. При этом все компоненты модели ви- димы внутри описания любого компонента (например, внутри описания класса вы можете использовать константы модели). Все становится сложнее, когда вы захотите использовать уже готовые ком- поненты, например, библиотеку стандартных блоков или вашу собственную
Гпава 6. Объектно ориентированное моделирование 281 библиотеку типовых для вашей прикладной области блоков. Требование ^уникальности имен компонентов становится практически невыполнимым (даже если предположить, что лично вы фантастически дисциплинированы, то требовать этого же от других разработчиков нереально). Возникает есте- -- ствснное желание разделить области видимости компонентов. | Для объединения элементов описания в группы ООП предлагает механизм пакетов. Пакет (package) — эго контейнер для группы компонентов, огра- ничивающий область их видимости. Компоненты, объявленные как public, видимы извне под составным именем, включающим в качестве префикса имя пакета, например, Blocks.eGain, где Blocks — имя библиотеки стан- дартных блоков ("библиотека" в ООМ является практически синонимом термина "пакет"). Остальные компоненты видимы только внутри данного пакета (UML рекомендует по умолчанию объявлять компоненты как public). Конкретная модель рассматривается как некоторый анонимный пакет. В отличие от языков программирования, где компонентами пакета являются только классы, естественными компонентами пакета в ООМ являются также константы и алгоритмические функции. Если язык моделирования включает в себя алгоритмические объекты (то есть объекты в понимании языков программирования, например, Java-объекты), то в пакете можно объявить класс со статическими конечными (final) переменными и методами. При- мером может служить класс Math в пакете java.lang, где, например, имеются статическая переменная pi и статическая функция sin. В противном случае константы и алгоритмические функции придется считать равноправными компонентами пакета. Для того чтобы в одном пакете (или модели) был виден другой, его нужно импортировать, т. е. указать явным образом на его использование Следует учитывать, что отношение импортирования не является транзитивным, г. с, если пакет Р2 импортирует пакет pi, а рз импортирует р2, то это вовсе нс означает, что рз импортирует pi. Импортирование пакета означает, что его имя становится видимым в импортирующем пакете или модели. Следует отметить, что импорт собственно пакета в языке Java нс требуется, посколь- ку используется понятие корневой точки classpath и соглашение о соответ- ствии иерархии пакетов иерархии каталогов файловой системы. Поэтому все пакеты, определенные ниже указанной точки, автоматически становятся видимыми. Если же такого рола соглашения не используются, то импорт пакета нужно явно декларировать (а как отыскать пакет в файловой систе- ме — это дело конкретного инструмента моделирования). package mode11 { import Blocks; // объявление импорта 1 import Blocks.CGain; // объявление импорта 2 import Blocks.*; // объявление импорта 3
282 Практическое моделирование динамических систем import bi near Blocks . * ; // оОьявление импорта 4 Blocks.CGain Ашр = new Blocks.CGain (K=2); // оператор 1. CGain A™p new CGain (B>2); /7 оператор 2 LinearBl.ocks. CGain Amp? = new LinearBlocks.CGain (K=10C} ; // оператор 3 Д }; Таким образом, если в пакете или модели импортируется пакет (объявление j] импорта 1 в примере), то экспортируемые компоненты этого пакета доступ- ны через префикс пакета (оператор I в примере). Если импортируется кон- кретный компонент (объявление импорта 2) или импортируются все компо- ненты пакета (объявление импорта 3), то компонент доступен по своему имени без префикса пакета (оператор 2). Если в данном пакете или модели определен свой компонент с таким же именем, например блок CGain, то он | с к р ы вает и м порт и ру е м ы й компонент. Наконец, если компонент с одним и тем же именем определен более чем в| одном импортируемом пакете, например, блок CGain определен в пакете 1 Biecks (объявление импорта 1) и в пакете LinearBlocks (объявление импор- та 4), то возникает конфликт имен и к нужному компоненту придется об- ращаться через префикс соответствующего пакета (операторы I и 4). В качестве компонента пакета может выступать другой пакет. Например, если пакет Sources вложен в пакет Blocks, то обращаться извне к гснсрато- | ру синусоиды нужно как Blocks.Sources.CSineGenerator. Относительно видимости компонентов пакета во вложенных пакетах имеется два решения: О В UML и Modelica все компоненты охватывающего пакета видны воД вл ожени ом п а кете. П В Java и пакетах Modelica со статусом encapsulated в пакете видимы Ц только собственные и явно импортируемые компоненты. UML предполагает возможность наследования пакетов. В производном па- кете наследуются все компоненты базового, есть возможность добавить но-1 вые компоненты и переопределить унаследованные. Разумно предположить, что в пакете, соответствующем текущему проекту, и имеется специальный класс с зарезервированным идентификатором (на- 1 пример. Model или TestBench), задающий блок-контейнер, в котором по- мешена структурная схема моделируемой системы или той ее части, с кото- рой в данный момент проводится вычислительный эксперимент. Экземпляр именно этого класса должна создать исполняющая система пакета модели-1 рования в начале прогона модели.
Приложение 2 Пример выполнения учебного задания В этом приложении приведен пример выполнения учебного задания для студентов, изучающих курс 'Основы моделирования", читаемый на кафед- ре Распределенных Вычислении и Компьютерных Сетей факультета Тех- ническая К ибер нети ка Сан к г- Петербургского технического университета. Как показывает опыт, в качестве учебных заданий можно выдавать задачи, содержащиеся в научных статьях современных журналов по моделирова- нию. Статьи, где приводится полная постановка задачи, дающая возмож- ность ее воспроизвести, и результаты исследований служат прекрасным исходным материалом для учебных заданий. При выполнении таких зада- ний студенту приходится и переводить исходный текст, т. к. большинство статен публикуется на английском языке, и разбираться с постановкой незнакомой задачи, а также проверять правильность и уравнений, и при- веденных результатов. Курс "Основы моделирования" читается один семестр и сопровождается ла- бораторными работами, целью которых является освоение пакетов Matlab. Simulink, Maple и Model Vision Studium. После чего, в следующем семестре студентам предлагается решить самостоятельно задачу, примером которой может служить приведенное ниже учебное задание. В студенческом отчете должны быть приведены: □ описание системы в терминах унифицированного языка моделирования U ML; □ модели данной системы, реализованные в конкретных пакетах визуаль- ного моделирования (Simulink и MVS) на основе полученного описания; □ результаты численных экспериментов и их объяснение В качестве примера учебного задания рассматривается конкретная система, описанная в работе |47j. Эго задача об управлении протеканием волы через систему, состоящую из двух цилиндрических баков, расположенных на раз- ной высоте, или, более кратко, задача о двух баках Авторы статьи объясня- ют выбор этой системы управления следующими причинами: О наличием реальной установки, модель которой исследуется; □ нелинейным поведением компонентов системы;
346 Практическое моделирование динамических систем □ наличием аварийных ситуаций в поведении системы, которые необходи- мо обрабатывать. Система представляет собой два цилиндрических бака, расположенных вер- тикально на разной высоте таким образом, что дно первого бака находится на расстоянии И = 0,39 м от дна второго (рис. П2.1). Баки имеют одинако- вую высоту Л = 1 м и различные диаметры: первый — £>, ~ 12 см, второй — D, — 5 см. Система имеет входную трубу, находящуюся в первом баке на расстоянии // от его дна. Баки соединены трубой, являющейся выходной трубой первого бака (и расположенной у самого его дна) и входной трубой второго бака (расположенной на расстоянии // от его дна). Также система имеет выходную трубу, расположенную у самого дна второго бака. Входная труба системы снабжена входным краном VitfrjH. (он же входной кран пер- вого бака). Труба, соединяющая выход первого бака со входом второю, снабжена краном Г',. Выходная труба системы снабжена выходным краном 12 (он же выходной кран второго бака). Подача воды в систему контролиру- ется краном который открывается мгновенно, и скорость входного потока воды определяется как (л/ч): (/Гтрш 0, сели У/прк! закрыт, ----‘/ dl [400, если Virgin открыт. (П2.1) Краны К] и V2 являются .медленными устройствами, они открываются и за- крываются с одной о той же постоянной скоростью, так что от момента на- чала открытия (закрытия) до полного открытия (закрытия) требуется 80 с, Их открытие и закрытие контролируются задвижкой, меняющей свое поло- жение от значения Р-0 (полное закрытие в условных единицах) до Р = 80 (полное открытие). Управление открытием/закрытисм кранов Vinpu{. Ej и Jz2 осуществляется с п е ц и ал ьн ы м контроллером. Если через А} и А2 обозначить площади оснований баков, то система урав- нений для уровней воды в баках /?( и /п запишется так: rf/1, _ 1 <-/И|2 rf/i2 _ i dl J । dl dl ’ dt A 2 dt dl (П2 2) dVn dV где ---- — скорость протекания воды по трубе между баками, а —~— di ' dl скорость вытекания воды из системы. Скорость протекания воды между ба-
Приложение 2. Пример выполнения учебного задания 347 ками зависит от уровней волы Л, и /?-,, значения Н и положения задвижки в кране Г,: 2 rf'-l dt Скорость вытекания воды из системы зависит от уровня воды во втором ба- ке //, и положения задвижки /А на кране Г '2: <-^-^КАГ‘г')-фь dt Индивидуальные свойства кранов определяются функциями: (П2.4) 1,85-1 (Г4 -с-610 I] = 80. (П2.5)
348 Практическое моделирование динамических систем Л^(Л) = |2?-6-|0’4 ^57","'< °^<80: (П2.6) [о, Р2-8О. Работа всем системы описывается следующим алгоритмом. В исходном со- стоянии все краны закрыты и оба бака пусты. В начальный момент кон- троллер посылает сигнал входному крану тот .мгновенно открывается и в течение времени Timel [с] наполняется только первый бак. По истече- нии времени 77ше1 контроллер посылает команду открыть кран V. и вода начинает поступать во второй бак. Второе состояние сохраняется на протя- жении Time! [с]. По истечении времени Time2 начинает контролироваться положение крана V,. А именно, если контроллер обнаруживает, что уровень воды во втором баке опустился ниже значения L_min [м], поступает ко- манда закрыть выходной кран, если вода во втором баке превышает уровень L_plus [м] — выдается команда открыть выходной кран. Аварийными счи- таются ситуации, когда переполняется один из баков или происходит пе- риодическое открытие и закрытие выходного крана. Нормальным режимом системы считается состояние, когда все краны открыты, и вода протекает через систему с постоянной скоростью. В качестве тестов авторами статьи предлагается пять задач (табл. П2.1). Таблица П2.1. Тестовые задачи № Timel [с] Time2 [с] L_plus [м] L_mln [м] 1 90 20 0,94 0,16 2 70 30 0,94 0,16 3 70 20 0,94 0,16 4 60 25 0,9 0,30 5 70 26,85 0,94 0,16 Они соответствуют ситуациям: О Переполнение первого бака. □ Переполнение второго бака. □ Нормальный режим. П Периодическое открытие и закрытие выходного крана. П Система находится на границе между нормальным состоянием и режи- мом переполнения второго бака, оставаясь в нормальном состоянии.
Приложение 2. Пример выполнения учебного задания 349 В данной работе в качестве учебною задания предлагается рассмотреть сис- тему в состоянии 4, когда происходит периодическое открытие и закрытие выходного крана. Утверждается, что время выдачи первой команды на за- крытие выходного крана равно 303,13 с (Л2 - L_min -0,3 м), а десятой — 2669,9 с. Описание системы в терминах UML Как уже упоминалось в главе 5, UML содержит шесть основных типов диа- грамм: диаграммы классов (содержащие в себе диаграммы пакетов и диа- граммы объектов), диаграммы вариантов использования, диаграммы взаимо- действия (подразделяющиеся на диаграммы последовательности и на кооперативные диаграммы), диаграммы состояний, диаграммы действий и диаграммы размещения. Для описания системы, заданной в задаче о двух баках, будут использованы диаграммы классов, диаграмма вариантов ис- пользования, диаграмма взаимодействия (из двух альтернативных типов диаграмм выбрана диаграмма последовательности), диаграмма состояний и диаграмма деятельностей. Диаграмма размещения не используется, т. к. предназначается для описания физических взаимосвязей между аппаратны- ми и программными компонентами, которые в данной системе отсутствуют. Л Диаграммы классов, диаграммы пакетов, диаграммы объектов Для того чтобы построить диаграмму классов, необходимо, для начала, вы- делить в системе отдельные относительно независимые элементы и опреде- лить, каким образом они взаимосвязаны между собой. В задаче с двумя баками в первую очередь можно выделить два основных элемента: саму систему из двух баков и некое управляющее открыти- ем/закрытием кранов устройство, называемое контроллером. Как говорилось ранее, контроллер посылает системе из двух баков сигналы, управляющие поведением кранов и 1'2. Для правильного управле- ния системой баков ему необходимо иметь значения интервалов времени Tiinel и Time!, уровней L„plus VLL_min, а также получать от системы ба- ков значение уровня воды во втором бакс /о, необходимое для управления поведением выходного крана 1’2. Обобщая все вышеописанное, контроллер МОЖНО представить классом Controller.
350 Практическое моделирование динамических систем Controller «inputs» h2 : double «outputs» VinOn : signal VinOff: signal V1 On : signal VI Off: signal V20n : signal V20ff: signal «state» Timcl : double *ime2 : double L_plus : double L_min ; double 1 S? s >5 1 send.. VinOn () send_V10n () scnd_V2On () send_V2Off() Рис. П2.2. Диаграмма классов № 1 J lOn, VlOfl, T ime 2, L_plus, state") Также класс содержит операции I Как видно из рис. П2.2, класс controller содержит атрибуты П2 (для ясно- I сти описанный как элемент группы "inputs"), VinOn, VinOff V2or_, V2off (объединенные в группу "outpu L_ minus (объединенные в группу send_vinOn (), send_ vioii (), scnd_v/On (), send_v20f f (), необходимые для fl подачи сигналов на включение входного крана крана К(, крана К, и И отключение крана Г2. В описание класса внесена некая избыточность в ви- де сигналов vinotf, vioff (так как эти сигналы в данном задании никогда не посылаются). Это сделано для того, чтобы в дальнейшем можно было построить модель всей системы, а не только модель для одною режима (так| как логично предполагать, что если кран можно включить, то его можно Я отключить). Также они введены на случай, если в задании потребуется, на- пример, в определенный момент отключить подачу воды в систему, или изолировать баки друг от друга. И хотя в данном варианте задания эти сиг- налы никогда не будут посылаться, в дальнейшем в других элементах систе- мы теоретическое существование этих: сигналов также будет учитываться. L- Как описано в задании, система двух баков должна реагировать на сигналы кон 1 роллера, а именно, управлять открытисм/закрытнем кранов, а также В F
ft В Приложение 2. Пример выполнения учебного задания 351 отслеживать ситуацию, когда вода во втором баке поднимается выше уровня Н и при возникновении такой ситуации изменять скорость поступления I воды во второй бак в соответствии с формулой (П2.3). Также система долж- | на отслеживать ситуацию переполнения баков и должным образом на нее I реагировать. Исходя из этих требований можно провести декомпозицию I системы на несколько частей, а именно выделить элемент, отвечающий за I открытие (закрытие) крана , элемент, управляющий открытием/ I закрытием задвижек и Р2 (один для обоих кранов, т. к. описанные в формуле (П2.5) функции, определяющие индивидуальные свойства кранов В и Г,, совпадают друг с другом с точностью до коэффициента при НУ"4 и J коэффициента в показателе экспоненты). В качестве третьего элемента сис- j темы можно выделить сами два бака, на которые возлагается задача отсле- | живания аварийной ситуации переполнения баков и ситуации, когда вода во втором бакс поднимается выше уровня И. I Первый элемент можно описать классом vinpuL_Control (рис. П2.3). Vi при (Control «inputs» VinOn : signal VinOtT: signal 1-0 ! «OUtpiltS» i Vin : double open Vin () close Vin () Рис. П2.3. Диаграмма классов № 2 Как видно из рис. П2.3, класс vinput,control содержит атрибуты vinOn, vir.off (объединенные в группу "inputs") и атрибут vin (элемент группы "outputs"), описывающий входной поток волы в систему. Также класс со- держит операции opc-n_vin (}, ciose_vin), управляющие входным потоком в зависимости от сигналов контроллера в соответствии с формулой (П2 1) Второй элемент можно описать классом к cont rol (рис. П2.4). Как видно из рис. П2.4, класс K_Control содержит атрибуты Parainji, Param_-2 (объединенные в группу "parameters") и представляющие собой как раз те коэффициенты, которые отличают между собой формулы (П2.5) и (П2.6) , vxon, vxoff (объединенные в группу "inputs"), атрибут к (для ясно- сти описанный как элемент группы "outputs”), описывающий выходной
352 Практическое моделирование динамических систем поток воды из первого и второго бака; атрибут р (для ясности описанный как элемент группы "stale") и управляющий положением задвижки в кра- нах Г] и У2. Также класс содержит операции ир_К{), ореп_к(), down_K{), ciose_K(), управляющие значением функций, определяющих свойства кра- нов И, и У2 в зависимости от получаемых от контроллера сигналов в соот- ветствии с формулами (П2.5)—(П2.6). K„Control «parameters» Param_l : double Param_2 : double «inputs» VXOn : signal VXOlf: signal «outputs» К : double «state» P : double пр_К ( ) ореп_К ( ) down_K () Рис. П2.4. Диаграмма классов № 3 3 Si Третий элемент можно описать классом Two._Tanks (рис. П2.5) Как видно из рис. П2.5, класс Twojranks содержит атрибуты vin, Ki, К2, | (объединенные в группу "inputs"), представляющие собой функции, управ-1 ляющие входным потоком в систему и потоками V12 и vout; hl и h2 (объединенные в группу ’'outputs"), представляющие собой уровни воды в первом и втором баках; в, di, D2, ai, а2, vi2, vout (объединенные в группу "state") представляющие собой расстояние между дном первого и второго баков, диаметры баков, площади их оснований, а также выходные потоки воды из первого и второго баков Также класс содержит операции| up_vi2_vout (), down_vi2_voutо, вычисляющие значения hl И Ъ2 и управ-1 ляющие выходным потоком из первого бака (в зависимости от уровня воды во втором баке и значения К1, в соответствии с формулой (П2.3)) и выход- ным потоком из системы (в зависимости от значения К2 в соответствии с формулой (П2.4)).
11риложение 2. Пример выполнения учебного задания 353 TwoTanks «inputs» К1 : double К2 : double Vin : «outputs» hl : double h2 : double «state» H : double Dl : double D2 : double Al : double A2 : double V12 : double Vout: up, V12_Vout 0 down_ V12_Vout () Рис. П2.5. Диаграмма классов № 4 Так как классы vinput_Control, K_controi и Two_Tanks были ранее выделе- ны как элементы системы двух баков, то логично создать класс Tank_System, находящийся в отношении композиции с этими классами (рис. П2.6). Рис. П2.6. Диаграмма классов № 5
354 Практическое моделирование динамических систем В СВОЮ очередь, класс Tank_Systcm И класс Controller ЛОГИЧНО СВЯЗаТБ 0Т- ношением композиции с классом System, представляющим собой всю сис- тему двух баков (рис. П2.7). На диаграмме объектов № 1 для данной системы представлены объект клас- са Controller, объект класса Vin^ut_Control, объект класса Two_Tanks и два объекта класса K_control, определяющие поведение первого крана (Ki^control) и второго — K2_Ccntroi (рис. П2.8). Объекты классов Controller и Twojianks имеют те же имена, что и соответствующие им классы. Рис. П2.7. Диаграмма классов №6 Controller: Controllci* Vin_Control: Vinput_Control Kl_Control: K_Control Two_Tanks : Two_Tanks K2_Control: K_ControI Рис. П2.8. Диаграмма объектов № 1 На диаграммах объектов № 2 и № 3 представлены два составных объекта; класса Tank_System И класса System (рис. П2.9 и П2.10).
Приложение 2. Пример выполнения учебного задания 355 Tank System: l ank System V in Con t rol: V in pu tCon (го I KI ControliK Control K2_Control:K_Control Twojfanks:Two Tanks Рис. П2.9. Диаграмма объектов № 2 Svstem:Systcm Controller:Controller Tank-System: Tank System Рис. П2.10. Диаграмма объектов № 3 Диаграмма вариантов использования Как уже говорилось в главе 5, вариант использования — это пример взаимо- действия пользователя и системы, чаще всего представляющий реализацию некоего конкретного требования к системе. В примере задачи с двумя баками можно выделить один основной вариант использования — Режим нормальной работы системы. Но, как говорилось в задании, в системе существуют три аварийные ситуации, а именно: пере- полнение первого бака, Переполнение второго бака И Периодическое от- крытие /закрытие выходного крана.
356 Практическое моделирование динамических систем Вариант Режим нормальной работы системы содержит следующие требования: □ в начальный момент времени контроллер посылает системе двух баков сигнал открыть входной кран; □ по истечении времени Timei контроллер посылает системе двух баков сигнал открыть кран vi; О в течение 80 с происходит открытие крана vi; □ по истечении времени Tirr.e2 контроллер посылает системе двух баков сигнал открыть кран V2; □ в течение 80 с происходит открытие крана V2. Рис. П2.11. Диаграмма вариантов использования Далее система работает в нормальном режиме, т. е. вода протекает свобод- ;J но, при этом не происходит переполнения баков. Вариант Периодическое открытие/закрытие выходного крана расширяет И основной вариант использования и содержит следующие дополнительные J требования: □ если после включения входною крана уровень воды во втором баке ста-1 ловится ниже уровня L min, то контроллер посылает системе двух баков сигнал закрыть кран V2; О в течение 80 с происходит закрытие крана V2; О если уровень воды во втором баке становится выше уровня l plus, то j контроллер посылает системе двух баков сигнал открыть кран V2;
Приложение 2. Пример выполнения учебного задания 357 1 1 "" . ... —.... — — II • . .. . . - II .,1 в течение 80 с происходит открытие крана V2; □ далее цикл замыкается и система работает в режиме периодического от- крытия/закрытия выходного крана. ^Вариант Переполнение первого бака расширяет вариант использования ^Периодическое открытие/закрытие выходного крана И содержит следую- | шие дополнительные требования: □ если в любой момент работы системы происходит переполнение первою бака, система блокируется (то есть прекращается всякое движение воды в системе); □ если в любой момент работы системы происходит переполнение второго бака, система блокируется (то есть прекращается всякое движение воды в системе). Диаграмма вариантов использования представлена на рис. П2.11. Диаграмма последовательности Диаграмма последовательности (являющаяся разновидностью диаграмм взаимодействия) представляет взаимодействие объектов в рамках одного ва- рианта использования. Данный тип диаграмм удобно использовать в ситуа- циях, когда имеет место простое поведение, без возникновения циклов и сложных условных переходов. В задаче о двух баках диаграммой последовательности удобно описать поведе- ние Системы В Варианте использования Режим нормальной работы системы. Диаграмма последовательности для данного варианта использования пред- ставлена на рис. П2.12 (временные интервалы соответствуют параметрам, представленным в табл. П2.1). Диаграмма деятельностей Диаграммы деятельностей удобны для изображения взаимодействия вариан- тов использования. Также они удобны дня описания вариантов использова- ния, содержащих условные переходы. В задаче с двумя баками удобно диаграммой деятельное гей представить взаимодействие вариантов использования, а также описать каждый из "аварийных" вариантов использования. На рис. П2.13 представлена диаграмма, описывающая взаимодействие вари- антов использования.
358 Практическое моделирование динамических систем j к Я 1 Controller Vin_(.Control Kl_Control K2 Control Two_Tanks Я {SysTime>=0} TimcO {SysTime- Timcl=70} Timcl a {SysTinic= Timel+Time2= =90} Iimc2 c |b-a=S0] b (d—c=80} d scnd_VinOn () I open Vin () I J I Ж 1 send...VI On () 'Ц ж 1 .; j К M up_K ().K I_(’ontrol 5^ up_K ().K2_C’ontrol Рис. П5 L12. Диаграмма n< send_V2On () ope ope эследовательност n„K (), КI-Control >. ti..K ().K2. Control И 1
Приложение 2. Пример выполнения учебного задания 359 Рис. П2.13. Диаграмма деятельностей № 1 На рис. П2.14 представлено описание варианта использования перходичо- j ское открытие/закрытие выходного крана. т Нормальная работа сисчсмы у Закрытие крана V2 [h2<:=L min] (h2<=L_minj Кран V 2 открыл —Ж------J | прошло 80 с] | прошло 80 с | Рис. П2.14. Диаграмма деятельностей № 2 На рис. П2.15 представлено описание вариантов использования переполне- ние первого бака И Переполнение второго бака. Рис. П2.15. Диаграмма деятельностей № 3
360 Практическое моделирование динамических систем й ' 1 ' —— - ......... , ,1 • I Диаграмма состояний Диаграммы состояний определяют все возможные состояния, в которых может находиться конкретный объект, а также смены состояний объекта в результате влияния неких событий. Исходя из этого, а также используя ранее поезроенные диаграммы, в задаче о двух баках можно определить диаграммы состояний следующих объектов: С on г г о 11 е г: Con t г о 11 е г, Т wo_T a n k s: Т w о_Т апкs, Vin_Contго1:Vinput_Сontго11ег, а также диаграмма состояний обьектов Ki_controi и K2_control класса K_Controi (общая для обоих объектов, т. к. у них одинаковая логика пове- дения). Примечание Далее в тексте мы будем использовать наименования обьектов без указания класса, которому они принадлежат. Диаграмма состояний объекта controller представлена на рис. П2.16. ( ОжиданиоД 1 г Ожидай ие_2 ' ‘entry 7send_VinOn ‘entry7send_V 1 Он 4 Time! Time2 ‘enliy7send_V20ff *enlry7send_V2On (h2>=L_plus] Рис. П2.16. Диаграмма состояний № 1 Данная диаграмма отражает логику поведения объекта controller. Процесс ИЗ начальной ТОЧКИ МГНОВеННО переходит В состояние Ожидание 1, входным действием которого является посылка сигнала VinOn, открывающего вход- ной кран vinput. По истечении времени Timei происходит переход в со- стояние Ожидание ^, входным действием которого является посылка сигнала vion, открывающего кран между баками. По истечении времени Time2 про- исходит переход в состояние Ожидание^, входным действием которого яв- ляется посылка сигнала v20n, открывающего выходной кран V2. В данном состоянии объект находится до тех пор, пока нс станет истинным условие Я перехода h2<Ljr.tn, говорящее о том, что уровень воды во втором баке стад
Приложение 2. Пример выполнения учебного задания 361 ниже уровня L_min. Если условие выполняется, то объект переходит в со- стояние Ожидание 4, входным действием которого является посылка сигнала v20ff, отключающего кран V2. Объект находится в этом состоянии до тех пор, пока не выполняется условие перехода h2>-L_pius, говорящее о том, что уровень воды во втором баке стал выше уровня l plus. Тогда объект переходит обратно в состояние ожидаиие_3 и цикл замыкается Диаграмма состояний объекта Twojranks представлена на рис. П2.17. Рис. П2.17. Диаграмма состояний № 2 Данная диаграмма отражает логику поведения объекта Two_Tanks. Процесс ИЗ начальной ТОЧКИ мгновенно переходит В состояние Вычисление !, в кото- ром выполняется расчет значений vi2, voue, hl и h2 до тех пор, пока не станет истинным одно из условий перехода. Если истинным станет условие (hi>=i)Л (Ь2>=1), т. е. произойдет переполнение какого-либо из баков, то происходит переход в состояние Блокировка, где система блокируется от подачи воды и баки изолируются друг от друга (то есть как бы ’'замо- раживается1' состояние, в котором произошла данная аварийная ситуация). Если становится истинным условие h2>H, т. е., уровень воды во втором баке поднимается выше уровня подключения к нему трубы от первого бака, то объект переходит в состояние вычисление-2, в котором уменьшается ско- рость подачи воды во второй бак и также происходит вычисление значений V12, vout, hl и h2. Эго происходит до тех пор, пока истинным не станет од- но из условий перехода. Если истинным станет условие (Ы>=1) Л (h2>^i), то произойдет переход в состояние Блокировка, а если истинным станет усло- вие Ь2<=н, т. е. уровень воды во втором баке опустится до уровня подключе- ния к нему трубы от первого бака, то объект переходит в состояние Вычис- ление 1 и цикл замкнется. Диаграмма состояний объекта vin_controi представлена на рис. П2.18.
362 Практическое моделирование динамических систем Выключен 1 VinOff=true I 'do'/cbse_Vin () ’do7open_Vin () f VinOn=lruc ] Включен Рис. П2.18. Диаграмма состояний №3 Данная диаграмма отражает логику поведения объекта vir- Control. Про- цесс из начальной точки мгновенно переходит в состояние выключен, в ко- тором выполняется выключение крана vir.pue. Объект находится в этом со- стоянии до тех пор, пока нс поступит сигнал vinOn и нс станет истинным условие vinOn=true. Тогда объект переходит в состояние Включен, В Котором происходит включение крана vinpui. Объект находится в этом состоянии до тех пор, пока не станет истинным условие vinOf£«true, т. е. не будет полу- чен сигнал о выключении входного крана. Тогда объект вернется в состоя- ние Выключен и никл замкнется. Диаграмма состояний объектов Kl_control и K2_control представлена на рис. П2.19. Рис. П2.19. Диаграмма состояний № 4
Приложение 2 Пример выполнения учебного задания 363 Данная диаграмма отражает логику поведения объектов Ki_control и К2_Сопт.го1. Она СОСТОИТ ИЗ двух суперсостояний — Закрытие И Открытие, определяющих закрытие и открытие крана P’t (или Г'2). Процесс из началь- ной точки мгновенно переходит в состояние Закрытие, в котором объект находится до тех пор, пока нс выполнится условие vxon=true. Оно обозна- чает приход сигнала vxon, включающего кран И, (или Р'2). Тогда объект пе- |рсходит в состояние открытие, в котором находится до тех пор, пока нс придет сигнал на закрытие крана, т. е. пе станет истинным условие vxon~true. По этому сигналу объект возвращается в предыдущее состояние и цикл замыкается. В суперсостоянии закрытие содержа Iся два подсос!оя- | ния: Выключение и Выключен. При попадании в данное суперсостояние объ- ект сразу попадает в состояние Выключение, в котором происходит выклю- чение крана до тех пор, пока не выполнится условие р>=80. Это означает, что задвижка крана дошла до предельного положения. В этот момент вы- полняется выходное действие, закрывающее кран, и объект переходит в со- стояние выключен. В нем он находится до тех пор, пока не будет получен сигнал на переход во второе суперсостояние. После него объект сразу попа- дает в состояние Включение, в котором происходит включение крана до тех пор, пока нс выполнится условие рос. Это означает, что задвижка крана дошла до второго предельного положения. В этот момент выполняется вы- ходное действие, открывающее кран, и объект переходит в состояние вклю- чен. В нем он находится до тех пор, пока не будет получен сигнал на пере- ход обратно в первое суперсостояние. Тогда объект переходит обратно в состояние закрытие и цикл замыкается. Модель системы, реализованная в подсистеме Simulink пакета Matlab Построение модели в Simulink сводится к перемещению с помощью мыши необходимых блоков из библиотек Simulink в окно создаваемой модели и соединению этих блоков между собой с помощью функциональных связей. Библиотеки Simulink содержат большое количество разнообразных функ- циональных блоков, которые отображаются на экране в виде пиктограмм. Используя описание задачи о двух баках в терминах UML, можно выделить в данном примере подсистему system (рис П2.20), представляющую собой составной блок. Он содержит в себе функциональную схему, включающую диаграмму Stateflow (представленную блоком controller, являющуюся эк- земпляром стандартного блока chart и описывающую поведение контрол- лера) и составной блок Tank System_BLock, соединенные cool ветствующими
364 Практическое моделирование динамических систем функциональными связями (рис. П2.21). Также в блоке System присутству- ют часы сзоск, подающие системное время из Simulink в диаграмму Stateflow. Это объясняется тем, что при построении моделей, в которых ис- пользуются блоки Stateflow (содержащие в себе переходы, инициируемые истечением неких временных интервалов), необходимо синхронизировать внутреннее системное время в Stateflow и в Simulink. Для этого необходимо на отдельный вход в блоке Siateflow подавать системное время из Simulink и именно это время использовать при составлении условий переходов (таких как истечение отрезков времени 7Уше1и Time2 в задаче о двух баках). Как ВИДНО ИЗ рис. П2.21, К СВЯЗИ, соединяющей блоки Clock И Controller, ПОД- соединены два экземпляра блока Hit crossing. Еще два экземпляра блока Hit Crossing подсоединены к связи блока controller и выхода h2 блока Tank_System_Biock. Использование блоков Hit Crossing необходимо .для правильного выполнения переходов в диаграмме Stateflow, включенной в модель Simulink, в которой происходит непрерывное интегрирование. На вход блока Hit Crossing подается некая величина (в модели двух баков для двух блоков Hit Crossing это системное время, для еще двух — величина Ь2). Сам блок Hit crossing содержит в себе некую величину, при совпаде- нии которой с входной величиной система уменьшает шаг интегрирования. В связи со спецификой системы Stateflow это влияет на правильное выпол- нение переходов и не позволяет системе "проскочить момент", когда должен ВЫПОЛНИТЬСЯ тот ИЛИ ИНОЙ переход. У первого блока Hit Crossing внутрен- ней величиной является момент времени Timcl, у второго — Timel+Time2, у третьего — значение L_pius, у четвертого — L_minus. Блок system не имеет входов и имеет два выхода — ы и Ь2, соединенные со стандартным блоком них (объединяющим их в вектор (hi,h2j). Последний связан со стандартным блоком вывода scope, на который он полает вектор выходных величин {hl, h2). two Jt File Edit Vievv simulation Format System Рис. П2.20. Система двух баков
Приложение 2. Пример выполнения учебного задания 365 Рис. П2.21. Подсистема System В свою очередь, составной блок Tank_system_niock содержит в себе функ- циональную схему, состоящую из следующих элементов (см. рис. П2.22): П составного блока Tank System (имеющего три входа, соединенные с со- ответствующими выходами блока chart, на которые подаются сигналы контроллера, и два выхода — ы и h2); *1 F<le tdit View Sinur'atMTi Format Рис. П2.22. Подсистема Tank_System Block
366 Практическое моделирование динамических систем □ пары экземпляров стандартных блоков Const, Relational Operetor И stop simulation (выполняющих проверку на переполнение баков), со- единенных соответствующими функциональными связями. Блок Tank_System Block имеет три входа (на которые подаются сигналы от контроллера) и два выхода (h I и Ъ2). Составной блок Tank System содержит в себе функциональную схему, со- стоящую ИЗ составных блоков Two_Tanks, VinConcrol, Kl_Ccntrol и K2_Control, соединенных между собой функциональными связями (рис. П2.23). Он имеет то же количество входов и выходов с теми же значе- ниями, что и предыдущий блок. Ibi [УТИ У1"1 File Edit View Simulation Foimat K2 Control Рис. П2.23. Подсистема Tank_System Составной блок vin_Control содержит в себе функциональную схему, со- стоящую из стандартного блока switch и двух экземпляров стандартного блока const, содержащих в себе значения, соответствующие скорости вход- ного потока воды в систему двух баков, когда входной кран открыт и за- крыт. Переключение между этими значениями происходит в блоке switch в зависимости от значения, поступающего на вход блока vin_Control от кон- троллера. Соответствующее значение vin подается на выход. Блок vin_control имеет один вход и один выход (рис. П2.24). Составные блоки Ki_control и К2 control имеют идентичные функцио- нальные схемы, различающиеся только значением коэффициентов в урав- нении, представленном в стандартном блоке fen. Функциональная схема каждого из них состоит из следующих элементов: □ двух экземпляров стандартного блока switch, один из которых необхо- дим для переключения между положениями кранов Г, / К2 открыто/
Приложение 2 Пример выполнения учебного задания 367 закрыто, а второй для отслеживания ситуации, когда параметр р стано- вится равным 80 и соответствующего переключения между значениями функции к(р); О трех экземпляров стандартного блока Const, содержащих в себе значе- ния, 1 и -1, соответствующие положению крана Hj/Pj (откры- вается/закрывается) и значение о для функции к(р) в ситуации, когда р>--=80; □ стандартного блока integrator, интегрирующего поступающее от пере- ключателя значение в пределах от о до 80 с начальным значением интег- рируемой величины 8 9; □ стандартного блока f(u), в котором происходит вычисление значение функции К1(р)/К2(р) . Переключения в блоке swi tch происходит в зависимости от величины, по- ступающей на вход блока Ki _Control/K2__contrc.i от контроллера. Соответ- ствующее значение ki/k2 подается на выход. Блок Ki_Controi/K2_ControJ имеет один вход и один выход. На рис. П2.25 представлен блок xi_Controi. Блок K2_Controi. идентичен. twc_tanks. ,( _> File Edit View Simulatton Format Рис. П2.25. Подсистема KI Control
368 Практическое моделирование динамических систем Составной блок Two Tanks имеет функционалы 1ую схему, образованную из следующих элементов: П составных блоков Vout_calc, Vl.2_ca.lcl И V12_calc2 (отвечающих 33 вычисление значений vout и V12); П стандартного блока switch: □ двух экземпляров стандартного блока мих, объединяющих в векторы со- ответствующие значения — vin (поступающее на вход блока Two_Tanks с выхода блока vin_Control) и V12, а также V12 и vout; □ двух экземпляров стандартного блока fen, производящих вычисление производных м и h2); □ двух экземпляров стандартного блока integrator, выходами которых яв- ляются значения hi и ь.2, поступающие на выход. Переключения в блоке switch происходят в зависимости от значения Ъ2, поступающего на вход блока switch от интегратора. При этом подключается один из блоков, вычисляющих V12. Блок Two_Tanks имеет три входа, на ко- торые подаются значения vin, ki и k2, и два выхода: hi и п2 (рис. П2.26). Составной блок Vout_calc имеет функциональную схему, состоящую из стандартного блока них, объединяющего в один вектор значения к2 и п2, которые поступают на его входы, и подающего этот вектор на вход стан- дартного блока fen, в котором происходит вычисление выходной величины vout. Блок Vout calc имеет два входа и один выход (рис. П2.27). 'Я и О
Приложение 2. Пример выполнения учебного задания 369 file Edit View Simulation Format Рис. П2.27. Подсистема Vout_calc Составной блок vi2_caicl имеет функциональную схему, состоящую из стандартного блока мех, который объединяет в один вектор значения ki и hl, поступающие на его входы, и подающего этот вектор на вход стандарт- ного блока fen. где происходит вычисление выходной величины V12. Блок vi2_caici имеет два входа и один выход (рис. F12.2S). File Edit View Simulation Format = k1*sqrt(h1) Рис. П2.28. Подсистема V12_calcl Составной блок vi2_calc2 имеет функциональную схему, состоящую из стандартною блока Мих, объединяющего в один вектор значения ki, hl и h2, которые поступают на его вход, и подающего этот вектор на вход стандарт- ного блока ten, в котором происходит вычисление выходной величины V12. Блок vi2_caic2 имеет три входа и один выход (рис. П2.29). Рис. П2.29. Подсистема VI 2_са1с2
370 Практическое моделирование динамических систем Диаграмма ytatefiow, представленная экземпляром стандартного блока chart, практически совпадает с соответствующей диаграммой состояний UML (рис. П2.30). В ней вместо внутреннего времени г используется подаваемое на | вход блока системное время Simulink (входная переменная Systemtinw?). Рис. П2.30. Диаграмма Stateflow, описывающая работу контроллера -я i-i Модель системы, реализованная я в пакете Model Vision Studium Ц Основным "строительным” элементом в процессе построения модели в MVS можно назвать устройство. Устройство представляет собой систему типа^ "вход-выход-сосгояние" (или просто "вход-выход") и может быть как про-1
ij Приложение 2. Пример выполнения учебного задания 371 стым, так и составным. С помощью функциональных связей устройства объединяются в единую схему, которую затем можно поместить в специаль- ное устройство, контейнер Test Bench, или собрать сразу в неком устройст- ве-контейнере, экземпляр которого затем помешается в Test Bench. Используя описание задачи о двух баках в терминах UML, можно выделить составное устройство System, помещенное в Test Bench (рис. П2.31), кото- рое содержит в себе простое устройство Controller и составное устройство Tank Systen., соединенные соответствующими функциональными связями I (рис. П2.32). Рис. П2.31. Сошавное устройство System Рис. П2.32. Структура устройства System
372 Практическое моделирование динамических систем В свою очередь, устройство Tank_System содержит в себе экземпляр устрой- ства Two_Tanks, экземпляр устройства vinContrci и два экземпляра устрой- ства к control, описывающих поведение кранов vi и V2: к 1-Control. и К2_control соединенные между собой функциональными связями (рис. П2.33). Устройство-контейнер System представлено соответствующим классом system (рис. П2.34). Карта поведения устройства имеет вырожденную струк- туру и содержит в себе одно состояние init, инициирующие работу устрой- ства при запуске модели. System f Superclass: COevice ’ Icon if, Parameters c> Inputs Outputs ' State □ Constants Q Functions and Procedures У Behavior Ф Main D Chart £*: Local В-Charts Continuous . Structure [Pi Comment ММЙШП11 T‘ltT rflTlCWfl ...Т-’ГТХ? 1 1 1 ’я Рис. П2.34. Класс System |
Приложение 2. Пример выполнения учебного задания 373 Устройство Controller представлено классом controller, который имеет входную переменную Ь2, представляющую уровень воды во втором баке и получаемую от устройства Tank System, а также выходные переменные — сигналы vinOn, vinotif, vion, vioff, V2On и V2off, управляющие системой Tankjjystem (рис. П2.35). Также в классе находится внутренняя переменная anim, необходимая для управления анимационным окном, представленным в следующем разделе па рис. П2.50. Карта поведения устройства практиче- ски совпадает с соответствующей диаграммой состояний UML (рис. П2.36). it Stipijjcl-m CD «vice Icon P wameta:? •< r-> Inputs t_‘> h2. double » 0: S ijuipu’i VriOn signal > Lafce: VenOtt signal «fafee; <~ Vi On signal = false; ч~ V;OIL signal г lake: V20n sign-il » l.v'.e; V20H signal “ - State r Iirnel : double .= Ы 1 ime2. double .<« 2S ;> L_plu>: double * 0 3 l._rriir>a$; dwb’c- ’» 0.3 as iun integer ’ = 0. H Constant? i Q FutKloi: and F'roceduie; I tj} BehiS'-iof V- Main D-Chaii Q Loc^rl ti-Cnarts SJ Continuous рЦ otrucluie Conwocnl Рис. П2.35. Класс Controller Составное устройство Tank System представлено классом Tank Sys, имею- щим входными переменными сигналы vinOn, vinOff, vion, vioff, v20n и V2off — они управляют соответствующими устройствами, входящими в Tank system. Выходной переменной являются переменная Ь2, подаваемая на вход устройства controller, и переменная hl, представляющая уровень во- ды в первом баке. Карта поведения устройства имеет вырожденную структу- ру и содержит в себе единственное состояние init, инициирующее работу устройства при запуске модели. Класс Tank_Sys представлен на рис. П2.37.
374 Практическое моделирование динамических систем L31 х‘ B-Chart - lHode_4 alter Tin<e2 when T irne>=0 when h2> =L_plu$ miry actions {anim =G,} entry actions { send VinCl n; anim.«1; entry actions { send VI On; anim:=2; entry actions { send V20n, anafl>3; after Т ime1 entry actions { send V2Cllf; anii‘n.=4; when h2<>=L_mirius j Рис. П2.36. Карта поведения класса Controller Устройство Two Tanks представлено классом Twojl’anks, имеющим входные переменные kl, k2 и vin. представляющие значения функций, управляющих кранами vi. и V2, а также скорость входного потока воды в систему соответ- ственно. Выходные переменные — уровни волы в первом и втором баках hl и П2 (рис. П2.38). Карта поведения устройства практически совпадает с со- ответствующей диаграммой состояний UML (рис. П2.39). Уравнения, вы- полняемые в соответствующих состояниях, представлены на рис. П2.40. HWiWWife - > □] х| ji.MHfunimuiiHiif i, Two tanks ♦ Superclass. CDevice Icon # Parameters S О Inputs c> kl: double := 0; c> k2: double := 0; r_> Vin: double .= 0, H <- Outputs hl: double := 0; <“ h2: do rble := 0; State & n: double = 0.39; dl: double := 0.12; i«j d2. double = 0.05; Cf, a I double • = pi ’61 Ml /4: a2: double. « piM2M2/4, ;> V’. 2: double := 0. Vciut double -= 0. Q Cori st ants □ Functions and Procedures Behavior M ain В -Chait tiX Local В-Charts 1. Aj Continuous P3 Structure <z| Comment Рис. П2.37. Класс Tanks Svs Рис. П2.38. Класс Two Tanks
Приложение 2. Пример выполнения учебного задания 375 Рис. П2.39. Карта поведения класса Two Tanks /t Cimtinuou» behaviut * (ti S В Us), T . . rtf z’- J>I d( hi J/dt = (Vin-VI 2J/a1 d[ h2 j/dt = (VI 2-Vouiya2........... Vout = k2x£qft(abs(h2)) VI2 = kVsqrt(abs[h1 J| Рис. П2.40. Уравнения состояний карты поведения класса Two Tanks Устройство v—ri о n t it о 1 11 ре дета вл е но кллссом Vlh control, имеющим вход- ними переменными сигналы VinOn и VinOff, получаемые от устройства Controller и управляющие открытисм/закрытием входного крана. Выход- ной переменной является переменная vin, представляющая скорость вход- ного потока воды в систему (рис. П2.41). Карта поведения устройства прак- тически совпадает с соответствующей диаграммой состояний UML (рис. П2.42). Уравнения, выполняемые в состояниях закрыто/открыто, пред- ставлены на рис. П2.43 и П2.44 соответственно. 13 Зак. 1261
376 Практическое моделирование динамических систем Superclass: CD evice Icon Parameters Inputs c> VinOn: signal .= false; ••• VinOff signal:« false; jnj\! H <- Outputs <= Vin: double := 0; S State H Constants □ Functions and Procedures -iBehavior Main В-Chart . “tj. Local В-Charts Bi? Continuous --[gjq Structure fg| Comment Рис. П2.41. Класс Vin_Control Рис. П2.42. Карта поведения класса Vin_Control Рис- П2.43. Уравнения состояний карты поведения класса Vin Control
Приложение 2. Пример выполнения учебного задания 377 Устройства KI Control И K2_Conrtol ПрСДСТавЛСНЫ Классом K_Concrol, имеющим входными переменными сигналы vxon и vxoff, получаемые от устройства controller и управляющие открытием/закрытием крана Г, (или К,). Выходной переменной является переменная к, которая представляет значение функции, управляющей скоростью выходного потока воды из пер- вого бака (или из системы) (рис. П2.44). Карта поведения устройства прак- тически совпадает с соответствующей диаграммой состоянии UML и состо- ит из двух гиперсостояний (рис. П2.45). Внутренние карты состояний соответствующих гиперсостояний, а также уравнения, выполняемые в соот- ветствующих состояниях, представлены на рис. П2.46 и П2.47. “fr Superclass: CDevice Icon kJ Parameters # Param_1: double := 1.85e-4; Psram_2: double := -6e-6; -i Inputs VXon: signal .= false; =! c"> vXoff: signal ;= false; id -<~ Outputs <~ k: double := 0; rJ # State О p: double := 80; Q Constants Q Functions and Procedures Behavior Q, MainB-Chart |£-Local B-Charts [£ Continuous Structure Гд Comment Рис. П2.44. Класс К Control Рис. П2.45. Карта поведения класса К Control
378 Практическое моделирование динамических систем when р> ”-80 I do Equations_1 - exit actions { Continuuus i*' tnvi< ==• ту O'- c4 d( p ]/dt = 1 к * Paiam_i "exp(Param_21!p*p1‘pj Рис. П2.46. Вложенная карта поведения состояния Node 1 и уравнения состояний карты поведения класса Two Tanks JoJxl B-Lhart - [К jCOI doEqualJfeT’ '^P<=° exit actions { p:=0; k: »Param_1 “exp(Par arn_2 T/p“p]: } Рис. П2.47. Вложенная карта поведения состояния Node_2 и уравнения состояний карты поведения класса Two Tanks
Приложение 2. Пример выполнения учебного задания 379 Усовершенствования При решении любой сколько-нибудь сложной задачи учесть все ее особен- ности на первом этапе невозможно. Решая поставленную задачу, мы ориен- тировались только на один режим, и при попытке использовать построен- ную модель для других режимов могут возникать непредвиденные ситуации. Пример 1 Допустим, система двух баков уже функционирует: входной кран открыт, вода свободно протекает через баки. Пусть уровень воды во втором баке мгновенно стал выше уровня Н — кто-то подошел и долил воды во второй бак. Тогда в уравнении, приведенном ниже, произойдет коллизия' подкоренное выражение станет отрицательным. </И,2 Ik, W 7й!-(Л2-Н)'. Й2 > //; Л ь2<н. Во избежание подобных ситуаций, логично записать данное уравнение в сле- дующем виде: г/И12 _ А',(Pj) • JabsUii - {h2 “ H)J, h2 >H; d< h2<II. Пример 2 В описании системы двух баков говорится, что в начальный момент времени контроллер посылает сигнал входному крану Vinpu{, тот мгновенно открывается и в течение времени 77/ncl [с] наполняется только первый бак. По истечении времени ТипёХ контроллер посылает команду открыть кран I] и вода начинает поступать во второй бак. Второе состояние сохраняется на протяжении Time! [с]. По истечении времени Time! начинает контролироваться положе- ние крана 17? (открыть/закрыть). Таким образом, все время работы системы краны , и Ц открыты. Но ведь возможны ситуации, когда кто-то подошел и закрыл входной кран, или кран К,, или оба эти крана. То есть, при описании системы было логично предусмотреть не только последовательность " открыт, открыт, И2 открыт/закрыт", но и все возможные комбинации типа "открыт/закрыт" для всех трех кранов. Ниже приведены все возможные состоя- ния, в которых может находиться система двух баков в зависимости от положе- ния кранов Vb м, Fj и V2 (1 — кран закрыт. О — кран открыт).
380 Практическое моделирование динамических систем Таблица П2.2. Состояния, в которых может находиться система двух баков в зависимости от положения кранов vinput, VI и V2 Hnput Ц Иг Возможные аварийные ситуации 0 0 0 Переполнение первого бака Переполнение второго бака 0 0 1 Переполнение первого бака Переполнение второго бака 0 1 0 Переполнение первого бака, когда второй бак еще не опус- тошился Переполнение первого бака одновременно с опустошением второго бака Опустошение второго бака, когда первый бак еще не пере- полнился 0 1 1 Переполнение первого бака 1 0 0 Опустошение первого, а затем второго бака 1 0 1 Отсутствуют 1 1 0 Опустошение второго бака 1 1 1 Отсутствуют На первый взгляд кажется, что эти возможные аварийные ситуации по умолчанию предусматриваются в описании задачи. Но математическая мо- дель данной системы не предусматривает отслеживание ситуаций с олусто- „ U Vinput ~ шением баков. Так, если закрыть входной кран, т. е. ------= 0, то значение di и h2 убывать, причем опускаясь до отрицательных значений, что в ре- альной ситуации невозможно (уровень воды в баке не может быть отрица- тельным)). Дня того чтобы слишком не усложнять модель системы, не будем при опустошении баков блокировать систему (как это делается в ситуации с переполнением баков). Ведь когда бак опустеет, можно и "долить" в него воды. Но на диаграмме состояний объекта Two_Tanks:Two_ Tanks (как и в самом классе Two Tanks) необходимо сделать определенные изменения, позволяю- щие отслеживать ситуацию с опустошением баков, т. к. в этих случаях необ- ходимо заменять одну систему уравнений другой. Для этого необходимо доба- вить два новых метода с исправленными системами уравнений (рис. П2.48).
Приложение 2. Пример выполнения учебного задания 381 Two ranks «inputs» К1 : double К2 double Vin : double «outputs» hl : double h2 : double «slate» 11 : double I) 1 : double D2 : double Al : double Л2 : double VI2 : double Vout : double up VI2_Vout () down_ V12_Vout () up_V12Voutl () up V12Vout2() Рис. П2.48. Класс Two_Tanks С учетом содержания табл. П2.2, диаграмму состояний объекта two Tanks:Two_Tanks необходимо задать в виде, показанном на рис. П2.49. Как видно, все проведенные изменения необходимы для того, чтобы "отлавливать" ситуации с опустошением первого или второго баков и соот- ветственно изменять значения hl, h2, V12 и vout. Так как были проведены изменения в описании модели на UML, логично сделать соответствующие изменения в моделях, реализованных в Simulink и MVS. Но, как ни странно, несмотря на произведенные изменения, необхо- димо исправить только модель, сделанную в MVS. Это связано с тем, что когда мы моделировали систему двух баков в подсистеме Simulink, то авто- матически мы предусмотрели ситуацию с опустошением баков: в интеграто- рах составного блока Two_Tanks мы поставили ограничение на значение ве- личин hl и h2. Таким образом, изменения необходимо произвести только в модели, выполненной в пакете MVS. Изменения также коснутся только класса Two Tanks (рИС. Г12 50 И П2.51). Как видно из рис. П2.50, мы изменили карту поведения данного класса в соответствии с каргой состояний модели UML и приписали новым состоя- ниям измененные системы уравнений (рис. П2.51) (выбор того или иного уравнения зависит от того, какой бак опустел).
382 Практическое моделирование динамических систем Рис. П2.49. Диаграмма состояний объекта Two Tanks Рис. П2.50. Карта поведения класса К Control
Приложение 2. Пример выполнения учебного задания 383 d( h2 J/dt - {V12 voul)/a2 Vout = k2"sqft(abs(h2]J ConJ inuius ^Jnl2£l 1<Э IB !U S’f r?-’ Й 11 № w гЛМ tWnHfr* |Цмл ин, I W«| ifr*i i« W><raWftf»WHI ftft di hl )/dt-(VuW12]Ai1 V12 = к1 *sqrt[.absfh 1 ll Рис. П2.51. Ура[?нония, выполняемые в соответствующих состояниях карты поведения класса Two_Tanks Результаты эксперимента На рис. П2.52 представлена временная диаграмма изменений уровней воды в баках, полученная в результате эксперимента с моделью, реализованной в подсистеме Simulink пакета Matlab. Рис. П2.52. Временная диаграмма изменений уровней воды в баках, полученная в подсистеме Simulink На рис. П2.53 представлена временная диаграмма изменений уровней воды в баках, полученная в результате эксперимента с моделью, реал изованной в пакете Model Vision Studium.
384 Практическое моделирование динамических систем Рис. П2.53. Временная диаграмма изменений уровней воды в баках, полученная в пакете Modal Vision Studium Данные временные диаграммы отражают изменения уровней воды в системе двух баков при открытии/закрытии выходного крана. Возрастающие участки кривых //](/) и /ь(/) соответствуют состоянию системы, когда выходной кран закрыт. Убывающие участки кривых Л|(/) и соответствуют состоянию системы, когда выходной кран открыт. Па рис. П2.54 представлено анимационное окно для задачи о двух баках, реализованное в пакете Model Vision Studium. Рис. П2.54. Анимационное окно для задачи о двух баках, реализованное в пакете Model Vision Studium В табл. П2.3 приведены результаты численных экспериментов для варианта Я 4 из табл. П2.1 (периодическое открытие/закрытис выходного крана), про-Я моделированного при помощи подсистемы Simulink пакета Matlab. Данные | получены для одинаковой для всех методов относительной и абсолютной точности, равной 10-5 .
Приложение 2. Пример выполнения учебного задания 385 Таблица П2.3. Результаты численных экспериментов в подсистеме Simulink Метод Первое переключение Десятое переключение Время [с] h2 [м] Время [с] h2 [м] Контрольные значения 303,13 0,3 2669,9 0,3 ode45 (Dormand-Prince) 303,13 0,3 266987 0,3 ode23 (Bogacki-Shampine) 303,12 0,3 2669,50 0,3 ode113 (Adams) 303,10 0,3 2669,98 0,3 ode15s (stiff/ NDF) 303,13 0.3 2670,0 0,3 ode23s (stiff/ Mod. Rosenbrock) 303,09 0,3 2669,53 0,3 ode23t (mod. Stiff/ Trapezoidal) 303,11 0,3 2669,69 0,3 В табл. П2.4 приведены результаты численных экспериментов для варианта 4 из табл. П2.1 (периодическое открытие/закрытие выходного крана), про- моделированного при помощи пакета Model Vision Studium. Данные получе- ны при одинаковой для всех методов относительной и абсолютной точности и точности поиска условия смены состояния, равной 10~5. Таблица П2.4. Результаты численных экспериментов в пакете Model Vision Studium Метод Первое переключение Десятое переключение Время [с] h2 [м] Время [с] h2 [м] Контрольные значения 303.13 0,3 2669,9 0,3 Auto 303,13 0,3 2669,88 0,3 RK45 303,13 0,3 2669,88 0,3 RK78 303,13 0,3 2669,87 0,3 RK853 303,13 0,3 2669,87 0,3 m_Adm 303,27 0,3 2670,23 0,3 BDF 303,27 0,3 2670,18 0,3 lmp_RK 303,13 0,3 2669,87 0,3
386 Практическое моделирование динамических систем Как видно из результатов эксперимента, представленных в табл. П2.3 и | П2.4, в обоих пакетах для сходных численных методов значения первого переключения получились практически сходными с друг другом. Также практически сходны значения десятого переключения. Наиболее близкий к приводимому в исходной статье результат был получен в подсистеме | Simulink при использовании методов ode45, ode!5s, а в пакете Model Vision i Studium — при использовании методов Auto (система автоматически выби- рает наиболее подходящий метод интегрирования), RKF45, ImpRK.
Список литературы 1. Арайс Е. А , Дмитриев В. М. Автоматизация моделирования многосвяз- ных механических систем. — М.: Машиностроение, 1987. 240 с. 2. Базы кин А. Д., Кузнецов 1О. А., Хибник А. И. Портреты бифуркаций. — М.: Знание, 1989.48 с. 3. Барбаш ин Е. А. Введение в теорию устойчивости. — М.: Наука, 1967. 223 с. 4. Бусленко Н. П. Моделирование сложных систем. — М.: Наука. 1978. 384 с. 5. Бутен ин Н. В., Неймарк Ю. И., Фуфаев Н. А. Введение в теорию нели- нейных колебаний. — М.: Наука, 1987. 258 с. 6. Варфоломеев С. Д., Гуревич К. Г. Биокинетика. — М.: ФАИР-ПРЕСС, 1999. 720 с. 7. Веселова И. Ю , Сениченков Ю Б. Моделирование: Вычислительный практикум. — Изд-во СПбГТУ, 1999. 108 с. 8. Дал У., Мюрхауг Б., Нюгород К. СИМУЛА-67: Универсальный язык программирования. — М.: Мир, 1969. 99 с. 9. Гальперин Г. А., Чернов Н. И. Биллиарды и хаос. — Серия "Матема- тика, кибернетика"; № 5. — М.: Знание, 1991. 48 с. 10. Инихова М. А., Инихов Д. Б., Колесов Ю. Б., Сениченков Ю. Б. Model Vision: Руководство пользователя. — СПб.: МВ Софт, 1995. 120 с. 11. Калман Р., Фалб П., Арбиб М. Очерки по математической теории сис- тем. — М.: Мир, 1971. 400 с. 12. Каханер Д., Моулер К., Неш С. Численные методы и программное обеспечение. — М.: Мир, 1998. 575 с. 13. Колесов Ю. Б., Сениченков Ю. Б. Визуальное моделирование сложных динамических систем. — СПб.: Изд-во Мир и Семья & Интерлайн, 2000. 242 с. 14. Математические модели технических объектов/Трудошин В. А., Пивова- рова Н. В. — САПР, т. 4, — Минск: Вышэйшая школа, 1988. 195 с. 15. Model Vision Studium — инструмент для визуального объектно- ориентированного моделирования сложных динамических систем/ Ко- лесов Ю. Б., Сениченков Ю. Б. — Труды Международной научно- технической конференции. Гибридные системы. Model Vision Studium 7 — 9 июня 2001 г., с. 5—46. 16. Ортега Дж., Рсйнболт В. Итерационные методы решения нелинейных систем уравнений. — М.: Мир, 1975. 278 с.
442 Практическое моделирование динамических систем 17. Пановко Я. Г. Введение в теорию механических колебаний. — М.: Нау- ка, 1971. 242 с. 18. Петровский И Г. Лекции по теории обыкновенных дифференциальных уравнений. — М.: Наука, 1964. 272 с. 19. Прицкер А. Введение в имитационное моделирование и язык СЛАМ II: Пер. с англ. — М.: Мир, 1987. 646 с. 20. Самарский А. А., Михайлов А. П. Математическое моделирование: Идеи. Методы Примеры. — М.: Наука, 1997. 320 с. 21, Трудоношин В. А., Пивоварова Н. В. Математические модели техниче- ских объектов. — Минск: Выш. шк., 1988. 159 с. 22. Усманова 3. Д. Моделирование времени. — М.: Знание, 1991. 48 с. 23. Фаулер М., Скотт К. UML в кратком изложении. Применение стан- дартного языка моделирования.: Пер. с англ. — М.: Мир, 1999. 191 с. 24. Федоров М. П., Романов М. Ф. Математические основы экологии. — Изд-во СПбГГУ, 1999 155 с. 25. Форсайт Дж., Молер К , К. Малькольм К. Машинные методы математи- ческих вычислений. — М.: Мир. 1980. 278 с. 26. Хайрер Э., Ваннер Г. Решение обыкновенных дифференциальных урав- нений. Жесткие задачи и дифференциально-алгебраические задачи. — М.: Мир, 1999. 685 с. 27. Хайрер Э., Нерсетт С., Ваннер Г. Решение обыкновенных дифференци- альных уравнений. Нежесткие задачи. — М.: Мир, 1990. 512 с. 28. Шеннон Р. Имитационное моделирование — искусство и наука. — М : Мир, 1978. 418 с. 29. Эрроусмит Д., Плейс К. Обыкновенные дифференциальные уравнения. Качественная теория с приложениями. — Изд-во Платон, 1997. 242 с. 30. Andersson М. Omola — An Object-Oriented Language for Model Representa- tion. — Lie Tech thesis TFRT-3208, Department of Automatic Control, Lund Institute Of Technology, Lund, Sweden., 1990. 31. Andersson M. Omola-Object-Oricntcd Modeling and Simulation of Hybrid Systems. - PhD thesis 1SRN LUTFD2/TFRT—1043—SE, Department of Automatic Control, Lund Institute Of Technology, Lund, Sweden, 1994. 32. Booch Grady. Object-Oriented Design. Redwood City, Calif.: Benjamin/ Cammings, 1991. 33. Booch G., Jacobson L, Rumbaugh J. The Unified Modeling Language for Object-Oriented Development: Documentation Set Version 1.1. September 1997.
Список литературы 443 34. Brenan К. Е., Campbell S. L., Petzold L R. Numerical solution of initial-value problems in differential-algebraic equations. North-Holland, 1989, 195 p 35. Cameron John. JSP&JSD: The Jackson Approach to software development. Washington, DC: IEEE Computer Society Press, 1989. 36. Cody W. J. MACHAR: A subroutine to dynamically determine machine pa- rameters, TOMS 14, December, 1988. 37. Coad Peter, Yourdon Edward. Object-oriented analysis. Englewood Cliffs, New Jersey: Yourdon Press, 1990. 38. Dongora J. J., Bunch J. R.} Moler С. B., and Stewart G.W. UNPACK: Users Guide. Soc. Indust. AppL Math., Philadelphia. 368 p. 39. Garbow B. S., Boyle J. M., Dongora J. J., and Moler С. B. Matrix Eigen — system Routines — EISPACK: Guide Extension. — Lecture Notes in Com- puter Science. Vol. 51. Berlin: Springer-Verlag. 343 p. 40. Gabrow B. S., Hillstrom К. E., and More J. J. Implementation Guide for M1NPACK-L — Argonne National Laboratory Report ANL-80-86, Illinois, 1980. 41. Harel D. Statecharts: a visual formalism for complex systems. — In Science of Computer Programming, North-Holland, Vol. 8, № 3, 1987, pp. 231—274. 42. Hairer E., Norsett S. P., and Wanner G. Solving ordinary differential equa- tions-!. Nonstiff problems. 2nd edition. — Springer Series in Computational Mathematics, Springer-Verlag, 1993. 450 p. 43. Hairer E., and Wanner G. Solving ordinary differential equations-Il. Stiff and differential-algebraic problems. — Springer series in Computational Mathe- matics 14, Springer-Verlag, 1991. Second edition 1996. 450 p. 44. Alan C. Hindmarsh. Odepack, a systematized collection of Odesolvers. — In Scientific computing, R. S. Stepleman et al. (eds.), North-Holland, Amster- dam, 1983, pp. 55—64. 45. Alan C. Hindmarsh. Lsode and Lsodi, two new initial value ordinary differential equation solvers — ЛСМ-Signum Newsletter. Vol. 15, 4 (1980), pp. 10—11. 46. Kesten Y., Pnucli A. Timed and hybrid statecharts and their textual represen- tation. Lee. — Notes in Comp. Sci. Springer-Verlag, 1992, pp. 591—620. 47. Kowalcwsky S., Stursberg O., and others. A Case Study in Toll-Aided Analysis of Discretely Controlled Continuous Systems: the Two Tanks Problem. — Presented at the 15 international Workshop oh Hybrid Systems, 1997. 48. Maier O., Manna Z., and Pnucli A. A formal approach to hybrid systems. — In Proceedings of the REX workshop "Real-Time: Theory in Practice", LNCS. New York: Springer Verlag, 1992.
, Евгения Бенькович Книга Практическое Юрий Колесов моделирование динамических . _ ~ л систем Беньков ЦЕНА - 31 90 Юрии Сениченков (ТИЧЕСКОЕ МОДЕЛИРОВАНИЕ ДИНАМИЧЕСКИХ СИСТЕМ Компьютерное моделирование становится самым распространенным методом исследования окружающего нас мира и необходимым элементом технологии разработки новых технических устройств. Цель данной книги - способствовать применению компьютерного моделирования в различных областях, в первую очередь в инженерном деле и образовании. • Введение в компьютерное моделирование • Описание гибридной системы (известной также под названием непрерывно-дискретной системы или системы с переменной структурой) • Краткие руководства к программным средствам и описание языков моделирования, позволяющих создавать и воспроизводить поведение моделей (Simulink, StateFlow, Model Vision Studium, Modelica и UML) • Примеры учебных задач с решениями На прилагаемом компакт-диске вы найдете современные разработки фирмы XJTEK (Экспериментальные объектные технологии), программные комплексы для создания визуальных моделей динамических систем Model Vision Studium и AnyLogic. Первый предназначен для разработки научных и учебных моделей в среде Windows, а второй для профессионалов, создающих сложные модели, способные работать на любых платформах, так как используется язык Java SBN 5-94157-099-6 9 78594 570997