Многопортовый плагин для X-Plane с интерфейсом USB/CDCСОДЕРЖАНИЕ
1. ВВЕДЕНИЕ
|
![]() |
Рис.1 |
Подключение устройств пользователя вызывет появление виртуальных COM портов, с которыми и работает плагин. Всего допускается подключение до восьми устройств. Возможно расширение этого ограничения, делается это на этапе сборки плагина заданием значения максимального количества портов.
Связь устройств (органов управления и индикации) пользователя настраивается в специальном конфигурационном файле xfcmcp.ini. В папку Resources\plugins помешается дефолтный экземпляр конфигурационного файла, использующий только встроенные datarefs и commands. Возможно создание множества конфигурационных файлов для конкретных моделей самолётов, хранящихся в папках моделей. При загрузке плагин сначала открывает файл дефолтных настроек, из которого берёт параметры коммуникационных портов и создаёт связи органов управления со встроенными datarefs и commands. Затем, получив сообщение от симулятора о типе загруженного самолёта, пытается найти конфигурационный файл xfcmcp.ini в папке самолёта.
Плагин можно скачать здесь: xfcfmc-0.6.0.zip.
История изменений: changelog.txt.
Исходный код проекта https://bitbucket.org/xflyingcat/mcp757_arduino.
Скачать актуальное состояние исходников на момент выпуска версии 0.6.0 можно здесь:
https://bitbucket.org/xflyingcat/mcp757_arduino/get/Revision_0.6.0.zip.
![]() |
Рис.2 |
Имеет вид как показано ниже:
Это текстовый протокол с STX/ETX маркерами начала и конца текстового сообщения. Обычно STX имеет код 0x02, a ETX - код 0x03. В текущей реализации эту же самую роль играют символы { и } соответственно.{252}
{ | - | Start of text (STX) |
2 | - | один из один из кодов типа событий |
52 | - | код события органа управления в шестнадцатеричном представлении |
} | - | End of text (ETX) |
1 | - | событие переключения на позицию |
2 | - | событие энкодера |
4 | - | цепь разомкнута |
8 | - | цепь замкнута |
3. Формат сообщения от плагина к устройству для семисегментных индикаторов
![]() |
Рис.3 |
4. Формат сообщения от плагина к устройству для одиночных светодиодных индикаторов
![]() |
Рис.4 |
За основу формата конфигурационного файла был взят формат файла
xarduino.ini
из проекта Криса Штроссера (Chris Strosser)
https://github.com/cstrosser/XArduino.
############################# # A L T I T U D E # ############################# # # энкодер - вращение против часовой стрелки # [Key0081] mode: command command: x737/mcp/ALTSEL-100 # # энкодер - вращение по часовой стрелке # [Key0080] mode: command command: x737/mcp/ALTSEL+100 # # просто кнопка # [Key0013] mode: command command: x737/mcp/ALTHLD_TOGGLE ################ # A/T # ################ # # тумблер # [Key0067] mode: command-toggle command_0: x737/mcp/ATHR_ARM_OFF command_1: x737/mcp/ATHR_ARM_ON
2. Датарефы и органы управления
############### # MAP ARPT # ############### # # Просто кнопка # [Key0036] mode: dataref dataref: x737/cockpit/EFISCTRL_0/ARPT_button type: float 0: 0.0 1: 1.0 ################################# # A P P R O A C H # ################################# # # Циклическое переключение кнопкой # # [Key0014] mode: loop dataref: 1-sim/AP/appButton type: int min: 0 max: 1 increment: 1 ############################# # A L T I T U D E # ############################# # # энкодер - вращение против часовой стрелки # [Key0081] mode: loop dataref: sim/cockpit/autopilot/altitude type: float max: 50000.0 min: 0.0 increment: -100.0 # # энкодер - вращение по часовой стрелке # [Key0080] mode: loop dataref: sim/cockpit/autopilot/altitude type: float max: 50000.0 min: 0.0 increment: 100.0 #---------------------------------------------------------------------- # # Многопозиционный переключатель, каждая позиция генерирует свой код # #---------------------------------------------------------------------- # ############################### # HSI MODE ROTARY APP # ############################### [Key0041] mode: dataref dataref: 1-sim/ndpanel/1/hsiModeRotary type: int 1: 0 ############################### # HSI MODE ROTARY VOR # ############################### [Key0042] mode: dataref dataref: 1-sim/ndpanel/1/hsiModeRotary type: int 1: 1 ############################### # HSI MODE ROTARY MAP # ############################### [Key0043] mode: dataref dataref: 1-sim/ndpanel/1/hsiModeRotary type: int 1: 2 ############################### # HSI MODE ROTARY PLN # ############################### [Key0044] mode: dataref dataref: 1-sim/ndpanel/1/hsiModeRotary type: int 1: 3 #---------------------------------------------------- # Когда одним органом управления нужно выполнить # более одного действия #---------------------------------------------------- ################ # F/D # ################ [Key0066] mode: dataref dataref: 1-sim/AP/fd1Switcher type: int 0: 0 1: 1 [Key0066] mode: dataref dataref: 1-sim/AP/fd2Switcher type: int 0: 0 1: 1 #---------------------------------------------------- # Трёхпозиционный тумблер на один датареф #---------------------------------------------------- ######################## # VOR / ADF 1 # ######################## [Key0069] mode: dataref dataref: x737/cockpit/EFISCTRL_0/VORADF1_sel type: int 0: 1 1: 0 [Key0068] mode: dataref dataref: x737/cockpit/EFISCTRL_0/VORADF1_sel type: int 0: 1 1: 2 #---------------------------------------------------- # Когда датареф является элементом массива #---------------------------------------------------- ################ # PANEL # ################ [Key0035] mode: dataref array: sim/cockpit2/switches/instrument_brightness_ratio index: 1 type: float 1: 1.0 0: 0.0
3. Датарефы и индикация
#----------------------------------------------------------------------------------------------- # Индикация датарефа на многоразрядном семисегментном индикаторе # # devadr - номер индикатора в гирлянде (нумерация от нуля) # port - порт устройства (0 для port_0, для нулевого порта допустимо опускать этот параметр) # pos - начальная позиция # len - длина индицируемого значения # INDnnnn- имя выделяемого ресурса, не привязано к устройствам, # nnn должно быть уникально диапзоне 0 ... 128 * N, N - количество портов #----------------------------------------------------------------------------------------------- ###### ALT 7-SEGM INDICATOR ############## [IND0000] mode: datarefPoll dataref: sim/cockpit/autopilot/altitude type: float port:0 devadr: 3 pos: 1 len: 5 #----------------------------------------------------------------------------------------------- # Индикация датарефа на одиночном индикаторе (светодиоде) # # port - порт устройства (0 для port_0, для нулевого порта допустимо опускать этот параметр) # pos - номер позиции одиночного индикатора по спецификации устройства # INDnnnn- имя выделяемого ресурса, не привязано к устройствам, # nnn должно быть уникально диапзоне 0 ... 128 * N, N - количество портов #----------------------------------------------------------------------------------------------- #### V/S LED ##### [IND0003] mode: datarefPoll dataref: x737/systems/MCP/LED_VVI_on type: int port: 0 pos:6 #-------------------------------------------------------------------------------------------------- # Редкий случай, когда индицируемое значение - бит в многоразрядном слове состояния # mask - маска для выделения нужного бита # Если нужный бит находится в разряде N (считая справа от нуля), маска должна иметь значение # 2 ^ N. Маска может быть суперпозицией масок для отдельных разрядов # Если в результате поразрядного перемножения битов получится ненулевое значене, светодиод будет # гореть #-------------------------------------------------------------------------------------------------- #### A/T ##### [IND0005] mode: datarefPoll dataref: sim/cockpit/autopilot/autopilot_state type: int pos:1 mask: 1 #### FL.CH ##### [IND0006] mode: datarefPoll dataref: sim/cockpit/autopilot/autopilot_state type: int pos:4 mask: 8 #### HDG ##### [IND0007] mode: datarefPoll dataref: sim/cockpit/autopilot/autopilot_state type: int pos:5 mask: 2 #### CMD-L ##### [IND0008] mode: datarefPoll dataref: sim/cockpit/autopilot/autopilot_mode type: int pos:12 mask: 2 #### V/S ##### [IND0009] mode: datarefPoll dataref: sim/cockpit/autopilot/autopilot_state type: int pos:6 mask: 16 #### ALT ##### [IND0010] mode: datarefPoll dataref: sim/cockpit/autopilot/autopilot_state type: int pos:7 mask: 16384 #### APP ##### [IND0011] mode: datarefPoll dataref: sim/cockpit/autopilot/autopilot_state type: int pos:9 mask: 3072 #### LOC ##### [IND0012] mode: datarefPoll dataref: sim/cockpit/autopilot/autopilot_state type: int pos:8 mask: 768
1. Загрузить плагин xfcmcp-0.5.3.zip
и разместить файлы по своим местам, как показано ниже.
Содержание архива: =================== Resources\plugins\xfcmcp.xpl - плагин, скопировать в папку Resources\plugins\ симулятора Resources\plugins\xfcmcp.ini - дефолтные настройки, скопировать в папку Resources\plugins\ симулятора for_boeing757_767_folder\xfcmcp.ini - файл с настройками для Boeing757/767 by FF&STS, поместить в папку модели самолёта (если имеется).2. Отрыть файл папка_симулятора\Resources\plugins\xfcmcp.ini и отредактировать в секции [serial] значение для port_0 согласно полученному значению в разделе 6 п.4. Ниже, для справки, часть содержимого этого файла с настройками последовательного порта.
[mode] log=on [serial] port_0=COM36 #port_1= #port_2= #port_3= [debug] keyinfo=on [operation] reload_key = 20
![]() |
![]() |
Рис.5 |
![]() |
Рис.6 |