На чём пишут ПО для космических аппаратов?
Предисловие
При обсуждении готовящихся к запуску или уже запущенных космических аппаратов, так или иначе мы обращаем внимание на то, каким образом эти аппараты работают. Зачастую такие обсуждения ограничиваются затрагиванием общей конструкции аппарата, установленных на него приборов или других модулей, служащих определённой цели. Мы всё время повторяем: “Инженеры установили то… Разработали это… Сконструировали другое”, тем самым уделяя всё внимание им.

Однако, отдавая должное инженерам и конструкторам многие забывают, что даже со всем аппаратным обеспечением, модулями, приборами и т.д. и т.п., аппарат не будет выполнять свои функции без программного обеспечения, которое, как правило, создаёт другая группа людей – программисты. Если железяки являются телом аппарата, то ПО является его интеллектом, оно вдыхает жизнь в эту груду металла, позволяет людям управлять ей, даже находясь на другом конце Солнечной системы. Как говорил мой преподаватель по программированию… Магия! Не вникая в суть невозможно понять масштаб работы, которую нужно проделать для реализации этой “магии”, однако каждый, кто в изучении программирования уходил хотя-бы на несколько ступеней выше знаменитого “Hello World!”, понимает, что это неимоверный труд. Поэтому я и решил затронуть эту тему и ниже я вкратце распишу какие языки и методы программирования используют в различных космических компаниях, а именно в NASA, SpaceX и Роскосмосе, и как эти языки менялись, меняя за собой всю отрасль.
Как кодят в NASA?
История этого ведомства, скорее всего, является самой необычной и насыщенной уймой странностей и необъяснимых вещей. Именно поэтому раздел о нём будет самым длинным. Дело в том, что в NASA не особо любят заниматься переписыванием одного и того же кода от миссии к миссии и часто там практикуется повторное использование компонентов кода, успешно зарекомендовавших себя в предыдущих миссиях. Казалось бы, это правильное решение и в целом с этим нельзя не согласиться. Это увеличивает надёжность будущего аппарата и сокращает время разработки ПО под него. Однако вот незадача… Технологии идут вперёд. И код, подходящий для одной архитектуры, нужно переделывать, чтобы он заработал на более новой. Делать это, конечно, никто не торопился. Именно поэтому миссии THEMIS и STEREO, запущенные в 2007 и 2006 годах соответственно, работали с использованием модулей от предыдущих миссий на процессорах Intel 8085, выпущенных ещё в 1976 году. Код для них очевидно писался на машинно-ориентированных языках по типу Ассемблера. Простым для чтения, а уж и для переноса на другие системы, такой код точно не назовёшь, однако его использование невероятно сильно ускоряло работу ПО. Команды обращаются к процессору как бы напрямую, без посредников.

Естественно, что в то время уже существовали языки и более высокого уровня, тот же Fortran. Однако использовался он не так активно и преимущественно для компьютеров, которые будут находиться на Земле, а не в полёте. К тому же, просто использовать Fortran тогдашнее руководство не захотело и во время раскрутки программы Space Shuttle в 70-ые года было принято решение разработать на основе Fortran новый язык программирования, отвечающий новым требованиям стандартов, которые так были необходимы для упорядочивания всей накопившейся к тому времени кодовой каши. Было решено разработать два языка: HEL/S для ПО космических аппаратов, и HEL/G для наземного оборудования. Однако с HEL/S создатели явно перемудрили, сделав код абсолютно не читабельным даже для программиста выше среднего уровня. Вот простейший пример.
Код на HEL/S:
2
z = y + x * h
i
И вот что под ним имеется в виду (i – индекс):
z = y^2 +x*hi
Вот уж где точно магией не пахнет. Таким образом, язык HEL/S был оставлен в прошлом, а HEL/G даже не появился на свет. В итоге NASA начало временно использовать язык программирования Ada, разработанный до этого под нужды ВВС США. Изначально он использовался для управления военными объектами, снарядами, самолётами, кораблями и другими безделушками в реальном времени. Как вы уже могли догадаться, единственным языком в NASA он не стал. Всё также кто-то где-то использовал Fortran, кто-то Pascal, а кто-то вообще Visual Basic или Bliss. Ко всей этой солянке в начале нулевых добавились знаменитые С, С++ и Perl. Стали, наконец, появляться операционные системы в привычном нам понимании. К слову, многие аппараты до этого вообще путешествовали по космическим просторам без каких либо операционных систем (Пионер вам в пример). Таким образом приоритет захватил быстрый и удобный язык С. Именно на нём сейчас работает большая часть космических аппаратов, в том числе всем известный любимчик – марсоход Curiosity. Под роверы на С была написана универсальная операционная система VxWorks. Все марсоходы начиная от Pathfinder и заканчивая Curiosity работают на ней.

