Лабораторные работы (2009) (Сатурн-5_РДО_док)

Посмотреть архив целиком

Оглавление

Постановка задачи 2

Описание предметной области 3

Описание имитационной модели 4

Типы ресурсов 4

Ресурсы 5

Операции 6

Интерфейс 7

Выполнение 8

Статистика 8

Приложение 9





Постановка задачи



Реализовать в системе имитационного моделирования РДО следующую ситуацию:

Имеется ракета-носитель Сатурн-V. Промоделировав ситуацию вертикального взлета ракеты, выяснить при каком расходе топлива первой ступени ракета достигнет максимальной высоты.

Сатурн V

Масса ракеты

3083,5 тонн

Длина

110.6 м

Диаметр

10.1 м

Количество ступеней

3

Производство

США

Масса полезной нагрузки


- на НОО

118 тонн

- на траекторию к Луне

65 тонн



Первая ступень

S-IC

Вторая ступень

S-II

Третья ступень

S-IVB



S-IC

Маршевые двигатели

5 Х F-1

Тяга

33400 кН

Удельный импульс

2600 м/с

Время работы

150 с

Горючее

Керосин

Окислитель

Жидкий кислород





Описание предметной области



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

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

Законы движения ракеты при работающем двигателе даются уравнениями механики тел переменной массы.

Второй закон Ньютона запишется так:

.

где f- сопротивление воздуха, М- тяга, µ - масса топлива, кг/с расходуемого ракетой в секунду и g – гравитационная постоянная, м/с2.


Сопротивлением воздуха мы можем пренебречь, а g считать постоянной равной 9,8 м/с2.


Из уравнения Ньютона мы видим, что в зависимости от времени ускорение изменяется по закону:


Таким образом, в качестве примера, график а(t) можно представить так :






Таким образом: V(t) - скорость и H(t) – высоту можно считать как интеграл от заштрихованной области ( мы будем высчитывать методом трапеций, , где i – это тек. значение t).



Описание имитационной модели


Типы ресурсов



В файле типов ресурсов есть описание двух основных типов ресурсов.


$Resource_type Ракета : permanent

$Parameters

ускор_пред : real [-1..100] = 0 {ускорение в пред. сек., м в сек^2}

скор_пред : real [-1..100000] = 0 {скорость в пред. сек., м в сек}

высота_пред : real [-1..35786000] = 0 {высота в пред. сек., м}


ускор_тек : real [0..100] = 0 {ускорение, м в сек^2}

скор_тек : real [0..100000] = 0 {скорость, м в сек}

высота_тек : real [0..35786000] = 0 {текущая высота(местоположения,орбиты) над Землей, м,

НОО-низкая опорная орбита - 250км,

ГПО-геопереходная орбита - от 250км до 35786км,

ГСО-геостационарная орбита - 35786км}

м_общ : real [0..10000000] {масса всей ракеты в целом, кг, ступени+топливо+полезн.груз}

время_полета : real [0..40000] = 0 {специальное время для координации отхода ступеней}

состояние : (на_старте,зажигание,взлет,падение,отстрел_1й_ступени) = на_старте

{состояние ракеты}

$End


$Resource_type Ступень_ракеты : permanent

$Parameters

тяга : real [0..40000000] = 0 {тяга в Ньютонах}

м_сух : real [0..50000] {масса сухая - т.е. без топлива, только конструкции, кг}

м_топл : real [0..10000000] {масса топлива, кг}

расх_топл : real [-20000..50000] {расход топлива,по умол 14893 хороший расход, кг в сек}

время_раб : real [0..600] {время работы двигателей, сек}

высота_тек : such_as Ракета.высота_тек {текущая высота ступени над Землей, м,

ступень может еще и падать}

состояние : ( выключена , зажигание, работает) = выключена {состояние ступени}

отстрелена : (да1, нет1) {прозведен отстрел или нет}

$End


В комментариях описаны все параметры.

