Аполлон 11. Старт с Земли (МК61)

| рубрика «Программы» | автор darth.righter
Метки: , ,

Очередная годовщина - повод снова засесть за пульт МК 61. Посадку лунного модуля и старт с Луны - задачи решённые, пора двигаться дальше.

А не замахнуться ли нам на Вильяма, нашего, Шекспира, подумалось мне. После некоторых размышлений, я решил попробовать смоделировать миссию с самого начала: со старта от мыса Канаверал и выхода на околоземную орбиту. Среди "ортодоксальных" космических программ КЭИ (Атмосфера 1, 2 и 3), стартовать с Земли можно только на первой.

На подобные подвиги редакция КЭИ не замахивалась, хотя в эпизоде 8 "Разбуди в апогее", где она использовалась, утверждалось, что Атмосфера 1 предназначена для численного моделирования различных маневров космических аппаратов (ВЗЛЁТ, выход на круговые и эллиптические орбиты, баллистический полет в атмосфере, снижение на парашютах, посадка) в непосредственных окрестностях планет, окруженных газовыми оболочками.

АТМОСФЕРА-1 (КЭИ)

00.Сх 01.ИПА 02.+ 03.ПА 04.ИП7 05.-
06.Fx<0 07.13 08.ИПВ 09./-/ 10.÷
11.БП 12.56 13.С/П 14.П8 15.П2 16.÷
17.ИП6 18.× 19.ИПВ 20.Fx2 21.ИП0
22.Fx2 23.+ 24.П9 25.÷ 26.ИП7
27.ИПА 28.- 29.ИП3 30.÷ 31.9 32.+
33.Fx<0 34.36 35.Сх 36.9 37.-
38.F10x 39.ИП1 40.× 41.- 42.ИПД
43.ИП8 44.- 45.Fx≥0 46.00 47.ПД
48.ИП5 49.+ 50.÷ 51.ИП9 52.F√
53.× 54.П9 55.ИП2 56.ИП9 57.ИПВ
58.ИПА 59.÷ 60.- 61.ИП0 62.× 63.×
64.ИП0 65.+ 66.П0 67.ПП 68.92
69.ИПА 70.÷ 71.Farcsin 72.ИПС 73.+
74.ПС 75.Fo 76.ИП0 77.Fx2 78.ИП4
79.ИПА 80.÷ 81.- 82.ИПА 83.÷
84.ИП9 85.ИПВ 86.× 87.+ 88.×
89.ИПВ 90.+ 91.ПВ 92.FВх 93.+
94.× 95.2 96.÷ 97.В/О

Регистры:

  • Р0 - V
  • P1 - Po*Sx/2
  • P2 - dt
  • P3 - H (характерный масштаб атмосферы)
  • Р4 - К (гравитационная постоянная планеты)
  • Р5 - сухая масса корабля
  • Р6 - скорость истечения топлива
  • Р7 - радиус планеты
  • Р8 - расход топлива
  • Р9 - служебный
  • РА - расстояние до центра планеты
  • РВ - U вертикальная
  • РС - угловая координата
  • РД - масса топлива

В принципе, взлететь на ней действительно можно. Можно даже попробовать выйти на орбиту. Для этого нужно в точке старта задать необходимое соотношение минимальных вертикальной и горизонтальной скоростей, соответствующих углу отклонения от вертикали примерно в 10 градусов. Далее траектория будет постепенно наклоняться к горизонту. В теории, можно подобрать такой начальный угол запуска, чтобы вертикальная скорость занулилась при достижении круговой скорости, что и будет соответствовать ситуации выхода на орбиту, но такая траектория будет значительно отличаться от траекторий, используемых на практике. Существенным недостатком Атмосферы-1 является невозможность управления вектором тяги. Кроме того, при полёте в атмосфере КЭИ рекомендует установить шаг по времени не более 5 секунд. Если учесть, что время работы только первых двух ступеней (160 + 360 секунд), количество операций составит порядка 100, что достаточно утомительно. Тут настоятельно необходим автопилот. Однако, свободных регистров у нас только один - РЕ! Похоже, что придётся выбирать - или автопилот, или коррекция вектора тяги. Использовать Рег.Т стека не получиться, его придётся задействовать для промежуточного хранения либо реактивного, либо аэродинамического ускорения.

В итоге, мне пришла в голову счастливая идея - совместить значение масштаба атмосферы и аэродинамический параметр корабля в одном регистре, используя целую и дробную части по отдельности. К целочисленному значению масштаба прибавляем величину, обратную аэродинамическому параметру. А для извлечения необходимой константы использовать штатные функции МК61 выделения целой или дробной части. Теперь всё сходится - можно пробовать писать код. В результате получился мой вариант программы:

АТМОСФЕРА-1

