«Техника-молодежи» 1987 №3, с.38-39

Консультант раздела
Герой Советского Союза,
летчик-космонавт СССР
Ю. Н. ГЛАЗКОВ

НА КРЫЛЬЯХ
НАД ПЛАНЕТАМИ

Герои рассказа Сергея Павлова, с которыми мы познакомились на стр. 58, летят на крылатом аппарате — аэре. Что здесь необычного? Ведь любой из нас может пойти в кассу Аэрофлота, купить билет и проделать аналогичное путешествие на крылатом летательном аппарате (только называться он будет по-иному: самолет). Необычно то, что перелет совершается на другой планете, атмосфера которой гораздо разреженнее, нежели земная. И возникает законный вопрос: возможно ли такое хотя бы в принципе? Поднимутся ли когда-нибудь рукотворные птицы в небо красной планеты?

Плотность атмосферы у поверхности Марса примерно на два порядка меньше, чем плотность земного воздуха на уровне моря. Иными словами, условия, с которыми встретится будущая марсианская авиация, примерно таковы, как на Земле на высотах 30–35 км, давно освоенных реактивными самолетами. Так что можно смело утверждать, аэры будут! Уже сейчас имеются детально разработанные проекты крылатых машин (пока, правда, беспилотных), предназначенных для обследования Марса с птичьего полета.

Но самолетное перемещение на крыльях — далеко не самая важная атмосферная операция для аэрокосмических аппаратов, с которыми мы привыкли иметь дело в КЭИ. Вход в атмосферу, аэродинамическое торможение; планирование, посадка на подходящую ровную площадку — вот те задачи, которые предстоит решать в первую очередь. С ними вполне справлялась программа «Атмосфера-2» («ТМ» № 4 за 1986 г.). И те из наших читателей, кто пробовал, воспользовавшись этой программой, совершить посадку на Марс, наверняка заметили: на больших высотах его атмосфера даже плотнее земной. Это объясняется тем, что сила тяжести на Марсе гораздо меньше и плотность марсианского воздуха убывает с высотой не так стремительно, как на нашей планете. Выражаясь языком специалистов, атмосфера Марса «мягче» земной.

Чтобы совершить посадку на Марс по программе «Атмосфера-2», нужно ввести в регистры 7 и 4 его радиус и гравитационную постоянную, увеличить раза в два с половиной — именно во столько тяжесть на Марсе меньше, чем у нас, — характерный масштаб атмосферы (примерно 45 ВП 3 П3) и уменьшить на два порядка содержимое регистра 1 (в него входит в качестве полноправного сомножителя плотность воздуха на нулевой высоте). И разумеется, изменить скорость входа (первая космическая для Марса составляет приблизительно 3,5 км/с). Правда, успешно посадить аппарат типа «Кон-Тики» на Марс вряд ли удастся — посадочная скорость будет чересчур велика. Для успешного завершения операции потребуется существенно увеличить площадь несущих поверхностей (содержимое регистра 6).

Многие читатели высказывают пожелание, чтобы в «Атмосферу-2» был вставлен блок, рассчитывающий нагрев спускаемого аппарата или перегрузки, действующие на его экипаж (а эти величины непосредственно связаны — чем сильнее торможение, тем больше нагрев). Можно ли это сделать? Программа и без того перегружена...

При крене спускаемого аппарата направленная вверх составляющая подъемной силы уменьшается.

Напомним: в «Атмосфере-2» использовалось управление по углу атаки. При его изменении менялось аэродинамическое качество аппарата (отношение подъемной силы к силе лобового сопротивления). У «Кон-Тики», кстати, максимум этой величины составлял примерно 2,5 (при угле атаки около 10°), приближаясь к аналогичной характеристике космических кораблей многократного использования.

