Skip to content
 

«Фобос-грунт»: американцы, конечно, ни при чём…

Раз по «Фобосу» получилась серия, буду ставить номера предыдущих постов: 1

Братцы, ну некогда мне ставить картинки! Ну что вы, на «Фобос-грунт» не насмотрелись? Вам же интереснее читать мои умные тексты, чем разглядывать чужие глупые картинки, да?

***

Не получилось у меня зайти в с воё КБ. Как раз в те дни, когда это можно было сделать, я болел…

Так что никакой «подкожной» информации по «Фобосу» у меня нет.

Однако ж с удовольствием обращаю ваше внимание на то, что моё предположение – алгоритмическая ошибка – стало ныне ведущей версией причины краха экспедиции.

Терпеть не могу слова «миссия»! Те, кто его повторяет вслед за англосаксами, не хотят брать во внимание то, что в русском языке у этого слова была своя ниша, своё употребление с вполне конкретной смысловой, даже эмоциональной нагрузкой.

А может, не знают? Вполне допускаю, что многие, действительно, и не знают.

А про это мы говорили не «миссия к Марсу», а «полёт к Марсу». И всё было нормально. Так говорили Циолковский, Королёв… Но нет, теперь будем попугайствовать: «миссия»… Будем говорить «симулятор» вместо «имитатор», хотя у нас «симуляция» тоже имеет вполне определённый, так сказать, освящённый временем смысл… «тесты» вместо «испытания» (это я про лётные)…

Ладно, проехали. Говорю вам, я очень раздражительный.

***

Про «Фобос-грунт». Пишут, что это программная ошибка. Ну, в общем, правильно, но я бы всё же говорил – алгоритмическая.

Пишут, что процессор «был перегружен». Интересно, в каком смысле?

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

По времени как оно может быть?

Бортовая ЦВМ обычно работает в цикле. Скажу сразу: если вычислительный процесс без цикла, свободный, то я просто не знаю, как можно реализовать процессы стабилизации и управления с гарантированным результатом. Не имеет значения, если программа построит вам график на 0,1 сек позже. Но если на 0,1 сек задержится процесс стабилизации, то можно потерять аппарат. Всё, что я видел в нашем КБ, работало с циклом. Не знаю, как работают другие бортовики, но думаю, что с циклом работают все.

Цикл – это промежуток времени, когда должны начаться и закончиться все необходимые в данный момент вычисления. Цикл задаётся немаскируемым прерыванием – сигналом от внешнего источника, который бортовая ЭВМ (принято писать: БЦВМ) не может ни отменить, ни «не заметить». По этому сигналу всё приходит в некое начальное состояние. Точнее, управление процессами в БЦВМ передаётся в точку входа программы-диспетчера верхнего уровня. Она последовательно вызывает подчинённые ей диспетчеры следующего уровня… но это как-нибудь в другой раз.

Вариант цикла (упрощённо).

В начале цикла идёт опрос датчиков. Потом – предварительная и комплексная обработка информации от них. Потом информация раскладывается по буферам всех программных подсистем, которым она нужна, и диспетчер начинает в установленном порядке вызывать на обработку эти подсистемы. Он не знает, закончилась данная программа или нет. В записанный момент времени он просто передаёт управление следующей по очереди программе. Кто не спрятался, я не виноват… Потому что если некая программа зависнет, и диспетчер прервёт её, не дав закончиться, то это каюк этой программе. Что может оказаться и не опасным, и совсем безвредным – в следующем цикле отработает нормально. А вот если диспетчер будет её ждать, то он уже никого больше не запустит. Каюк всем, сливайте воду.

Совсем не обязательно, чтобы в цикле работали все имеющиеся подсистемы. Например, информацию для стабилизации обязательно нужно считать в каждом цикле, а для траекторного управления достаточно в каждом десятом. Так же не обязательно в каждом цикле формировать весь объём телеметрии, и он раскладывается на несколько циклов. Ну, и так далее. В конце цикла идёт выдача команд на органы управления.

Цикл – штука короткая. У огромного утюга «Бурана» он составлял около 33 мс (миллисекунд), у крылатых ракет он в разы меньше, потому что они менее инерционны, чаще нужно следить за положением в пространстве и корректировать его, иначе потеряешь управление.

