Кафедра «Системный анализ и управление» 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Кафедра «Системный анализ и управление»



Кафедра «Системный анализ и управление»

 
 

 


Старков А.В., Федоров А.В.

 

 

Профессионально-ознакомительная практика

 

Методические указания и перечень заданий

 

Утверждено
на заседании кафедры
24 июня 2005 г.

Протокол № 5

 

Москва 2012


Содержание

 

 

1. Цель практики.................................................................................... 3

2. Требования к прикладной программе.............................................. 4

3. Содержание отчета по практике........................................................ 7

4. Постановка решаемых задач............................................................. 8

4.1. Исследование управляемого движения искусственного спутника Земли (коды ИСЗ-1…ИСЗ-18)......................................................... 8

4.2. Анализ траектории спускаемого аппарата в атмосфере Земли (код СПУСК-1)............................................................................................ 16

4.3. Анализ траектории спуска космического аппарата в атмосфере Марса (код СПУСК-2).............................................................................. 17

4.4. Анализ движения подводного аппарата (код ПЛА)............ 18

4.5. Кинематическое исследование траекторий самонаведения с использованием метода погони (код ЗУР)...................................................... 19

4.6. Нахождение переходной (фундаментальной) матрицы для системы линейных уравнений (код МАТРИЦА)............................... 20

5. Методика программирования........................................................... 22

6. Литература......................................................................................... 32

Приложение 1. Варианты заданий........................................................ 33

 

 


Цель практики

 

Профессионально–ознакомительная практика проводится в четвертом семестре в течение четырех недель.

Цель практики – закрепление навыков применения современных методов программирования и моделирования при выполнении поверочно–баллистических расчетов, разработке систем управления ЛА, а также ракетно–космических систем и комплексов.

Задача практики состоит в разработке прикладной программы в среде операционной системы Windows 2000/XP с использованием системы программирования Delphi 6.0, библиотеки Simulate 1.0 [1], а также механизмов доступа к базам данных.

Каждый студент получает индивидуальное задание, содержащее постановку задачи, ее математическую формулировку, перечень исходных данных и требования к представлению результатов. Перечень заданий приведен в Приложении 1. Допускается выдача задания студенту его научным руководителем по курсу «Основы научных исследований».

Прикладная программа, создаваемая по индивидуальному заданию, должна отвечать требованиям, сформулированным в разделе 2.

Для сдачи зачета (с оценкой) по практике необходима подготовка отчета в соответствии с указаниями, изложенными в разделе 3.

Типовое задание на практику предусматривает решение задачи, связанной формирование с интегрированием системы обыкновенных дифференциальных уравнений, описывающих возмущенное управляемое движение летательного аппарата, с целью расчета траектории движения. Для составления программы рекомендуется использовать библиотеку моделирования сложных динамических систем Simulate 1.0. Сведения о ней содержатся в пособии [1]. Пример применения дан в разделе 5.

 


Требования к прикладной программе

 

Одним из важнейших вопросов при разработке любого программного комплекса является сценарий его работы и взаимодействие с другими приложениями. Типовым сценарием является сценарий вида:

ПОДГОТОВКА_ДАННЫХ -> ВЫПОЛНЕНИЕ_РАСЧЕТОВ -> ПРОСМОТР_И_АНАЛИЗ РЕЗУЛЬТАТОВ -> СОСТАВЛЕНИЕ ОТЧЕТА.

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

В настоящее время для работы с данными широко используются различные системы управления реляционными базами данных (СУБД), такие как Paradox, Interbase, MS SQL Server и другие. Работа этих систем основана на использовании специального языка запросов SQL, а отличие заключается только в программной реализации. В связи с этим программа должна хранить данные, например, в Paradox-таблицах, доступ к которым может быть осуществлен через механизм Borland Database Engine (BDE). Для этого, студент для поставленной задачи должен

· определить логическую структуру данных и их взаимосвязи;

· реализовать структуру данных в виде совокупности связанных между собой таблиц БД

· реализовать механизм взаимодействия между программой и БД.

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

Программа должна иметь возможность сохранять (накапливать) полученные результаты в отдельных файлах. При этом нарушение целостности решения задачи (соответствие файлов исходных данных и результатов) недопустимо.

