Напомним, что аппарат «Луна-25» был запущен 11 августа 2023 года (первый запуск российского аппарата на Луну с 1976 года). Он должен был отработать процесс посадки в околополярной области спутника Земли и проверить лунный грунт на наличие в нем водного льда.
Посадка была запланирована на 21 августа 2023 года, но за два дня до нее пропала связь с аппаратом. Затем двигатели не отключились, и «Луна-25» столкнулась со спутником на полной скорости.
Внутреннее расследование крушения, видимо, закончено – «Роскосмос» нашел вероятную причину сбоя:
«Установлено, что наиболее вероятной причиной аварии стало нештатное функционирование бортового комплекса управления. Оно было связано с тем, что блок акселерометров в приборе БИУС-Л (блок измерения угловых скоростей) не включился из-за возможного попадания в один массив данных команд с различными приоритетами».
В результате, как объяснили в «Роскосмосе» в комплекс управления аппарата приходили «нулевые сигналы», из-за чего «зафиксировать момент набора требуемой скорости» не получилось. В итоге двигатели продолжили работать.
Мнения программистов
«...не провели для программного обеспечения базовый (!) тест на ноль и конфликт приоритетов? Это умеют делать даже самые примитивные программы для автоматического тестирования. Такие примитивные ошибки совершают ну максимум на первом курсе вуза», – удивляется Zloy Marketolog.
Но большинство программистов говорят, что это очень непонятное объяснение и, возможно, PR-менеджер «Роскосмоса» не так понял, что ему объяснял программист «Роскосмоса».
Перевод на «программистский» язык и обратно на русский
Мы обратились к нашим разработчикам, чтобы они перевели это объяснение «Роскосмоса» обратно на «программистский», а редакторы выкрутили бы их объяснение обратно на русский. Помогает backend-разработчик TexTerra Денис Скрипицын, но с оговоркой, что он, как и все прочие, не знает специфики работы бортового оборудования «Луны-25», а в частности БИУС-Л.
Вопрос: Как часто случается так, что в один массив данных попадают команды с различными приоритетами?
Денис: Если это так и задумывалось, то думаю, что очень часто.
Перевод: Подобное возможно только если этого и хотели добиться, но добиться такого не так-то просто.
Вопрос: Что при этом происходит (дается несколько команд, программа не отвечает и т.д.)?
Денис: Должны выполниться команды с наиболее высоким приоритетом. По идее, команда с низким приоритетом должна прерваться и уступить место более приоритетной. Если команда фиксации набора скорости была менее приоритетной, и сыпались какие-нибудь более приоритетные команды – то да, данные о необходимости торможения могли не доходить вовремя.
Перевод: Повода для появления «нулевых сигналов» нет. Более приоритетная команда всегда будет выполнена, какие бы еще команды ни поступали вместе с ней, что обусловлено логикой и математикой – основами программирования. Другой вопрос, каким командам какой приоритет был задан, а для этого нужно смотреть код.
Что нужно делать, чтобы проверить, не попадут ли в один массив данных команды с различными приоритетами?
Денис: Если они туда попадают, значит так нужно, и так было задумано. Видать, просто пропустили какую-то конфликтную ситуацию в командах. Такое бывает при неполноценных тестах оборудования и софта.
Перевод: Нужно проверять, как будет работать программа на конкретном оборудовании. Модулем БИУС-Л перед запуском заменили какой-то другой модуль (кажется, отечественный БИБ, который не прошел вибрационные испытания), но, видимо, тесты аппарата с новым модулем, но прежней программой, были поверхностными.
Создается впечатление, что PR-специалист «Роскосмоса» не показал перед отправкой написанный им релиз программисту. Но это не точно.
Читайте также:
7 главных требований к верстке сайта – актуально на 2023 год