Как настроить совместную работу SimInTech и X-Plane?

X-Plane – реалистичный авиасимулятор, позволяющий использовать протокол UDP для подключения внешних систем управления. Симулятор позволяет реализовать ручное и автоматическое управление моделью с помощью внешних программ.

Настройка X-Plane

Передача пакета данных между SimInTech и X-Plane осуществляется с помощью протокола соединения UDP. Каждый пакет данных имеет длину 32 байта (8 переменных типа «Float», каждое из которых занимает по 4 байта). Например, пакет «Joystick aileron/elevator/rudder» использует четыре переменных из восьми возможных (Таблица 1). В некоторых пакетах данных при выборе разных моделей летательных аппаратов (вертолетов или самолетов) количество используемых переменных может меняться.

Таблица 1. Структура пакета данных № 11
elevator aileron rudder --- nwhel --- --- ---
Положение руля высоты Положение элеронов Положение руля направления   Положение переднего колеса      
-1.0…1.0 -1.0…1.0 -1.0…1.0 --- -1.0…1.0 --- --- ---

Внимание: для передачи данных с помощью протокола UDP необходимо активное сетевое подключение. При отсутствии подключений к сети, можно установить виртуальный сетевой адаптер.

После запуска X-Plane необходимо открыть модель летательного аппарата, с которой предстоит работать. Выбор типа летательного аппарата влияет на набор данных, которые будут обрабатываться, так как для самолетов и вертолетов они отличаются. Более того, наборы нужных данных могут отличаться для вертолетов разных компоновочных схем - соосной и одновинтовой с рулевым винтом.

Для выбора данных, которые будут передаваться авиасимулятором через UDP-порт необходимо нажать кнопку «Открыть окно настроек» после чего появится окно с таблицей пакетов данных (Рисунок 1).

Перед выбором данных для дальнейшей передачи необходимо установить номер порта соединения UDP.

В разделе «Вывод данных» установить пункт «Отправить выходные данные сети», задать пункт «IP-адрес» равным «127.0.0.1» (адрес локального хоста) и задать в пункте «Порт» порт «49001» (номер порта может быть произвольным) на который будет происходить передача данных из X-Plane.

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

Для отображения данных на экране необходимо отметить пункты «Показать в кабине» в соответствующих строках. Данный пункт позволит отслеживать корректность организации пакета данных от системы управления.

Рисунок 1. Окно настроек.

Настройка SimInTech

Для работы в SimInTech необходимо открыть один из проектов «Прием данных от X-Plane через DATA.prt», «Отправка данных в X-Plane через DATA.prt», «Обмен данными с X-Plane через DATA.prt» или другие проекты из папки с каталогом SimInTech (по умолчанию диск «C:») «SimInTech\Demo\Интеграция со сторонним ПО\X-Plane». В проектах реализована связь SimInTech с авиасимулятором X-Plane.

Перед запуском любого из проектов необходимо проверить номера IP-адресов в блоках «Сервер UDP» и «Клиент UDP» (адрес «127.0.0.1» используется для работы X-Plane и SimInTech на локальном компьютере) и номера UDP-портов.

X-Plane отправляет данные через порт «49004» (номер порта может быть произвольным и должен соответствовать порту установленному в X-Plan).

X-Plane принимает данные через порт «49000».

Прием данных через сообщение c заголовком DATA

Настройка длины принимаемого сообщения с данными

Открыть проект «Прием данных от X-Plane через DATA.prt» и запустить X-Plane. В зависимости от количества принимаемых пакетов данных необходимо изменить настройку блока «Сервер UDP» (Рисунок 2 и Рисунок 3).

Рисунок 2. Подсчёт количества выбранных пакетов данных.

Рисунок 3. Настройка свойств блока «Сервер UDP».

Для каждого принимаемого пакета данных в проекте должен быть блок «Язык программирования», подписанный в примерах как «ByteUnPack». Для трёх принимаемых пакетов должно быть три блока с подписью «ByteUnPack». При необходимости увеличения количества блоков необходимо скопировать уже готовый блок и дополнительно вставить его на схему. Данные блоки не требуют дополнительной настройки.