Программа должна предоставлять пользователю всю необходимую информацию (желательно в виде отдельных файлов) для составления отчета о работе, а также автоматизировать процесс его составления. Возможна печать фрагментов или всего отчета. При этом составление универсальных программ в настоящее время не имеет смысла (например, для подготовки отчетов не стоит второй раз изобретать текстовый процессор Word). Поэтому на каждом этапе необходимо не только прорабатывать сценарий работы самой программы, но и сценарий ее взаимодействия с другими программными комплексами, кафедральными в том числе. Например, на этапах подготовки данных и анализа результатов пользователь может активно использовать такие популярные продукты как Microsoft Office, Grapher, Matcad, Maple, а для составления отчетов использовать Microsoft Word или язык HTML. Механизм взаимодействия пользователя с другими приложениями подлежит дополнительной проработке и закрепляется в Руководстве Пользователя.

Программа должна иметь интуитивно понятный интерфейс. В настоящее время графический интерфейc ОС Windows принят в качестве стандарта де’факто для пользовательского интерфейса большинства программ. Это дает возможность пользователю легко адаптироваться к новым приложениям. Кроме того, удобный объектно-ориентированный диалог позволяет даже неопытному пользователю легко управлять программой. Типичный вид Windows-приложения представлен на рисунке 2.1.

Рис. 2.1.

Любое приложение должно иметь заголовок, строку меню с обязательным элементом “Файл” (см. рисунок), панель инструментов, поле для отображения текущей информации и строку состояния. Возможна организация дочерних окон как в стиле MDI, так SDI.

¨ в подменю “Параметры” вызываются диалоговые формы изменения исходных данных;

¨ в подменю “Выполнение” вызываются функции управления процессом вычислений (начать выполнение, закончить выполнение, приостановить выполнение);

¨ в подменю “Просмотр результатов” вызываются диалоговые формы просмотра результатов расчетов;

¨ в подменю “Инструменты” вызываются другие приложения Windows с которыми организовано взаимодействие программы;

¨ в подменю “Помощь” вызываются как специальные средства организации подсказок Windows, так и средства представления электронного варианта описания программного комплекса.

При создании диалоговых форм следует особое внимание уделить проверке корректности ввода исходных данных. Например, в поле, где требуется ввод числовых значений, ввод любых символов, которые в совокупности нельзя интерпретировать как число, недопустим. Следует блокировать ввод значений, выходящих за пределы допустимых диапазонов. Такая проверка должна осуществляться самой программой. Хотя вид диалоговых форм определяется разработчиком, но на каждой панели кроме стандартных кнопок “OK”, “Отказ” и “Помощь” должна быть кнопка “Восстановить” для восстановления исходных данных, принятых по умолчанию.

 

 


Содержание отчета по практике

 

По результатам работы студент должен предоставить следующие материалы

¨ Отчет, оформленный в соответствии с ГОСТ7.32-91.НТО.

¨ Электронный вариант отчета по практике в виде файла-документа, подготовленного в редакторе MS Word, включающего в себя необходимые таблицы и графики.

¨ Исходные и исполняемые файлы прикладных программ, выполненные студентом во время прохождения практики.

В отчет должны быть включены:

¨ постановка задачи,

¨ логическая структура данных и выбранный способ ее реализации

¨ вариант исходных данных,

¨ метод решения,

¨ численные и графические результаты решения поставленной задачи, отражающие правильность ее выполнения

¨ описание программы в виде руководства пользователя и руководства программиста с описанием интерфейса разработанных студентом модулей и механизма межпрограммного взаимодействия.


Постановка решаемых задач

 

4.1. Исследование управляемого движения искусственного спутника Земли

 

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

Цель исследования – изучить поведение элементов орбиты спутника по времени при различных методах ориентации вектора тяги корректирующего двигателя.

Метод исследования – численное интегрирование системы нелинейных обыкновенных дифференциальных уравнений.

Используются дифференциальные уравнения плоского возмущенного движения искусственного спутника Земли (ИСЗ) различного вида.

Варианты заданий отличаются друг от друга видом уравнений движения и методом управления.

 

 

Исходные данные

 

а) Параметры орбиты в начальный момент времени:

- большая полуось a,

- эксцентриситет орбиты e,

- аргумент широты спутника u

- аргумент перигея w.

