ь ее позже. И еще должно было остаться время на отправку и ввод кода астронавтами. В итоге код был написан и состоял всего из нескольких строк. Астронавты записали код под диктовку во время сеанса радиосвязи и ввели в бортовой компьютер корабля.
За столь короткое время нельзя было переписать всю программу. Патч обманул систему, так что та решала, что аварийная отмена посадки уже началась и последовательность действий для разворота уже не требуется. Также патч реализовывал новые настройки, чтобы посадка могла продолжаться в штатном режиме. Правда, теперь если бы что-то пошло не так, аварийная программа не сработала бы. Астронавты должны были вручную контролировать тягу двигателя. В итоге все сработало, но только Алану Шепарду пришлось 61 раз нажимать на одну и ту же клавишу.
Частая проблема, с которой сталкиваются программисты-новички на Земле, – это переполнение. Когда в памяти хранится больше информации, чем она может вместить, программа аварийно завершает работу. Такую ошибку допускали и программисты космических систем. Так произошло на станции «Мир». Причин было несколько. Во-первых, еще во время подготовки программисты не успели настроить и испытать новый компьютер «Салют-5Б». Так как руководителям было важно запустить станцию к XXVII съезду КПСС, приняли решение использовать более старый компьютер от предыдущих станций, а новый доработать в процессе. Второй момент – к 1991 году базовому блоку станции было уже пять лет, а гарантийный срок станции составлял три года. В-третьих, к станции в это время летел новый модуль «Квант-2», и БЦВМ «Аргон-16» была занята еще и процессом сближения. В итоге память переполнилась, и силовые гироскопы, стабилизирующие комплекс, были отключены. Космонавты Викторенко и Серебров вручную стабилизировали станцию. Правда, стыковку все равно осуществить удалось не сразу. Только через пять дней к станции присоединился новый модуль. Чуть позже на борту появился и новый компьютер «Салют-5Б». Когда к станции подсоединились еще модули, он стал сбоить. Сложность станции росла быстрее, чем производительность и надежность ее БЦВМ. Особенно много проблем появилось после аварии блока «Спектр» (о ней подробнее рассказано в главе «Давление»). Тем не менее «Мир» на орбите проработал пятнадцать лет и в пять раз превысил заявленный срок службы.
Похожую проблему испытал корабль «Аполлон-11» во время первой в истории пилотируемой посадки на Луну. Уже у самой поверхности спутника командир Нил Армстронг доложил на Землю о выдаче компьютером ошибки и отключении вычислительной системы. Вручную с большой точностью контролировать тягу двигателя посадки было невозможно. Но на Земле астронавтам ответили, что можно продолжать ход миссии. Эта ошибка возникла из-за того, что Армстронг неверно задал работу радара, который раз за разом записывал информацию для расчетов в память компьютера.
Нужно понимать, что в 1969 году компьютеры, которые могли поместиться в лунный модуль, имели не очень большой объем данных. 36 864 слова влезало в постоянную память, и 2048 слов – в оперативную. Очень быстро записывать новые данные стало некуда, и компьютер их все стер и пошел на перезагрузку. Из постоянной памяти важные задачи были восстановлены, а радар начал работать в другом режиме. За 600 метров до посадки, почти у самой поверхности, когда скорость лунного модуля уже была относительно небольшой, после нескольких подряд ошибок переполнения Армстронг перестал доверять компьютеру и взял управление на себя. Посадка у него удалось, но на опасной грани: запаса топлива осталось меньше 5 %.
Если в прошлых случаях компьютер пасовал из-за того, что было много чисел, то в случае первого полета ракеты-носителя «Ариан-5» с четырьмя спутниками Cluster проблема заключалась в том, что число было одно, но слишком большое. Ошибка произошла из-за неожиданно сильного горизонтального смещения. Программное обеспечение и логика работы ракеты-носителя перешли по наследству от прошлой версии «Ариан-4». В них было заложено предельно возможное значение горизонтальной скорости ракеты. Для хранения этого значения в памяти выделялось 16 бит информации, то есть в памяти могли храниться 2 в 16 степени (или 65 536) значений. В данном случае это числа от –32 768 до +32 767. Однако «Ариан-5» была мощнее, и ее траектория полета отличалась от траектории полета предыдущей ракеты-носителя. Значение горизонтальной скорости ракеты-носителя оказалось больше 32 767. Это дало ошибку. Сложилась ситуация, которая возникает при очень большом пробеге автомобиля. Счетчик на панели может показывать максимальное число 9999, но когда машина проезжает 10 000 км, значение сбрасывается. Водитель видит, что пробег составляет всего 1 км. В случае с «Ариан-5» получилось невозможное число, которое привело к серьезным последствиям. Самое неприятное, что этот расчет для новой ракеты-носителя вообще не требовался. Если бы его не было вовсе, на полете это никак не сказалось бы. Однако устаревший программный код никто не удалил. Тем временем цепочка проблем была запущена. Приборы на борту регистрировали данные в формате 64-битных чисел, а бортовой компьютер работал с 16-битными числами. Проблема появилась во время конвертации. Программный модуль заметил ошибку в никому не нужном расчете и отключился. Резервный компьютер тоже наткнулся на невозможное число и, как и первый, прекратил работу. После этого двигатели стали получать хаотические команды развернуть ракету-носитель. Та потеряла балансировку и развалилась. Это была одна из самых дорогих по финансовым потерям авария.
Похожая проблема имела место во время старта ракеты-носителя «Союз-2.1б» с 19 спутниками в 2017 году. Только число было не огромное и в память компьютера вполне влезало, проблема в другом. Для начала рассмотрим детскую загадку. Медведь прошел на север 1 км, затем на юг 1 км, а потом на восток 1 км и оказался в том же месте, откуда стартовал. Какого цвета медведь? Ответ: белый, а ситуация произошла на Северном полюсе. При вращении и движении на сфере работают совершено иные математические принципы расчета, нежели при движении на плоскости. Это сложнейшая проблема, и она успешно решается автоматическим системами, но не в тот раз. Старт «Союза-2.1б» был первым с нового космодрома «Восточный». Ранее эти ракеты-носители уже неоднократно запускались с космодрома Байконур и прекрасно себя показывали. Программное обеспечение тестировалось и проверялось в течение двадцати лет. Однако ошибка при этом пуске возникла. Дело в том, что Восточный находится севернее Байконура. Угол, под которым ракета стартует относительно Земли, соответственно, тоже другой. При пуске с Байконура ракета-носитель должна так огибать Китай, чтобы ее ступени не падали на территории этого государства. При старте с Восточного это не требуется. В итоге после запуска разгонный блок вышел на опорную орбиту. Основным спутником в связке из 19 аппаратов был «Метеор-М» № 2–1. Его задачей являлись метеорологические наблюдения. Для этого спутнику требуется выйти на солнечно-синхронную околополярную орбиту – это орбита, при нахождении на которой спутник будет совершать целое число оборотов вокруг планеты за сутки, то есть через сутки возвращаться в то же положение относительно Земли и Солнца. При этом в каждом своем обороте «Метеор-М» № 2–1 должен был пролетать от полюса к полюсу. Условий много. Просуммировав все углы из базы данных, одна автоматическая система рассчитала, что для выхода на нужную орбиту аппарату нужно выполнить поворот на угол в 362°. Другая система, используя данные не из памяти, а от солнечных датчиков, определила, что после разворота на 2° можно начитать другие маневры. С точки зрения математики повороты на 362° и на 2° приведут в одно и то же положение, однако в первом случае требуется совершить целый лишний полный оборот (360°), без которого прекрасно можно обойтись во втором случае. После ориентации двигатель разгонного блока должен был включиться и отправить спутники на запланированную для них орбиту, но сделал он это, пока спутники еще не успели повернуться полностью. Разгонный блок зафиксировал необходимый угол в 2° и дал команду, но не учел, что связка еще продолжает вращаться. В результате неправильной ориентации маневр оказался не разгоняющим, а тормозящим (см. главу «Орбиты, инерция и гравитация»). Спутники полетели назад на Землю. В случае с космодромом Байконур эта ситуация была бы невозможной, так как он южнее и сумма углов не могла быть больше 360°. Поэтому ошибку не находили в течение двадцати лет. Да и в случае с Восточным инженеры тоже не сразу могли разобраться с проблемой. Если бы старт был в другое время года или в другое время суток, угол между Солнцем и выведенным спутником был бы иным и проблемы бы тоже не возникло.
Еще одна ошибка с неверно введенной информацией была допущена во время эксперимента по лазерной локации миссии шаттла «Дискавери 51-G». На корабле был установлен уголковый отражатель – своего рода зеркало. На наземной станции на горе Халеакала имелся мощный лазер. Луч света должен был пройти путь от него, отразиться от корабля и вернуться назад. Ученые могли определить время движения лазерного луча и, умножив его на скорость света и разделив пополам, вычислить расстояние до шаттла с очень высокой точностью. Однако шаттл должен был развернуться к горе так, чтобы ученые лазером могли попасть в зеркало. Он этого не сделал, так как в компьютер ввели неверную высоту обсерватории. Было загружено значение 9000, что, в общем-то, верно, если измерять в футах, но бортовой компьютер считал в морских милях (9000 футов = 2,743 км, 9000 миль = 16 668 км). Отражатель на шаттле был направлен в сторону космоса, а не в сторону вершины горы. В следующий раз ошибку астронавты исправили, и ученые смогли попасть лазером в шаттл.
Следующая ошибка тоже совершена человеком. В рамках миссии шаттла «Колумбия STS-87» планировалось запустить спутник Spartan-201. Это было сделано, но только во время подготовки астронавт Чаула Каплана забыла включить компьютер системы управления на борту аппарата. Чтобы исправить свою ошибку, она попробовала специальным манипулятором поймать спутник, пока он далеко не улетел. Однако здесь ждала еще одна ошибка. Программа роботизированной руки предполагала включение захвата только в определенном положении. Каплана запустила манипулятор преждевременно и вместо того чтобы поймать Spartan-201, она его толкнула. Тот раскрутился. Теперь аппарат не только невозможно было поймать, но он стал еще и представлять опасность для корабля. На время астронавты от него отлетели. Через несколько дней была разработана спасательная операция. У. Скотт и Т. Дои вышли в открытый космос и поймали спутник руками. Это оказалось несложно, так как аппарат угомонился и практически перестал вращаться за счет системы стабилизации, а в невесомости массу спутника в одну тонну можно легко удерживать. Однако возник вопрос, а что делать дальше? Астронавты почти час просто держали спутник в руках, пока не получили дальнейшие указания. Скотт позже пошутил: «Мне пришлось задержаться, чтобы прихватить спутник. Я буду дома к ужину». В итоге астронавты потратили на операцию времени в десять раз больше запланированного.