Для подключения всех блоков «ByteUnPack» необходимо иметь соответствующее количество выходов в блоке «Демультиплексор» (Рисунок 4). Для его настройки необходимо указать количество байт принимаемых пакетов данных. В свойствах блока «Демультиплексор» в поле «Формула» задать значение свойства «Массив размерностей выходов» равным «[5,36*3#1]» (5 – размер имени пакетов, 36 – размер пакета, 3#1 – количество пакетов).

Рисунок 4. Настройка свойств блока «Демультиплексор».

После этого настройка проекта готова к приему данных от X-Plane.

Настройка длины отправляемых данных

Для каждого отправляемого пакета данных в проекте должен быть блок «Язык программирования», подписанный в примерах как «BytePack». Для трёх принимаемых пакетов должно быть три блока с подписью «BytePack». При необходимости увеличения количества блоков необходимо скопировать уже готовый блок и дополнительно вставить его на схему. Данные блоки не требуют дополнительной настройки.

Перед отправкой данных нужно определить длину передаваемого сообщения в байтах. Для этого необходимо подсчитать количество отправляемых пакетов данных и указать это количество. В свойствах блока «Мультиплексор» необходимо установить значение количества отправляемых пакетов и добавить ещё один вход для передачи имени пакетов. В зависимости от количества передаваемых пакетов данных необходимо изменить настройку блока «Клиент UDP» (Рисунок 5).

Рисунок 5. Настройка свойств блока «Клиент UDP».

После этого проект готов к передаче данных от X-Plane. Можно запускать X-Plane и наблюдать за приемом данных.

Контроль приема отправленных из SimInTech данных в X-Plane

Для контроля принимаемых данных необходимо включить отображение на экран тех же пакетов данных, которые отправляются из SimInTech в X‑Plane. Например, если отправлять пакет данных «№8», то можно будет контролировать отклонение рулевых поверхностей воздушного судна (руля высоты, элеронов, руля направления) по отображаемым данным на экране X‑Plane и визуально.

Рисунок 6. Отображение выбранных пакетов данных на экране X-Plane.

Для автоматического выделения всех необходимых пакетов данных можно использовать сообщение с заголовком «DSEL» (проект «Выбор пакетов данных DSEL.prt»).

Создав перечень необходимых пакетов, можно сразу выделить их все (Рисунок 7).

Рисунок 7. Автоматическое выделение нескольких пакетов данных.

Рисунок 8. Настройка длины передаваемого сообщения «DSEL» в «Клиент UDP».

Для снятия выделения можно использовать сообщение с заголовком «USEL» (проект «Отмена выбора пакетов данных USEL.prt»). Принцип работы аналогичен сообщению с заголовком «DSEL» – необходимо указать номера пакетов, которые не будут выделены для отправки в порт UDP.

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

Аналогично используются сообщения с заголовками «DCOC» (проект «Выбор пакетов данных DCOC.prt») и «UCOC» (проект «Отмена выбора пакетов данных UCOC.prt») для автоматического выделения или снятия выделения пакетов данных соответственно для их отображения на экране X-Plane.

Прием данных через ссылки DREFs

Возможен прием данных от X-Plane другим способом – через плагин «XPlaneConnect», содержащийся в «Приложения/Приложение 9. X-Plane_Connect» (для его установки необходимо скопировать папку «XPlaneConnect_plugin» в папку «XPlane/Resources/plugins/») и перезапустить X-Plane.

Убедится, что плагин «XPlaneConnect» подключился. Для этого необходимо открыть меню «Plugins->Plugin Admin->Enable/Disable» и найти название плагина в списке.

Рисунок 9. Выбор пунктов меню плагинов.

Рисунок 10. Список доступных плагинов.

После этого можно запустить приложение «XPconnect» и открыть проект SimInTech «Прием данных от X-Plane через XPConnect.prt». В файле «ReadDREFs.txt» необходимо перечислить названия всех ссылок на данные, которые будут передаваться с помощью плагина через UDP-порт «49100».

Если программа «XPconnect» не запускается, необходимо установить библиотеки «Microsoft Visual C++ 2015 Redistributable» из папки «Если не запускается XPconnect» или скачать по ссылке https://www.microsoft.com/en-US/download/details.aspx?id=53587.

Полный перечень ссылок приведен в «Приложения/Приложение 3. Перечень ссылок на данные DataRefs». Значения перечисленных в «ReadDREFs.txt» ссылок передаются в той же последовательности, в которой они перечислены.

При запуске X-Plane должно открыться окно (Рисунок 11).

Рисунок 11. Окно приложения «XPconnect» при нормальной отправке данных.

При неправильной установке плагина, либо не запущенном X-Plane и т.д., в окне появятся сообщения об ошибках (Рисунок 12).

Рисунок 12. Сообщения об ошибках.

В проекте SimInTech необходимо указать какое количество данных принимается. Для этого необходимо открыть один из примеров, например проект «Прием данных от X-Plane через XPConnect.prt».

Перед его запуском необходимо сформировать список ссылок запрашиваемых параметров «DREFs», значения которых необходимы для работы. На рисунке (Рисунок 13) приведен пример с пятью ссылками, для каждой из которых запрашивается один параметр, кроме второй ссылки, где запрашивается десять параметров (с 0 по 9). Таким образом, запрашиваются данные по пяти ссылкам для двенадцати значений параметров.

Рисунок 13. Список запрашиваемых ссылок.

В окне «XPconnect» можно посмотреть количество передаваемых параметров (Рисунок 14).

Рисунок 14. Окно «XPconnect».

Это количество необходимо указать в проекте SimInTech (Рисунок 15), а именно в свойствах блока «Сервер UDP» для настройки длины принимаемого сообщения и в блоке «Язык программирования», в котором происходит обработка принятых данных и выдача значений параметров в виде чисел типа «float».

Рисунок 15. Настройка свойств блока «Сервер UDP».

Приложение-клиент «XPconnect» настроен специально для отправки параметров в SimInTech, поэтому данные передаются в виде сообщения с заголовком SIT0 (SIT - SimInTech):

SIT0[параметр_1] [параметр_2]…

то есть передаются числовые значения подряд без указания имен самих ссылок, от которых были запрошены значения. Данные передаются в том же порядке, в котором они были перечислены в «ReadDREFs.txt». Если ссылка содержит несколько значений, то они также передаются подряд:

[параметр_0] [параметр_1] [параметр_2] … и т.д.

Для примера можно открыть проект «Прием данных от X-Plane через XPConnect.prt». Номер UDP-порта в блоке «Сервер UDP» должен быть задан «49100».

  1. Запустить X-Plane.
  2. Сформировать перечень ссылок в файле «ReadDREFs.txt»
  3. Запустить «XPconnect.exe»
  4. Открыть проект в SimInTech, настроить его, запустить и получить значения от симулятора X-Plane.

Для формирования списка ссылок «ReadDREFs.txt» может пригодиться плагин «DataRefEditor» (содержится в «Приложения/Приложение 9. X-Plane_Connect» или можно скачать по ссылке https://xsquawkbox.net/xpsdk/mediawiki/DataRefEditor) – он выводит значения всех ссылок на экран. В списке можно найти нужную ссылку и переписать. Сохранить список «ReadDREFs.txt» в одной папке с «XPconnect.exe». В каждой строчке должна быть только одна ссылка.

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

sim/flightmodel/engine/ENGN_thro float[8]

по одной ссылке можно получить сразу восемь значений для каждого из восьми двигателей (при их наличии в модели самолета). В этом случае в файле «ReadDREFs.txt» для получения восьми значений необходимо указать ссылку:

sim/flightmodel/engine/ENGN_thro[7]

где «7» обозначает размер массива данных.

Для приема данных для двух двигателей в файле «ReadDREFs.txt» необходимо все равно писать для приема полного набора данных для этой ссылки:

sim/flightmodel/engine/ENGN_thro[7]

но использовать только первые два значения: [0, 1]. Количество параметров для каждой ссылки определено в папке «Приложения/Приложение 3. Перечень ссылок на данные DataRefs».

Если необходимо принимать только одно значение, например, положение переключателя положения шасси (крана шасси) по ссылке:

sim/cockpit/switches/gear_handle_status

то в файле «ReadDREFs.txt» необходимо написать строку:

sim/cockpit/switches/gear_handle_status[0]

или

sim/cockpit/switches/gear_handle_status

без указания количества значений (в этом случае по умолчанию будет приниматься 1 значение для этой ссылки.

Максимальное количество ссылок 255, то есть в файле «ReadDREFs.txt» должно быть не более 255 строк.

Максимальное количество значений для одной ссылки 200:

sim/network/dataout/data_to_internet int[200]

sim/network/dataout/data_to_disk int[200]

sim/network/dataout/data_to_graph int[200]

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

Кроме того, есть возможность принимать данные сразу двумя способами – через сообщения от X-Plane с заголовком «DATA» и через плагин (Для примера можно ознакомиться с проектом «Прием данных от X-Plane через DATA + XPConnect.prt»). Оба способа работают независимо друг от друга.

Отправка данных в X-Plane

Данные в X-Plane можно оправить в сообщениях с разными заголовками. Например, чтобы убрать шасси можно отправить одно из сообщений (список сообщений можно найти в папке «Приложения/Приложение 7. Примеры сообщений на уборку шасси (с разными заголовками).xlsx») (Рисунок 16):

Рисунок 16. Примеры сообщений для уборки шасси.

Как видно, одно и то же действие можно выполнить разными способами, но результат будет один и тот же – уборка шасси.

  1. Сообщение с заголовком «DATA».

    Этот способ отправки данных через формирование сообщения с заголовком «DATA», содержащим пакеты данных, каждый из которых содержит девять чисел: первое число - номер пакета (целое число типа «integer») и восемь чисел с данными (числа с плавающей точкой типа «float»). Зная номер пакета данных и место нужного числа в этом пакете можно формировать пакеты данных и отправлять их в симулятор (проекты «Отправка данных в X-Plane через DATA.prt», «Обмен данными с X-Plane через DATA.prt»). Этот механизм используется во всех версиях X-Plane.

  2. Сообщение с заголовком «DREF».

    Существует способ задавать значения различных данных с помощью сообщения с заголовком «DREF» (проект «Отправка данных в X-Plane через DREF.prt»). Это сообщение также должно содержать значение передаваемого параметра и ссылку на него в виде строки. Перечень ссылок приведен в «Приложения/Приложение 3. Перечень ссылок на данные DataRefs».

    В этом случае не нужно знать номер пакета и место параметра в этом пакете для изменения его значения, но нужно точно знать название ссылки. Кроме того, ссылок «DREF» на параметры намного больше (более четырёх тысяч), чем параметров на вкладке «DataInput&Output» в ста тридцати двух пакетах данных (132*8=1056), поэтому использование сообщений с заголовком «DREF» дает доступ к большему числу параметров, чем при использовании сообщений с заголовком «DATA», однако, далеко не все из них бывают нужны для работы.

    Найти нужную ссылку на параметр можно просмотрев величину всех «DREF» используя плагин «DataRefEditor» (скачать по ссылке https://xsquawkbox.net/xpsdk/mediawiki/DataRefEditor).

    Внимание: в файле «Приложения/Приложение 3. Перечень ссылок на данные DataRefs» напротив каждой ссылки указано его свойство доступа («y» – чтение/запись; «n» - только для чтения), например:

    sim/cockpit/switches/gear_handle_status int y

    sim/cockpit/autopilot/airspeed_mode int n

  3. Сообщение с заголовком «CHAR».

    В X-Plane доступны команды, которые могут быть выполнены по нажатию клавиш клавиатуры. Для этого в настройках симулятора можно назначить (команды уже назначенные по умолчанию можно найти в разделе «Приложения/Приложение 4. Управление в X-Plane с клавиатуры (по умолчанию)») выполнение команд по нажатию клавиш клавиатуры и выполнять эти команды вручную, нажимая на соответствующие клавиши, или автоматически путем отправки в X-Plane сообщения с заголовком «CHAR» (проект «Отправка нажатий клавиатуры через CHAR.prt»), содержащим символ, соответствующий клавише клавиатуры. Например, нажатия одной и той же клавиши в разном регистре «g» или «G» воспринимаются как две разные кнопки. Учитывается также раскладка клавиатуры. Таким образом, на одну и ту же клавишу на клавиатуре могут быть назначены четыре разные команды. В каждом из этих случаев в сообщении будет содержаться разный код символа в коде ASCII в виде целого числа («g»=103, «G»=71) (Перечень кодов ASCII можно найти в разделе «Приложения/Приложение 5. Перечень кодов ASCII для CHAR»).

    Формируя сообщение с нужным содержанием, можно имитировать нажатия этих кнопок и выполнять команды (перечень команд в «Приложении 2. Перечень команд CMND»).

    Внимание: невозможно передать сообщение о нажатии сочетаний клавиши CTRL и какой-либо ещё клавиши <CTRL + “…”>, хотя такое сочетание можно задать в меню X-Plane на выполнение команды и выполнять её вручную.

    Для отправки сообщения с заголовком «CHAR» такая комбинация клавиш неприемлема, поэтому необходимо переназначить команду.

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

  4. Сообщение с заголовком «CMND».

    Сообщения с заголовком «CMND» обрабатываются так же, как и сообщения с заголовком «CHAR», но команды выполняются по их названию, а не по имитации нажатия соответствующей клавиши клавиатуры. Перечень всех команд приведен в разделе «Приложении 2. Перечень команд CMND»).

    Внимание: сообщения с заголовком «CMND» поддерживаются не во всех версиях симулятора, а только с версии «X-Plane 10.40» и новее. В более ранних версиях симулятор не реагирует на такие сообщения.

Структура всех вышеописанных сообщений приведена в разделе «Приложения/Приложение 6. Структура сообщений с разными заголовками».

Кроме того, инструкции по отправке сообщений для разных версий X‑Plane содержатся в установочной папке с симулятора:

«…X-Plane\Instructions\Sending Data to X-Plane»

Эти инструкции для X-Plane 9,10 и 11 приведены в Приложении 8.1, 8.2 и 8.3 соответственно. В них описаны все возможные виды сообщений (и их структура), которые может принимать X‑Plane для настройки графики, автоматического управления меню т.д., и в данном Руководстве они не рассматривались.