Два ресурса выбрано, Ракета и Ступень_ракеты, т.к. нам можно при желании моделировать не только подъем, но и отбрасывание ступени(3х ступеней), а также их постепенное падение на землю.

Ускор_пред, скор_пред,высота_пред – дополнительные параметры нужные для вычислений методом трапеций.

Время_раб – время работы двигателей, счетчик убывающий каждую секунду.



Ресурсы


Используется два постоянных ресурса: Ракета1 и Ступень1, т.к. нам не нужно моделировать больше одной ступени.


$Resources

Ракета1 : Ракета -1 -1 -1 0 0 0 3083500 0 на_старте

{ускор_пред,скор_пред,высота_пред,ускор_тек,скор-тек,высота_тек,

масса всей ракеты(включая все! ступени),время_полета,состояние}


Ступень1 : Ступень_ракеты 33400000 41955 2037526 14893 150 0 выключена нет1

{тяга,масса_сухая,масса_топлива,расход_топлива,время_работы,

высота_текущая,состояние_ступени,отстрелена}

$End


Операции


В файле с операциями описаны несколько операций:


  • Обратный_отсчет – те приготовления, которые всегда необходимо сделать при запуске ракеты (в нашем случае поменять состояния ракеты и первой ступени сначала на зажигание, потом на взлет (для ракеты) и работает (для ступени) )

  • Расчет_характеристик_ракеты – те расчеты, которые необходимо снимать и записывать в показания состояний ракеты и ступени(ускорение, скорость, высота, масса оставшегося топлива и т.д.).

  • Изменить_расход_топлива – то, что необходимо по заданию, чтобы определить оптимальное количество топлива нужное для максимального подъема в высоту ракеты.

  • Отстрел_ступени – те, приготовления, которые необходимо сделать, когда первая ступень выработала свое время или топливо.


$Operations

Обратный_отсчет : Образец_Обратный_отсчет

Расчет_характеристик_ракеты : Образец_Расчет_характеристик_ракеты

Изменить_расход_топлива : Образец_Изменить_расход_топлива 'UP' 1000

Изменить_расход_топлива : Образец_Изменить_расход_топлива 'DOWN' -1000

Отстрел_ступени : Образец_Отстрел_ступени

$End



Интерфейс



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



Здесь, показан момент окончания работы модели, с теоретическими показателями.

Все параметры легко обозримы.




Выполнение

Model_name = saturn_5


Resource_file = saturn_5 {.rss}

OprIev_file = saturn_5 {.opr}

Statistic_file = saturn_5 {.pmd}

Results_file = saturn_5 {.pmv}

Trace_file = saturn_5 {.trc}

Frame_file = saturn_5 {.frm}

Frame_number = 1

Show_mode = Animation {NoShow}

Show_rate = 2500.0


Terminate_if Time_now >= 150.0


Если Show_rate выставить равным 350, то можно практически по секундам просмотреть подъем ракеты.

Статистика



Меняя значения µ - расхода топлива, мы получили следующую таблицу результатов.

Расход топлива, кг/с

Достигнутая высота, м

8893

35048

10893

42550,1

12893

51528,7

14893

45030,1

16893

35210,8



Вывод очевиден, для нашей первой ступени S-IC оптимальным является расход топлива равный .





Приложение

Объекты констант, функций и последовательностей

$Constant

{берем g=9.8,

а вообще, км - g}

g : real = 9.8 {0км - 9.8066м/с^2}

{10км - 9.7759м/с^2}

{50км - 9.65м/с^2}

{100км - 9.55м/с^2}

$End


$Function Выч_ускор_рак : real {ускорение ракеты в зависимости от времени}

$Type = algorithmic {меняется по закону (F/(M - (y*t))) - g}

$Parameters

t : real {время}

M : real {масса ракеты}

F : real {тяга}

y : real {масса топлива расходуемая ракетой в секунду}

