Как мы строили авиатренажер A320: история в картинках (ч.1)

    Привет всем!

    В прошлом посте я написал о бесценном опыте, полученном при строительстве авиатренажера Boeing B737NBG.

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

    Я разобью пост на два — один будет в основном про ИТ, а второй — в основном про этапы строительства, со слайдами.

    Поехали.


    Вводная

    В августе 2012 года я влился в только начавшийся проект строительства нового авиатренажера. На тот момент дела обстояли так:
    • К нам ехали заказанные и изготовленные подвижная платформа и кабина
    • Обшивка находилась в производстве
    • Заканчивалось проектирование силового каркаса
    • Были закуплены и уже стояли на складе проекторы


    Первым делом, как это ни странно, я взялся рисовать ИТ-инфраструктуру.

    ИТ-инфраструктура

    В голове все было просто: в качестве симулятора у нас X-Plane 10 с его возможностями искривлять изображение под цилиндрическую проекцию.

    Нужно масштабирование — значит будет пять серверов: один обсчитывает динамику, три — формируют изображение для трёх проекторов, четвертый — генерит картинку для системы видеозаписи роликов для клиентов.

    Компоненты Project Magenta занимаются почти всем остальным.

    ProjectMagenta

    1. Рисование картинок на экранах кабины — Airbus Glass Cockpit, ABGC
    2. Обсчет работы самолётных систем — pmSystems
    3. Реализация работы Flight management and guidance system — MCDU
    4. Автопилот. Реализован в модуле Flight control unit, FCU
    5. Электро-дистанционная система управления самолётом, по-нашему, Fly-By-Wire. Она-же обеспечивает интерфейс с органами управления — сайдстиками, педалями, ручками управления двигателями и т.п. Кроме этого, именно в этом модуле заложены «законы», препятствующие слишком большим кренам, опасным тангажам и прочему — Flight Control Laws — pmFBW
    6. Звуки — куда уж без них. pmSounds


    Вроде ничего не забыл.

    Система сдержек и противовесов

    Проектирование инфраструктуры получалось из совокупности ограничений и опыта Боинга.

    Одна из проблем из опыта с Боингом — сервера в стойке страшно пылятся, потом начинают перегреваться. Значит наиболее нагруженные компьютеры — а это X-Plane — должны стоять в серверной.

    Тянуть USB из кабины — увольте, значит должны быть бортовые компьютеры.

    Если они на борту подвижной платформы, значит они либо с SSD, либо бездисковые. SSD на моей памяти два раза перегрелся, поэтому будем познавать бездисковую загрузку. Весь «бортовой» софт у нас под виндой, значит это будет iSCSI.

    Загрузить 6 компьютеров по сети — нужна пропускная способность, значит свичи у нас должны быть с поддержкой транков. Выбор пал на D-Link DGS-1210-16.

    X-Plane будет несколько, и сценарии на них должны совпадать, плюс еще и iSCSI, бэкапы и т.д., значит должен быть файлсервер, а точнее — NAS. По соотношению «цена-качество» подошел Synology RS-812+ с апгрейдом памяти до 3Гб. Заодно он поддерживает транки.

    Серверная должна быть чистой, то есть дверь в нее должна быть закрыта, значит максимально реализуем удаленный доступ, значит должен быть IP KVM (в реальности он пригодился один раз, в основном пользуемся VNC).

    Кроме этого, совсем не улыбается залезать в закабинное пространство где находятся бортовые компьютеры, поэтому нужно по крайней мере уметь их включить и выключить. Значит нужно железобетонно работающее устройство, позволяющее нажать кнопку «Power». Оно было заказано знакомому электронщику, после ряда итераций получилось устройство с Eth, которое может «нажать» кнопку питания.
    Выглядит оно так:


    Верхняя плата — «мастер», к ней по RS-485 подключаются «ведомые». На каждом «ведомом» — 8 каналов, в каждом из каналов — два дискретных входа (для подключения светодиодов питания и HDD) и один выход — для кнопки Power.

    Проекторы у нас стоят дорогие и редкие, выключать их без предварительного охлаждения нельзя, но если пропало входное напряжение, то нужно автоматом, не полагаясь на людей выключить и проекторы и бортовые компьютеры. Значит нам нужны UPSы с сетевым интерфейсом, у проекторов и так он есть, его нужно просто задействовать.

    В общем, в результате пары недель проектирования получилась вот такая схема:


    Бортовые компьютеры у нас на Celeron G540 2.5ГГц с 4 Гб памяти и видеокартой Low profile на чипе Radeon HD 6450, с гигабайтом памяти.

    Графические сервера для X-Plane — Core i5-3470 c 8Гб RAM и двумя 500Гб дисками в зеркале. Для рисования картинки стоят GeForce GTX 670 c 2048Мб. В качестве операционки у нас Ubuntu 12.04 LTS 86_64, теперь и X-Plane стоит 64-битный.

    Сервер что обсчитывает динамику — под Win7_32 на Core i7-3770, используется встроенная видеокарта. X-Plane тут 32-битный, и сервер под виндой потому, что плагин для интерфейса с подвижной платформой есть только под 32-бита и под винду.

    Кабели и провода

    Сверхцелью было построить тренажер так, чтобы в кабину входили только витые пары и силовые кабели. Так и получилось в конечном итоге.
    В кабину снаружи идет силовой кабель 220В, две витые пары для соединения свичей (транк), три витые пары для удлинителей HDMI и еще одна витая пара для пульта управления трапом и платформой.

    Удлинители я использовал Hama HDMI, со своей задачей они справляются.

    Витая пара везде — CAT6 FTP.

    Отдельно стоило бы написать как мы решили исхитриться и протянуть наши витые пары в уже имеющейся трубе между шкафом и подвижной платформой. Это была дурацкая затея даже с использованием кабельной смазки, к тому-же потом я все равно протянул еще две трубы.

    Электричество

    В Боинге мы столкнулись с проблемой неправильной электрической сети, поэтому в этот раз я сел рисовать однолинейную схему (не могу ее найти).
    Идея была в том, что мы защищаем автоматами все линии, плюс мы защищаем от поражения током людей.

    Расчеты нагрузки показали, что на всю кабину (проекторы, компьютеры, контроллеры ввода-вывода, бортовая вентиляция, свич) достаточно 3000ВА.
    На 5 серверов, NAS, свич и KVM тоже нужно примерно столько-же.

    На наружние вентиляторы кабины, инструкторскую станцию и привод трапа нужно меньше 1500ВА, поэтому пригодились старенькие 1500 SmartUPS
    Итого UPSов стоит четыре — два Ippon Smart Winner 3000 VA с дополнительным блоком батарей, и два 1500VA SmartUPS, оставшиеся от одной из итераций улучшения Боинга.
    На одном трёхкиловаттнике висит серверная, на другом — вся кабина. На одном 1500 висит вентиляция кабины и инструкторская станция, ну и еще один — в запасе.

    Учитывая наличие автономных источников энергии (UPSы), УЗО для защиты людей стоят после ИБП, т.е. бесперебойники у нас «привязаны» к щиту.



    Вентиляция и кондиционирование

    Серверная у нас совсем небольшая, около 5 квадратных метров, и туда выделяется 2кВт тепла от стойки и еще, наверное, 1кВт от шкафа управления платформой. Значит будем вешать кондей.

    Кондей был выбран Samsung AQ12TSBN, у него производительность по холоду около 3.5кВт. Монтаж я сделал сам, благо инструменты и оборудования было закуплено до этого и использовалось для монтажа кондеев на даче.
    Лето показало правильность выбора, температура в серверной колебалась около установленных 19 градусов.

    Дурацкой ошибкой было повесить внутренний блок над электрическим щитом, поэтому пришлось уделить особое внимание дренажу. Тьфу-тьфу, эксцессов не было, но к следующему лету я установлю дренажный насос, чтобы уж точно.

    В кабине с вентиляцией дело обстоит не так просто.
    У нас есть два объема — собственно кокпит, в котором сидят люди, и закабинное пространство, в котором стоят утюги-проекторы и компьютеры.
    С самого начала мы решили, что кондиционирования делать не будем — слишком много проблем с конденсатом.

    В закабинном пространстве сделаны приток и вытяжка малошумными вентиляторами с производительностью в районе 250 кубов в час. Приток сделан в место установки компьютеров


    Вытяжка — около проекторов, в верхней точке (пардон за качество фотки)


    На самом деле, не мешало бы еще воткнуть вентилятор в отверстие в «крыше», но температурные замеры не показывают такой необходимости.

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


    Изначально по расчетам я ошибся с выбором вентиляторов, 2000-кубовый нагнетатель появился позднее, вначале стояли 250-кубовые сайленты.
    Даже с 2000 вентилятором в кабине бывает жарко, поэтому мы подумываем, как можно еще улучшить систему.

    Костыли, костылики и костылищи

    С самого начала было понятно, что даже «полочные» продукты нужно будет оборачивать многочисленными костылями.

    Проблем для окостыливания было несколько:
    1. Синхрнизация общих данных X-Plane
    2. Автоматизация включения-выключения проекторов
    3. Перезапуск сбойнувших компонентов Project Magenta


    X-Plane: синхронизация и запуск

    Для синхронизации данных X-Plane в итоге выбран rsync с NASа.
    Я пробовал запускать прямо с NFS-шары, но учитывая что у нас и Винда и Линукс, а еще структура каталогов X-Plane, по-моему, в пьяном бреду придумана, я решил что конфигурация у каждого — своя, а сценарии и общие данные синхронизируются по сети каждый раз когда запускается или перезапускается X-Plane.

    Кстати, по мере проработки идеи с запуском X-Plane прямо с шары, я дошел до того, что редактировал бинарник, чтобы все файлы, открываемые для записи, находились в одной директории. Вот картинка из этого этапа:

    Все было успешно закончено, и через два дня вышел апдейт. После этого я решил делать rsync.

    Скрипт для запуска получился вот таким:
    #!/bin/bash
    
    LOGFILE="/var/log/xplane-starter.log"
    
    log_msg () {
        DATE=`/bin/date`
        /bin/echo "$DATE: $@" >> $LOGFILE
    }
    
    log_msg "Starting xplane-startup.sh"
    
    while [ 1 ]; do 
     log_msg "Rsyncing"
     /root/bin/rsync_64.get >> $LOGFILE
     /bin/sed -i".bak" '/UNSAFE/d' "/xplane.64/Output/preferences/X-Plane Screen Res.prf"
      /usr/bin/pactl set-card-profile 'alsa_card.pci-0000_01_00.1' 'output:hdmi-stereo-extra1'
     /usr/bin/xinit  /root/bin/xinitrc.64 >> $LOGFILE 2>&1 &
     XINIT_PID=$!
     log_msg "xinit pid = $XINIT_PID"
     while [ 1 ]; do
      sleep 1
      # Check that the process is still alive
      if [ -e /proc/${XINIT_PID} -a /proc/${XINIT_PID}/exe ]; then
       sleep 1
      else
       log_msg "Process dead, restarting" 
       break
      fi  
     done
    done
    


    Поскольку X-Plane'у совершенно не нужен оконный менеджер, то собственно запуск делается через xinit:
    /usr/bin/xsetroot -cursor_name top_left_arrow
    DISPLAY=:0.0 /usr/bin/X11/xset s 0
    DISPLAY=:0.0 /usr/bin/X11/xset s noblank
    /root/bin/shm_wipe.sh
    /usr/bin/x11vnc -display :0 -ncache 10 -many &
    umask 0000
    /xplane.64/X-Plane-x86_64 --no_crash_reporter
    /usr/bin/killall -9 x11vnc
    


    shm_wipe.sh — моя лень. Периодически x11vnc перестает запускаться из-за исчерпания shared memory, поэтому в инетах найден рецепт поиска и «отвязывания» неиспользуемых сегментов.

    Дополнительно через cron делается перезагрузка X-Plane ранним утром, бо есть в нем утечки памяти. Кроме этого, ночью на всякий случай дается команда на выключение проекторов.

    На Винде не все так кошерно, rsync-синхронизацию я делаю периодически руками…

    Мониторинг бортового компьютера

    Чтобы бороться с подвисающими компонентами ProjectMagenta, на бортовом компьютере написан целый скрипт на PowerShell, да еще и с элементами .NET.

    Начался скрипт с детектирования сбойнувший USB-устройств, а дальше оброс уже всем остальным.

    До кучи через этот скрипт осуществляется запуск компонентов, и проверка, не выпал ли кто у нас по ходу пьесы.

    Отдельной строкой расскажу про EHID.
    EHID — это интерфейс между железом кабины (контроллерами ввода-вывода) и программными компонентами. Распространяется под NDA, я его подписал и теперь являюсь счастливым обладателем спецификации. Применил пока для окостыливания бага с тиллером в X-Plane, о котором расскажу ниже.
    Суть в том, что есть компонент A320_EHID.exe (и соответственно B737_EHID.exe для Боинга), который держит в себе «дерево» всех всех компонентов кабины — и аналоговых осей, и светодиодов, и тумблеров и всего вообще.
    У каждого элемента есть собственное имя и 32-разрядный ID.

    Приложения обращаются не напрямую к железу, а к EHID. Общение — поверх TCP, Event-driven. Поллинг весь реализован в EHID, так что такой концепт сильно облегчает жизнь.

    Спецификация затрагивает два уровня — между железом и EHID, и между EHID и приложениями.
    Нижний уровень представлен в том числе и описанием протокола поверх USB HID, и реализуется в том числе в прошивках контроллеров.

    Update: нарисовал картинку по взаимодействию компонентов симулятора между собой


    Беда в том, что «последняя ошибка» обнаружилась на стыке драйверов Винды и реализации EHID в прошивках: при одновременном поступлении данных от большого количества устройств, что-то такое волшебное происходит внутри EHID, что приводит к DoS. Обнаруживается, слава богу, легко: EHID перестает отвечать на запросы приложений. На этом и основан мониторинг.

    Говнокод — тот еще, не пинайте.
    Import-Module c:\scripts\Release\DeviceManagement.psd1 
    
    [int] $Port = 21843
    $IP = "192.168.X.X"
    $Address = [system.net.IPAddress]::Parse($IP) 
    
    $LogDirs = @("C:\EHID","C:\MCDU","C:\RMCDU","C:\FBW","C:\pmSystems","C:\FCU","C:\xpuipc")
    
    Write-Host "Starting the supervisor script..."
    
    # Check if we just started
    $p = Get-Process -Name xpwideclient -ErrorAction silentlycontinue
    if (!($p))
     {
      Write-Host "Just started"
      # Find and remove logfiles
      foreach($logdir in $LogDirs)
       {
        del $logdir\*.log -ErrorAction SilentlyContinue
       }
      del R:\*.tmp  -ErrorAction SilentlyContinue
      
      # Set the routing for the goddamn windows shitty default gw to iSCSI target
      route delete 0.0.0.0
      route add 0.0.0.0 mask 0.0.0.0 192.168.X.X
      # Start XPUIPC
      Start-Process C:\xpuipc\xpwideclient.exe  -WorkingDirectory "C:\xpuipc" -WindowStyle Minimized
      Start-Process C:\EHID\A320_EHID.exe -ArgumentList "-run" -WorkingDirectory "C:\EHID" -WindowStyle Minimized
      Start-Sleep -Seconds 3
     }
    else
     {
      Write-Host "Already working"
      $startFlag=0
     }
    
    # Cycle forever
    while ( 2 -ge 1)
    {
     # Clear the flag
     $failFlag = 0
     
     # Get the list of the failed devices 
     $FailedDevices = Get-WmiObject Win32_USBControllerDevice |%{[wmi]($_.Dependent)} | Where-Object {$_.Status -ne "OK"}
     foreach($fDevice in $FailedDevices)
      {
       # Set the flag to restart the processes
       $failFlag = 1
       # Disable and then enable device
       $dDev = Get-Device | Where-Object {$_.InstanceID -eq $fDevice.DeviceID}
       Write-Warning "Failed device found:" $fDevice.DeviceID
       Disable-Device -TargetDevice $dDev -Verbose
       Enable-Device -TargetDevice $dDev -Verbose  
      }
     
     # Detect hang of A320_EHID 
     # Create IP Endpoint 
     $End = New-Object System.Net.IPEndPoint $address, $port 
    
     # Create Socket 
     $Saddrf = [System.Net.Sockets.AddressFamily]::InterNetwork 
     $Stype = [System.Net.Sockets.SocketType]::Stream 
     $Ptype = [System.Net.Sockets.ProtocolType]::TCP 
    
     # Create byte array  
     [Byte[]] $Message = 0x02,0x03,0x00,0x04
     
     $buffer = new-object System.Byte[] 8192    
    
     Try 
      {
       $Sock = New-Object System.Net.Sockets.Socket $saddrf, $stype, $ptype
       $Sock.TTL = 26 
       $Sock.ReceiveBufferSize = 8192;
       $Sock.ReceiveTimeout = 500;
       $Sock.Blocking = 1;
       # Connect to socket 
       $Sock.Connect($end)
       $Sent = $Sock.Send($Message)    
       Start-Sleep -m 30  
       $Received = $Sock.Receive($buffer)  
       $Sock.Close()
      } 
     Catch [Exception]
      {
       Write-Host "Error checking EHID"  $_.Exception.Message;
       $failFlag=1;
      }
     
     # Detect restart file-flag
     $FileExists = (Test-Path "R:\restart.txt" -PathType Leaf)
     if ($FileExists)
      {
       Write-Host "Restart file exists!"
       del R:\restart.txt
       $failFlag = 1
      }
      
     # Restart the processes
     if ($failFlag -eq 1) 
      {
       Write-Warning "Restarting processes"
       Write-Warning "Freezing..."
       Start-Process C:\scripts\sim_pause.exe -WorkingDirectory "C:\scripts" -WindowStyle Minimized
       
       Stop-Process -Name A320_EHID -force -ErrorAction silentlycontinue
       Stop-Process -Name pmFBW -force -ErrorAction SilentlyContinue
       Stop-Process -Name pmSystems -force -ErrorAction SilentlyContinue
       Stop-Process -Name MCDU -force -ErrorAction SilentlyContinue
       Stop-Process -Name RMCDU -force -ErrorAction SilentlyContinue
       Stop-Process -Name FCU -force -ErrorAction SilentlyContinue
    
       # Set start flag
       $startFlag=1
      }
      
     if ($startFlag -eq 1)
      { 
       Start-Process C:\EHID\A320_EHID.exe -ArgumentList "-run" -WorkingDirectory "C:\EHID" -WindowStyle Minimized
       Start-Sleep -Seconds 3
      }
    
      # FIXME Workaround for the falling PM processes
     $p = Get-Process -Name RMCDU -ErrorAction silentlycontinue 
     if (!($p))
      {
       Write-Host "RMCDU dead, restarting."
       Start-Process C:\RMCDU\RMCDU.exe -WorkingDirectory "C:\RMCDU" -WindowStyle Minimized
      }
      
     $p = Get-Process -Name FCU -ErrorAction silentlycontinue 
     if (!($p))
      {
       Write-Host "FCU dead, restarting."
       Start-Process C:\FCU\FCU.exe -WorkingDirectory "C:\FCU"
      }    
    
     $p = Get-Process -Name MCDU -ErrorAction silentlycontinue 
     if (!($p))
      {
       Write-Host "MCDU dead, restarting."
       Start-Process C:\MCDU\MCDU.exe -WorkingDirectory "C:\MCDU"
      }
        
     $p = Get-Process -Name pmFBW -ErrorAction silentlycontinue
     if (!($p))
      {
       Write-Host "pmFBW dead, restarting."
       Start-Process C:\FBW\pmFBW.exe -WorkingDirectory "C:\FBW"
      }
      
     $p = Get-Process -Name pmSystems -ErrorAction silentlycontinue
     if (!($p))
      {
       Write-Host "pmSystems dead, restarting."
       Start-Process C:\pmSystems\pmsystems.exe -WorkingDirectory "C:\pmSystems"
      }  
     
     if ($startFlag -eq 1)
      { 
       # Clear the flag and start the processes
       $startFlag = 0   
       Start-Sleep -Seconds 45	
       Write-Warning "Un-Freezing..."
       Start-Process C:\scripts\sim_unpause.exe -WorkingDirectory "C:\scripts" -WindowStyle Minimized
      }
     Start-Sleep -Seconds 5	
    }
    


    X-Plane, Tiller и костыль

    Тиллер — это рукоятка управления разворотом передней стойки. Нужен для руления на земле.
    Рулить можно двумя способами — тиллером и педалями. По достижению определенной скорости, тиллер перестает действовать, остаются только педали.

    Проблема в том, что в X-Plane (по признанию его автора) «потеряли» датареф, т.е. внутреннюю переменную, куда можно было бы записать положения тиллера.
    Кроме этого, если к X-Plane не подключено джойстика, то он считает, что мы — убогие нищие симмеры, которые летают на клавиатуре, и поэтому нужно делать разворот передней стойки по командам от штурвала-сайдстика.

    У меня была весьма бурная переписка на эту тему с автором X-Plane Остином Мейером (в ходе которой он показал себя истеричным козлом, пардон муа), который пообещал исправить этот косяк в одном из релизов. Ждем.

    Пока мы ждем, я написал костылик, который с одной стороны цепляется к виртуальному джойстику (VJoy), а с другой — через сеть и EHID забирает значение положения рукоятки тиллера.
    В X-Plane я назначил единственную ось — этот самый тиллер, и, в глазах X-Plane, мы перестали быть нищебродами, в связи с чем функционал разворота колёс сайдстиком отключился.
    Ничего сложного или необычного в этом костыле нету, поэтому не вижу смысла приводить исходники. Написано за час на .NET по-моему.

    Заключение

    На этом я пожалуй остановлюсь, и так пост получился очень толстым.
    В следующей части будут слайды и история строительства Аирбаса.
    Для затравки — фотография из этого этапа:


    Спасибо, что дочитали!
    Метки:
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 23
    • 0
      Симмерский вопрос: какая «модель» используется внутри X-Plane, тоже NDA, или какая-то доступная для широких масс?
      • 0
        Ничего секретного ;)
        Я взял QPAC A320, выкинул оттуда самое ценное — т.е. плагин (поскольку у нас есть Project Magenta), исправил косяки с расположением и объемом баков, поправил размеры рулевых поверхностей и тягу двигателей.

        Потом наши друзья, лучше разбирающиеся в моделях X-Plane еще немного ее подправили и натянул нашу фирменную ливрею.
        • 0
          Не думали в публичный доступ выложить подправленный вариант?
          • 0
            Он бесполезен для большинства — плагин выкинут, баки переправлены, кокпита нету вообще.
      • 0
        Такую интересность-то и не дочитать!
        Поражаюсь вашему опыту и умениям решать нестандартные задачи.
        • 0
          Спасибо. На самом деле, опыт нарабатывается в процессе, и к А320, пожалуй, тоже следовало бы написать lessons learned.
        • 0
          С интересом прочитал эту и прошлую статьи. Осталось немного непонятна общая концепция симулятора. Поправьте, если я неправильно понимаю:

          Есть куча элементов управления внутри кабины, по сути являющихся джойстиками, переключателями, лампочками и экранчиками. Ну, если для чайников, что-то подобное можно сделать на микроконтроллерах вроде ардуино. Они образно говоря в виде десятков джойстиков видны в некоей программе (программах) от Project Purple, которая с другой стороны является интерфейсом с X-Plane. Это правильное представление?

          Уточните пожалуйста, чем отличается работа X-Plane в таком режиме? Каким образом происходит взаимодействие с контроллерами, в том числе показания и фидбэк? Ведь как я понимаю за математическую модель отвечает именно в X-Plane. И вообще, сейчас получается, что три компьютера получая синхронное управление обсчитывают одну модель и выводят картинку каждый в своем ракурсе?
          • +2
            Они образно говоря в виде десятков джойстиков видны в некоей программе (программах) от Project Purple, которая с другой стороны является интерфейсом с X-Plane. Это правильное представление?

            Почти. Между железом и Project Magenta стоит EHID. Ну и FCU у нас подключается в обход EHID, такова особенность именно этой реализации железки.

            Каким образом происходит взаимодействие с контроллерами, в том числе показания и фидбэк?

            Если я правильно понял вопрос, то: человек жмет кнопку «запуск ВСУ». От контроллера событие прилетает в EHID, оттуда — в pmSystems. В нем есть скрипт, в котором написано, что если нажали кнопку запуска ВСУ, то надо проверить наличие топлива в баке, включить таймер и выставить флаг «ВСУ запускается». Этот флаг через шину FSUIPC (в X-Plane это XPUIPC) попадает в X-Plane, в модели внутри что-то перещелкивает и X-Plane начинает воспроизводить звук заводящейся ВСУ.
            После того, как в pmSystems истек таймер запуска, она выставляет флажок «ВСУ запущено», что опять прилетает в X-Plane.
            Кроме этого, скрипт в pmSystems через EHID посылает флажок «зажечь светодиод доступности ВСУ», выставляет положение контакторов электрических сетей в «от ВСУ», посылает соответствующий флаг в X-Plane. Ну и так далее.

            И вообще, сейчас получается три компьютера получая синхронное управление обсчитывают одну модель и выводят картинку каждый в своем ракурсе?

            Нет, не так. Обсчитывает модель только один компьютер — тот, что отвечает за динамику. Четыре остальных получают от главного местоположение в пространстве, и, в соответствии со своими локальными настройками, генерируют картинку.
            Именно поэтому важно, чтобы, скажем, настройки отображения облаков, не говоря уже о сценариях (т.е. видов на землю) совпадали у всех трёхпяти, иначе картинка от трёх проекторов не соберется.
            • 0
              Спасибо, все прояснили.
              • +2
                Не первый раз мне такой вопрос задают, так что сделал усилие над собой и нарисовал картинку.
          • +1
            Дурацкой ошибкой было повесить внутренний блок над электрическим щитом, поэтому пришлось уделить особое внимание дренажу. Тьфу-тьфу, эксцессов не было, но к следующему лету я установлю дренажный насос, чтобы уж точно.

            По возможности, помимо дренажа, рекомендую плотно прикрутить к стене под блоком какой-нибудь жёлоб, который бы отводил жидкость самотёком в безопасное место (если таковое есть) в случае протечки из блока. Помпа — увы, не панацея: сталкивался. Сделать можно, наверное, из чего угодно, лишь бы гнулось и не впитывало воду.
            • 0
              Да, спасибо за идею, у меня тоже была мысль хотя бы козырек соорудить. Отводить есть куда — за стенкой улица.
            • +1
              Привет.

              Так и не доделал я A320 PFD на raspberry pi :( Наверное, по этой фразе ты вспомнишь меня :) Здорово, что получилось с rsync, идея с подменой файликов во время их открытия была довольно безумной.

              Винда сейчас живёт ради PM или ради контроллера приводов платформы? PM, имхо, не особо подходит для эйрбасов, из-за их идеологии. Flight sim labs обещали отличную модель, но до сих пор это всё слова, а так хочется попробовать модельку с настоящим FBW, и всеми системами, а не как в QPAC.
              • 0
                Привет, помню ;)

                Вообще, FBW в PM работает весьма сносно, другое дело, что ощущения на ручке сайдстика — не очень.

                Винда и из-за PM, и из-за софта платформы. Более того, в следующем проекте будет стоять винда и на X-Plane, поскольку и дешевле, и качественнее делать один мощный image generator, а с него уже бить изображение при помощи TrippleHead2Go, а кривить при помощи Sol7.

                В модель со «всем всем всем» я не очень верю, поскольку возникает «проблема ПроТу-154», когда на экране все очень красиво, но интерфейс с железом сделать — практически невозможно, т.к. плагин должен экспортировать наружу слишком уж много переменных.
                • 0
                  А что лучше XPlane + QPAC?
                  • 0
                    Вот эти ребята обещают прям новый уровень реализма систем и авионики: www.flightsimlabs.com/aircraft/a320/.Но обещают они уже давно, а покупать пока нечего. В QPAC, на сколько это видно снаружи, правильная реализация самолёта, с FMGS (это мои догадки, код я естественно не видел), но системы, можно сказать, отсутствуют. В project magenta FBW реализован как прослойка между реальным и виртуальным джойстиком, а это не имеет ничего общего с настоящим A320.

                    Вообще, разговоры о правильной реализации A320, с FMGS, FAC, ELAC ведутся на разных форумах регулярно, но до финальной стадии, то есть модели с плагином, обычно не доходят. Но сразу вспоминается арбуз от JARDesign, они начали и сделали таки модель, памятник за это надо ставить. Но я его не пробовал ещё, хотя описания многообещающие.
                    • 0
                      В project magenta FBW реализован как прослойка между реальным и виртуальным джойстиком


                      Это не так.

                      Есть аналоговый джойстик (в нашем случае — нет, EHID-устройство, но это не принципиально), ручка выпуска-уборки закрылков, колёса горизонтального стабилизатора.

                      pmFBW принимает данные от устройств, накладывает ограничения и передает в FCU. FCU, в зависимости от режима работы, либо напрямую транслирует положения в датарефы X-Plane (через XPUIPC, но опять-таки, это не принципиально), либо обрабатывает данные как-то иначе.
                      Никакого виртуального джойстика не используется.

                      Более того, в супер-про версии PM, которая используется для сертифицируемых тренажеров, реализованы ELAC, SEC и FAC. Отключаем их — и добро пожаловать в Direct Law.
                      • 0
                        Может, я не прав, но в таком описании, когда pmFBW накладывает ограничения и передаёт в FCU — это Boeing-way какой-то. А может это только мои тараканы и на самом деле там всё ок, и ведёт себя похоже на правду :)

                        А вот ELAC, SEC и FAC — это здорово. А супер-про версия пока только у них есть, или уже на ваш А320 примеряли?
                        • 0
                          Почему? По сути дела, и в реальном А320 так сделано.
                          Это, конечно, упрощение, но по сути в реальном самолёте — так:
                          image

                          • 0
                            Да, судя по этой и другим картинкам ( homepage.ntlworld.com/paul.robinson16/roll.jpg ), сайдстики напрямую с ELAC соединены. Почему-то я был уверен, что через FMGC. Получается, что при правильных ELAC два комплекта органов управления (сайдстик и педали) должны автоматически правильно заработать. Жаль, что подробные доки в интернетах не найти.
                            • 0
                              Это противоречит логике и здравому смыслу ;) Во всех известных мне системах автопилотирования (при наличии управления человеком, естественно) система автопилотирования работает параллельно (фигурально выражаясь) с органами «прямого» управления.

                              FMGS — дополнительная система, самолёт без нее вполне летит.
                              Мой родственник-пилот А320 рассказывал, как он перегонял самолёт с неисправным FMGC на руках — было по его словам трудно, поскольку пустой А320 — очень вёрткий.
                • 0
                  У вас в предыдущем топике было обсуждение МС21, тренажер которого строят в 50 метрах от меня. Если есть какие-то вопросы, могу поспрашивать у тех, кто непосредственно командует строительством тренажера (сам имею довольно косвенное отношение к этому проекту).
                  Собственно процедурный тренажер (для обучения интерфейсу, сенсорные экраны вместо «железных» кнопок) уже готов, там сейчас тюнинг интерфейса идет активный, насколько я знаю. Железный тренажер активно строят.
                  • 0
                    Да, спасибо за возможность.

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.