К счастью, есть еще один, более простой способ управляемого спуска, широко используемый в практической космонавтике. Он основан на изменении угла крена аппарата с постоянным аэродинамическим качеством (см. рисунок). При наклоне аппарата составляющая подъемной силы, направленная вверх, уменьшается; при крене 90° она исчезает совсем. Возникает, правда, боковая сила, уводящая корабль в сторону от первоначальной траектории, но ее легко скомпенсировать, чередуя наклоны корабля вправо и влево. Формулы, получающиеся при таком способе управления, гораздо компактнее, чем использованные в «Атмосфере-2»; это позволяет освободить место для расчета полного аэродинамического ускорения. Таким образом, приходим к программе «Атмосферы-3»:


00.Сх 01.ИПА 02.+ 03.ПА 04.ИП7 05.- 06.Кx<09 07.ИПВ 08./-/
09.÷ 10.П2 11.ИП9 12.С/П 13.БП 14.55 15.П8 16.С/П 17.П2
18.Fcos 19.ИП6 20.× 21.ИП1 22.ИП8 23.ИП3 24.÷
25.F10x 26.÷ 27.ИПВ 28.Fx2 29.ИП0 30.Fx2 31.+ 32.F√
33.× 34.П8 35.FВх 36.× 37.ИП6 38.Fx2 39.1 40.+ 41.F√
42.× 43.ПД 44.XY 45.ИП8 46.× 47.ИП0 48.Fx2 49.F√
50.÷ 51.ИПА 52.F1/x 53.+ 54.П5 55.ИП0 56.ИП8
57.ИПВ 58.ИП5 59.× 60.+ 61.× 62.ИП2 63.× 64.-
65.П0 66.ПП 67.91 68.ИПС 69.+ 70.ПС 71.ИП0
72.Fx2 73.ИП5 74.× 75.ИПВ 76.ИП8 77.× 78.- 79.ИП4
80.ИПА 81.Fx2 82.÷ 83.- 84.↑ 85.ИП2 86.× 87.ИПВ
88.+ 89.ПВ 90.FВх 91.+ 92.ИП2 93.× 94.2 95.÷ 96.В/О

Блок-cxема программы «Атмосфера-3»

Как и ее предшественница, она предназначена для численного моделирования управляемого полета в атмосфере безмоторных летательных аппаратов. Исходные данные остаются практически прежними (начальное расстояние от центра планеты, м) ПА (начальная вертикальная скорость, м/с) ПВ (начальная горизонтальная скорость, м/с) П0 (начальное расстояние от какой-либо опорной точки, м) ПС (радиус планеты, м) П7 (характерный масштаб атмосферы, м) П3 (гравитационная постоянная планеты, м32) П4. Напомним, что последняя величина равна произведению квадрата радиуса планеты на ускорение силы тяжести на ее поверхности. В регистр 6 вводится — аэродинамическое качество аппарата (для кораблей «Союз» и «Аполлон» примерно 0,3, для «Шаттлов» и «Кон-Тики» — 2,5–3, для будущих марсианских аэров — раза в 2–3 больше). В регистр 1 — половина произведения коэффициента лобового сопротивления на площадь миделя аппарата (м2) и на плотность воздуха на нулевой высоте (кг/м3), разделенная на массу аппарата (кг). Наконец, в регистр 9 заносится сигнал о посадке: Е (1 К- ВП П9), или Е14 (114 ВП 99 ВП П9), или Е15 (115 ВП 99 ВП П9). Этот сигнал используется в качестве адреса условного перехода в команде, записанной по адресу 06. Перейти надо на адрес 15; Е и Е14 дают переход на адрес 14 (), число 55 воспринимается ПМК как код команды К1, функционально ничем не отличающейся от КНОП.

Работа с «Атмосферой-3» начинается командой В/О С/П. Переключатель Р-Г устанавливается в позиции Г. При останове на индикаторе загорается высота полета, она же находится и в регистре 8. Переменные в прежних ячейках. В регистр Y выводится полное вертикальное ускорение аппарата в м/с2; если оно близко к нулю, скорость спуска практически не меняется. А в регистре Д находится полное аэродинамическое ускорение, действующее на аппарат, в м/с2. 20 соответствует двойной перегрузке, 30 — тройной и т. д. Маневрировать нужно таким образом, чтобы эта величина была поменьше. Маневр задается командой: (время, с) ПП (угол крена, градусы) С/П. При крене 180° подъемная сила направлена точно вниз. При полете в атмосфере рекомендуется задавать время маневра не больше 5–10 с.

