Ошибки мировой космонавтики
Шрифт:
Однако через некоторое время она снова была введена. Видимо, капелька припоя или мелкая деталь отвалилась и замыкала тумблер, которым эта программа вводится в компьютер. Обычный сброс в таком случае не сработает, так как закоротить может уже при посадке. Было бы очень обидно из-за этой ошибки после проделанной работы остаться ни с чем. Для решения проблемы программиста лунного модуля Дональда Айлза буквально вытащили из постели (было около 4 часов ночи по местному времени), и за оставшееся время нужно было написать и оттестировать патч, который позволил бы отключить аварийную систему при посадке с возможностью снова активировать ее позже. И еще должно было остаться время на отправку и ввод кода астронавтами. В итоге код был написан и состоял всего из нескольких строк. Астронавты записали код под диктовку во время сеанса радиосвязи и ввели в бортовой компьютер корабля.
За столь короткое время нельзя было переписать всю программу. Патч обманул систему, так что та решала, что аварийная отмена посадки уже началась и последовательность действий для разворота уже не требуется. Также патч реализовывал новые настройки, чтобы посадка могла продолжаться в штатном режиме. Правда, теперь если бы что-то пошло не так, аварийная программа
Частая проблема, с которой сталкиваются программисты-новички на Земле, – это переполнение. Когда в памяти хранится больше информации, чем она может вместить, программа аварийно завершает работу. Такую ошибку допускали и программисты космических систем. Так произошло на станции «Мир». Причин было несколько. Во-первых, еще во время подготовки программисты не успели настроить и испытать новый компьютер «Салют-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б» был первым с нового космодрома «Восточный». Ранее эти ракеты-носители уже неоднократно запускались с космодрома Байконур и прекрасно себя показывали. Программное обеспечение тестировалось и проверялось в течение двадцати лет. Однако ошибка при этом пуске возникла. Дело в том, что Восточный находится севернее Байконура. Угол, под которым ракета стартует относительно
Еще одна ошибка с неверно введенной информацией была допущена во время эксперимента по лазерной локации миссии шаттла «Дискавери 51-G». На корабле был установлен уголковый отражатель – своего рода зеркало. На наземной станции на горе Халеакала имелся мощный лазер. Луч света должен был пройти путь от него, отразиться от корабля и вернуться назад. Ученые могли определить время движения лазерного луча и, умножив его на скорость света и разделив пополам, вычислить расстояние до шаттла с очень высокой точностью. Однако шаттл должен был развернуться к горе так, чтобы ученые лазером могли попасть в зеркало. Он этого не сделал, так как в компьютер ввели неверную высоту обсерватории. Было загружено значение 9000, что, в общем-то, верно, если измерять в футах, но бортовой компьютер считал в морских милях (9000 футов = 2,743 км, 9000 миль = 16 668 км). Отражатель на шаттле был направлен в сторону космоса, а не в сторону вершины горы. В следующий раз ошибку астронавты исправили, и ученые смогли попасть лазером в шаттл.
Следующая ошибка тоже совершена человеком. В рамках миссии шаттла «Колумбия STS-87» планировалось запустить спутник Spartan-201. Это было сделано, но только во время подготовки астронавт Чаула Каплана забыла включить компьютер системы управления на борту аппарата. Чтобы исправить свою ошибку, она попробовала специальным манипулятором поймать спутник, пока он далеко не улетел. Однако здесь ждала еще одна ошибка. Программа роботизированной руки предполагала включение захвата только в определенном положении. Каплана запустила манипулятор преждевременно и вместо того чтобы поймать Spartan-201, она его толкнула. Тот раскрутился. Теперь аппарат не только невозможно было поймать, но он стал еще и представлять опасность для корабля. На время астронавты от него отлетели. Через несколько дней была разработана спасательная операция. У. Скотт и Т. Дои вышли в открытый космос и поймали спутник руками. Это оказалось несложно, так как аппарат угомонился и практически перестал вращаться за счет системы стабилизации, а в невесомости массу спутника в одну тонну можно легко удерживать. Однако возник вопрос, а что делать дальше? Астронавты почти час просто держали спутник в руках, пока не получили дальнейшие указания. Скотт позже пошутил: «Мне пришлось задержаться, чтобы прихватить спутник. Я буду дома к ужину». В итоге астронавты потратили на операцию времени в десять раз больше запланированного.
В космонавтике, разумеется, нужно все предусматривать и дублировать. Но, как говорится в пословице, у семи нянек дитя без глазу. Для первого полета шаттла «Колумбия» инженеры разработали систему с четырьмя компьютерами IBM AP-101, которые дублировали друг друга. Важный момент: все четыре работали по одной и той же схеме. У инженеров возникло опасение, что если в основе проектирования компьютеров была допущена ошибка, то они могут все выйти из строя. Было предложено простое решение – добавить пятый компьютер, работающий иначе, чем все остальные. Он должен будет взять управление в случае выдачи других команд от IBM AP-101. Вот только оказалось, что он как раз работает неправильно. В его программе с самого начала работы стояла функция задержки, которая не давала процессору перегружаться задачами. На остальных компьютерах такой задержки не было. Рассинхронизация по времени привела к рассинхронизации результатов расчетов. Поскольку результаты работы четырех основных БЦВМ отличались от результатов резервной, то все системы переключились именно на резервную вычислительную машину, которая работала медленно и неверно. Хорошо, что это обнаружилось еще во время подготовки. Проблема была в том, что задержка незначительная, но с каждой секундой полета она становилось бы больше. Во время предустановочных испытаний на стендах инженеры проблему не нашли, но благодаря длительным тестам ошибка успела накопиться и стать заметной за несколько часов до старта. Если бы программисты сбросили и перезапустили компьютер перед стартом, как это обычно и бывает, то ошибку обнаружили бы только после аварии. В данном случае единственной проблемой была задержка, которая привела к тому, что первый в истории старт шаттла выпал на 12 апреля, годовщину первого пилотируемого полета в космос. Исправление представляло собой схему голосования «три из пяти», то есть системы корабля будут работать от трех и более синхронизированных компьютеров.