- наклонение плоскости орбиты к экватору i

- долгота восходящего узла W

 

б) Масса ИСЗ, тяга двигателя, направление тяги (+ или -)

в) Время включения двигателя tв и длительность его работы t.

г) Длительность интервала моделирования и шаг интегрирования

е) Метод интегрирования (Эйлера, Эйлера-Коши или Рунге-Кутта).

ж) Закон управления (выбор одного из двух по варианту задания)

 

Примерные диапазоны исходных данных

 

Масса ИСЗ – от 500 до 15000 кг

Тяга двигателя – от 1N до 1000 N

Большая полуось – от 7000 до 430000 км

Эксцентриситет – от 0 до 0.8

Аргумент широты – от 0 до 360о

Аргумент перигея – от 0 до 360о

Наклонение орбиты – от –90о до 90о

Долгота восходящего узла – от 0 до 360о.

Интервал моделирования (по умолчанию) равен начальному периоду обращения ИСЗ:

Шаг интегрирования – от 60 до 600 с.

 

Представление результатов

 

Программа моделирования движения должна обеспечивать построение графиков зависимостей элементов орбиты от времени:

 

a(t) – большая полуось

p(t) – фокальный параметр

e(t) – эксцентрисистет

Rp(t) – расстояние в перигее

Ra(t) – расстояние в апогее

 

Необходимо обеспечить запись результатов интегрирования уравнений движения по шагам в текстовый файл.

 

 


 

Варианты уравнений движения

 

1. Уравнения в оскулирующих элементах.

 

 

 

 

 

 

 

где - расстояние от центра Земли до ИСЗ;

p – фокальный параметр орбиты, ;

е – эксцентриситет орбиты;

J – истинная аномалия;

w – аргумент перигея орбиты;

Ra – радиус апогея;

Rp – радиус перигея орбиты;

F – ускорение, сообщаемое ИСЗ двигателем коррекции;

l – угол между радиус–вектором ИСЗ и направлением тяги

m – гравитационная постоянная Земли (0.398603×106 км32).

Систему уравнений в оскулирующих элементах можно применять при е>0.


Варианты методов управления

 

N Метод Закон
  Постоянство эксцентриситета
  Постоянство расстояния до перигея
  Постоянство расстояния до апогея
  Постоянство фокального параметра l=0, l=p
  Постоянство большой полуоси
  Постоянство положения линии апсид
  Максимальная скорость изменения эксцентриситета
  Максимальная скорость изменения расстояния до перигея
  Максимальная скорость изменения расстояния до апогея
  Максимальная скорость изменения фокального параметра l=±p/2
  Максимальная скорость изменения большой полуоси
  Максимальная скорость вращения линии апсид

 


Варианты заданий

 

 

Код Вид уравнений Закон управления
ИСЗ-1   1, 7
ИСЗ-2   2, 8
ИСЗ-3   3,9
ИСЗ-4   4,10
ИСЗ-5   5,11
ИСЗ-6   6,12
ИСЗ-7   1,7
ИСЗ-8   2,8
ИСЗ-9   3,9
ИСЗ-10   4,10
ИСЗ-11   5,11
ИСЗ-12   6,12
ИСЗ-13   1,7
ИСЗ-14   2,8
ИСЗ-15   3,9
ИСЗ-16   4,10
ИСЗ-17   5,11
ИСЗ-18   6,12

 


 

Методика программирования

 

Библиотека Simulate 1.0 содержит набор модулей, в которых представлены классы Object Pascal, реализующие объектно–ориентированное представление сложных динамических систем и их элементов. Методические указания по применению этой библиотеки для решения задач интегрирования дифференциальных уравнений приведены в пособии [1]. Чтобы сделать модули библиотеки доступными проекту необходимо:

1. Создать проект

2. Выбрать в меню Delphi команду Project/Options

3. На закладке Directories/Conditionals в строке Search path ввести Z:\Simulate1\Units

4. Создать новый модуль (New/Unit) и в нем объявить классы, реализующие математическую модель задачи как наследников подходящих классов библиотеки Simulate 1.0. В раздел uses модуля необходимо добавить ссылки на следующие модули

uCommon – общематематические процедуры и функции

uCustom – базовые классы математических моделей

uVector – векторы и матрицы.