Блок-схема программы «Атмосфера-3» приведена на рисунке. Использованы следующие обозначения: h — текущая высота полета; R — текущее расстояние от центра планеты; R0 — радиус планеты; t — шаг по времени; Н — характерный масштаб атмосферы; ρ0 — плотность воздуха на нулевой высоте; ρ — текущая плотность воздуха; а — полное аэродинамическое ускорение; Сх — коэффициент лобового сопротивления; S — площадь миделя; М — масса аппарата; К — аэродинамическое качество; V — горизонтальная скорость; U — вертикальная скорость; ax — горизонтальное ускорение; ay — вертикальное ускорение; G — гравитационная постоянная планеты; x — расстояние от опорной точки. Индексами i+1 и i отмечены значения переменных на текущем и предыдущем шаге. В формулах для ускорений индексы опущены: в памяти ПМК нет места для хранения двух значений каждой переменной, приходится пользоваться тем, которое в данный момент «под рукой». Наконец, γ — угол крена.

В качестве полезного упражнения предлагаем совершить управляемый спуск в атмосфере Земли на аппарате типа «Кон-Тики». Исходные данные: 6371 ВП 3 П7 Fx2 9,81 × П4 17500 П3 5 ВП /-/ 4 П1 2,5 П6 1 К- ВП П9 6471 ВП 3 ПА 8400 П0 280 /-/ ПВ Сх ПС. Если посадку совершить не удастся — ничего страшного, сконструируйте собственный корабль (измените аэродинамическое качество и содержимое регистра 1). А потом можно приступать и к покорению других планет. Плотность на нулевой высоте для Марса примерно на два порядка меньше, для Венеры — раз в 50 больше, чем для земной атмосферы. А характерный масштаб атмосферы для Венеры можно считать совпадающим с земным. Задание КЭИ на этот раз трудное: сконструировать аэрокосмические аппараты для управляемого спуска в марсианской и венерианской атмосферах.

Новости
еггогологии

АНАЛИЗАТОР УСКОРЕНИЙ

Основной недостаток «Атмосферы-3», как и многих других игровых программ КЭИ, — недостаточно высокая зрелищность, работать приходится исключительно с цифрами. Да, перегрузка теперь рассчитывается и записывается в регистр Д, но что толку? ПМК никак не предупреждает пилота, что перегрузки превысили норму. Обладатели персональных компьютеров, которые переведут «Атмосферу-3» на свои языки высокого уровня, наверняка предусмотрят блок, который будет анализировать полное ускорение и выдавать на дисплей успокоительные фразы вроде: «Перегрузки!», «Не дрова везешь!», «Позвоните 03!» и, наконец, коронное: «От вас осталось мокрое место». А что может наш скромный программируемый калькулятор?

Как всегда, отчаиваться не будем. Прежде всего посмотрим, какие неиспользованные возможности остались в программе (для нашей базовой модели — Б3-34). В резерве одна команда. Вторую сэкономим за счет 43. ПД (ускорения записывать не будем, здесь разместится блок анализа перегрузок). Освободившийся регистр можно использовать для экономии еще одной ячейки программной памяти: например, записать туда адрес безусловного перехода, исполняемого командами 13–14, и заменить их одной КБПД. Четвертую ячейку можно освободить, перенеся В/О с адреса 97 на 00 (98); в этом случае, правда, придется вместо В/О С/П набирать в начале игры и при переходе к новому варианту Сх В/О С/П.

