Найти тему
The Geek Wolf

Ariane Flight 501 // самые дорогие 40 секунд из истории европейской космонавтики

Оглавление

Это довольно старая история. И вы, возможно, ее хорошо знаете. Но для меня она по-прежнему весьма показательна и интересна.

Общая канва

Вторник, 4 июня 1996 года. Европейское космическое агентство (European Space Agency) отправляет в полет свою новую тяжелую ракету Ariane 5. Задача у этого чуда техники простая, хотя и недешевая. «Грузовик» должен доставить на орбиту Земли группировку из четырех дорогих научных спутников.

jam.dev
jam.dev

Ракета без астронавтов мощно уходит в небо. И через 40 секунд возвращается на Землю в виде горящих обломков, оставшихся после мощного взрыва. Это настоящая катастрофа для ESA. Взрыв буквально разнес вдребезги десять лет тестов и миллиарды евро, вложенные в строительство и запуск Ariane 5. Не говоря уже о спутниках.

Понятно, что расследование инцидента началось немедленно. В найденную комиссией причину катастрофы, постигшую суперсовременную на то время ракету, сначала никто не хотел верить. Но факты — упрямая вещь. И сегодня уже никто не сомневается, что огромную и дорогую космическую ракету «уронила» на Землю небольшая строчка старого программного кода, оставшегося от миссии Ariane 4, закончившейся задолго до того, как произошел роковой запуск Ariane Flight 501.

jam.dev
jam.dev

Подробности

Когда ракета пошла на взлет, ее положение в пространстве стала контролировать специальная система, рассчитывающая курс движения Ariane 5 и соответствие этого курса оптимальной траектории движения. Для достижения этой цели система управления преобразует показания скорости из 64-битного числа с плавающей запятой в 16-битное целое число со знаком. Эксперты объясняют, что с этого и начались все проблемы.

Следящая система не смогла штатно перевести 64-битное с число с плавающей запятой. Произошло это потому, что ответ оказался больше максимально возможного 16-битного целого числа. Обычно в случае так называемого переполнения встроенная система имеет определенные протоколы, помогающие ей справиться с проблемой. Однако в нашей истории следящая система получила несколько сообщений об ошибке и отключилась. Резервная система ничем не помогла, так как работала на том же коде, что и главная. Получив точно такие же сообщения об ошибках, резервная система «прилегла» рядом с основной.

Без кода для обработки исключений основному компьютеру ничего не оставалось как принять полученные навигационные данные за чистую монету. И теперь он уверен, что Ariane Flight 501 значительно сбилась с курса. Для компенсации отклонения компьютер, основываясь на ложных данных, врубает ускорение на полную. Двигатель выдает огромную аэродинамическую нагрузку на конструкцию ракеты, та не выдерживает и разрушается. В создавшихся обстоятельствах компьютер для минимизации ущерба от падения огромной ракеты отдает приказ на самоликвидацию. Зрители наблюдают фейерверк, а €500 миллионов взлетают на воздух.

jam.dev
jam.dev

Вывод

Если коротко, то он звучит так:

Ariane 5, чей первый полет готовился около 10 лет, продержалась в воздухе всего 40 секунд из-за старой строчки кода, пытавшейся преобразовать 64-битное число с плавающей запятой в 16-битное целое число со знаком. Возникло так называемое переполнение, которое было интерпретировано главным компьютером как реальные данные. Оборудование прекрасно себя показало на ракетах серии Ariane 4, которые были значительно меньше по размеру. Ariane 5 же изначально была резвее и мощнее своей предшественницы. Более высокая скорость привела к ошибке. Но самое печальное, как отмечают эксперты,  в этой истории заключается в том, что все операции с кодом в принципе должны были происходить на этапе выравнивания ракеты на стартовом столе! И когда небольшой сбой задержал физический старт ракеты на пару-тройку секунд, запускающие инженеры решили, что нет смысла в том, чтобы перезапускать всю систему и терять драгоценные минуты. Ну погоняет компьютер старый код еще пару десятков секунд, с него не убудет. И получилось то, что получилось …