Перейти до вмісту

Помилка Аріан 5

Матеріал з Вікіпедії — вільної енциклопедії.
Перший запуск
Зовнішній вигляд ракетоносія

Помилка у програмному забезпеченні ракети-носія Аріан 5 — помилка у програмному забезпеченні бортового комп'ютера, яка призвела до аварії ракети-носія Аріан-5 під час першого запуску 4 червня 1996 року. Ця помилка відома як одна з найдорожчих помилок в історії програмування[1].

Результати

[ред. | ред. код]

Ракету розробляли десять років, витративши 7 мільярдів доларів.

Ракета виводила на орбіту чотири супутники для дослідження магнітосфери Землі, загальною вартістю 370 мільйонів доларів. Місію цих супутників завершили лише в двохтисячному за допомогою ракетоносія «Союз».

Це спричинило сплеск у дослідженнях формальних методів проектування комп'ютерних систем, оскільки зацікавленість у них і, відповідно, фінансування збільшились.

Причина невдачі

[ред. | ред. код]

У програмі керування польотом ракети Аріан 5 використовувались фрагменти програмного забезпечення Аріан 4. Тестування роботи цього модуля було вирішено не проводити, оскільки він був запозичений з перевіреної, робочої програми. Проте під час переносу програмного забезпечення на нову ракету розробники врахували не всі особливості. Ракета мала дещо іншу траєкторію виходу на орбіту (більше прискорення), тому горизонтальна швидкість ракети вийшла за межі, які могла обробляти програма.

А саме, у програмі сталася помилка під час перетворення 64-розрядного числа з рухомою комою у 16-розрядне ціле. Надто велике значення дійсного числа не вмістилося в 16 розрядах, що спричинило переповнення.

Основний і резервний комп'ютери інерційної навігації мали однакову програму, таке резервування розраховане на захист від випадкових збоїв програм та несправностей апаратного забезпечення. Позаяк обидві програми працювали однаково, переповнення було отримане в обох комп'ютерах, після чого сопла повернулися під неправильним кутом. Сильні аеродинамічні тиски зруйнували корпус ракети, після чого спрацювала автоматична система самознищення.

Код[2] написаний на мові Ада:

...
declare
 vertical_veloc_sensor: float;
 horizontal_veloc_sensor: float;
 vertical_veloc_bias: integer;
 horizontal_veloc_bias: integer;
 ...
begin
 declare
 pragma suppress(numeric_error, horizontal_veloc_bias);     -- UBW aus
 begin
 sensor_get(vertical_veloc_sensor);
 sensor_get(horizontal_veloc_sensor);
 vertical_veloc_bias := integer(vertical_veloc_sensor);
 horizontal_veloc_bias := integer(horizontal_veloc_sensor); -- Оператор, що спричинив помилку
 ...
 exception
   when numeric_error => calculate_vertical_veloc();        -- код обробки помилки
   when others => use_irs1();                               -- у цьому випадку виконується...
 end;
end irs2;

Корисне навантаження

[ред. | ред. код]

Космічний апарат Cluster складався з чотирьох циліндричних, стабілізованих обертанням[en] супутників вагою 1200 кг, що мали живитись від сонячних батарей потужністю 224 Вт. Космічний апарат мав літати у формі тетраедра і мав на меті проводити дослідження магнітосфери Землі. Супутники були б розміщені на високоеліптичних орбітах на висоті від 17200 до 120600 км, нахилених під кутом 90 градусів до екватора.[3]

Примітки

[ред. | ред. код]
  1. Архівована копія. Архів оригіналу за 5 червня 2010. Процитовано 11 червня 2010.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  2. Архівована копія. Архів оригіналу за 17 серпня 2008. Процитовано 16 травня 2010.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  3. Krebs, Gunter. Cluster 1, 2, 3, 4, 5, 6, 7, 8. Gunter's Space Page. Процитовано 29 листопада 2011.

Посилання

[ред. | ред. код]