Насколько дорогой может быть явка целочисленного переполнения, ну 7 миллиардов долларов.

Начинать. 37 секунд полета. КаБУМ! 10 лет и 7 миллиардов долларов превращаются в пыль.

Во всем виноваты программисты.

4 июня 1996 года четыре спутника Кластерной научной программы (исследование взаимодействия солнечной радиации и магнитного поля Земли) и ракета-носитель тяжелого класса Ариан-5 превратились в конфетти.

Небольшая предыстория:

Ariane 5 — европейская одноразовая ракета-носитель тяжелого класса, входящая в семейство ракет Ariane. Он используется для доставки полезных грузов на геостационарную переходную орбиту (GTO) или низкую околоземную орбиту (LEO), может запускать два-три спутника и до восьми микроспутников одновременно.

Ariane 4 был успешно запущен более 100 раз. Что может пойти не так?

Видимо, чтобы покорить космос, нужно хорошо знать язык Ада.

Технические подробности аварии

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

Дублирование оборудования использовалось для обеспечения надежности систем управления полетом. Таким образом, параллельно работали две системы ИИИ (одна — активная, другая — резервная) с одинаковым аппаратным и программным обеспечением. Как только бортовой компьютер обнаруживал, что «активный» ИРС вышел из штатного режима, он тут же переключался на другой. Также было два бортовых компьютера.

Последовательность полета

За 7 минут до запланированного старта было обнаружено нарушение «критерия видимости». Поэтому запуск отложили на час.

LT (время запуска) = 9 часов. В 33 мин. 59 сек. по местному времени «пусковое окно» снова «поймали» и, наконец, машина запустилась и работала в штатном режиме до LT+37 секунд.

В следующие несколько секунд произошло резкое отклонение ракеты от заданной траектории, закончившееся взрывом.

На LT+39 секунд из-за высокой аэродинамической нагрузки из-за «угла атаки», превышающего 20 градусов, стартовые ускорители отделились от ее основной ступени, что привело к срабатыванию системы автоуничтожения ракеты.

Изменение угла атаки произошло из-за сбоя в вращении сопла твердотопливных ускорителей, вызванного командой бортового компьютера на основе информации от активной навигационной системы (ИРС 2).

Встроенный компьютер IRS2 передавал неверные данные, потому что диагностировал нештатную ситуацию, «поймав» исключение, выброшенное одним из программных модулей.

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

«Ошибка операнда» произошла из-за неожиданно большой величины горизонтального смещения, оцененной внутренней функцией на основе значения «горизонтальной скорости», измеренного датчиками платформы.

Величина горизонтального смещения служила индикатором точности позиционирования платформы. Величина оказалась намного больше, чем ожидалось, поскольку траектория полета «Ариан-5» на начальном этапе существенно отличалась от траектории полета «Ариан-4» (где ранее использовался этот программный модуль), что привело к значительному более высокая «горизонтальная скорость».

Исследователям удалось воспроизвести эту цепочку событий с помощью компьютерного моделирования, в сочетании с другими материалами исследований и экспериментов, что позволило им сделать вывод о том, что причины и обстоятельства аварии полностью установлены.

Заключение

Дефект на Ariane 5 был результатом нескольких факторов. При разработке и тестировании было много этапов, на которых дефект мог быть обнаружен.

  • Программный модуль был повторно использован в новой среде, где условия функционирования существенно отличались от требований программного модуля. Эти требования не были пересмотрены.
  • Система идентифицировала и обнаружила ошибку. К сожалению, спецификация механизма обработки ошибок была неподходящей и привела к окончательному разрушению.
  • Ошибочный модуль так и не был должным образом протестирован в новой среде — ни железо, ни уровень системной интеграции. Поэтому недостатков в разработке и реализации не обнаружено.