$Body

Calculate_if y=0 Выч_ускор_рак = 0.0000000001

Calculate_if y>0 or M>0 or t>=0 Выч_ускор_рак = ((F/(M - (y*t))) - 9.8)

Calculate_if y<0 or M<=0 or t<0 Выч_ускор_рак = 0 {защита от неправильных значений}


{пример запроса Выч_ускор_рак(1,_р1.м_общ,_ст1.тяга,_ст1.расх_топл)}

$End


Образцов операций

$Pattern Образец_Обратный_отсчет : operation trace

$Relevant_resources

_р1 : Ракета1 Keep Keep

_ст1 : Ступень1 Keep Keep

$Time = 0.1

$Body

_р1

Choice from _р1.состояние=на_старте

first

Convert_begin

{три параметра ускор_пред,скор_пред,высота_пред заданы по умолч = 0}

ускор_тек set Выч_ускор_рак ( 0 , _р1.м_общ , _ст1.тяга , _ст1.расх_топл )

{называется а0 - ускорение в начальный момент времени}

{два параметра скор_тек,высота_тек заданы по умолч = 0}

{параметр м_общ задана в rss}

время_полета set 0

состояние set зажигание

Convert_end

состояние set взлет


_ст1

Choice NoCheck

first

Convert_begin

{тяга - тягу можно изменять меняя расх_топл}

{м_сух - неизменна}

{м_топл - изменяется каждую секунду, м_топл=м_топл - расх_топл(в данный момент) }

{расх_топл - задан в rss,можно менять клавишами, соответственно рез-т будет +- 1000 кг/сек}

{время_раб}

высота_тек set 0

состояние set зажигание

Convert_end

состояние set работает

{не отстрелена}

$End


$Pattern Образец_Расчет_характеристик_ракеты : irregular_event trace

$Relevant_resources

_р1 : Ракета1 Keep {Keep}

_ст1 : Ступень1 Keep {Keep}

$Time = 0.1

$Body

_р1

{Choice from _р1.состояние=взлет and _ст1.состояние=работает }

{first

Convert_begin}

Convert_event trace

ускор_пред set _р1.ускор_тек

скор_пред set _р1.скор_тек

высота_пред set _р1.высота_тек

{остальные параметры меняются ниже}

{состояние - взлет}

{Convert_end}

ускор_тек set Выч_ускор_рак(1,_р1.м_общ,_ст1.тяга,_ст1.расх_топл)

{в зависимости от времени ускорение изменяется по закону

а(t)=(тяга/(м_общ - расх_топл*t)) - g,

в нашем случае мы просто вычисляем ускорение на отрезках от t-1 до t,

в качестве t берется значение 1, а из м_общ вычитается расх_топл на каждом отрезке}

скор_тек set ( ((_р1.ускор_пред + _р1.ускор_тек) / 2) + _р1.скор_пред )

высота_тек set ( ((_р1.скор_пред + _р1.скор_тек) / 2) + _р1.высота_пред )

м_общ set _р1.м_общ - _ст1.расх_топл

время_полета set _р1.время_полета + 1


_ст1

{ Choice NoCheck

first

Convert_begin}

{тяга - тягу можно изменять меняя расх_топл}

{м_сух - неизменна}

{м_топл - изменяется каждую секунду}

{расх_топл - задан в rss,можно менять клавишами,

соответственно рез-т будет +- 1000 кг/сек}

{Convert_end}

Convert_event trace

м_топл set _ст1.м_топл - _ст1.расх_топл

время_раб set _ст1.время_раб - 1

высота_тек set _р1.высота_тек

{состояние - работает, не отстрелена}


$End

$Pattern Образец_Изменить_расход_топлива : keyboard trace

$Parameters

_величина_изм : such_as Ступень_ракеты.расх_топл

{на какую величину хотим изменить расход топлива,

в rss описано +- 1000 кг/сек}

$Relevant_resources