5. Создать форму главного окна (и другие, если это необходимо), в которых реализовать отклики на действия (команды меню, кнопки и т.п.).

Рассмотрим методику составления программы на следующем примере.

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

 

(1)

 

где r –безразмерное расстояние между КА и центром Земли; u, V – безразмерные составляющие орбитальной скорости, направленные по радиусу и нормали к нему в плоскости движения; W - долгота восходящего узла; w - аргумент перигея; J - истинная аномалия. При этом безразмерная скорость связана с радиусом соотношением .

Безразмерные составляющие управляющего ускорения заданы функциями

 

, , , (2)

где . (3)

Здесь Т – безразмерное время перелета; t - безразмерное текущее время; a - номинальное безразмерное ускорение. Отметим, что безразмерное время перелета можно задать как , где N - число полных оборотов вокруг Земли, совершаемых КА в процессе перелета.

Составляющие ускорения выбраны так, что радиус орбиты будет возрастать, а наклонение – уменьшаться. Пусть начальные условия для всех углов кроме наклонения - нулевые, т.е. u(0)=W(0)=w(0)=J(0)=0, а начальные условия по радиусу и наклонению задаются пользователем.

Необходимо моделировать движение КА на заданном интервале времени и получить зависимости параметров его орбиты по времени.

Структуризация задачи проводится с использованием понятий «главная система» и «подсистема», принятых в [1].

Зависимости ускорения от времени, т.е. - алгоритм управления движением КА, целесообразно выделить в отдельный объект - подсистему. Это даст возможность замены одного алгоритма управления на другой без изменения объекта, реализующего уравнения движения.

В качестве главной системы данного примера выберем дифференциальные уравнения движения (1), а в качестве подсистемы - «блок управления», который описывается уравнениями (2), (3).

Поскольку математическая модель главной системы нашего примера представляет собой систему обыкновенных дифференциальных уравнений, она должна быть наследником класса TDifEquation. Подсистема «блок управления» описывается функциями времени. Поэтому ее можно реализовать наследником TDynamicObject.

Ниже приведен листинг модуля MyModel (см. шаг 4 методики) с классами данного примера. Здесь объявлены два класса:

TController – отвечает за вычисление составляющих управления согласно (2),(3)

TOrbitModel – инкапсулирует уравнения движения (1).

 

unit MyModel;

Interface

uses uCommon,uCustom;

 

Type

TController = class;

 

TOrbitModel = class (TDifEquation)

Private

FControl: TController;

FArgLat: TFloat;

Public

constructor Create;

procedure Dynamics; override;

procedure PreCompDynamics; override;

property ArgLat: TFloat read FArgLat;

property Control: TController read FControl;

end;

 

TController = class (TDynamicObject)

Private

FOrbitModel: TOrbitModel;

FAr,Fan,Fat:TFloat;

Public

Anom: TFloat;

procedure Dynamics; override;

property Ar: TFloat read FAr;

property An: TFloat read FAn;

property At: TFloat read FAt;

end;

 

Implementation

uses Math; // математический модуль Delphi

 

constructor TOrbitModel.Create;

Begin

inherited Create(7,7);

FControl:= TController.Create;

FControl.FOrbitModel:= Self;

AddMember(FControl);

end;

 

procedure TOrbitModel.Dynamics;

var AnV: TFloat;

Begin

AnV:= FControl.An/X[3];

DxDt[1]:= X[2];

DxDt[2]:= Sqr(X[3])/X[1] - 1/Sqr(X[1]) + FControl.Ar;

DxDt[3]:= - X[2]*X[3]/X[1] + FControl.Af;

DxDt[4]:= AnV * Sin(FArgLat)/Sin(X[5]);

DxDt[5]:= AnV * Cos(FArgLat);

DxDt[6]:= -AnV*Sin(FArgLat) * CoTan(X[5]);

DxDt[7]:= X[3]/X[1];

end;

 

procedure TOrbitModel.PrecompDynamics;

Begin

FArgLat:= AngleTo2Pi(X[6]+X[7]);

end;

 

procedure TController.Dynamics;

var Lambda: TFloat;

Begin

Lambda:= HalfPi /TermTime * SysTime;

Ar:= 0;

Af:= Anom * Cos(Lambda);

