Как настроить совместную работу SimInTech и X-Plane
X-Plane – реалистичный авиасимулятор, позволяющий использовать протокол UDP для подключения внешних систем управления. Симулятор позволяет реализовать ручное и автоматическое управление моделью с помощью внешних программ.
Настройка X-Plane
Передача пакета данных между SimInTech и X-Plane осуществляется с помощью протокола соединения UDP. Каждый пакет данных имеет длину 32 байта (8 переменных типа "Float", каждое из которых занимает по 4 байта). Например, пакет "Joystick aileron/elevator/rudder" использует четыре переменных из восьми возможных (Табл. 1). В некоторых пакетах данных при выборе разных моделей летательных аппаратов (вертолетов или самолетов) количество используемых переменных может меняться.
| 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" в соответствующих строках.
Для отображения данных на экране необходимо отметить пункты "Показать в кабине" в соответствующих строках. Данный пункт позволит отслеживать корректность организации пакета данных от системы управления.

Настройка 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-Plane).
X-Plane принимает данные через порт "49000".
Прием данных через сообщение c заголовком DATA. Настройка длины принимаемого сообщения с данными
Открыть проект "Прием данных от X-Plane через DATA.prt" и запустить X-Plane. В зависимости от количества принимаемых пакетов данных необходимо изменить настройку блока "Сервер UDP" (Рис. 2 и Рис. 3).


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

После этого настройка проекта готова к приему данных от X-Plane.
Настройка длины отправляемых данных
Для каждого отправляемого пакета данных в проекте должен быть блок "Язык программирования", подписанный в примерах как "BytePack". Для трёх принимаемых пакетов должно быть три блока с подписью "BytePack". При необходимости увеличения количества блоков необходимо скопировать уже готовый блок и дополнительно вставить его на схему. Данные блоки не требуют дополнительной настройки.
Перед отправкой данных нужно определить длину передаваемого сообщения в байтах. Для этого необходимо подсчитать количество отправляемых пакетов данных и указать это количество. В свойствах блока "Мультиплексор" необходимо установить значение количества отправляемых пакетов и добавить ещё один вход для передачи имени пакетов. В зависимости от количества передаваемых пакетов данных необходимо изменить настройку блока "Клиент UDP" (Рис. 5).

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

Для автоматического выделения всех необходимых пакетов данных можно использовать сообщение с заголовком "DSEL" (проект "Выбор пакетов данных DSEL.prt").
Создав перечень необходимых пакетов, можно сразу выделить их все (Рис. 7).


Для снятия выделения можно использовать сообщение с заголовком "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" в папку "X‑Plane/Resources/plugins/") и перезапустить X-Plane.
Убедится, что плагин "XPlaneConnect" подключился. Для этого необходимо открыть меню "Plugins->Plugin Admin->Enable/Disable" и найти название плагина в списке.


После этого можно запустить приложение "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).

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

В проекте SimInTech необходимо указать какое количество данных принимается. Для этого необходимо открыть один из примеров, например проект "Прием данных от X-Plane через XPConnect.prt".
Перед его запуском необходимо сформировать список ссылок запрашиваемых параметров "DREFs", значения которых необходимы для работы. На рисунке (Рис. 13) приведен пример с пятью ссылками, для каждой из которых запрашивается один параметр, кроме второй ссылки, где запрашивается десять параметров (с 0 по 9). Таким образом, запрашиваются данные по пяти ссылкам для двенадцати значений параметров.

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

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

Приложение-клиент "XPconnect" настроен специально для отправки параметров в SimInTech, поэтому данные передаются в виде сообщения с заголовком SIT0 (SIT - SimInTech):
SIT0[параметр_1] [параметр_2]…
то есть передаются числовые значения подряд без указания имен самих ссылок, от которых были запрошены значения. Данные передаются в том же порядке, в котором они были перечислены в "ReadDREFs.txt". Если ссылка содержит несколько значений, то они также передаются подряд:
[параметр_0] [параметр_1] [параметр_2] … и т.д.
Для примера можно открыть проект "Прием данных от X-Plane через XPConnect.prt". Номер UDP-порта в блоке "Сервер UDP" должен быть задан "49100".
- Запустить X-Plane.
- Сформировать перечень ссылок в файле "ReadDREFs.txt"
- Запустить "XPconnect.exe"
- Открыть проект в 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):

Как видно, одно и то же действие можно выполнить разными способами, но результат будет один и тот же – уборка шасси.
- Сообщение с заголовком "DATA".
Этот способ отправки данных через формирование сообщения с заголовком "DATA", содержащим пакеты данных, каждый из которых содержит девять чисел: первое число - номер пакета (целое число типа "integer") и восемь чисел с данными (числа с плавающей точкой типа "float"). Зная номер пакета данных и место нужного числа в этом пакете можно формировать пакеты данных и отправлять их в симулятор (проекты "Отправка данных в X-Plane через DATA.prt", "Обмен данными с X-Plane через DATA.prt"). Этот механизм используется во всех версиях X-Plane.
- Сообщение с заголовком "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
- Сообщение с заголовком "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" является наиболее простым, однако, не является универсальным, так как при использовании на разных компьютерах одной и той же буквы для разных команд в результате отправки одного и того же сообщения будут выполнены разные команды.
- Сообщение с заголовком "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 для настройки графики, автоматического управления меню т.д., и в данном Руководстве они не рассматривались.