Шрифт:
Закладка:
Частая проблема, с которой сталкиваются программисты-новички на Земле, – это переполнение. Когда в памяти хранится больше информации, чем она может вместить, программа аварийно завершает работу. Такую ошибку допускали и программисты космических систем. Так произошло на станции «Мир». Причин было несколько. Во-первых, еще во время подготовки программисты не успели настроить и испытать новый компьютер «Салют-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°), без которого прекрасно можно обойтись во втором случае. После ориентации двигатель разгонного блока должен