Итак, у нас есть четыре ячейки программной памяти. Как сконструировать автоматический анализатор перегрузок, которым можно заменить ПД (старый адрес 43)? Легко видеть, что простейший анализатор, состоящий из одной-единственной команды, — это F10x: если ускорение превысит 100 м/с2 (примерно десятикратная перегрузка), на индикаторе выскочит ЕГГОГ. Но такой анализатор слишком груб. А вот если обратиться к помощи «сверхчисел», пристыковав к показательной функции фрагмент Fx2 Fx2, знакомый нам по вылазкам в глубины «электронного океана», то получившийся блок будет формировать ЕГГОГ в диапазоне ускорений 25–50 м/с2, ЗГГОГ в диапазоне 50–75 м/с2, при дальнейшем же увеличении перегрузок на сцену выйдет известное из № 1 за 1986 год чудовище 4-го этажа, выводящее программу из строя. Остановить программу после формирования «сверхчисла» можно было бы с помощью стрелки вверх, но при этом содержимое регистра Y, вызывавшееся в «Атмосфере-3» командой 44.XY, переместится в следующий регистр и окажется вне досягаемости стековых команд. Как быть?

Владимир ТАЛАЛАЕВ из Киева иллюстрирует свои программы не только блок-схемами и сопроводительными текстами, но и тщательно выполненными рисунками, некоторые из которых мы воспроизводим.

Вспомним полезное свойство новых «пустых» команд, начинающихся с «пусто» и описанных в прошлом выпуске: они, по наблюдениям читателей, служат «стопом», если в регистре X находится «сверхчисло». Именно такая команда нам и нужна. Блок анализа перегрузок занял ровно четыре ячейки программной памяти!

После всех сделанных изменений получается программа с естественным названием «Атмосфера-4» (на адресе 43 дана последовательность для получения «пустой» команды с кодом «пусто — Г»):


00.В/О 01.ИПА 02.+ 03.ПА 04.ИП7
05.- 06.Кx<09 07.ИПВ 08./-/ 09.÷
10.П2 11.ИП9 12.С/П 13.КБПД 14.П8
15.С/П 16.П2 17.Fcos 18.ИП1 19.ИП8
20.ИП3 21.÷ 22.F10x 23.÷ 24.ИПВ
25.Fx2 26.ИП0 27.Fx2 28.+ 29.F√ 30.×
31.П8 32.FВх 33.× 34.ИП6 35.Fx2 36.1
37.+ 38.F√ 39.× 40.F10x 41.Fx2 42.Fx2
43.FАВТ В/О КППД FПРГ 44.XY
45.ИП6 46.× 47.ИП8 48.× 49.ИП0
50.Fx2 51.F√ 52.÷ 53.ИПА 54.F1/x 55.+
56.П5 57.ИП0 58.ИП8 59.ИПВ 60.ИП5
61.× 62.+ 63.× 64.ИП2 65.× 66.-
67.П0 68.ПП 69.93 70.ИПС 71.+ 72.ПС
73.ИП0 74.Fx2 75.ИП5 76.× 77.ИПВ
78.ИП8 79.× 80.- 81.ИП4 82.ИПА 83.Fx2
84.÷ 85.- 86.↑ 87.ИП2 88.× 89.ИПВ
90.+ 91.ПВ 92.FВх 93.+ 94.ИП2 95.×
96.2 97.÷ 98.В/О

На адресе 86 записана стрелка вверх; владельцы Б3-34 и МК-54 последнюю команду могут не ставить — адреса 98 и 00 у них, как известно, задублированы.