An:=-Anom*Sin(Lambda)* Sign(Cos(FOrbitModel.ArgLat));

end;

end.

 

Связь основной модели (т.е. уравнений движения) с блоком управления осуществляется следующим образом. Объект TOrbitModel имеет скрытое поле FControl, доступное через свойство Control в режиме чтения. В свою очередь, объект TController имеет поле FOrbitModel, содержащее ссылку на объект TOrbitModel. При создании объекта TOrbitModel ее конструктор сначала вызывает наследуемый конструктор, который устанавливает размер вектора производных и вектора зависимых переменных равный 7 (по числу дифференциальных уравнений модели движения). Затем создается объект TController и ссылка на него запоминается в поле FControl. После этого полю FOrbModel объекта TController присваивается ссылка на модель, а сам блок управления добавляется в список подсистем модели движения. Таким образом, необходимые связи установлены.

Отметим, что явные ссылки введены в данном примере исключительно ради наглядности. Так, при добавлении любой подсистемы в список, ее владельцем автоматически становится основная модель. Поэтому любая подсистема может получить доступ к системе верхнего уровня по ссылке Owner. С другой стороны, основная модель может «найти» свою подсистему обращением к свойству Member[Index].

Обратимся к уравнениям движения и алгоритму управления. Нетрудно видеть, что правых частях модели движения и в уравнениях блока управления несколько раз встречается сумма (w+J) – аргумент широты КА. Целесообразно вычислять это значение один раз и сделать доступным не только самой модели, но и блоку управления. Для этого объект TOrbMdel имеет свойство ArgLat доступное любому другому объекту в режиме чтения. Так как аргумент широты должен быть доступен до расчета производных и управляющего воздействия, его значение вычисляет виртуальный метод PreCompDynamics объекта TOrbModel. Отметим, что аргумент широты при интегрировании системы (1) будет непрерывно возрастать от начального значения (в нашем случае - от нуля) до 2pN. Метод PreCompDynamics приводит текущее значение аргумента широты к диапазону [0..2p] с помощью вспомогательной функции AngleTo2Pi, импортируемой из модуля uCommon. Константы TwoPi=2p и HalfPi=p/2 также импортитуются из модуля uCommon.

Вычисление правых частей уравнения движения (1) реализует метод TOrbModel.Dynamics. Здесь каждой зависимой переменной модели т.е. свойству X[index] соответствует производная DxDt[index]. Считается, что индекс зависимой переменной есть порядковый номер уравнения системы (1), начиная с 1.

Объект TController реализует алгоритм управления (2), (3). Его свойства предствляют собой:

Anom - номинальное реактивное ускорение;

Ar - радиальная составляющая ускорения;

At - трансверсальная составляющая ускорения;

An - бинормальная составляющая ускорения.

Алгоритм управления запрограммирован в методе Dynamics класса TController.

Форма главного окна имеет следующий вид.

 
 

 

 


Здесь предусмотрен как ввод начальных условий движения КА, так и выбор метода численного интегрирования.

Листинг модуля главной формы представлен ниже. Обратите внимание на комментарии.

 

unit Form1;

// Пример программы моделирования некомпланарного перелета КА

// с непрерывной малой тягой

// с Федоров А.В. 1999

Interface

Uses

Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,

Dialogs,StdCtrls,ExtCtrls,

uCustom;

Type

TForm1 = class (TForm)

Panel1: TPanel;

GroupBox1: TGroupBox;

Label1: TLabel;

Label2: TLabel;

edRadius: TEdit; // Редактор начального радиуса

edInclination: TEdit; //Редактор начального наклонения

GroupBox2: TGroupBox;

Label3: TLabel;

Label4: TLabel;

edAccelerat: TEdit; // Редактор номинального ускорения

edRevol: TEdit; // Редактор числа витков

Panel2: TPanel;

Panel3: TPanel;

Memo1: TMemo;

GroupBox3: TGroupBox;

Label5: TLabel;

edOrbitSteps: TEdit;//Редактор числа шагов на витке

bRun: TButton; //Кнопка «Поехали...»

bCancel: TButton;//Кнопка «Прервать»

Bevel1: TBevel;

cbMethod: TComboBox; // Список методов интегрирования

Label6: TLabel;

//Обработчики событий кнопок и формы

procedure bRunClick(Sender: TObject);