Программа просто выводит надпись “hello, world”.
С триумфом С солянка языков программирования никуда не делась и для разных миссий/задач всё ещё используются различные языки, в том числе обожаемый многими нынче Python. Никуда так и не делся кошмар любого любителя ООП (объективно ориентированное программирование) – Ассемблер. Кстати таким же, как я, фанатам языков по типу Java или C#, работающих с помощью виртуальной машины, в космическом программировании ловить нечего, ибо слишком большое время отклика у таких программ для космических расстояний. Ну зато программа, написанная на утюг, будет работать и на Tesla.
Как кодят в SpaceX?
Если NASA – это ваш 60-летний сосед, пользующийся кнопочным телефоном, время от времени читающий газеты (те самые, бумажные) и прогуливающийся до рынка, чтобы прикупить себе что-нибудь модное, то SpaceX – это молодой паренёк со смартфоном в руках, в котором есть всё, начиная от звонков и новостей, заканчивая интернет магазинами с доставкой. Компания Илона Маска также использует несколько языков программирования, однако их в разы меньше, чем у NASA и все они являются современными высокоуровневыми языками, код которых на минимальном уровне, в принципе, может прочитать даже тот, кто ни разу не знакомился с программированием.

Для программного обеспечения на всех ракетах серии Falcon, на всех кораблях Dragon используется шикарнейший язык С++, который какое-то время в универе я считал идеальным языком программирования (пока не познакомился с Java). Язык максимально универсален и, плюс ко всему, относительно машинных языков прост в изучении. На нём пишут практически всех современных роботов, все системы дистанционного управления и всё, что только можно. По заявлениям сотрудников SpaceX, этот язык занимает основную позицию, среди всех других языков в компании. Своё место нашли C# и JavaScript. На них работают большая часть внутренних инструментов и услуг компании. Например кофеварка в кабинете Илона Маска, вероятнее всего, работает на C# (если она у него есть). Для других технологических задач также используются Knockout, Handlebars, Python, LESS. Моделирование же проводится в LabVIEW с помощью графического языка программирования G. Из операционных систем же для своих аппаратов, SpaceX отдали предпочтение Linux.
В общем, у SpaceX, в отличие от тех же NASA, с разработкой ПО всё намного проще и практичнее. Но всё же стоит учесть через что пришлось пройти NASA, перед тем как появились современные языки программирования и этот путь не может не сказываться на нынешних делах этого ведомства. SpaceX же фактически пришли в идеальный момент, когда все трудности за них уже преодолело NASA и сильно запариваться с машинными языками программирования команде Илона не пришлось, когда уже есть С++.
Как кодят в Роскосмосе?
“С? С++? Что за бред? Какой-то набор скобочек и запятых? Зачем нам это?” – подумали российские инженеры, когда эти языки начали появляться на свет. И правильно сделали. Ведь ещё в СССР был разработан универсальный способ писать ПО для ракет и космических кораблей. Всё началось с разработки всемирно известного Бурана.

