«С. В. Беневольский Ю. Б. Колесов МОДЕЛИРОВАНИЕ ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ МОДЕЛИРОВАНИЕ В ЗАДАЧАХ ВНЕШНЕЙ БАЛЛИСТИКИ Учебное пособие Санкт-Петербург Издательство Политехнического университета 2009 УДК 519.7 (075.8) Б 46 ...»
Федеральное агентство по образованию
САНКТ-ПЕТЕРБУРГСКИЙ
ГОСУДАРСТВЕННЫЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
1.
С. В. Беневольский Ю. Б. Колесов
МОДЕЛИРОВАНИЕ
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ МОДЕЛИРОВАНИЕ
В ЗАДАЧАХ ВНЕШНЕЙ БАЛЛИСТИКИ
Учебное пособие Санкт-Петербург Издательство Политехнического университета 2009 УДК 519.7 (075.8) Б 46 Беневольский С.В. Моделирование. Объектно-ориентированное моделирование в задачах внешней баллистики : учеб. пособие / С.В. Беневольский, Ю.Б. Колесов. -- СПб., Изд-во Политехн. ун-та, 2009. -- 127 с.Пособие соответствует государственному образовательному стандарту дисциплины «Моделирование» направления бакалаврской подготовки "Информатика и вычислительная техника".
Рассмотрен современный подход объектно-ориентированного моделирования сложных нелинейных гибридных систем на примере задач внешней баллистики. Изложены основные понятия объектно-ориентированного подхода к моделированию. Приведены основные конструкции универсального языка моделирования UML, а также его расширения применительно к непрерывным и гибридным системам. Показано применение технологии объектноориентированного моделирования к типовым моделям внешней баллистики.
Изложенный материал позволяет организовать полноценные лабораторные работы. Все приводимые в данном пособии модели выполнены с помощью отечественного инструмента моделирования MvStudium.
Предназначено для студентов (бакалавров, магистров) и аспирантов, обучающихся по направлению «Математическое моделирование» при изучении курсов «Вычислительные пакеты», «Системный анализ», «Математические модели».
Ил. 92. Библиогр. ; 10 назв.
Печатается по решению редакционно-издательского совета СанктПетербургского государственного политехнического университета.
© Беневольский С.В., Колесов Ю.Б., © Санкт-Петербургский государственный политехнический университет, ISBN 978-5-7422-2382- Оглавление.
Введение
Глава 1. Объектно-ориентированное моделирование сложных динамических систем
1.1. Основные понятия объектно-ориентированного моделирования...... 1.2. Активный динамический объект.
1.3. Пакеты и модель
1.4. Переменные.
1.5. Система уравнений
1.6. Карта поведения
1.7. Компоненты
1.8. Структурная схема
1.9. Наследование классов
1.9.1.Добавление новых элементов описания
1.9.2. Переопределение унаследованных элементов
1.10. Управление вычислительным экспериментом
Глава 2. Элементы моделей внешней баллистики
2.1.Модель атмосферы
2.2. Модель Земли
2.3. Моделирование табличных зависимостей
Глава 3. Модели движения летательных аппаратов различных типов......... 3.1. Модель неуправляемой ракеты
3.2. Модель зенитной управляемой ракеты
3.3. Модель баллистической ракеты дальнего действия
3.3.1 Математическая модель движения БРДД на АУТ
3.3.2. Математическая модель движения БРДД на ПУТ
3.3.3. Объектно-ориентированная модель
Библиографический список
Введение.
Решение задач внешней баллистики невозможно без создания компьютерных моделей движения летательных аппаратов (снарядов, неуправляемых ракет, управляемых ракет) и проведения вычислительных экспериментов с ними. Модели движения могут включать в себя следующие составляющие:
движение центра масс;
движение вокруг центра масс;
упругие колебания корпуса;
переходные процессы в системе управления.
Для решения различных задач внешней баллистики необходимы компьютерные модели различной полноты и точности. Весь спектр используемых моделей будем называть компьютерными моделями внешней баллистики.
Модели внешней баллистики обладают рядом особенностей:
1) движение летательных аппаратов в атмосфере и гравитационном поле Земли описывается сложной системой нелинейных и нестационарных дифференциально-алгебраических уравнений, которые могут быть решены только численно, часто эти уравнения являются еще и жесткими;
2) необходимо учитывать случайные отклонения параметров летательного аппарата (массы, аэродинамических характеристик, энергетических характеристик топлива и других) от номинальных значений, отклонения параметров атмосферы от стандартных, а также стохастические ветровые воздействия;
3) в ряде моделей внешней баллистики имеет место скачкообразное изменение как значений параметров системы уравнений, так и значений искомых переменных (при отключении тяги, отделении ступеней ракеты и других событиях), часто имеет место и изменение состава системы уравнений (при изменении закона управления, исполнительных устройств и органов управления на различных ступенях, при выходе за пределы атмосферы и других событиях).
Таким образом, модели внешней баллистики являются нелинейными гибридными моделями со сложной динамикой.
Эти особенности чрезвычайно затрудняют создание компьютерных моделей внешней баллистики традиционным «ручным» способом. При использовании этого способа моделирующая программа создается вручную на подходящем языке программирования (обычно на Фортране) с использованием какой-нибудь стандартной библиотеки численных методов. Код моделирующей программы содержит как описание правых частей уравнений, так и план вычислительного эксперимента. Решаемая система уравнений предварительно должна быть вручную преобразована к некоторой стандартной форме, пригодной для численного решения (обычно это форма Коши).
Сложная динамика моделей внешней баллистики требует очень аккуратного выбора наиболее подходящего для конкретной модели численного метода и настройки его параметров. Для моделей с разрывами непрерывности необходимо находить с заданной точностью эти точки разрыва. В точках разрыва непрерывности необходимо обеспечивать правильное гладкое «склеивание» конечной точки одного непрерывного участка с начальной точкой следующего непрерывного участка. На следующем участке непрерывности система уравнений может обладать совсем иными динамическими свойствами, и для ее корректного решения с требуемой точностью может понадобиться совсем другой численный метод.
Таким образом, ручная разработка моделей внешней баллистики требует весьма высокой квалификации разработчика и достаточно большого времени на отработку модели.
«Ручной» способ позволяет добиться очень высокой производительности моделей и может быть вполне приемлем для многократного использования одной и той же отлаженной модели с незначительными модификациями.
В последние десятилетия созданы системы автоматизации моделирования, которые позволяют автоматически генерировать код моделирующей программы по формальному описанию модели на некотором формальном высокоуровневом языке моделирования. В этих системах используются современные численные методы, которые автоматически корректируют свои параметры в зависимости от специфики решаемой задачи и прекращают работу, если не могут получить решение с заданной точностью. Современные системы автоматизации моделирования позволяют вводить уравнения в естественной форме физических законов и сами автоматически преобразуют их к форме, пригодной для численного решения. Для гибридных моделей автоматически ищутся с заданной точностью точки переключения. При использовании систем автоматизации моделирования быстродействие моделей может оказаться несколько ниже, чем при «ручном» способе, однако резко сокращаются время разработки и трудоемкость, возрастает надежность моделей.
Кроме того, часто возникает потребность создания компонентных моделей, сохраняющих естественную структуру моделируемой системы (например, объект управления, датчики, регулятор угловой стабилизации, регулятор управления центром масс, исполнительные устройства). Компонентный подход позволяет также повторно использовать ранее разработанные модели, создавать библиотеки типовых для данной прикладной области компонентов. Создавать компонентные модели вручную практически невозможно. Компонентное моделирование - это ядро объектноориентированной технологии моделирования. Внешняя баллистика является традиционной областью использования численного моделирования и поэтому очень удобна для целостного восприятия современного объектноориентированного подхода к моделированию.
Использовать системы автоматизации моделирования наиболее целесообразно на ранних этапах проектирования летательных аппаратов, когда рассматривается множество разных вариантов, а также для учебного процесса. Применение в системах автоматизации моделирования стандартного математического входного языка облегчает сопровождение моделей и позволяет использовать их независимо от разработчиков.
В настоящее время существует три основных подхода к компонентному моделированию сложных нелинейных гибридных систем: «блочное» моделирование (системы Simulink+Stateflow, VisSim и др.), «физическое» моделирование (язык Modelica и система Dymola) и моделирование на основе гибридных автоматов (системы MvStudium, AnyLogic, Ptolemy). В данном пособии выбран третий подход, так как его входной язык является наиболее наглядным и соответствующим языку объектно-ориентированного моделирования UML, который в последнее время стал фактическим стандартом для системного анализа. Все приводимые авторами модели выполнены с помощью отечественной системы моделирования MvStudium, в которой удачно сочетаются подходы Modelica и UML. Демо-версия этой программы и исходные файлы всех рассматриваемых в пособии моделей доступны на сайте «www.mvstudium.com».
Глава 1. Объектно-ориентированное моделирование сложных динамических систем Сложной динамической системой (СДС) будем называть систему, обладающую следующими свойствами:
система содержит много компонентов, состав которых может изменяться во время ее функционирования;
компоненты имеют различную физическую природу;
между компонентами имеются как физические, так и информационные связи;
в общем случае система имеет иерархическую многоуровневую структуру;
элементарные компоненты могут быть непрерывными, дискретными или непрерывно-дискретными (гибридными).
Частными случаями СДС являются и системы, рассматриваемые в задачах внешней баллистики.
В этой главе рассматриваются основные понятия объектноориентированного моделирования СДС и объектно-ориентированный язык моделирования, поддерживаемый системой визуального моделирования MvStudium. Более подробно с проблемами моделирования СДС можно познакомиться с помощью учебных пособий [1-3].
1.1. Основные понятия объектно-ориентированного моделирования.
Объектно-ориентированный подход к моделированию был предложен авторами языка SIMULA-67 [4]. Они предложили использовать специальные модели — классы, описывающие множество близких по своим свойствам объектов, обладающих внутренней структурой и поведением, и выбирать конкретный элемент этого множества, создавая конкретный экземпляр класса и наделяя его конкретными значениями параметров. Так возникла новая технология описания сложных многокомпонентных систем, называемая объектно-ориентированным подходом (ООП). Долгое время эта технология активно развивалась в основном в области проектирования сложных программных комплексов и сложных дискретных систем. Итогом этого развития является так называемый унифицированный язык моделирования UML (Unified Modeling Language) [5]. Модификации объектно-ориентированной технологии применительно к моделированию сложных многокомпонентных динамических систем называются объектно-ориентированным моделированием (ООМ) и представлены языком моделирования Modelica, а также входными языками пакетов моделирования AnyLogic, MvStudium, Ptolemy и др. [2]. С помощью ООМ удобно решать ряд типовых задач моделирования, а именно:
создавать библиотеки типовых компонентов как библиотеки классов;
повторно использовать компоненты, при необходимости осуществляя их специализацию с помощью наследования классов;
естественным образом строить модели с множеством однотипных объектов;
осуществлять параметризацию моделей с помощью полиморфизма;
при моделировании систем с переменным составом создавать и уничтожать экземпляры объектов в ходе вычислительного эксперимента.
Считают, что в качестве основы для современного объектноориентированного моделирования СДС должен использоваться унифицированный язык моделирования UML. Язык UML - это объектноориентированный язык прототипирования сложных программных комплексов и вычислительных систем. Несмотря на то что авторы UML считают, что «UML - язык дискретного моделирования, и он не предназначен для разработки непрерывных систем, встречающихся в физике и механике», UML заслуживает внимания по следующим причинам.
Во-первых, авторы UML являются ведущими специалистами по объектно-ориентированному подходу, и этот язык зафиксировал все основные достижения объектно-ориентированного подхода к проектированию программных систем, став фактическим стандартом объектноориентированного подхода. Поэтому создателям специальных языков ООМ имеет смысл использовать основные понятия UML как своего рода метаязык.
Во-вторых, часть конструкций UML может быть использована непосредственно как для предварительного описания структуры проекта, так и в качестве основы для расширения.
Понятия класса и экземпляра являются ключевыми в ООМ. Объект – это некоторая сущность, обладающая атрибутами и поведением. Класс это формализованное описание множества объектов, имеющих одинаковое функциональное назначение, атрибуты и поведение. С понятием класса неразрывно связано понятие экземпляра класса, т. е. конкретного объекта из множества всех объектов, описываемых данным классом. Конкретный объект отличается от всех остальных объектов того же самого класса уникальными значениями атрибутов. Например, пусть имеется класс «Снаряд». Все экземпляры этого класса имеют одни и те же атрибуты; масса, горизонтальная и вертикальная координаты, горизонтальная и вертикальная скорости. Однако значения этих атрибутов для объектов «Снаряд_1» и «Снаряд_2» - экземпляров класса «Снаряд» - различны (случайно, конечно, они могут и совпадать).
Среди атрибутов выделяются «параметры» - такие атрибуты, значение которым присваивается только один раз при создании экземпляра класса и далее не меняется в течение всего времени существования объекта. Применительно к снаряду параметрами могут быть масса, начальная скорость и угол стрельбы.
В UML выделяются «активные» и «пассивные» объекты и соответственно «активные» и «пассивные» классы, экземплярами которых они являются. Активным объектом согласно UML называется «объект, который владеет потоком управления и может инициировать управляющие воздействия» [5]. Пассивным объектом называется «объект, у которого нет собственного потока управления. Все его операции выполняются под управлением потока, прикрепленного к активному объекту» [5]. Применительно к дискретным системам эти определения вполне достаточны, однако применительно к ООМ сложных динамических систем они представляются несколько узкими. Поэтому заменим «поток управления» определением «процесс, развивающийся во времени» и «управляющие воздействия» воздействия на другие объекты». Далее для компонентов СДС ввоедем специальное понятие «активный динамический объект».
Объектно-ориентированный подход позволяет скрывать детали реализации компонента и делать видимыми извне только те атрибуты и операции, которые нужны другим компонентам.
1.2. Активный динамический объект.
Для адекватного описания компонентов СДС вводится понятие «активный динамический объект» (АДО) как расширение активного объекта UML. Интуитивно под компонентом СДС понимается некоторая совокупность параметров, переменных и поведения – непрерывного, дискретного или гибридного [1]. Компонент СДС является активным объектом, так как ему присуща своя собственная внутренняя деятельность, независимая от поведения других объектов. Переменные соответствуют атрибутам с семантикой значения активного объекта UML. Переменные можно разделить на внешние (входы, выходы, контакты и др.) и внутренние (переменные состояния). Компонент СДС взаимодействует с другими компонентами через внешние переменные (рис.1).
Поведение активного объекта UML задается «картой состояний»
(statechart), которая может описывать только дискретное поведение. Поведение АДО задается «картой поведения» (behavior chart или B-chart), являющейся обобщением карты состояний. Основным отличием карты поведения от карты состояний является возможность приписать состоянию некоторую непрерывную деятельность, задаваемую системой дифференциально-алгебраических уравнений. Такая деятельность не связана ни с каким «потоком управления», ее единственным «движителем» выступает независимый и глобальный поток непрерывного времени. Именно этот аспект подчеркивает слово «динамический» в названии АДО (рис.2).
Рис. 2 Непрерывное поведение как частный случай гибридного поведения Для удобства вариант карты поведения с единственным состоянием, которому приписана непрерывная деятельность, выделяется в особый случай чистого «непрерывного поведения».
Поведение АДО в общем случае является суперпозицией собственного поведения и совокупного поведения локальных объектов с учетом связей (Рис. 3). По отношению к локальным объектам содержащий их объект является объектом-контейнером. В синтаксисе UML локальные объекты — это атрибуты с семантикой указателя. Собственное поведение может задаваться либо системой дифференциально-алгебраических уравнений общего вида, либо картой поведения (см. рис.3). Заметим, что согласно принципу синхронной композиции [1] АДО может содержать только одну карту поведения. Для задания собственного поведения могут также потребоваться локальные алгоритмические функции или процедуры, а также локальные классы. Эти алгоритмические функции и процедуры являются элементами описания собственного поведения и инкапсулированы внутри описания класса, поэтому к ним нельзя обратиться извне.
В [1] выделяются три «ортогональных» направления одной из возможных классификаций компонентов моделей СДС:
по типу взаимодействия с внешним миром: открытые и изолированные компоненты;
по типу внутренней структуры: элементарные и составные компоненты;
по типу собственного поведения: непрерывное поведение, гибридное поведение (в частном случае дискретное), нет собственного поведения.
Для подобного рода семантической типизации в языке UML существует специальная конструкция — стереотип (stereotype). Будем считать, что стереотип для активных классов, порождающих АДО, — это одна из возможных комбинаций перечисленных выше классификационных признаков. Первый классификатор определяет наличие или отсутствие внешних переменных. Второй классификатор задает наличие или отсутствие структурной схемы. Третий классификатор определяет, есть ли у объекта собственное поведение и, если есть, что это — система уравнений или карта поведения. Указание стереотипа полезно при работе в интегрированной среде пакета моделирования, так как позволяет рационально конфигурировать редактор описания класса, убирая ненужные для данного стереотипа возможности поля и окна и показывая только необходимые.
Возможные преобразования стереотипа:
любой класс с непрерывным поведением может быть преобразован в эквивалентный гибридный класс (см. Рис. 2) и наоборот;
любой класс, соответствующий изолированной системе, может быть преобразован в класс, соответствующий открытой системе с пустым набором внешних переменных, и наоборот;
любой класс, имеющий элементарную структуру, может быть преобразован в класс с составной структурой с пустым набором локальных объектов и связей и наоборот.
На практике наиболее часто используются четыре основных стереотипа:
класс, порождающий непрерывный элементарный объект;
класс, порождающий дискретный элементарный объект;
класс, порождающий гибридный элементарный объект;
класс, порождающий «схему».
Первому варианту соответствует активный класс, показанный на Рис. 4.
Собственное поведение порождаемого объекта задается системой уравнений. В системе уравнений, а также в выражениях для начальных значений переменных могут использоваться локальные функции.
Второму варианту соответствует активный класс, показанный на Рис.
5. Собственное поведение порождаемого объекта задается частным случаем карты поведения, эквивалентной карте состояний. В условиях срабатывания, мгновенных действиях и в выражениях для действительных параметров деятельности в состоянии, а также в выражениях для начальных значений переменных могут использоваться локальные функции. Состояниям могут приписываться в качестве деятельностей экземпляры локальных классов.
Третьему варианту соответствует активный класс, показанный на Рис. 6. Собственное поведение порождаемого объекта задается общим случаем карты поведения. Использование локальных констант, функций и процедур, а также локальных классов аналогично предыдущему случаю.
Четвертому варианту соответствует активный класс («блок-схема»), показанный на Рис. 7. Порождаемый объект не имеет собственного поведения, его функционирование определяется суперпозицией поведения локальных объектов и связей. При отсутствии собственного поведения нет необходимости в собственных внутренних переменных и в локальных классах. Локальные константы функции могут использоваться при инициализации внешних переменных, а также при задании действительных параметров для локальных объектов.
Экземпляр активного класса может быть создан или уничтожен:
явно с помощью специальных операторов, выполняемых в последовательности мгновенных дискретных действий;
неявно при создании и уничтожении объекта-контейнера, в состав которого данный объект входит в качестве локального;
неявно при входе в состояние и выходе из состояния, которому приписан данный объект в качестве деятельности.
Экземпляр модели в целом создается исполняющей системой пакета моделирования в начале вычислительного эксперимента и уничтожается по его завершении.
При создании экземпляра активного класса могут быть указаны действительные значения его параметров, отличные от значений «по умолчанию», указанных в определении класса. Весьма удобной при построении сложных моделей является возможность указывать при создании экземпляра активного класса также и действительные начальные значения его переменных.
Для любого АДО определена функция time, возвращающая значение непрерывной составляющей локального времени этого объекта, т.е. времени от момента создания объекта.
1.3. Пакеты и модель.
Пакет в языке ООМ — это контейнер для группы семантически связанных элементов, ограничивающий область их видимости. Элементы, объявленные как экспортируемые, видимы извне под составным именем, включающим в качестве префикса имя пакета, например, P.E, где P — имя пакета, а E — имя элемента в этом пакете. Остальные элементы видимы только внутри данного пакета. В описании элемента пакета видимы все остальные элементы этого же пакета. Пакет образует собственную область видимости и все элементы пакета должны иметь несовпадающие имена. В отличие от языка UML, где элементами пакета являются только классы, естественными элементами пакета в языке ООМ также являются константы, алгоритмические функции и процедуры и определения типов переменных (Рис. 8). Классы, определенные на уровне пакета, будем называть глобальными (в отличие от локальных классов, определенных на уровне другого класса).
Для того чтобы использовать экспортируемые компоненты пакета A в пакете B, необходимо в описании пакета B поместить указание импортирования пакета A.
В пакете языка ООМ имеется предопределенный приватный класс Model, который является по терминологии UML «синглетным», т. е. может иметь только один экземпляр. Этот единственный экземпляр с именем model и является выполняемой моделью, с которой проводится вычислительный эксперимент. Значение функции time для этого объекта соответствует значению непрерывной составляющей глобального времени вычислительного эксперимента. Опыт показывает, что на практике большинство моделей являя.тся элементарными, изолированными непрерывными системами. Для создания такой простейшей модели достаточно только определить переменные модели и задать ее систему уравнений, не используя никаких знаний об объектно-ориентированном моделировании.
Рис. 9. Экспортируемые элементы пакета «ГОСТ4401_81»
Возможность импорта пакетов позволяет использовать в моделях ранее разработанные и отлаженные модели. Например, все достаточно точные модели движения тел в воздухе должны использовать модель стандартной атмосферы Земли (по ГОСТ 4401-81 или иному). Эту модель необходимо разработать и отладить только один раз, проводя вычислительные эксперименты с экземпляром класса «Model». Далее ее можно использовать в других моделях как импортируемый пакет «ГОСТ4401_81», содержащий видимые извне необходимые для моделирования движения определения констант (значения ускорения силы тяжести, плотности воздуха, давления и температуры на уровне среднего радиуса Земли), а также класса «СтандАтмосфера», в котором инкапсулированы зависимости параметров атмосферы от высоты (Рис. 9) 1.4. Переменные.
Переменные в модели могут являться атрибутами активного класса, атрибутами локального класса, а также локальными переменными в алгоритмической функции или процедуре. Переменные имеют семантику значения, если в качестве типа переменной указан тип данных, и семантику указателя, если в качестве типа переменной указан класс объекта. Все переменные — атрибуты — видимы в описании локальных классов, а также в алгоритмических функциях и процедурах данного класса. Определение переменной в общем случае включает в себя:
стереотип переменной (вид переменной);
идентификатор переменной;
указание типа переменной;
начальное значение переменной.
В определении рабочей переменной отсутствует указание стереотипа.
Стереотип переменной отражает семантические правила ее использования:
«состояние» (state) — внутренняя переменная, используемая только в описании собственного поведения объекта;
«вход» (input) — внешняя переменная, значение которой может быть изменено только извне;
«выход» (output) — внешняя переменная, значение которой может быть изменено только внутри объекта;
«контакт» («contact») – внешняя переменная, значение которой может быть изменено как извне, так и внутри объекта;
«поток» («flow») - внешняя переменная, значение которой может быть изменено как извне, так и внутри объекта, поток отличается от контакта видом уравнений, которые приписываются связям между этими переменными;
«коннектор» («connector») или «разъем» – внешняя переменная, представляющая собой набор переменных со своими стереотипами (например, контакт плюс поток плюс выход),. коннекторы удобно использовать для минимизации числа связей в сложной модели.
Идентификатор переменной представляет собой строку, состоящую из латинских и русских букв, цифр и знака подчеркивания и начинающуюся с буквы.
Указание типа переменной представляет собой имя типа (предопределенного, определяемого в пакете или импортируемого) или определение анонимного типа и задает тип значения переменной.
Начальное значение переменной представляет собой выражение, в котором могут использоваться константы, функции, а также начальные значения других переменных (при этом не должны возникать алгебраические циклы). При создании экземпляра данного класса все переменные приобретают указанные начальные значения или значение «не присвоено», если в определении класса не указано начальное значение. Значения параметров и начальные значения переменных конкретного экземпляра могут быть явно указаны при вызове конструктора, например:
Снаряд (m=2.87, V0=1000, Teta0=-pi/4).
В этом случае значения, указанные в определении класса, игнорируются.
Для моделирования непрерывных компонентов в задачах внешней баллистики необходим минимальный набор типов данных: скалярный вещественный тип, типы «вектор» и «матрица» со своими традиционными операциями, а также целые числа для вычисления индексов векторов и матриц. Для моделирования дискретных и гибридных компонентов необходим также более широкий спектр целых типов (байт, короткое целое, длинное целое), перечислимые, булевские, символьные и строковые типы.
Кроме того, для описания явной синхронизации параллельных процессов нужны специфические переменные-сигналы. Для сложных моделей и при создании стандартных компонентов удобно использовать комбинированные типы – записи и типы, явно определяемые пользователем. Структура типов данных показана на Рис. 10.
Вещественный тип Для приближенного представления вещественных чисел в языке моделирования используется тип double, соответствующий стандарту вычислений с плавающей точкой ANSI/IEEE Std 754-1985. С помощью этого типа, имеющего внутреннее представление длиной в 8 байт, могут быть представлены вещественные числа со знаком в диапазоне 510324 1.710308 с точностью 15—16 значащих десятичных цифр в мантиссе. Для типа double определены следующие операции и отношения:
сложение, вычитание, умножение, деление, возведение в целую и вещественную степень, равенство, неравенство, больше, больше или равно, меньше, меньше или равно. Примеры вещественных литералов:
-3.5 +5. 1.5E3 -3.4E12 1.76E-2 4 2e Целые типы В языке моделирования используются следующие целые типы:
byte (8 бит без знака, диапазон чисел 0—255);
short (16 бит со знаком, диапазон чисел –32 768 — 32 767):
integer (32 бит со знаком, диапазон чисел –2 147 483 648 — 2 647);
Для целых типов определены следующие операции и отношения:
сложение, вычитание, умножение, целое деление, сравнение по модулю, возведение в целую степень, побитовое "ИЛИ", побитовое "И", побитовое "НЕ", равенство, неравенство, больше, больше или равно, меньше, меньше или равно. Примеры целых литералов: 1 34 – Булевский тип Тип boolean имеет множество значений {false, true}. Для булевского типа определены следующие операции и отношения: «логическое "ИЛИ"», «логическое "И"», «логическое "НЕ"», равенство, неравенство.
Перечислимые типы Перечислимые типы определяются путем явного задания (перечисления) конечного множества значений как упорядоченной совокупности не совпадающих по именам литералов вида "(" L1, L2, …, Li,..., Ln ")", где Li — идентификатор литерала с номером i. Два перечислимых типа являются одинаковыми, если их множества значений совпадают. Для литералов перечислимого типа определены следующие отношения: равенство, неравенство, больше, больше или равно, меньше, меньше или равно. Результат этих отношений равен результату соответствующих отношений между номерами значений. Значения различных перечислимых типов несравнимы.
Перечислимые литералы задаются своими идентификаторами. Литералы различных перечислимых типов могут иметь совпадающие идентификаторы. Пример определения перечислимого типа: (Alpha, Beta, Gamma).
Символьные типы К символьным типам относятся собственно символьный тип char и строковый тип string. Тип char включает в себя упорядоченное множество символов. Тип string — это строка произвольной длины. Множество символов следует рассматривать как особый случай перечислимого типа с соответствующими отношениями. Для строк определены следующие операции и отношения: конкатенация, равенство, неравенство. Символьные литералы задаются соответствующим символом, заключенным в кавычки.
Примеры символов: "A", "1", "a". Строковые литералы задаются соответствующей строкой, заключенной в кавычки. Примеры строк: "abcd", "1234".
Векторы Определение типа «vector[N]» задает вектор-столбец фиксированного размера N с элементами типа double. Определение типа «vector» задает вектор-столбец переменного размера с элементами типа double. Элементы вектора всегда нумеруются с 1. Контроль правильности использования вектора переменного размера возможен только во время исполнения. Текущий размер вектора X всегда можно определить с помощью функции size(X). Для векторов определены следующие операции и отношения: умножение на скаляр, сложение, вычитание, транспонирование, равенство, неравенство. Примеры векторных литералов:
[1;2;3;4] [0; 0; 2.3; 5.67; 1E2] [for i in 1..10 | i**2 ] — вектор размера 10, содержащий значения 1, 2, 9,..., 100 (итеративный векторный литерал).
Матрицы Определение типа «matrix[N,M]» задает прямоугольную матрицу фиксированного размера с N строками и M столбцами с элементами типа double. Определение типа «matrix» задает прямоугольную матрицу переменного размера. Элементы матрицы всегда нумеруются с 1 по обоим измерениям. Вектор всегда можно рассматривать как матрицу [N,1]. Контроль правильности использования матрицы переменного размера возможен только во время исполнения. Текущий размер матрицы X по i-му измерению всегда можно определить с помощью функции size(X,i). Для матриц предусмотрены следующие операции и отношения: умножение матрицы на скаляр, умножение матриц, сложение, вычитание, транспонирование, равенство, неравенство.
Примеры матричных литералов:
[1, 2, 3, 4; 1, 4, 5, 6] — матрица размера 2 4;
[0,3.4,5;7,8,0.67;0.8,6,2.3] — матрица размера 3 3.
[for i in 1..3, j in 1..5 | i*j-1] — матрица размера 3 5 (итеративный матричный литерал).
Итеративные матричные литералы можно использовать в качестве начального значения переменных, а также в качестве правой части формулы или оператора присваивания.
Сигналы Как отмечалось, переменные типа signal — это сообщения (возможно, с параметрами), передаваемые между параллельно выполняемыми процессами с целью их явной синхронизации. Формальные параметры сигнала должны декларироваться в определении переменной или типа, например:
T1: signal (V: double; Teta: double);
T2: signal;
С переменной-сигналом можно выполнить только одно действие: послать сигнал с помощью оператора send, указав фактическое значение параметров, например:
send T1 (V:=100; Teta:=rad(45));
Фактические значения параметров сигнала T1 доступны только для чтения в мгновенных действиях перехода с условием срабатывания when T1, который принял данный сигнал, через составные имена с именем сигнала в качестве префикса, например:
Vx := T1.V*cos(T1.Teta);
Комбинированный тип (запись) Переменная комбинированного типа есть последовательность поименованных компонентов. Компоненты записи могут принадлежать к различным типам (рекурсии в определении записи не допускаются). Примеры определений записей:
C: matrix[2,3];
end record;
Примеры комбинированных литералов:
(A=>2, B=>true, C=>[1,2,3; 0,0,1]) Явно определяемые типы Определение типа позволяет связать идентификатор типа с некоторым определением типа и в дальнейшем использовать этот идентификатор для задания типа констант, переменных и формальных параметров. Различимые типы - это простейший вид определяемого типа, позволяющий разделять семантически различные употребления одного и того же базового типа, например:
type Расстояние is double; -- м type Длина is Расстояние; -- м type Сила is double; -- н type КрутящийМомент is double; -- н*м Некоторые системы автоматизации моделирования (например, Dymola) обрабатывают указания единиц измерения для различимых типов и проверяют семантическую корректность присваиваний. Например, если T: КрутящийМомент :=0;
то формула «T является семантически корректной, а формула «T некорректной, хотя для базового типа они обе верные.
= F*Phi» Структурированные типы задают конкретные векторы, матрицы, записи или коннекторы:
type Vector3 is vector[3];
type Статус is (Свободен, Занят);
flow T: КрутящийМомент;
Автоматическое приведение типов Автоматическое приведение типов производится при использовании в операциях или отношениях операндов различных типов в следующих случаях:
при использовании различных целых типов операнд меньшей разрядности приводится к операнду большей разрядности;
при использовании целого и вещественного типов целое значение приводится к вещественному типу;
при использовании символьного и строкового типов символьное значение приводится к соответствующей строке длиной 1;
типы vector[1] и matrix[1,1] могут трактоваться как double и наоборот;
векторы и матрицы переменной размерности после выполнения операции присваивания приобретают размерность присвоенного значения.
1.5. Система уравнений Собственное поведение непрерывного объекта задается системой дифференциально-алгебраических уравнений общего вида, т. е. допускающей использование производных порядка выше первого и не разрешенной относительно производных. Уравнения могут задаваться как в скалярной, так и в матричной форме. Современные инструменты моделирования, такие как MvStudium, позволяют вводить и редактировать уравнения в естественной математической форме.
В качестве примера рассмотрим простейшую модель движения снаряда в воздухе (проект «Снаряд_1.mvb»). Это непрерывный элементарный изолированный объект, для описания которого достаточно определить класс «Model» (Рис. 11).
Рис. 11 Определение класса Model для первой модели снаряда Будем полагать, что плотность воздуха не изменяется во время полета снаряда, и не будем пока учитывать зависимость коэффициента аэродинамического лобового сопротивления CX от числа Маха. Тогда наш активный динамический класс «Model» будет иметь шесть параметров и семь переменных. Плотность воздуха и ускорение силы тяжести заданы как параметры, а не как константы, потому что они зависят от высоты точки выстрела над уровнем моря. Движение снаряда задается системой дифференциально-алгебраических уравнений (Рис. 12).
Рис. 12 Система уравнений для первой модели снаряда Систему уравнений предпочтительно задавать в исходном физически содержательном виде. К форме, пригодной для численных методов (форме Коши) она будет преобразована пакетом моделирования автоматически: на Рис. 13 показана система уравнений, действительно решаемая численно в ходе вычислительного эксперимента. Поскольку система уравнений содержит дифференциальные уравнения второго порядка, необходимо задать начальные условия для первых производных (см. Рис. 11). Искомые переменные обычно определяются системой моделирования автоматически, но их можно задать и вручную. При недоопределенной системе уравнений (число уравнений меньше числа используемых в ней переменных) стоит внимательно причитать сообщение системы моделирования: предложенный ею набор искомых переменных может оказаться и неверным!
Рис. 13 Система уравнений движения снаряда, автоматически преобразованная к вычислительной форме Учтем теперь зависимость CX от числа Маха (проект «Снаряд_2.mvb»). Для этого мы добавим параметр «a» - скорость звука в точке выстрела - и переменную «M» - число Маха. Пусть эта зависимость имеет следующий вид:
Можно, конечно, определить в классе «Model» алгоритмическую функцию «CxM» (Рис. 14) и добавить в систему уравнений формулы Cx = CxM (M ) Рис. 14 Задание зависимости C X (M ) с помощью алгоритмической функции рывы значений производных. Конечно, в большинстве случаев (скорее всего, и в данном) численные методы «проглотят» эти разрывы и выдадут достаточно точное решение. Проблема состоит в том, что мы не знаем, насколько точное. Численные методы интегрирования с автоматическим выбором шага гарантируют требуемую точность решения (или невозможность решения) только для уравнений, правые части которых являются функциями, непрерывными по значению и по всем производным. Например, для простейшего уравнения которое задает периодическую функцию с периодом T, большинство численных методов с автоматическим выбором шага дают на одном периоде погрешность, превышающую на три порядка заявленную. Поэтому для описания подобных зависимостей предпочтительнее использовать т.н.
«условные выражения» (Рис. 15) или «условные уравнения» (Рис. 16). Условное уравнение и условное выражение принципиально отличаются от аналогичного условного оператора в теле алгоритмической функции тем, что при переходе с одной логической ветви на другую автоматически генерируется дискретное событие и возникает «временная щель», после которой численные методы заново инициализируются для нового кусочнонепрерывного участка.
Рис. 15. Использование условного выражения Отметим, что не следует бояться того, что последние три формулы в системе уравнений (см. рис. 15) заданы в порядке, обратном порядку вычислений, – при выполнении они будут автоматически переставлены в правильном порядке.
Уравнения движения снаряда могут быть также заданы и в векторной форме (рис. 17). В этом случае положение снаряда задается вектором X размерности 3. Соответственно векторами являются и производные dX d 2 X dt dt \Снаряд_2M.mvb».
Рис. 17 Уравнения движения снаряда в векторной форме 1.6. Карта поведения Карта поведения задает собственное поведение гибридного или дискретного АДО (активного динамического объекта). Карта поведения является расширением «карты состояний» или «машины состояний» UML [5] в части трактовки «деятельности», приписываемой состоянию. Однако, такая расширенная трактовка деятельности вынуждает, как будет показано далее, одновременно вводить некоторые ограничения на конструкции, касающиеся чисто дискретных аспектов.
Карта поведения, как и карта состояний, представляет собой совокупность состояний и переходов. В любой момент времени только одно из состояний является текущим, т.е. карта поведения является последовательной. Любые одновременные дискретные действия возможны только в параллельно функционирующих объектах (UML в принципе допускает использование параллельных диаграмм состояния, которые удобны для сложных дискретных моделей). В начальный момент времени существования данного объекта текущим является начальное состояние.
1.6.1. Состояния Состояние может быть обычным или особым. К особым состояниям относятся начальное, конечное состояние и точка ветвления.
Обычное состояние соответствует некоторому качественному состоянию моделируемой системы и изображается прямоугольником с закругленными углами. В общем случае в обычном состоянии могут быть определены входные действия, выходные действия, а также локальная деятельность («activity») (рис. 18). Последовательность входных действий выполняется мгновенно при каждом входе в данное состояние, а последовательность выходных действий — мгновенно при каждом выходе из данного состояния. Локальная деятельность протекает непрерывно, пока данное состояние является текущим.
Начальное состояние изображается черным кружком (рис. 19). Оно всегда становится текущим при инициализации карты поведения. В начальное состояние не может входить ни один переход. Начальное состояние не может иметь входных или выходных действий, а также локальной деятельности.
Конечное состояние изображается кружком с черным кружком меньшего размера в центре (см. рис.19). Из конечного состояния не может исходить ни один переход. Конечное состояние не может иметь входных или выходных действий, а также локальной деятельности. Переход в конечное состояние означает, что функционирование карты поведений завершилось. Если это карта поведений модели, то это означает завершение вычислительного эксперимента.
Предопределенная функция finalized возвращает значение true, если собственное поведение объекта — аргумента этой функции -- является картой поведения и текущим в этой карте поведения является конечное состояние.
Рис. 19. Карта поведения падающего снаряда – дискретная модель Показанная на рис. 19 карта поведения падающего снаряда соответствует качественному описанию его движения: моделируемая система находится в качественном состоянии «Полет» в течение всего времени полета снаряда. Предполагается, что нам известны зависимости времени полета и дальности падения снаряда от начальной скорости и угла бросания, полученные экспериментально или в результате предварительных расчетов.
О промежуточных же значениях координат снаряда до точки падения в этой модели мы ничего сказать не можем. Этот «вырожденный» случай чисто дискретной карты поведения полностью соответствует диаграмме состояний UML.
В UML под деятельностью в состоянии понимается однократно или циклически выполняемая последовательность дискретных действий [5].
Такая трактовка деятельности вполне достаточна для создания прототипов вычислительных систем, но недостаточна для создания моделей СДС. В карте поведения под деятельностью в состоянии понимается экземпляр некоторого АДО, который динамически создается при входе в данное состояние и уничтожается при выходе из этого состояния. В моменты, когда данное состояние является текущим, собственное поведение объекта, которому принадлежит карта поведения, совпадает с поведением объектадеятельности текущего состояния.
Такая трактовка деятельности и обусловила использование специального термина «карта поведения», поскольку термин «гибридная карта состояний» обычно служит для обозначения диаграммы состояний, в которой состояниям приписываются уравнения, т.е. частного случая карты поведения. Кроме того, трактовка деятельности как объекта накладывает ряд ограничений на базовую конструкцию — диаграмму состояний. Прежде всего это связано с трактовкой подсостояний. Многоуровневая внешне, карта состояний UML по существу является плоской одноуровневой, так как разрешается задавать «прямые» переходы извне непосредственно на вложенное подсостояние и наоборот -- из подсостояния на состояние верхнего уровня иерархии [5]. Иерархическая карта поведения получается простым использованием дискретных или гибридных компонентов в качестве деятельностей. В этом случае мы имеем дело с действительно иерархической вложенностью. Очевидно, что никакие «прямые» переходы здесь невозможны, поскольку поведение инкапсулировано внутри объекта. При создании экземпляра локальной карты поведения ее текущим состоянием всегда является начальное состяние. Соответственно невозможны и переходы в так называемое «историческое» состояние [5], поскольку вложенная карта поведения просто уничтожается при выходе из охватывающего состояния.
Карта поведения позволяет строить сложные поведения путем последовательной (а не параллельной, как в структурной схеме) композиции отдельных компонентов — объектов-деятельностей, взаимодействующих через начальные условия. Обычное состояние, которому приписана непрерывная деятельность, будем изображать толстой линией, а обычное состояние, которому приписана дискретная или гибридная деятельность, — двойной тонкой линией. Так, например, в более точной модели падающего снаряда, учитывающей непрерывную динамику его движения (проект «Снаряд_3b.mvb»), поведение задается картой поведения, в которой обычному состоянию «Полет» приписана непрерывная деятельность – экземпляр непрерывного локального класса «ДвижениеСнаряда» (рис. 20).
В начальный момент времени срабатывает безусловный переход и текущим становится состояние «Полет», при входе в которое создается экземпляр класса «ДвижениеСнаряда». Действительные значения начальных условий в данном случае указывать не нужно, так как в экземпляре локального класса видимы текущие значения всех переменных охватывающего объекта. При выполнении условия точки падения срабатывает переход из состояния «Полет» в конечное состояние. После выполнения последовательности мгновенных действиях этого перехода экземпляр класса «ДвижениеСнаряда» уничтожается. Эта модель получается из модели непрерывного снаряда (проект «Снаряд_2.mvb») с помощью изменения стереотипа класса «Model» -- преобразования из непрерывного класса в гибридный (см. рис. 2), при этом уравнения автоматически переходят в локальный непрерывный класс.
Рис. 20. Карта поведения падающего снаряда – гибридная модель Когда класс «ДвижениеСнаряда» является глобальным (например, непрерывная модель движения снаряда сохранена как класс) или импортируется из другого пакета, обращение к переменным деятельности возможно только через префикс состояния, например, «Полет.y». Следует также отметить, что для практического удобства полезно несколько ослабить правила видимости переменных. Вполне разумным представляется доступность всех переменных локальной деятельности, а не только внешних, в условиях и действиях карты поведения. На рис. 21 показана карта поведения падающего снаряда для случая, когда класс «ДвижениеСнаряда» является глобальным. В действиях перехода видимы внутренняя переменная «Полет.y» и ее первая производная.
Рис. 21. Карта поведения падающего снаряда для случая, когда движение снаряда задано глобальным классом Точка ветвления изображается ромбом (рис. 22). Точка ветвления не может иметь входных или выходных действий, а также локальной деятельности. Исходящие из точки ветвления переходы должны быть только нетриггерными. При попадании в точку ветвления вычисляют охраняющие условия всех исходящих переходов и выполняется переход, охраняющее условие которого истинно. Охраняющие условия (включая альтернативу else) исходящих переходов должны охватывать все возможные варианты, т.е. при попадании в точку ветвления обязательно должен сработать один из исходящих переходов.
Например, в данной карте поведения (см. рис. 22) в момент t =0 в зависимости от значения переменной N происходит либо переход в обычные состояния S1 и S2, либо переход в конечное состояние.
В недетерминированных моделях весьма удобна вероятностная точка ветвления, которая изображается двойным ромбом (рис. 23). Условия исходящих из нее переходов трактуются как значение вероятности переходов, а для альтернативного перехода его вероятность предполагается равной 1SP, где SP — сумма вероятностей остальных исходящих переходов (в примере на рис. 23 вероятность альтернативного перехода равна 1 p1 p 2 ). На рис. 23 приведена карта поведений модели, в которой N раз разыгрывается вероятностное ветвление и подсчитывается реальное число срабатываний трех альтернативных переходов.
Точки ветвления используются, в частности, для задания с помощью карты поведения плана вычислительного эксперимента.
1.6.2. Переходы Переход срабатывает, если исходное состояние перехода является текущим и выполняется некоторое условие срабатывания. При срабатывании выполняется мгновенная последовательность действий перехода, если она есть. Условие срабатывания перехода в общем случае включает в себя указание запускающего события (триггер) и охраняющее условие (guard).
В карте поведения одновременно (в гибридном времени) может срабатывать только один переход. Переходы делятся на внешние и внутренние, а также триггерные и нетриггерные.
Внешний переход переводит систему из одного состояния в другое (возможно, то же самое). Внутренний переход не приводит к выходу из текущего состояния.
На рис. 24 показана карта поведения, в которой после срабатывания как внешнего, так и внутреннего переходов текущим все равно останется состояние S1. Предположим, что действия внешнего и внутреннего переходов одинаковы. Однако конечные результаты срабатывания этих переходов могут быть различными, поскольку при срабатывании внутреннего перехода выполняются только мгновенные действия перехода, а при срабатывании внешнего перехода выполняются: выходные действия состояния S1, мгновенные действия перехода, уничтожение объектадеятельности в состоянии S1, входные действия состояния S1 и создание объекта-деятельности в состоянии S1. Очевидно, что внутренние переходы реализуются эффективнее, так как не требуют изменения объектадеятельности. Внутренний переход целесообразно использовать для обработки дискретных событий, влекущих за собой только дискретные изменения переменных (в том числе посылку сигнала), но не приводящих к изменению текущего поведения объекта.
Триггерный переход срабатывает, если происходит запускающее событие и выполняется охраняющее условие (или оно отсутствует). Если происходит запускающее событие, но охраняющее условие не выполняется, переход не срабатывает.
Запускающее событие может задаваться тремя способами:
1) when — событие происходит, когда логическое выражение становится истинным;
2) when — событие происходит, когда появляется указанный сигнал;
3) after — событие происходит, когда истекает указанный интервал от момента входа в текущее состояние.
В карте поведения падающего снаряда переход между состояниями «Полет» и конечным состоянием является триггерным с запускающим событием первого типа.
Нетриггерный переход срабатывает немедленно при входе в исходное состояние, если выполняется охраняющее условие (или оно отсутствует). Нетриггерный переход, у которого отсутствует охраняющее условие, называется безусловным. Обычно именно безусловный переход переводит карту поведения из начального состояния в первое обычное состояние.
Часто такой безусловный переход используется для инициализации значений переменных. С помощью нетриггерных переходов осуществляется выбор нового состояния в точке ветвления. Для переходов, исходящих из точки ветвления (см. рис. 22), охраняющее условие указывается в квадратных скобках и может быть использовано условие else.
Использовать нетриггерный переход, исходящий из обычного состояния, имеет смысл в двух случаях:
1) состоянию приписана непрерывная деятельность, и нахождение в этом состоянии применяется для решения системы алгебраических уравнений с целью согласования значений переменных;
2) состоянию приписана гибридная или дискретная деятельность, в этом случае исходящий нетриггерный (в частности, безусловный) переход сработает только тогда, когда карта поведения объекта-деятельности достигнет своего конечного состояния (см. рис. 30).
1.7. Компоненты Компонент – это активный динамический объект со стереотипом «открытая система». Компоненты имеют внешние переменные, через которые они взаимодействуют с внешним окружением (см. рис. 1). Компоненты предназначены для использования их в качестве локальных объектов в структурной схеме, а также в качестве деятельностей в состояниях карты поведения.
В зависимости от стереотипов внешних переменных компоненты разделяются на ориентированные (направленные) и неориентированные (ненаправленные, физические). Ориентированные компоненты могут иметь внешние переменные (в том числе компоненты коннекторов) только со стереотипами «вход» и «выход». Неориентированные компоненты могут дополнительно иметь внешние переменные со стереотипами «контакт»
и «поток» [1]. Ориентированные компоненты обладают замечательным свойством: их системы уравнений могут анализироваться и преобразовываться в вычислительную форму независимо, в то время как для неориентированных компонентов в общем случае ничего нельзя сказать о правильности и свойствах их систем уравнений до появления всей модели в целом [1]. Для моделей с неориентированными гибридными компонентами анализ системы уравнений должен производиться в общем случае во время выполнения модели. Поэтому предпочтительнее использовать ориентированные компоненты, если прикладная область это позволяет. Для моделирования задач внешней баллистики в основном используются ориентированные компоненты.
На рис. 25 показано описание класса «СтандАтмосфера» (проект «ГОСТ4401_81.mvb») со стереотипом «открытая система», позволяющего создавать ориентированные компоненты для вычисления параметров атмосферы (выходы компонента) на заданной высоте (вход «h»).
Рис. 25. Описание компонента для вычисления параметров атмосферы 1.8. Структурная схема Структурная схема содержит описания локальных объектов и их связей, т. е. задает совокупность параллельно функционирующих компонентов и их взаимодействия. Взаимодействие между локальными объектами может осуществляться и косвенным образом — через собственное поведение (систему уравнений или карту поведения) объекта-контейнера. Объект-контейнер является экземпляром класса со стереотипом «составной объект». Описание поведения и внутренние переменные локальных объектов невидимы в объекте-контейнере, и никакие элементы описания объекта-контейнера невидимы в локальных объектах.
Обратите внимание, что описание класса составного объекта содержит описания экземпляров локальных объектов.
Локальный объект может являться экземпляром класса, определенного в данном проекте или импортированного из других пакетов. Локальный объект не может являться экземпляром локального класса, так как в этом случае не гарантируется синхронное объединение гибридных автоматов. Визуальным образом локального объекта на структурной схеме является прямоугольник, на границах которого условно изображаются внешние переменные (рис. 26). На изображении объекта или рядом показывается имя объекта. На изображении объекта также отображается иконка класса, если она есть. Локальные объекты изображаются внутри большого прямоугольника, соответствующего гипотетическому экземпляру классаконтейнера.
Локальные объекты могут быть статическими и динамическими.
Статические объекты создаются вместе с экземпляром объекта-контейнера и уничтожаются вместе с ним. Динамические объекты создаются и уничтожаются явно с помощью операторов new и destroy в действиях карты поведения объекта-контейнера. При создании экземпляра объектаконтейнера указатель на динамический объект остается пустым, при уничтожении объекта-контейнера динамические объекты также уничтожаются.
Динамический объект обозначается пунктирным прямоугольником.
Следует отметить, что для языка UML локальные объекты являются атрибутами объекта-контейнера с семантикой указателя: статические объекты соответствуют атрибутам с начальным значением, а динамические объекты — атрибутам с начальным значением null. Структурная схема является лишь удобным визуальным образом, наглядно отражающим состав моделируемой системы и взаимодействия между объектами.
Связь или соединение является указанием стандартного взаимодействия, имеющего свой графический образ на структурной схеме. Связь изображается линией, соединяющей две внешние переменные (рис. 26).
Соответственно типу соединяемых переменных связь является направленной или ненаправленной. Совокупности связей соответствует набор уравнений и формул, автоматически добавляемый к текущей совокупной системе уравнений модели. Например, если выход U1.Y соединен с входами U2.X и U3.X, то этим связям соответствуют формулы причем переменная U1.Y не может быть в них искомой. Если контакт U1.Z соединен с контактами U2.Z и U3.Z, то этим связям соответствуют уравнения причем любая переменная может быть в них искомой. Наконец если поток U1.Q соединен с потоками U2.Q и U3.Q, то этим связям соответствует уравнение причем любая переменная может быть в нем искомой. Переменные со стереотипом «поток» могут иметь тип double, vector или matrix, а также record с полями перечисленных типов. В последнем случае уравнения связей формируются по каждому полю записи.
Следует отметить, что связи являются лишь удобным визуальным образом, отражающим уравнения взаимодействия объектов. Те же уравнения могут быть явно указаны в описании собственного поведения объектаконтейнера. Ранее были показаны три варианта задания одного и того же поведения объекта контейнера: все поведение задается совокупностью локальных объектов и связей (см. рис. 26а), поведение частично задается локальными объектами, а взаимодействие этих локальных объектов задается собственными уравнениями объекта-контейнера (см. рис. 26б), все поведение задается уравнениями объекта-контейнера (см. рис. 26в).
Необходимость использования локальных объектов обусловлена в основном следующими причинами:
1) вы хотите использовать разработанные ранее (возможно, другими разработчиками) модели объектов;
2) вам необходимы параллельные действия в моделируемом объекте;
3) моделируемая система имеет свою естественную структуру, которую вы хотите отразить в модели.
X X Y X Y Y
Рис. 26. Структурная схема и собственное поведение объекта-контейнера:а — поведение задается совокупностью локальных объектов и связей;
б — поведение частично задается локальными объектами;
в — поведение задается уравнениями объекта-контейнера Проиллюстрируем первый случай на примере модели снаряда, в которой учитывается зависимость параметров воздуха от высоты (проект «..\Модели\Снаряд\ Снаряд_3h.mvb» на основе проекта «..\Модели\ Снаряд\Снаряд_3c.mvb»). Пусть эта зависимость моделируется ранее разработанным и отлаженным классом «СтандАтмосфера» в пакете «ГОСТ4401_81» (см. рис. 9). Преобразуем класс «ДвижениеСнаряда» в составной объект, импортируем пакет «ГОСТ4401_81» и создадим в классе «ДвижениеСнаряда» локальный объект «СА» -- экземпляр импортируемого класса «СтандартнаяАтмосфера» (рис. 27).
Рис. 27. Использование локального объекта для вычисления зависимости параметров Нам теперь необходим новый параметр «h0» -- высота точки выстрела над уровнем моря. Учтем также зависимость ускорения силы тяжести от высоты, для чего сделаем параметр «g» переменной. Динамика движения снаряда описывается теперь системой уравнений, показанной на рис. 28.
Заметим, что параметры «a» и «Rho» оказываются теперь ненужными и их можно удалить.
Теперь каждый раз, когда при входе в состояние «Полет» (см. рис.
21) создается экземпляр класса «ДвижениеСнаряда», к глобальному поведению модели в целом добавляется не только система уравнений движения снаряда, но и система уравнений или карта поведения объекта «СА». При этом все детали модели стандартной атмосферы инкапсулированы в описании поведения этого объекта. Все изменения в пакете «ГОСТ4401_81»
будут автоматически отражаться в модели движения снаряда.
Рис. 28. Система уравнений движения снаряда с использованием локального объекта, Использование ненаправленных компонентов проиллюстрируем на примере упрощенной компонентной модели одного канала рулевого привода, включающей в себя объекты «Руль» (аэродинамический руль), «РМ»
(рулевая машинка), «Рег» (регулятор) и «ДУ» (датчик угла поворота руля относительно ракеты) (рис. 29). Некоторые связи в этой системе являются информационными и очевидным образом направленными: передача программного значения угла поворота, передача фактического и измеренного угла поворота, передача управляющего сигнала на рулевую машинку. Но вот взаимодействие рулевой машинки и руля через жесткий вал никак нельзя представить с помощью направленных связей, поскольку рулевая машинка воздействует на руль, а руль воздействует на рулевую машинку.
Рис. 29. Упрощенная компонентная модель рулевого привода Поэтому здесь мы используем тип коннектора «ЖесткийВал» и эта связь (связи между коннекторами показываются на схеме жирными линиями) добавит в совокупную систему уравнений два уравнения:
РМ.S.Phi = Руль.S.Phi, РМ.S.T + Руль.S.T = 0.
1.9. Наследование классов С помощью наследования можно обеспечивать повторное использование ранее разработанных и отлаженных моделей. Если класс C2 объявляется прямым потомком класса C1 (рис. 30), то класс C2 наследует все элементы класса C1: переменные, процедуры и функции, локальные классы, карту поведений, систему уравнений и структурную схему. Применительно к отношению C1 C2 класс C1 будем далее называть базовым классом или суперклассом, а C2 — производным классом или подклассом.
Отношение наследования транзитивно: если класс C3 является производным от класса C2, то и класс C3 является производным от класса C1 и наследует все его элементы.
Все изменения, вносимые в класс C1 и в любой из его предков, будут автоматически отражаться на классе C2. В языке моделирования СДС допустимо только одиночное наследование: любой производный класс может иметь только один базовый. Целью наследования является расширение и/или модификация описания базового класса. Это можно осуществить с помощью добавления новых элементов описания и переопределения унаследованных элементов описания. Никакие унаследованные элементы не могут быть удалены. Все активные динамические объекты являются потомками предопределенного класса ActiveDynamicObject (для краткости object).
1.9.1.Добавление новых элементов описания В языке моделирования СДС, новые элементы описания не могут иметь имена, совпадающие с элементами описания базового класса. Это противоречит традиционному для объектно-ориентированных языков программирования правилу, согласно которому новая переменная с тем же именем, что и унаследованная, скрывает унаследованную переменную в описании производного класса. Однако в описании активного динамического объекта, в отличие от пассивного объекта, оба элемента (например, переменные) могут использоваться одновременно — в системе уравнений, к которой добавлены новые уравнения или в карте поведения, к которой добавлены новые состояния и переходы. Такая ситуация совершенно недопустима, так как может привести к неверному пониманию и провоцировать ошибки.
В производном классе могут быть определены новые переменные, процедуры и функции, а также новые локальные классы. В систему уравнений могут быть добавлены новые уравнения, в карту поведения — состояния и переходы, а в структурную схему — новые локальные объекты и новые связи.
1.9.2. Переопределение унаследованных элементов В описании производного класса может быть переопределено определение унаследованного элемента. Переопределение является основным механизмом модификации базового класса. Переопределяемый элемент определяется по совпадению имени или прямым указанием в визуальном редакторе: «вот этот переход».
Переопределение переменных При переопределении переменной можно изменить только ее стереотип. Таким способом можно, например, параметр сделать входной переменной или состоянием. Возможность изменения стереотипа позволяет гибко адаптировать существующие классы к особенностям конкретных моделей.
Переопределение процедур и функций При переопределении процедуры или функции должна быть полностью сохранена унаследованная сигнатура (список параметров и тип результата). Для дополнительных параметров должны быть обязательно указаны значения, принимаемые по умолчанию. Тело процедуры или функции изменяется полностью (хотя редактор в качестве начального приближения предлагает унаследованный текст, связь с телом соответствующей функции в базовом классе утрачивается).
Переопределение локального класса При переопределении локального класса в него могут быть добавлены новые элементы и переопределены унаследованные.
Переопределение системы уравнений Унаследованную систему уравнений можно переопределить только полностью. Переопределение происходит при попытке редактировать унаследованные уравнения.
Переопределение элементов карты поведения При переопределении карты поведения можно:
заменить входные/выходные действия в состоянии;
заменить деятельность в состоянии;
заменить условие срабатывания и/или охраняющее условие перехода;
заменить последовательность действий в переходе;
изменить графическое изображение состояния или перехода.
В качестве примера использования наследования классов рассмотрим другой способ создания модели снаряда, в которой учитывается зависимость параметров воздуха от высоты («..\Модели\Снаряд\Снаряд_4.mvb»).
Теперь не будем изменять класс «ДвижениеСнаряда», а создадим новый класс «ДвижениеСнарядаАтм» -- потомок класса «ДвижениеСнаряда». Новый класс унаследует все переменные и уравнения своего предка. Переопределим стереотип класса и сделаем его составным объектом. Добавим «ГОСТ4401_81.СтандАтмосфера». Добавим новый параметр «h0». Переопределим начальное значение переменной «y», приняв его равным h0.
Переопределим стереотип атрибутов «a» и «Rho», превратив их из параметров в переменные. После этого добавим к унаследованным уравнениям новые, отражающие взаимодействие с объектом «СА» (Рис. 31).
Рис. 31. Учет зависимости параметров воздуха от высоты 1.10. Управление вычислительным экспериментом Карта поведения позволяет наглядно задавать план вычислительного эксперимента. Рассмотрим вычислительный эксперимент: проведение статистических испытаний по методу Монте-Карло с целью определения математического ожидания и среднеквадратического отклонения дальности падения снаряда при заданных математических ожиданиях и среднеквадратических отклонениях навальной скорости и угла бросания снаряда (законы распределения предполагаем нормальными). Для определения координат точки падения снаряда используем готовую гибридную модель падающего снаряда (см. Рис. 21). Для проведения эксперимента создадим новую модель (проект «..\Модели\Снаряд\СтатИспытания.mvb»), в которую импортируем пакет «Снаряд_3h», содержащий нужную нам модель падающего снаряда. План статистических испытаний зададим с помощью карты поведения, показанной на Рис. 32.
Специальное состояние – точка ветвления позволяет организовать цикл, в котором N раз разыгрываются значения начальной скорости и угла бросания и с этими значениями параметров создается как локальная деятельность состояния «Испытания_i» экземпляр модели падающего снаряда. Безусловный переход из этого состояния в точку ветвления срабатывает, когда в карте поведения модели падающего снаряда достигается конечное состояние, т. е. в момент падения снаряда. Дальность падения запоминается в i-м элементе вектора «L». После N испытаний по вектору «L» рассчитываются математическое ожидание и среднеквадратическое отклонение дальности падения (см. Рис. 32). В визуальной модели можно увидеть и «трубку траекторий», поместив на фазовую диаграмму текущие координаты снаряда из объекта «Испытания_i.Полет» (Рис. 33).
Рис. 33. Визуальная модель статистических испытаний Глава 2. Элементы моделей внешней баллистики В этой главе рассматриваются различные типовые элементы, входящие практически в любую модель внешней баллистики.
2.1.Модель атмосферы Рассмотрим подробнее модель стандартной атмосферы по ГОСТ 4401-81 (пакет «ГОСТ4401_81»). Для рассматриваемых в данном пособии задач достаточно уметь рассчитывать параметры атмосферы до высоты 120 км, а далее предполагать отсутствие атмосферы.
В данной стандартной атмосфере слои 2, 5, 8 и 11 являются изотермическими, а в остальных слоях температура изменяется линейно. Таким образом, характеристики атмосферы должны рассчитываться по различным зависимостям для слоев разного типа. Модель стандартной атмосферы можно построить традиционным путем – в виде набора функций, в которых нужные зависимости выбираются с помощью условных операторов.
Однако при таком подходе мы получим разрывы значений производных на стыках слоев (уже обсуждалась потенциальная опасность таких разрывов).
Для модели, предполагающей многократное повторное использование, лучше обеспечить автоматическое разбиение зависимостей характеристик атмосферы от высоты на кусочно-непрерывные участки. Это можно сделать, рассматривая стандартную атмосферу как гибридный объект.
Создадим класс «СтандАтмосфера» со стереотипом «гибридный объект, открытая система». На вход экземпляра этого класса подается значение высоты, а на выходах выдаются характеристики атмосферы (Рис. 34).
Массив «Beta» содержит значения градиентов температуры для слоев, массивы «Hmin», «Hmax» и «H0» содержат соответственно значения нижней границы слоя (для первого слоя она предполагается равной минус 2000м), верхней границы слоя и номинального начального уровня слоя. Эти значения определены в стандарте.
Рис. 34. Внешний интерфейс класса «СтандАтмосфера»
Массивы «T0» и «p0» содержат значения температуры и давления для номинального начального уровня каждого слоя. Эти значения рассчитываются во время выполнения начальных действий при срабатывании перехода из начального состояния в состояние «Работа» (Рис. 35).
Целая переменная «Iсл» -- номер текущего слоя, булевская переменная «ИС» равна TRUE, если слой изотермический, и FALSE -- в противном случае. Начальные значения этих переменных также вычисляются в действиях начального перехода. Далее в состоянии «Работа» при нахождении внутри определенного слоя геопотенциальная высота «H» и характеристики атмосферы вычисляются по уравнениям непрерывного объекта «Характеристики_атмосферы», показанным на Рис. 36. Значения температуры и давления вычисляются с помощью специальных функций, показанных на Рис. 37.
Рис. 35. Карта поведения класса «СтандАтмосфера»
Рис. 36. Зависимости для вычисления характеристик атмосферы Рис. 37. Зависимости температуры (а) и давления (б) от геопотенциальной высоты «H»
Внутренний переход в состоянии «Работа» срабатывает при выходе значения геопотенциальной высоты за пределы текущего слоя, т. е. по условию (H=Hmax[Iсл]).
В действиях этого перехода (Рис. 38) вычисляется новый номер слоя и признак изотермического слоя. Если оказывается, что высота «h» находится за пределами области определения данной модели, вырабатывается сигнал «НедопустимаяВысота», по которому срабатывает переход из состояния «Работа» в конечное состояние (Рис. 35), в действиях которого предусмотрена выдача сообщения об ошибке.
Рис. 38. Действия внутреннего перехода в состоянии «Работа»
Возникает естественный вопрос: зачем мы строили гибридную модель с переходами, если в теле функций, вычисляющих температуру и давление (см. Рис. 37) все равно остались условные операторы? Однако здесь нет противоречия: условные операторы в функциях «Температура» и «Давление» вполне допустимы, поскольку внутри одного слоя всегда работает только одна их ветвь, а переключение слоев производится с помощью дискретного перехода.
Проверим правильность функционирования разработанного нами класса с помощью вычислительного эксперимента. Преобразуем класс «Model» в составной объект и создадим экземпляр класса «СтандАтмосфера» с именем «СА» (Рис. 39). Этот объект, однако, является статическим:
его состояние не зависит от времени, а зависит только от значений внешних переменных – в данном случае от высоты. Поэтому, чтобы проверить правильность функционирования такого объекта, нужно изменять в ходе вычислительного эксперимента значение высоты. Это делают с помощью системы уравнений, показанной на Рис. 40.
В результате вычислительного эксперимента получаем зависимость температуры от высоты, показанную на Рис. 41, которая совпадает со стандартной зависимостью.
Рис. 39. Структура отладочной модели стандартной атмосферы Рис. 40. Система уравнений отладочной модели стандартной атмосферы Следует заметить, что величину высоты «h» можно изменять и без вспомогательных уравнений с помощью непосредственного интерактивного вмешательства экспериментатора. Для этого следует сопоставить в визуальной модели вход «h» объекта «СА» и интерактивный анимационный 2D-компонент, например, ползунок (Рис. 42). При перемещении ползунка с помощью «мыши» значение высоты «СА.h» будет соответственно изменяться, и мы получим зависимость, аналогичную показанной на Рис. 41.
Перемещение «мыши», однако, не является непрерывным процессом, поэтому в этом случае фазовая диаграмма будет представлять собой совокупность отдельных точек -- тем более плотную, чем медленнее перемещается «мышь».
Рис. 41. Зависимость температуры воздуха от высоты, полученная в результате отладочного вычислительного эксперимента 2.2. Модель Земли Модель Земли при решении задач внешней баллистики должна задавать форму земной поверхности, а также величину и направление ускорения силы тяжести в заданной точке. Одной из часто используемых моделей является представление Земли в виде эллипсоида вращения (эллипсоида Красовского) с равномерным распределением массы внутри эллипсоида.
Выделим модель Земли в отдельный пакет «ЭллипсоидКрасовского» («..\ Модели \ ЭллипсоидКрасовского»). Пакет содержит (Рис. 43):
видимые извне (public) константы «a», «e2» и «Omega», содержащие соответственно значения большой полуоси эллипсоида, квадрата первого эксцентриситета и угловой скорости вращения Земли;
видимые извне функции «BLHtoR» «RtoBLH», позволяющие пересчитывать координаты точки в декартовой геоцентрической системе координат, задаваемые вектором R в совокупность широты B, долготы L и высоты над поверхностью эллипсоида H и обратно;
определение видимого извне непрерывного класса «ПолеТяготения»;
определения внутренних глобальных констант.
Рис. 43. Структура пакета «ЭллипсоидКрасовского»
Экземпляр класса «ПолеТяготения» получает на входах значение радиус-вектора «r» точки и угла «phi» между радиусом-вектором и экваториальной плоскостью и на выходах выдает значения радиальной «g_r» и тангенциальной «g_om» составляющмх ускорения силы тяжести, а также значение высоты «H» над поверхностью эллипсоида (см. Рис. 43). Эти величины определяются по формулам, показанным на Рис. 44.
В конкретной модели летательного аппарата необходимо импортировать пакет «ЭллипсоидКрасовского» и создать экземпляр класса «ПолеТяготения». Показанные на Рис. 44 уравнения автоматически присоединятся к общей системе уравнений модели. Поскольку поведение объекта инкапсулировано внутри него, можно независимо вводить изменения в класс «ПолеТяготения», например, учитывать больше членов ряда при вычислении ускорения силы тяжести.
Рис. 44. Уравнения класса «ПолеТяготения»
2.3. Моделирование табличных зависимостей При решении задач внешней баллистики часто используются зависимости, заданные таблицами, содержащими экспериментальные данные.
Так обычно задаются зависимость аэродинамических коэффициентов от числа Маха, высоты и угла атаки, зависимость секундного расхода РДТТ от времени и т.д. Используются таблицы с одним входом (например, для зависимости C X (M ) ) или с двумя входами (например, для зависимости MvStudium таблицы задаются соответствующими текстовыми файлами (Рис. 45).
Рис. 45. Представление табличных данных в текстовых файлах В описании класса предусматривается соответствующий параметр матричного типа, значение которого загружается из файла, например:
CxM: matrix := matrixfromfile(“CxM_1.txt”), dCxMH: matrix := matrixfromfile(“dCxMH_1.txt”).
Значение параметра для произвольных значений входов необходимо находить с помощью интерполяции. Для этого может использоваться сплайн-интерполяция (стандартная функция «interpol») или линейная интерполяция. Сплайн-интерполяция позволяет получать гладкие зависимости, однако при ее использовании следует соблюдать осторожность так как возможны резкие «выбросы» интерполированных значений. На Рис. 46 показаны результаты интерполяции зависимости секундного расхода РДТТ от времени.
Рис. 46 Интерполяция зависимости секундного расхода РДТТ от времени (сплайн – Результат сплайн-интерполяции (при использовании типа сплайна, заданного по умолчанию) оказался в данном случае совершенно неприемлемым, в то время как линейная интерполяция дает более грубую, но не противоречащую физике зависимость. Поэтому в тех случаях, когда важно не абсолютное значение результатов, а их сопоставимость в серии вычислительных экспериментов, имеет смысл использовать линейную интерполяцию. В пакете «Интерполяторы» имеются гибридные классы «ЛинИнтерполятор_XY» и «ЛинИнтерполятор_XYZ», в которых стыки линейных участков осуществляются с помощью дискретных переходов, что позволяет избежать нежелательного влияния разрывов значения производной на численное решение. Заметим, что мы вовсе не призываем избегать сплайнинтерполяции, а только лишь отмечаем, что использовать ее нужно осторожно, контролируя результаты. Можно также использовать аппроксимацию.
Глава 3. Модели движения летательных аппаратов различных типов В этой главе рассматриваются модели движения основных типов летательных аппаратов: неуправляемой ракеты, зенитной управляемой ракеты (ЗУР), оперативно-тактической ракеты (ОТР) и баллистической ракеты дальнего действия (БРДД).
3.1. Модель неуправляемой ракеты Для начала рассмотрим модель неуправляемой ракеты с твердотопливным двигателем, стартующей с направляющей под углом н и имеющей начальную массу m0 = 200 дальность полета порядка 10 км. Для такг кого диапазона дальностей Землю можно считать плоской и ускорение силы тяжести постоянным. Для определения зависимости параметров атмосферы от высоты используем рассмотренный в главе 2 пакет «ГОСТ4401_81». В этой модели мы используем заданные таблично зависимости C X (M ), C X (M, h) для коэффициента аэродинамического лобового сопротивления, а также зависимость m(t ) для твердотопливного двигателя. Будем использовать линейную интерполяцию (пакет «Интерполяторы»).
Создадим новый проект «…\Модели\Ракета\Ракета.mvb» и импортируем в него необходимые пакеты. Ясно, что эта модель должна быть гибридной, так как динамика ракеты включает в себя две фазы – движение по направляющей и полет. Кроме того, моделирование должно завершаться в момент падения ракеты. Карта поведения, учитывающая все эти факторы, показана на Рис. 47.
И при движении по направляющей, и в полете на ракету действуют одни и те же силы: сила тяги и сила аэродинамического сопротивления.
Желательно создать независимые описание функционирования двигательной установки и описание формирования аэродинамических сил, которые бы автоматически объединялись с описаниями динамики ракеты в обоих состояниях. Одним из способов организации такой автоматической суперпозиции поведений является создание параллельно функционирующих локальных объектов. Поскольку локальные объекты могут быть экземплярами только глобальных классов, добавим в проект классы «РДТТ» и «Аэродинамика» (Рис. 53).
Рис. 48. Интерфейс и внутренняя структура объекта класса «РДТТ»
Экземпляр класса «РДТТ» воспринимает на входе текущее атмосферное давление и на выходе выдает значение силы тяги и значение массы сгоревшего топлива (Рис. 48). Параметрами объекта являются удельный импульс тяги «Iуд», площадь выходного сечения сопла «S» и матрица «dm_t», задающая таблицу зависимости секундного расхода от времени.
Для интерполяции этой зависимости создан локальный объект «ЛИ_dm», которому таблица передается в качестве действительного параметра (см.
Рис. 48).
Функционирование твердотопливного двигателя описывается системой уравнений, показанной на Рис. 49. Обратите внимание, что поскольку учитываются переходные процессы в двигателе, в начальный момент секундный расход и соответственно реактивная составляющая силы тяги равны нулю. Поэтому, чтобы не получить отрицательное значение силы тяги на интервале, когда реактивная составляющая тяги меньше силы атмосферного давления, необходимо использовать условное уравнение.
Показанная на Рис. 49 система уравнений будет выдавать правильные результаты и после полного выгорания топлива, когда секундный расход станет равным нулю. Однако, чтобы не решать в ходе вычислительного эксперимента лишние уравнения, целесообразно сделать класс «РДТТ»
гибридным и задать его поведение картой поведения, показанной на Рис.
50. Рассмотренная выше система уравнений решается в состоянии «Работа», а после полного выгорания топлива функционирование объекта завершается.
Рис. 51. Интерфейс и внутренняя структура объекта класса «Аэродинамика»
Экземпляр класса «Аэродинамика» воспринимает на входе значение модуля скорости «V», значение высоты «h», а также текущие значения скорости звука «a» и плотности воздуха «Rho», а на выходе -- выдает значение силы аэродинамического сопротивления «X» (Рис. 51). Параметрами объекта являются матрицы «Cx_M», «dCx_MH» (соответствуют табличным зависимостям C X (M ), C X (M, h) ) и площадь «миделевого» сечения ракеты «S». Для линейной интерполяции табличных зависимостей используются локальные объекты «ЛИ_Cx» и «ЛИ_dCx» -- экземпляры классов одномерной и двумерной интерполяции из пакета «Интерполяторы».
Значение силы аэродинамического сопротивления определяется из системы уравнений, показанной на Рис. 52.
Рис. 52. Система уравнений класса «Аэродинамика»
Локальные объекты «ДУ» и «АР» (экземпляры классов «РДТТ» и «Аэродинамика» соответственно) помещаем в структуру модели ракеты (Рис. 53) с необходимыми действительными значениями параметров. Кроме того, в структуру добавим локальный объект «СА» -- экземпляр класса «СтандАтмосфера», импортируемого из пакета «ГОСТ4401_81». С помощью локальных связей организовываем постоянную передачу необходимых данных между локальными объектами (см. Рис. 53).
Связи между входами/выходами локальных объектов и внутренними переменными модели ракеты обеспечиваем с помощью соответствующих уравнений.
Состоянию «Направляющая» (см. Рис. 47) приписываем в качестве деятельности экземпляр непрерывного локального класса «Движение_по_направляющей», поведение которого задается системой уравнений, показанной на Рис. 54. Обратите внимание, что здесь также используется условное уравнение, отражающее начальную стадию движения, когда сила тяги еще не превышает суммы силы трения и проекции веса. На этой стадии скатыванию ракеты с направляющей мешают упоры. Переход из состояния «Направляющая» в состояние «Полет» происходит в соответствии с условием выхода центра масс ракеты за границу направляющей.
Рис. 54. Уравнения движения ракеты по направляющей Состоянию «Полет» (см. Рис. 47) приписываем в качестве деятельности экземпляр непрерывного локального класса «Движение_ракеты», поведение которого задается системой уравнений, показанной на Рис. 55.
В качестве действительных начальных значений производных «y’» и «x’» передаются значения вертикальной и горизонтальной составляющих скорости, вычисленные на момент схода с направляющей (см. Рис. 47). Переход из состояния «Полет» в конечное состояние срабатывает по условию падения.
Создадим визуальную модель и запустим ее. При принятых значениях параметров получим зависимости, показанные на Рис. 56 (на фазовой диаграмме внизу показана траектория движения ракеты, а на временной диаграмме вверху -- зависимость силы тяги и силы аэродинамического сопротивления от времени).
Правильность разработанной модели всегда полезно проверить с помощью анимации, отражающей качественную динамику моделируемой системы. Создадим новое окно 3D-анимации. Движение центра масс ракеты будем представлять перемещением сферы в трехмерном пространстве.
С координатами центра этой сферы сопоставим значения переменных «x»
и «y» модели (размер трехмерной сцены выберем соответствующим диапазону изменения этих величин). Радиус сферы сделаем пропорциональным текущей массе ракеты «m». Для согласования размеров визуализации и реальных значений переменной «m» введем в визуальной модели виртуальную переменную «m3D», значение которой всегда будет равно 2*m. Цвет сферы свяжем со значением силы тяги «P»: максимальное значение переменной «P» свяжем с ярко-красным цветом, а минимальное -- с темносиним (Рис. 57), при промежуточных значениях будет формироваться некоторый промежуточный цвет.
Рис. 56. Результаты вычислительного эксперимента с моделью Для визуализации направления и модуля вектора скорости используем 3D-элемент «стрелка» (Рис. 58). Направляющим косинусам стрелки относительно горизонтальной и вертикальной осей поставим в соответствие значения переменных «cosTeta» и «sinTeta», а длине стрелки поставим в соответствие значение виртуальной переменной «V3D», которая связана со значением скорости соотношением 5*V.
Рис. 57. Связь параметров 3D-элемента «сфера» с переменными модели Рис. 58. Связь параметров 3D-элемента «стрелка» с переменными модели В результате мы сможем наблюдать трехмерную динамическую картинку, показанную на Рис. 59.
В завершение работы с моделью неуправляемой ракеты решим задачу оптимизации: попробуем определить угол наклона направляющей, для которого при заданных параметрах ракеты дальность падения будет максимальной. Для этого запустим оптимизатор. При его вызове автоматически создается «скрытая» выполняемая модель в виде DLL. В качестве параметра оптимизации укажем «Tetaн» (Рис. 60), а в качестве целевой функции (функционала) – значение переменной «x», вычисляемое в момент, задаваемый значением функции «Finalized», т. е. в момент завершения работы модели. Таким образом, каждый раз при нахождении значения функционала для определенного значения параметра оптимизации будут последовательно решаться дифференциально-алгебраические системы уравнений движения по направляющей и затем движения ракеты до момента падения. Значение переменной «x» в этой точке и будет значением функционала.
Рис. 60. Нахождение угла максимальной дальности На Рис. 60 показаны траектория поиска максимума методом случайного поиска и найденное решение (примерно 67 градусов).
3.2. Модель зенитной управляемой ракеты Рассмотрим математическое моделирование движения зенитной управляемой ракеты на примере ЗУР с командной системой теленаведения (КСТН). Это связано с тем обстоятельством, что уже при постановке задачи моделирования движения объектов такого класса возникают некоторые трудности, связанные с неоднозначностью рассматриваемой задачи. Такая неоднозначность связана с самой идеей любого кинематического метода наведения [7], закладываемого в основу алгоритма реализуемого рассматриваемой моделью метода наведения. Другой источник неоднозначности связан с возможностью записи системы уравнений движения в различных системах координат. Поэтому применение нового средства математического моделирования функционирования динамических систем для решения задач этого класса может дать интересные результаты.
При моделировании теленаведения часто используется численное интегрирование системы дифференциальных уравнений движения ЗУР как материальной точки в вертикальной плоскости при выбранном методе теленаведения. При этом учитывается действие силы тяги РДТТ, силы лобового сопротивления, определяемое через аэродинамические характеристики типовой ракеты и силы тяжести. Система теленаведения принимается идеальной и безынерционной. Система дифференциальных уравнений движения для такой схематизации полета имеет следующий вид:
По определению вводится «угол упреждения», который отсчитывается против часовой стрелки (в положительную сторону) от вектора V к r.
Схема полета, соответствующая рассматриваемой модели движения ЗУР, показана на рис. 61.
Рис. 61. Система координат, в которой определяется положение ЗУР и цели при теленаведении, и соответствующие ей кинематические связи.
Из второго уравнения (1) легко вычислить (Y=Y):
В принципе значение угла атаки может быть вычислено методом прямой итерации:
Когда цель движется прямолинейно (ц =180o), Нц = const. С учетом алгоритма метода наведения и условия идеальности СУ можно упростить (1). В частности, для метода «трех точек» (часто этот метод называют методом «совмещения», исходя из геометрической интерпретации идеи метода:
пункт управления, ЗУР и цель в процессе управления полетом необходимо удерживать на одной линии) ц =. При ц = 180о и Vц = const:
Так как условия (3) однозначно определяют зависимость = (t), найдем производные (t) и & Тогда система (1) существенно упрощается и принимает вид:
где:
При интегрировании системы дифференциальных уравнений (4) для решения вспомогательных задач может потребоваться отображение значений углового нормального ускорения & и соответствующей ему нормальной перегрузки Ny. Их можно вычислить аналитически. Дифференцируя выражение r = V sin() с учетом = -, найдем:
Для контроля реализуемости управления с использованием выбранного кинематического метода наведения необходимо в процессе моделирования полета осуществлять расчет нормального ускорения Jy = V& то есть с учетом (1) После вычисления поперечного ускорения легко найти и поперечную перегрузку:
Смысл контроля состоит в том, что при использовании кинематических методов наведения [7, 8], как следует из (7), потребная для реализации успешного перехвата ракетой цели перегрузка определяется алгоритмом наведения, который и отражает рассмотренная математическая модель (4). Однако физически требуемая перегрузка определяется возможностями двигательной установки ЗУР, которые моделируются с помощью параметра P в формуле (6) и аэродинамическими свойствами этой ракеты, представленными в формуле (6) подъемной силой Y, зависящей, согласно (1) от аэродинамических характеристик ЗУР Cy(M,). Последние определяются аэродинамической компоновкой ЗУР.
Однако в модели (4) выражение для подъемной силы не входит.
Выявленное нами обстоятельство позволяет уяснить главный смысл применения на практике математических моделей движения ЗУР, в которых используются кинематические методы наведения. Они позволяют осуществлять моделирование дуэльной ситуации противоборства летательных аппаратов «ЗУР – цель» на этапе баллистического проектирования ЗУР. На этом этапе создания ЗУР необходимо выбрать ее газодинамическую и аэродинамическую компоновки. Но для выбора этих компоновок необходимо знать потребные для выполнения полета проектируемой ракеты перегрузки и диапазон дальностей, в которых будет осуществляться перехват целей.
Применительно к этапу проектирования математическая модель (1) содержит формально непреодолимое противоречие. Для расчета потребных поперечных перегрузок Ny необходимо рассчитать траектории сближения ЗУР с целью. Но для расчета траекторий нужно знать таблицу аэродинамических характеристик для вычисления Cy(M,). Возник «порочный круг».