00.Сx   01.ПxA  02.+    03.xПA  04.Пx7  05.-    06.Fx<0 07.09   08.K-   09.FL1
10.18   11.Пx0  12.ПxB  13.÷    14.Ftgᐨ¹    15.С/П  16.xП3  17.xП1  18.Пx6  19.ПxD
20.Пx9  21.Пx2  22.×    23.-    24.Fx0 25.08   26.xПD  27.Пx5  28.+    29.÷
30.Пx9  31.×    32.Пx7  33.ПxA  34.-    35.ПxE  36.÷    37.F10ˣ 38.ПxE  39.K{x}
40.÷    41.Пx0  42.Fx²  43.ПxB  44.Fx²  45.+    46.F   47.×    48.Пx5  49.ПxD
50.+    51.÷    52.xП8  53.   54.Пx3  55.Fsin 56.×    57.ПxB  58.ПxA  59.÷
60.Пx8  61.+    62.Пx0  63.×    64.-    65.Пx2  66.×    67.Пx0  68.+    69.xП0
70.ПП   71.98   72.ПxC  73.+    74.xПC  75.   76.Пx3  77.Fcos 78.×    79.Пx8
80.ПxB  81.×    82.-    83.Пx0  84.Fx²  85.ПxA  86.÷    87.+    88.Пx4  89.ПxA
90.Fx²  91.÷    92.-    93.Пx2  94.×    95.ПxB  96.+    97.xПB  98.FВх  99.+
A0.2    A0.÷    A0.Пx2  A0.×    A0.В/О

Разбирая код Атмосферы-1, обратил внимание, что КЭИ постепенно ушли от программирования в стиле "спагетти", чем они увлекались поначалу. Мой итоговый код также достаточно прост.

  • 00 - 08: Вычисление высоты, при отрицательной высоте - аварийный останов. Посадочный блок отсутствует - да он тут и не нужен, на данном этапе "посадка" в любом случае -аварийная.
  • 09 - 10: автопилот
  • 11 - 14: вычисление угла наклона траектории - важный параметр, за которым приходится постоянно следить. Поскольку происходит деление на вертикальную скорость, её необходимо задавать отличную от нуля (тысячные доли м/с).
  • 15 - 17: штатный останов, при котором в рег.Х - угол отклонения траектории от вертикали, в рег.Y - высота. Манёвр задаётся несколько необычно: вектор тяги ПП кол-во циклов автопилота С/П.
    Шаг времени заносится предварительно в П2. Сделал так по подсказке Ajaja, действительно, пользоваться автопилотом в таком режиме гораздо удобнее. Расход топлива в секунду также заносится предварительно в П9. Этот параметр постоянный и определяется делением начальной массы топлива на время работы ступени, что примерно соответствует реальности. Впрочем, ничто не мешает менять его вручную перед каждым новым манёвром, не превышая максимально допустимого.
  • 18 - 31: расчёт реактивного ускорения. По адресу 24 - проверка уровня топлива. Если его не хватает - аварийный останов, сигнализирующий о необходимости отстрела очередной ступени. Переход на следующую ступень приходится делать "вручную" - меняя содержимое регистров 5, 6 и Д. Реактивное ускорение в дальнейшем цепляется за вершину стека, его величину можно смотреть в рег.Z при очередном останове.
  • 32 - 52: расчёт аэродинамического ускорения, делённого на курсовую скорость (хранится в дальнейшем в рег.8). Вертикальная и горизонтальная компонента торможения атмосферой считаются в дальнейшем простым умножением на U и V соответственно.
  • 53 - 74: Расчет горизонтальной скорости и смещения.
  • 75 - А4: Расчет вертикальной скорости и вертикального смещения.

По сравнению с Атмосферой 1 КЭИ, в рег.1 теперь счётчик автопилота, масштаб атмосферы и аэродинамический параметр корабля хранятся в рег.Е, а освободившийся рег.3 использован для хранения угла вектора тяги.

При работе с программой необходимо учитывать следующие ограничения:

  1. Максимальная высота орбиты - 1732 км. При большей высоте происходит аварийный останов по адресу 37.
  2. Вертикальная скорость не должна обращаться в ноль. В полёте, как правило, этого не происходит, главное - не забыть задать минимальную величину на старте.

А вот комплект исходных данных для старта:

  • 6371 ВП 3 П7 (радиус Земли)
  • Fx2 9.81 X П4 (гравитационная постоянная Земли)
  • ИП7 70 + ПА (начальная высота старта над уровнем моря)
  • 0 П0 ПС
  • 0.001 ПВ
  • 1 П1 (инициализация автопилота)
  • 1 П2 (шаг по времени. До высот 80 км не рекомендуется задавать больше 5 сек.)

Для первой ступени Сатурна-5, выводившего Аполлон на орбиту Земли, на основе данных приведённых в Вики, а также вот этого источника

  • 787400 П5 (сухая стартовая масса Аполлона 11)
  • 2580 П6 (удельный импульс) Для кислорода с керосином удельный импульс в вакууме составит примерно 3660 м/с (родные цифры из лунной эпопеи Кон-Тики!). Но в плотной атмосфере земли импульс уменьшается до указанных 2580.
  • 2155600 ПД
  • 17500 В1 173 F1/x + ПЕ (173 взят исходя из диаметра 13 м., коэфф.сопротивления принят за 2)
  • ИПД 162 / П9 (секундный расход топлива первой ступени) Эта величина соответствует максимальной тяге в 34343 кН у поверхности. В реальности, с набором высоты и падением давления тяга будет увеличиваться за счёт роста удельного импульса. Реализовать это средствами МК61 малореально. Выход я вижу только один - несколько увеличить величину импульса, по отношению к "нулевому". Насколько увеличивать - покажут пробные полёты...

Данные введены, нажимаем В/О С/П. На экране ноль - мизерная вертикальная скорость при нулевой горизонтальной, естественно, даёт нулевой угол отклонения от вертикали. В рег.Y - высота над уровнем моря (70 м).

Для старта вводим угол вектора тяги, ПП, количество циклов автопилота, С/П.

Пристегнулись и поехали!