Перед работой с «Атмосферой-4» в регистр Д вводится адрес перехода 57 ПД, в регистр 9 — сигнал о посадке Е (1 К- ВП П9) или Е14 (114 ВП 99 ВП П9). В начале игры и при переходе к новому варианту следует скомандовать Сх В/О С/П. Константы и исходные данные те же, что и в программе «Атмосфера-3», результаты расчетов также получаются идентичными. Пока аэродинамическое торможение не превышает 25 м/с2, правила обращения с программой тоже остаются прежними. Напомним, кстати, что, как и в «Атмосфере-2», по адресу 50 в «Атмосфере-3» и по адресу 52 в «Атмосфере-4» производится деление на модуль горизонтальной скорости, поэтому для расчета чисто вертикального спуска обе программы непригодны. При появлении на индикаторе ЕГГОГа (перегрузка от 25 до 50 м/с2) надо нажать С/П; это как бы предупреждение пилоту: пора переходить в горизонтальный полет, траектория слишком крута. ЗГГОГ (перегрузка 50–75 м/с2) сигнализирует о серьезной опасности: чтобы избежать аварии, приходится ремонтироваться на ходу (ЗГГОГ передает управление на другой фрагмент программы и, кроме того, засоряет стек подпрограмм): Сх + 1 ВП 50 Fx2 Fx2 Сх В/О ПП В/О ПП БП 44 (или 40, 41, 42, 43) С/П. Но это сущие пустяки по сравнению с катастрофической ситуацией, когда перегрузка превышает 75 м/с2 (на индикаторе появляется испорченный фрагмент программы). В этом случае логично считать, что операция завершилась трагедией, ибо для продолжения полета придется сделать следующее: FПРГ ШГ влево Сх С/П FABT FПРГ ШГ влево ШГ влево (вписать две команды вместо Сх С/П) FABT + 1 ВП 50 Fx2 Fx2 Сх В/О ПП В/О ПП БП 44 (или 40, 41, 42, 43) С/П. К сожалению, при дальнейшем увеличении перегрузок (за 100 м/с2) происходит срабатывание «грубого» анализатора F10x на индикаторе появляется ЕГГОГ, поэтому ряд потенциальных эффектов (зануление регистра С, появление Тьмы) в данной программе использовать не удалось. А надо бы!

Кстати, для игр «со смертельным исходом», кроме вызова из какого-нибудь регистра заблаговременно записанной туда Тьмы (а этот способ применили некоторые читатели, приславшие свои модификации космических программ), можно воспользоваться предложением П. Кузнецова из Ленинграда: выполнить деление на знак «-», сформированный вручную (1 К- ВП П0 КИП0 КИП0 КИП0 КИП0 ИП0) или по программе: 00.↑ 01.Сх 02.XY 03.КНОП 04.ВП 05.С/П, на вход которой подается 9 (этот метод использован в программе В. Алексеева «Календарь»). После такого деления ПМК отказывается работать, но команды вызова из регистров действуют, так что можно проанализировать причины аварии.

НОВОЕ СВОЙСТВО ЗГГОГа

В № 12 за 1986 год в переписке администрации КЭИ с конструктором первой шахматной программы Н. Авдеевым вскользь говорилось о нестандартном обращении со стеком подпрограмм (а его содержимое, напомним, определяет адреса, на которые передает управление команда В/О). При отладке анализатора ускорений выяснилось, что самый простой и надежный путь к господству над этим стеком дают ЗГГОГи, другие полезные свойства которых освещались в № 1 за 1986 год.

Введем в ПМК мини-программу 00. В/О, вернемся в режим АВТ и посмотрим, как исполняется эта команда. Если сделать В/О ПП и перейти в режим ПРГ, убедимся, что управление передалось на адрес 01. Так и должно быть: в начальном положении стек подпрограмм заполнен нулями. Если же в программе встречается обращение ПП или КПП, в стеке записывается его адрес и стоящая в конце подпрограммы команда В/О передает управление на адрес, следующий за этим обращением (он на единичку больше записанного в стеке числа.) Если в подпрограмме содержится обращение к другой подпрограмме, в стек записывается новый адрес, а старый сдвигается в его глубину. Максимальное число подпрограмм, которые можно вложить одна в другую наподобие матрешек, для наших ПМК равно пяти. Поэтому стек подпрограмм в заполненном виде проще всего представить себе в виде десятизначного числа, каждая пара цифр в котором является адресом, предшествующим тому, на который передает управление команда В/О. Например, если стек заполнен комбинацией 3141592653, то В/О при первом исполнении передаст управление на адрес 32 (31 + 1), при втором — 42 (41 + 1), при третьем — 60 (59 + 1), при четвертом — 27 (26 + 1), при пятом — 54 (53 + 1). При исчерпании заданных адресов стек подпрограмм полностью заполняется последней цифрой бывшей в нем комбинации (в нашем случае приобретает вид 3333333333), теперь команда В/О всегда будет передавать управление на один и тот же адрес (скажем, 34 = 33 + 1). Именно поэтому вне подпрограмм она дает возможность переходить не только на адрес 01, но и на 12, 23, 34, 45, 56, 67, 78, 89 и А0. Об этом говорилось в позапрошлом выпуске КЭИ.