Ну вот, если неаккуратно распорядиться с циклом, то какая-то программка не досчитает. В этом цикле не досчитает, в следующем, в позаследующем… сливайте воду.

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

Написали алгоритм, проверили его на 20 контрольных примерах с разными наборами исходных переменных. Увидели: занимает максимум 312 мкс (микросекунд). Выделили в цикле 350. А оказалось, что существует такое сочетание переменных, что нужно аж 420… сливайте воду.

Это алгоритмическая ошибка: неправильно сделан диспетчер.

А вот как может быть по памяти.

Тот же итерационный алгоритм. Допустим, нам нужно хранить все промежуточные решения. Не знаю, зачем это может быть нужно, принял просто для примера.

Люди 20 лет программируют это уравнение. За 20 лет убедились, что бывает максимум 138 промежуточных результатов, выделили под них зону памяти на 200 слов – буфер. Но оказалось, что в этом конкретном случае набор констант уравнения таков, что сходимость вычислений более медленная, то есть для получения заданной точности нужно больше повторений. Работает алгоритм, работает… занял все 200 ячеек и пошёл дальше. А дальше – область памяти для другой программы. И он затирает чужие данные.

Начинает работать та программа. Заходит в свою область памяти, читает, с её точки зрения, абракадабру… сливайте воду.

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

Чисто программная ошибка может быть, но, на мой вкус, вероятность меньше: сейчас все эти трансляции автоматизированы, а синтаксические ошибки ловятся на самых ранних этапах отработки, без которых никогда не обходятся, ни при какой спешке.

***

Теперь повторюсь. Была спешка. При спешке много думать некогда. Вот и недодумали каких-то испытаний, которые могли бы отловить ошибку.

Может, кто-то и додумал, но не было времени. Хотелось бы его провести, а ещё вот это, и это… Сели большие головы, погоревали о цейтноте, подумали и согласовали перечень испытаний.

В который нужное не вошло.

***

Следующее по хронологии вот здесь.

6 комментариев

  1. DGN:

    со времен Бурана однако процы стали на 2 порядка шустрее, да и память сильно емче. так что не факт что там стояла БЦВМ по таким вот военным нормам, когда циклы микросекундами считают и память байтами… я совсем не удивлюсь если стоит там проц архитектуры ARM и некий «специально обученый линукс», который вовсе не RTS-OS, да и программа к нему совсем не на ASMе, а на какой-нибудь прости-господи JAVA-машине… и что забрать процессорное время очень даже можно…

  2. Roman:

    Досада. Ну ведь если такая спешка, если понятно что велик риск ошибок наделать, так упритесь в резервные каналы, в алгоритмы перезаливки ПО, в всязь надежную, ведь можно исправлять ошибки …
    Досада.

    • Роман-75:

      А может, это уже проявления системного кризиса? И не только в космонавтике?..

    • master:

      Э-э-э-э, на той стадии, когда стало ясно — вот дедлайн! — ни шиша уже сделать было нельзя. Нужно быть Драйзером, чтобы описать, что это за работа — делать космический аппарат от первой технической записки до 20-тонной металлической дуры из без преувеличения миллионов деталей.

      А надёжная связь в данном конкретном случае не помогла бы. Он же не смог не то что держать — даже построить солнечную ориентацию. Это капец, пока будут на земле искать ошибку, доказывать, что это именно она, думать, как устранить, потом программировать, потом отрабатывать в автономе на контрольных примерах, потом на стенде матмоделирования, потом на полунатуре, потом на комплексном… Всё, аккумуляторы сядут, никакая связь не поможет.

      Хотя… Наши с Казсатом-1 что-то подобное делали. Два раза его воскрешали. Но тут, думаю, дело было в высоте орбиты. У «Казаха» был запас времени. Он случайно повернётся под солнышко — с него какую-никакую телеметрию возьмут. Он опять отвернётся, впадёт в кому, а ребята пока на земле пар из ушей пускают, думают, проверяют. Опять повернулся — что-то в него записали… Это уже без меня было. Но, если я правильно понял, там даже алгоритм управления резервами БЦВМ сменили! Но вот, говорю: у Казаха был запас высоты = времени…

Написать отзыв

CAPTCHA изображение
*