procedure bCancelClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

Private

{ Общие поля, доступные форме и симулятору }

FOut: TextFile; // Текстовый файл результатов

FSim: TSimulator; // Симулятор

FOrbSteps: integer; // Число шагов на витке

FCancel: boolean; // Флаг принудительного выхода

FMethodIndex: integer; // Индекс метода интегрирования

 

Public

// Обработчики событий симулятора

procedure OnEnterSim(Sender:TObject);

procedure OnExitSim(Sender:TObject);

procedure OnOutputSim(Sender:TObject);

procedure OnStopSim(Sender:TObject; var Stop:boolean);

end;

 

Var

Form1: TForm1;

 

Implementation

uses uCommon,MyModel;

{$R *.DFM}

 

 

procedure TForm1.OnEnterSim(Sender:TObject);

// Обработчик события симулятора OnEnter.

Begin

// При входе в симулятор очищаем Memo1

Memo1.Clear;

// выводим строку-заголовок в Мемо1

Memo1.Lines.Add('Начало моделирования. Выбран метод '+

cbMethod.Text);

// Открываем выходной файл, имя которого связано с методом

// интегрирования

case FMethodIndex of

0: AssignFile(FOut,'Euler.dat');

1: AssignFile(FOut,'RK4.dat');

end;

// Очищаем файл результатов и выводим строку-заголовок

Rewrite(FOut);

Writeln(FOut,'N':3,'R':10,'Vr':10,'Vs':10,'Om':10,

'I/Io':10);

// Сброс флага принудительного завершения моделирования

FCancel:= false;

end;

 

 

procedure TForm1.OnExitSim(Sender:TObject);

// Обработчик события симулятора OnExit

Begin

// По окончании моделирования закрываем файл результатов

CloseFile(FOut);

// и выводим строку в Мемо1

Memo1.Lines.Add('Моделирование закончено');

end;

 

 

procedure TForm1.OnOutputSim(Sender:TObject);

// Обработчик события OnOutput

var k: integer;

CurRev: integer;

S: string;

RelIncl: TFloat;

Begin

// Вывод результатов осуществляется в конце витка

if FSim.Method.CurIter mod FOrbSteps = 0 then

Begin

// Вычисляем номер текущего витка

CurRev:= Trunc(FSim.Method.CurIter/FOrbSteps);

// Вычисляем отношение текущего наклонения к начальному

RelIncl:= FSim.Model.State[5].AsFloat/FSim.Model.Xini[5];

// Форматируем строку для Memo1

S:= Format('%-10d %-10.4f %-10.4f',

[CurRev,FSim.Model.State[1].AsFloat, RelIncl]);

// Выводим строку в Memo1 и в файл результатов

Memo1.Lines.Add(S);

Write(FOut, CurRev:5);

for k:= 1 to 4 do

Write(FOut, FSim.Model.State[k].AsFloat:10:3);

Write(FOut, RelIncl:10:3);

Writeln(FOut);

end;

end;

 

 

procedure TForm1.OnStopSim(Sender:TObject; var Stop:boolean);

// Обработчик события симулятора OnStop

Begin

// Флаг FCancel = true, если пользователь нажал кнопку Cancel

// в процессе моделирования

Stop:= FCancel;

if Stop then

Memo1.Lines.Add('Моделирование прервано пользователем');

end;

 

procedure TForm1.bRunClick(Sender: TObject);

// Обработчик нажатия кнопки «Поехали»

Var

M: TOrbitModel;// Ссылка на мат. модель

R: TFloat; // Начальный безразмерный радиус

V: TFloat; // Начальная безразмерная скорость

Incl: TFloat; // Начальное наклонение

N: integer; // Число витков перелета

Begin

//Устанавливаем исходное состояние кнопок

bCancel.Enabled:= false;

bRun.Enabled:= true;

//Считываем индекс текущего метода из TComboBox

FMethodIndex:= cbMethod.ItemIndex;

// Создаем объект-симулятор и объект-модель

FSim:= TSimulator.Create;

M:= TOrbitModel.Create;

// Выбираем метод интегрирования

case FMethodIndex of

0: FSim.Method:= TEulerCauchy.Create;

1: FSim.Method:= TRungeKutta4.Create;

end;