_ст1 : Ступень1 Keep Keep

$Time = 0.1

$Body

_ст1

Choice from _ст1.состояние=работает or _ст1.состояние=выключена

first

Convert_begin

Convert_end

расх_топл set _ст1.расх_топл + _величина_изм

{можно менять расход и у не начавшей движение ракеты, и у уже отработавшей}

{величина изменений - велич_изм}

$End


$Pattern Образец_Отстрел_ступени : operation trace

$Relevant_resources

_р1 : Ракета1 Keep Keep

_ст1 : Ступень1 Keep Keep

$Time = 0.1

$Body

_р1

Choice from _ст1.м_топл < 0 or _ст1.время_раб < 0

first

Convert_begin

состояние set отстрел_1й_ступени


Convert_end


_ст1

Choice from _ст1.м_топл < 0 or _ст1.время_раб < 0

first

Convert_begin

состояние set выключена

отстрелена set да1

Convert_end

$End


Кадров анимации

$Frame Кадр_1


$Back_picture = <255 255 0> s5backgrnd

Show

bitmap [10, 100, Apollo_15, Apollo_15_msk]

text [300, 100, 100, 15, <255 200 255>, <0 0 0>, = 'Saturn-5']

{ bitmap [, , ]

text [, , , , <255 255 255>, <0 0 0>, = ]

}

Show


{ блок вывода данных о ракете, размер}

text [200, 200, 150, 15, <255 255 255>, <0 0 0>, < 'Ускорение,м/с^2']

text [200, 220, 150, 15, <255 255 255>, <0 0 0>, < 'Скорость,м/с']

text [200, 240, 150, 15, <255 255 255>, <0 0 0>, < 'Высота,м']

text [200, 260, 150, 15, <255 255 255>, <0 0 0>, < 'Масса топлива,кг']

text [200, 280, 150, 15, <255 255 255>, <0 0 0>, < 'Расход топлива,кг/с']

text [200, 300, 150, 15, <255 255 255>, <0 0 0>, < 'Время полета,с']

text [200, 320, 150, 15, <255 255 255>, <0 0 0>, < 'Состояние ракеты']

text [200, 340, 150, 15, <255 255 255>, <0 0 0>, < 'Состояние 1й ступени']

Show_if Ракета1.высота_пред <> Ракета1.высота_тек

text [320, 200, 150, 15, transparent {<255 200 255>}, <0 0 0>, > Ракета1.ускор_тек]

Show_if Ракета1.высота_пред <> Ракета1.высота_тек

text [320, 220, 150, 15, transparent {<255 200 255>}, <0 0 0>, > Ракета1.скор_тек]

Show_if Ракета1.высота_пред <> Ракета1.высота_тек

text [320, 240, 150, 15, transparent {<255 200 255>}, <0 0 0>, > Ракета1.высота_тек]

Show_if Ракета1.высота_пред <> Ракета1.высота_тек

text [320, 260, 150, 15, transparent {<255 200 255>}, <0 0 0>, > Ступень1.м_топл]

Show_if Ракета1.высота_пред <> Ракета1.высота_тек

text [320, 280, 150, 15, transparent {<255 200 255>}, <0 0 0>, > Ступень1.расх_топл]

Show_if Ракета1.высота_пред <> Ракета1.высота_тек

text [320, 300, 150, 15, transparent {<255 200 255>}, <0 0 0>, > Ракета1.время_полета]

Show_if Ракета1.высота_пред <> Ракета1.высота_тек

text [320, 320, 150, 15, transparent {<255 200 255>}, <0 0 0>, > Ракета1.состояние]

Show_if Ракета1.высота_пред <> Ракета1.высота_тек

text [320, 340, 150, 15, transparent {<255 200 255>}, <0 0 0>, > Ступень1.состояние]


$End


Случайные файлы

Файл
143091.rtf
96849.rtf
168874.rtf
85201.rtf
104554.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.