Для реализации этого проекта был разработан ПРОЛ2 – язык для разработки комплексных бортовых программ в реальном времени. Сразу за ним подоспели ДИПОЛЬ – проблемно-ориентированный язык для создания программ для наземных испытаний и ЛАКС — язык для моделирования. Все это было создано под БЦВМ – бортовую цифровую вычислительную машину. Для неё также была написана отдельная операционная система, получившая название “Пролог-диспетчер”. После запуска Бурана, как мы все знаем, лавочка была прикрыта и больше Буран не эксплуатировался, однако его наработки не были забыты и даже ещё более усовершенствованы. Таким образом на свет родился Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность. Или сокращённо ДРАКОН. Главной фишкой этого языка является то, что программировать на нём может кто угодно, даже не программист. По крайней мере на его чистой версии. Язык является в меньшей степени языком и в большей набором схем, создающимся в редакторе. ДРАКОН-Схемы получились очень удобными и читаемыми для всех людей, даже не являющимися программистами.

Но на этом его создатели решили не останавливаться. Всё-таки одними схемами сыт не будешь и ДРАКОН стал гибридным языком программирования, что значит, что он способен как-бы сливаться с другими языками программирования, образуя таким образом ДРАКОН-Java, ДРАКОН-Python и так далее. Вот это я понимаю магия. Язык оказался настолько надёжным и мощным, что используется он и по сегодняшний день, причём не только в Роскосмосе. Некоторые проекты ESA реализованы на нём, планируемый в будущем “Морской старт” от S7 тоже будет реализован на ДРАКОН’е.
По мелочи, конечно, использовались и другие языки программирования. Мой преподаватель (тот что шутил про магию), рассказывал как для разработки ПО серии аппаратов “Венера” использовался язык Fortran, однако основой после Бурана всё же остался максимально универсальный ДРАКОН.
Конец
На этом всё, спасибо всем, кто дочитал до конца. Буду рад любым отзывам и оценкам.
Якщо ви знайшли помилку, будь ласка, виділіть фрагмент тексту та натисніть Ctrl+Enter.
> Допустим по типу купсатов метан не нальешь.Все спутники до тонны врат ли перейдут на смешенное топливо,…
Да, тренд на смещение на ионные двигатели явный.
Мало ли чего эти трое наговорили. ) По имуществу и территории они вступили в права собственности -…
То что я нашел для 2022. Arsat-3, Eutelsat 3B, Intelsat 36, Star One C4, Turksat 5A -…
Очень часто, не принадлежа к угнетаемой группе, люди даже не замечают притеснений. Или не придают значения очевидным…
Ну трое наследников публично отреклись от наследства. Но формально - да, 15.
Значит не все там так плохо. Можно сказать гонка десятилетия - Dream Chaser vs. Starliner.
Это чтобы Фалконы или Спейсы не запускали на Луну, оно всё разобьется?
Это старый еврейский анекдот. > Кац женился на старшей из трех сестер и увез ее в Жмеринку.…
А что должно вызывать смех?
Вот вы сейчас опять будете смеяться, но NASA на прошлой неделе перенесло место посадки IM-1 https://blogs.nasa.gov/clps/2023/05/25/intuitive-machines-lunar-landing-site-moves-to-south-pole/ Занимаемся…
Ошибка не в программном обеспечении, а в смене исходных условий перед релизом. Ошибка планирования.
Спочатку план був такий, що Старшипи заправляються на Марсі і повертаються на Землю, щоб відправитись з новим…
Я бы наверное сказал, что не некоторые, а большинство.
Впервые в составе китайского экипажа гражданский специалист: профессор Университета Бейханг в Пекине Гуй Хайчао.
Я не знаю точно. Но изначально почему-то была речь про 4, а чего не про 20?
В дополнение, Джонатан обновил данные на своём сайте и выделил отдельно тех, кто был на орбите и…
Некоторые геостационары вообще на ЭРД добираются.
Надеюсь не потерялся, в будущем марсианском музее освоения планеты его место на входе ))
От чего, если термометр не дрогнул бы секунд 20, а затем при остывании повышение было незначительно, то…
Допустим по типу купсатов метан не нальешь. Все спутники до тонны врат ли перейдут на смешенное топливо,…
Судя по апрельскому мини обзору всё было иначе. Начиналось всё с 4 метров пока один из учёных…
Опыт говорит о том, что ожидать можно всего чего угодно.
У вас Ангара ракетобудування! Терміново потрібна модернізація!
Даже если бы нынешние итальянцы что-то говорили, они бы друг друга все равно не поняли