Какое отношение ко всему этому имеет ЗГГОГ? Как выяснилось, самое непосредственное. Сформируем 1 ВП 50 Fx2 Fx2 и умножим на какое-нибудь целое число, допустим, 12345. Сбросив теперь ЗГГОГа (Сх), с помощью нашей мини-программы и нехитрой процедуры В/О ПП FПРГ FABT В/О ПП FПPГ FABT и т. д. без труда убедимся, что цифровая комбинация в стеке подпрограмм приобрела вид 4012345000, где первая цифра на единичку меньше числа знаков выбранного нами сомножителя (4 = 5 - 1), на втором месте располагается 0, а дальше следует само число 12345. И команда В/О передает управление последовательно на адреса 41, 13, 35, 51, а затем на 01.

К аналогичным результатам пришел и студент МВТУ С. Федотов, обнаруживший также, что смена знака мантиссы ЗГГОГа приводит к увеличению на 9 первого адреса возврата.

Именно на этом свойстве ЗГГОГа основан использованный в программе «Атмосфера-4» способ очистки засоренного при превышении допустимого ускорения стека подпрограмм. Цифровая комбинация в нем после команд 1 ВП 50 Fx2 Fx2 приобретает вид 0010000000, после первого В/О ПП происходит переход на адрес 01, после второго — на 11 и стек очищается. Кроме того, появилась реальная возможность в широких пределах управлять действием команды В/О. Если нужно, допустим, чтобы она при работе вне подпрограмм обеспечивала переход на адрес 78, достаточно в режиме АВТ скомандовать 1 ВП 50 Fx2 Fx2 77777777 × Сх, передать управление на адрес, где в программе располагается В/О, и нажать ПП. Первый переход, адрес которого (71) связан с длиной мантиссы ЗГГОГа, исполнен, в стеке остались одни семерки, и команда В/О обречена «до конца дней своих» (то есть до выключения ПМК или формирования следующего «сверхчисла») передавать управление на выбранный нами адрес.

Для расширения области применения рассмотренного приема полезно было бы научиться формировать ЗГГОГи, мантисса которых включает не только цифры, но и шестнадцатеричные символы Е, Г и т. д. В этом случае, в частности, легко было бы обеспечить «постоянные» переходы командой В/О на адреса побочных ветвей В1 (стек подпрограмм должен быть заполнен символом «-»), С2 (соответственно буквой L), Г3 (буквой С), Е4 (буквой Г), «пусто — 5» (буквой Е) и, возможно, 06 (символом «пусто»).

К счастью, существует простая процедура получения таких ЗГГОГов, обнаруженная С. Пуховым. Чтобы ею воспользоваться, следует прежде всего сформировать и упрятать в какой-либо регистр «пустышку» (Сх ÷ ВП ПД), затем прочистить стек (нажать несколько раз стрелку вверх) и получить каким-нибудь из уже рассмотренных в КЭИ способов нужную буквенно-цифровую заготовку. Скажем E00000EE (1 ВП 55 Fx2 Fx2 Fx2 ИПС ИПС ВП 6 П7 КИП7 ИП7 К- ВП КНОП). Теперь нужно проделать следующее: вызвать из регистра «пустышку» (ИПД), отдать какую-нибудь команду, код которой начинается с двойки, допустим, Fx2 (код 22; если код операции начинается с тройки, вместо ЗГГОГа получится чудовище 4-го этажа, а если с единицы — ЕГГОГ, в обоих случаях с требуемой мантиссой), затем Сх XY. На индикаторе — нужный нам ЗГГОГ. Можно записать его в какой-нибудь регистр, а затем «расшифровать» по известному алгоритму (П9 Сх ИП9 FABT точка КНОП). Мантисса ЗГГОГа, как видим, равна нашей буквенно-цифровой комбинации, а первые две цифры порядка совпадают с кодом команды, с помощью которой он был образован. Содержимое же стека подпрограмм приобрело вид 00E00000EE.

Михаил ПУХОВ


«Техника-молодежи» 1987 №3, с.38-39