За многими системами ракет-носителей человек уследить не может. Ими управляют компьютеры. Пока вычислительные машины были большого размера, инженеры использовали радиосвязь. Датчики регистрировали состояние ракеты или космического корабля. Информация передавалась на Землю. Компьютер обрабатывал данные и отправлял команды на борт. Позже для лунных пилотируемых программ инженеры разработали небольшие компьютеры для космической техники – бортовые центральные вычислительные машины (БЦВМ).
В их работе тоже было много нештатных ситуаций. Одна из них стала известна как «самый дорогой дефис в истории». «Маринер-1» была грандиозной миссией, основной задачей которой должен был стать полет автоматического зонда к Венере. Для обеспечения надежности помимо ручного управления по радиосвязи с Земли имелось программное обеспечение на борту для контроля курса. Старт начинался согласно плану, но на третьей минуте полета аппарат потерял синхронизацию радиосигнала с Землей. Как раз на этот случай и был предусмотрен автоматический контроль траектории. На «Маринере-1» автоматика не работала, и отклонение от курса возрастало. Когда стало понятно, что компьютер не исправит положение, во избежание неуправляемого падения ракеты было принято решение ее взорвать. Промежуток времени, когда полет к Венере возможен, достаточно мал, так что нужно было быстро найти неисправность и устранить ее, чтобы следующий аппарат «Маринер-2» работал исправно. Ошибку искали интенсивно и достаточно быстро нашли, но не одну. Во-первых, антенна наведения оказалась недостаточно мощной. Прием сигнала был неустойчив и несколько раз прерывался. Программа на борту «Маринера-1» стала игнорировать команды, едва различимые среди шума или приходящие с опозданием. В программе корректировки, как оказалось, была опечатка. Писавший пропустил макрон, или надчеркивание. Этот символ отвечал за работу функции сглаживания при расчете траектории. Если отклонения ракеты-носителя от курса были небольшими, программа должна была их пропускать и не учитывать. У руля есть конкретный минимальный шаг поворота, и, соответственно, он может изменить траекторию на определенный угол. Если отклонение ракеты-носителя меньше, чем угол, на который ракета-носитель может повернуться, то исправление траектории не поможет, а может даже ухудшить ситуацию. Так и произошло. Без сглаживания, обозначаемого макроном, автоматика воспринимала нормальные небольшие отклонения как очень серьезные, что вызывало лишние поправки, которые сбивали ракету с курса еще больше. На «Маринере-2» эту ошибку исправили оперативно, и вторая попытка совершить полет на Венеру была успешной.
Еще одна ошибка имела место во время полета корабля «Аполлон-14». Эта миссия состоялась после сложнейшего аварийного полета «Аполлона-13», и потому ее готовили с удвоенной ответственностью. На борту имелась система экстренного возвращения, которая разворачивала корабль в сторону Земли при нажатии «кнопки паники». За полтора часа до расчетного включения двигателя для осуществления посадки астронавты приступили к плановой проверке бортового оборудования. Она показала, что в компьютер введена программа запуска аварийного прекращения посадки, как будто кнопка была нажата. Согласно этому коду, «Аполлон-14» должен был со всеми работающими системами пролететь мимо своей цели. Астронавты Алан Шепард, Стюарт Руса и Эдгар Митчелл сбросили команду.
Однако через некоторое время она снова была введена. Видимо, капелька припоя или мелкая деталь отвалилась и замыкала тумблер, которым эта программа вводится в компьютер. Обычный сброс в таком случае не сработает, так как закоротить может уже при посадке. Было бы очень обидно из-за этой ошибки после проделанной работы остаться ни с чем. Для решения проблемы программиста лунного модуля Дональда Айлза буквально вытащили из постели (было около 4 часов ночи по местному времени), и за оставшееся время нужно было написать и оттестировать патч, который позволил бы отключить аварийную систему при посадке с возможностью снова активировать ее позже. И еще должно было остаться время на отправку и ввод кода астронавтами. В итоге код был написан и состоял всего из нескольких строк. Астронавты записали код под диктовку во время сеанса радиосвязи и ввели в бортовой компьютер корабля.
За столь короткое время нельзя было переписать всю программу. Патч обманул систему, так что та решала, что аварийная отмена посадки уже началась и последовательность действий для разворота уже не требуется. Также патч реализовывал новые настройки, чтобы посадка могла продолжаться в штатном режиме. Правда, теперь если бы что-то пошло не так, аварийная программа не сработала бы. Астронавты должны были вручную контролировать тягу двигателя. В итоге все сработало, но только Алану Шепарду пришлось 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-битными числами. Проблема появилась во время конвертации. Программный модуль заметил ошибку в никому не нужном расчете и отключился. Резервный компьютер тоже наткнулся на невозможное число и, как и первый, прекратил работу. После этого двигатели стали получать хаотические команды развернуть ракету-носитель. Та потеряла балансировку и развалилась. Это была одна из самых дорогих по финансовым потерям авария.