- PVSM.RU - https://www.pvsm.ru -
«Мы работаем для того, чтобы вы не боялись летать»
рис 1. Модель Bombardier BD 500 в аэродинамической трубе
Именно такой слоган я как-то придумал для своей работы. Он как нельзя лучше выражает саму суть разработки систем управления самолётом. И, если честно, я бы хотел, чтобы это стало девизом всех разработчиков систем управления современными самолётами по всему миру. Потому что, несмотря на то, что часто можно услышать, что самолёт — один из самых безопасных видов транспорта, тысячи людей по всему миру боятся летать, вцепляются в ручки кресел… А зачастую причина всех страхов — неизвестность. Когда надо доверится такой непрочной конструкции, болтающейся километры над землёй, таким хрупким сплетением проводов и битов кода, скрытой завесой улыбок стюардесс и тайн программного кода. И которую стоит приоткрыть.
К моему удивлению, моя предыдущая статья вызвала неожиданно большой резонанс как на Хабре, так и за его пределами. Мне задали ряд вопросов и высказали ряд недовольства, законно обозвав это «закрытой областью». Вопреки такому мнению, всё, о чём я рассказывал в статье и о чём речь пойдёт в этой, можно найти в интернете. Быть может по разрозненным кускам, быть может, на разных языках, но ни один факт не является ноу-хау. Задача моей статьи — познакомить читателя с замечательной областью авиации и классифицировать весь опыт и знания, которые мне удалось накопить. Что же касается проблемных тем и вопросов, затронутых мной, хочется вспомнить схожий случай, описанный г-ном Фейнманом [1] в замечательной книжке «Какое тебе дело до того, что о тебе думают другие?». Если кто не читал, то обязательно прочтите. Там Ричард рассказывает о проблемах в НАСА. О проблемах, которые привели к крушению челнока. И о том, что не всегда бывает виновато оборудование, программы, программисты их писавшие, а часто виноватыми оказываются допуски, сокрытие фактов и принятые консервативные решения. И знаете что? НАСА из-за этого случая и огласки не стало хуже, а лишь научилось на своём хоть и печальном, но опыте. Престиж не только не упал, но вырос, НАСА [2] показала себя организацией, которая умеет решать проблемы и признавать их. Потому что как космос, как и авиация — великолепные области, в которых работают великолепные компании и преданные люди. И не верьте тем, кто говорит, что после установки туалетов в самолётах небо перестало быть местом для романтиков.
Automation is great. It’s essential. It reduces fatigue, and enhances safety. But what if it breaks?
Все вы конечно знаете, что законы Мерфи [3] работают, и один из них гласит, что всё, что может сломаться — сломается. Всё, что не может сломаться — тоже сломается. Каков бы не был низок процент отказа оборудования, вероятность отказа существует. Но существуют методы, позволяющие эти отказы минимизировать. И, в первую очередь, это архитектурные особенности программно-аппаратного комплекса.
рис 2. Т-4
Современный самолёт управляется так называемой ЭДСУ [4] — Электро Динамической Системой Управления. На самом деле, это не такая уж новинка. Впервые такая система была установлена на советском самолёте «Максим Горький [5]», управляющая поверхностями путём передачи электрического тока (аналоговая ЭДСУ). Позже в военной технике она появится в полностью цифровом виде на советском Т-4 [6], а в гражданской авиации — на Airbus A320 [7] и Ту-204 [8]. Тем не менее, ни что не стоит на месте и технологии совершенствуются, разрабатываются новые подходы и достигаются новые уровни безопасности.
Что представляет собой ЭДСУ? В первую очередь, это программно-аппаратный комплекс, состоящий из:
Каждая из систем обычно как минимум дублируется один раз. В зависимости от требуемых законов управления, ценовых и компоновочных решений архитектура может варьироваться — содержать больше контуров дублирования, контроля, силовых контуров, или же, напротив, меньше. А так же возможны комбинации ЭДСУ и механической, гидромеханической систем управления.
рис 3. структурная схема ЭДСУ
Использование ЭДСУ в первую очередь обеспечивает значительное уменьшение веса системы управления, что на больших самолётах имеет критическую важность. Так же даёт более гибкие возможности компоновки, часто позволяет расположить систему управления практически в любом доступном месте самолёта. Кстати говоря, поэтому управление по проводам (fly-by-wire [9]) всё ещё является наиболее популярным, т. к. является не столь сложным и капризным, как fly-by-light (с использованием оптики ) или fly-by-wireless (с использованием беспроводных технологий). Уменьшение веса и упрощение компоновки позволяет ввести дополнительные контуры, обеспечивающие нормальное управление самолётом в состоянии отказа одного из работавших ранее контуров. Позволяет по возможности уменьшить человеческий фактор, контролируя параметры полёта в автоматическом режиме и корректируя команды пилотов. Контролирует состояние критических систем самолёта в режиме реального времени, что позволяет обнаружить, отследить и по возможности исправить ошибку в минимально возможное время.
рис 4. функциональная схема ЭДСУ
Тем не менее, в процессе проектирования таких систем критически важно создать правильную архитектуру. Это — наиболее уязвимое место ЭДСУ. Наиболее классическими случаями ошибок являются:
Какой бы ни была архитектура систем управления, их объединяет следующие вещи:
К сожалению, не имею представления о технологиях, которые были применены в советских самолётах, но думаю, он схож с современным подходом, который справедлив и для иностранных, и для российских проектов.
Типичная система управления состоит из:
рис 5. ЭДСУ Boeing 777
В зависимости от сложности системы могут быть добавлены дополнительные устройства разделены существующие. В любом случае, при правильном дублировании и проектировании системы главный принцип — это соблюдение принципа «различия» (dissimilarity), что означает, что для каждого элемента работающего в режиме дублирования дожна быть применены различные электронные компоненты, процессоры, языки программирования, написан разный код, а соединяющие провода проложены независимо разными путями.
Компьютеры управления (PFC) и исполнительные модули (ACE) состоят в свою очередь из нескольких независимых каналов. В простейшем случае они состоят из канала управления, который вычисляет команду к исполнению (Control Channel) и канала контроля, который проверят правильность команд (Monitor Channel). Для простоты можно сказать, что первый должен выдавать наиболее точные данные, рассчитанные с использованием сложных законов управления, базирующихся на динамических моделях поведения самолёта, а второй — давать правильную оценку на основе оценки окружающей обстановки, поступающей от датчиков с принимая и допуская некий «усреднённый вариант», но делая это быстрее канала управления, имея возможность заблокировать новый неверный сигнал до того, как пройдёт команда к исполнению и обработать ошибку.
рис 6. архитектурная схема PFC для Boeing 777
В зависимости от проекта применяется разное число модулей и разные комбинации каналов внутри них. В Boeing-777, например, три главных компьютера по три канала в каждом. Причём каждый канал может исполнять разные роли, но неизменно один из них — канал управления, а два других — контроля. В Boeing, к примеру, популярна схема с 1 MC, 1 CC и 1 канал горячей замены (standby). В других компоновках так же могут быть отдельно вынесен канал для управления силовой электроникой, или для целей наладки и проектирования — платы расширения функциональности (Extender Board) или внедрения ошибок (Fault Insertion Board). Общение между каналами обычно происходит по шине CAN [13] или любой другой достаточно быстрой шине, такой как spacewire [14], 1394 [15] и пр… Главный критерий — скорость передачи данных.
Общение же между модулями управления и периферии в авиации традиционно принято осуществлять через шину ARINC [16]. В общем случае главный критерий — надёжность даже при больших расстояниях.
рис 7. Упрощённая схема типичной реализации системы управления
Так же используются непосредственно аналоговые и цифровые сигналы. Классической компоновкой является применение ADC [17] DAC [18] (аналого-цифровых и цифро-аналоговых конвертеров) внутри ACE для опроса датчиков и для командования приводами, а так же с использованием Resolver'ов [19] для их чуткого управления. Использования дискретных сигналов — для синхронизации (в т.ч. от тактовых генераторов), пин-кодинга (определения положения и роли модуля) модулей. Модули, как правило, знают о состоянии друг друга и во многих случаях архитектура подразумевает «горячий» старт, когда резервный модуль подхватывает состояние главного и переходит в режим активного, заменяя прошлый главный модуль в течение пары секунд. ACE и PFC являются модулями LRU [20] (Line Replaceable Unit), т. е. модулями линейной замены, что подразумевает собой возможность заменить один модуль (как плату расширения) на подобный без необходимости замены (модификации) всей связной системы. Схожая архитектура используется и для компоненов системы в отдельности, для таких система управления шасси, гидравликой, люками.
Принятие решения на основе совместной работы различных устройств — это сложный вопрос, на который нельзя ответить однозначно. Есть разные пути решения: синхронизация, решение методом среднего с использованием данных о состоянии (об ошибках), пути обнаружить неисправные модули и отключить их, сценарии работы. К примеру, при использовании трёх PFC при наличии двух одинаковых команд и одной отличной — отличная будет отбракована. При трёх разных — система будет отключена, как и при разных показания в системе, использующей только два PFC. Различных логик может быть много, как и включая алгоритмы работы при дублировании ЭДСУ механической системой управления. В последнем случае вероятность отказа возрастает, т. к. при сбое механической системы управления должна быть информирована ЭДСУ об отказе и среагировать на это переходом в аварийный режим.
рис 8. Схема парного исполнения ACE для электрогидравлической системы
В зависимости от окружающей обстановки система может функционировать в различных режимах [21]. Типичными режимами являются:
рис 9. схема работы с четыремя PFC
Чтобы не вдаваться в технические подробности и конкретные реализации, кратко подытожу: каждая система дублируется. Так, помимо модулей управления, дублируются цепи питания (три и более), магнитные замки, датчики, сообщения от устройств, ручки управления. Каждая информация требует подтверждения. Так, для диагностирования ошибки в зависимости от её критичности требуется время для её подтверждения (чтобы не отключить систему раньше времени из-за помехи), обычно с разных устройств сразу. Даже в случае отказа или даже множественных отказов есть возможность осуществлять управление в альтернативном режиме. Это достигается путём использования различных аппаратных и программных средств. Так, для одного и того же устройства используются различные процессоры и схема платы для разных каналов. Например, для Control Channel — процессор от Motorola, а для Monitor – от Infineon, для другого LRU – от Texas Instruments и т.п… Используются различные компиляторы, пишется разный код. В идеале для разных PFC ACE должны быть так же разные программно-аппаратные решения, но в простом случае (это не всегда возможно и целесообразно как в техническом, так и финансовом плане) dissimilarity достигается различным пин-кодированием и различным расположением модулей в пространстве. Система в идеале защищена «от дураков». В первую очередь — от человеческого фактора. В последующие — от критических условий (режимов короткого замыкания, потери питания, высоких и низких температур), а так же от невозможного события по Мерфи. В коде это выливается, к примеру в пароноидальное программирование [23].
рис 10. четыре PFC разбиты на пары
static bool_t CANInterface_StripStatusData (CanMsgFrm_t * CanRxMsg_ip)
{
/*#FUNCTION_SIGNATURE# CANInterface_StripStatusData */
bool_t bSuccess = TRUE;
/* Extract data from message ID 0xN using following layout: */
/* ------------------------------------------------------------------------------------- */
/* | Layout | Range | Name | Unit Ident | Description | */
/* |-----------------------------------------------------------------------------------| */
/* | Byte 0 | 0, 1 | ConsNgWow | 1, 2 | Consolidated Nose Gear | */
/* | Bit 0 | | | | Weight on Wheel | */
/* |-----------------------------------------------------------------------------------| */
/* If data is send trough valid pointer */
if (CanRxMsg_ip EQU_C NULL_C)
{
bSuccess = FALSE;
}
else
{
/* Process, only if unit is valid */
/* There is no data clipping and loss, we extracting only actual bits from message. */
if (cUnitIdent_g EQU_C UNIT_IDENT_UNIT1_E)
{
bConsNgWow_g = (bool_t)(CanRxMsg_ip->Message.cUint8_a[ZERO_C]
& BITMASK_ONE_BIT_C);
/* … */
/* Other bits are spare here, not used in this message */
}
else if (cUnitIdent_g EQU_C UNIT_IDENT_UNIT2_E)
{
bConsNgWow_g = (bool_t)(CanRxMsg_ip->Message.cUint8_a[ZERO_C]
& BITMASK_ONE_BIT_C);
}
else
{
bSuccess = FALSE;
}
}
return(bSuccess);
/*#end ACD# CANInterface_StripStatusData */
}
Знакомые с типичным Coding Standard [24] узнают выполнение обычных правил в этом коде. Вообще такой код не самый хороший и оптимальный, тем не менее он гарантирует исключение невозможных ситуаций:
/* convert label */
nTmp = (uint16_t)ArincData.Octet.nByte0;
nTmp = ((nTmp & 0x55U) << ONE_U_C) | ((nTmp & 0xAAU) >> ONE_U_C);
nTmp = ((nTmp & 0x33U) << TWO_U_C) | ((nTmp & 0xCCU) >> TWO_U_C);
nTmp = ((nTmp & 0x0FU) << FOUR_U_C) | ((nTmp & 0xF0U) >> FOUR_U_C);
/* write converted label back */
ArincData.Octet.nByte0 = nTmp;
Инвертирование бит с алгоритмом Уоррена.
На этом, пожалуй, стоит завершить статью и эту тему в частности. В заключение хочу сказать, что какова бы ни была система, решения — сложные как у Boeing или простые, как на начинающем китайском авиопроме, системы развиваются в сторону удобства и безопасности. И каждый защищённый провод и бит — труд многих людей, зачастую энтузиастов, работающей в этой области, а так же вас, граждане пассажиры, которые своей любовью к нему и своей критикой к человеческому несовершенству делает эту жизнь лучше.
P.S. кстати говоря, во время написания этой статьи выяснилось, что ПО управления Boeing 777 написано на ada.
Автор: wwakabobik
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/e-lektronika/9089
Ссылки в тексте:
[1] Фейнманом: http://en.wikipedia.org/wiki/Richard_Feynman
[2] НАСА: http://www.nasa.gov/columbia/home/index.html
[3] законы Мерфи: http://en.wikipedia.org/wiki/Murphy's_law
[4] ЭДСУ: http://en.wikipedia.org/wiki/Aircraft_flight_control_system
[5] Максим Горький: http://ru.wikipedia.org/wiki/%D0%90%D0%9D%D0%A2-20
[6] Т-4: http://sukhoi.org/planes/museum/t4/
[7] Airbus A320: http://en.wikipedia.org/wiki/Airbus_A320_family
[8] Ту-204: http://en.wikipedia.org/wiki/Tupolev_Tu-204
[9] fly-by-wire: http://en.wikipedia.org/wiki/Fly-by-wire
[10] посадка Ту-154: http://ru.wikipedia.org/wiki/%D0%90%D0%B2%D0%B0%D1%80%D0%B8%D0%B9%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D1%81%D0%B0%D0%B4%D0%BA%D0%B0_%D0%A2%D1%83-154_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5_4_%D0%B4%D0%B5%D0%BA%D0%B0%D0%B1%D1%80%D1%8F_2010_%D0%B3%D0%BE%D0%B4%D0%B0
[11] инцидент с Ан-148: http://www.mak.ru/russian/investigations/2010/an-148-100.html
[12] feedback: http://en.wikipedia.org/wiki/PID_controller
[13] CAN: http://ru.wikipedia.org/wiki/Controller_Area_Network
[14] spacewire: http://en.wikipedia.org/wiki/SpaceWire
[15] 1394: http://en.wikipedia.org/wiki/Firewire
[16] ARINC: http://en.wikipedia.org/wiki/ARINC
[17] ADC: http://en.wikipedia.org/wiki/Analog-to-digital_converter
[18] DAC: http://en.wikipedia.org/wiki/Digital-to-analog_converter
[19] Resolver'ов: http://en.wikipedia.org/wiki/Resolver_(electrical)
[20] LRU: http://en.wikipedia.org/wiki/Line-replaceable_unit
[21] различных режимах: http://en.wikipedia.org/wiki/Flight_control_modes_(electronic)
[22] IFCS: http://en.wikipedia.org/wiki/IFCS
[23] пароноидальное программирование: http://encyclopedia2.thefreedictionary.com/paranoid+programming
[24] Coding Standard: http://www2.research.att.com/~bs/JSF-AV-rules.pdf
Нажмите здесь для печати.