FSim.Model:= M; // Передаем модель симулятору

// Считываем начальные условия из компонент TEdit

R:= StrToFloat(edRadius.Text);

Incl:= StrToFloat(edInclination.Text)*utToRad;

V:= 1/Sqrt(R);

M.Ini.AssignItems([R,0,V,0,Incl,0,0]);// Начальные условия

// Номинальное ускорение в Control

M.Control.Anom:= StrToFloat(edAccelerat.Text);

N:= StrToInt(edRevol.Text);// Число витков

FOrbSteps:= StrToInt(edOrbitSteps.Text);//Шагов на витке

// Присваиваем ссылки на обработчики событий симулятора

FSim.OnEnter:= OnEnterSim;

FSim.OnOutput:= OnOutputSim;

FSim.OnExit:= OnExitSim;

FSim.OnStop:= OnStopSim;

// Начальное время и шаг интегрирования

FSim.IniTime:= 0;

FSim.Step:= TwoPi/FOrbSteps;

// Блокируем кнопку Run и активируем кнопку Cancel

bCancel.Enabled:= true;

bRun.Enabled:= false;

// Запускаем процесс моделирования

FSim.SysTime:= N*TwoPi;

// Уничтожаем симулятор

FSim.Free;

// Восстанавливаем исходное состояние кнопок

bRun.Enabled:= true;

bCancel.Enabled:= false;

end;

 

procedure TForm1.bCancelClick(Sender: TObject);

// Обработчик события - нажатия на кнопку Cancel

Begin

FCancel:= true;

end;

 

 

procedure TForm1.FormCreate(Sender: TObject);

Begin

// Задаем метод интегрирования по умолчанию

cbMethod.ItemIndex:=0;

end;

end.

 


 

Литература

 

1. Федоров А.В. Моделирование сложных динамических систем в среде Delphi. МАИ, каф.604. 1999. (электронная версия имеется на сетевом сервере учебного процесса каф. 604 по адресу \\Education_Srv\Simulate1\DOC\Simulate Часть 1).

2. Рабочая программа практик для специальностей 1314, 0722.04 факультета 6. МАИ, каф.604, 2000

3. Спутниковые системы мониторинга. Анализ, синтез и управление/ В.В.Малышев, В.Т.Бобронников, М.Н.Красильщиков, О.П.Нестеренко, А.В.Федоров. – М. МАИ, 2000 586 с.

4. Управление и навигация искусственных спутников Земли на околокруговых орбитах./ М.Ф.Решетнев, А.А.Лебедев, В.А.Бартенев и др. –М.:Машиностроение, 1988 – 366с.

5. Канту М. Delphi 2 для Windows 95/NT. Полный курс в 2-х томах.

6. Р.Баас, М.Фервай, Х.Гюнтер. DELPHI 4. Киев, изд. Группа БXВ, 1999.

7. Э.Вазневич. DELPHI. Освой самостоятельно, Москва, Бином, 1996.

8. П.Дарахвелидзе, Е.Марков, DELPHI 4. С-Петербург, БXВ, 1999.

9. Лебедев А.А., Чернобровкин Л.С. Динамика полета беспилотных летательных аппаратов. Москва, Машиностроение, 1973.

 


 

Приложение 1. Варианты заданий.

 

№ Варианта Код № Варианта Код
1. ИСЗ-1 13. ИСЗ-13
2. ИСЗ-2 14. ИСЗ-14
3. ИСЗ-3 15. ИСЗ-15
4. ИСЗ-4 16. ИСЗ-16
5. ИСЗ-5 17. ИСЗ-17
6. ИСЗ-6 18. ИСЗ-18
7. ИСЗ-7 19. СПУСК-1
8. ИСЗ-8 20. СПУСК-2
9. ИСЗ-9 21. ПЛА
10. ИСЗ-10 22. ЗУР
11. ИСЗ-11 23. МАТРИЦА
12. ИСЗ-12 24.  

 

По номеру варианта определяется код задания. По коду задания определяется раздел из п.4 с постановкой и методом решения задачи.

 

Кафедра «Системный анализ и управление»

 
 

 


Старков А.В., Федоров А.В.

 

 



Поделиться:


Последнее изменение этой страницы: 2016-07-16; просмотров: 268; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.216.124.8 (0.37 с.)