Подключение блоков авиационных приборов к авиасимулятору X-Plane
Лабораторная работа №2
Введение
В данной лабораторной работе будет создан список сигналов проекта, рассмотрена модель,
реализующая прием от авиасимулятора значений этих сигналов, настроены свойства блоков
авиационных приборов для вывода на индикацию значений сигналов в соответствии с алгоритмами,
реализованными внутри блоков.
Цель работы
Ознакомиться с подключением блоков авиационных приборов и индикаторов к
сигналам, значения которых принимаются от авиасимулятора
Изучить возможности SimInTech по разработке и моделированию приборных
панелей
Задачи работы
Изучить способ управления индикацией блоков из подгруппы Авиационные приборы через список сигналов
Разработать модель приема данных от авиасимулятора X-Plane
Отобразить значения сигналов, принятых от авиасимулятора, в блоках из подгруппы
Авиационные приборы
Выполнение лабораторной работы
В данной лабораторной работе будут рассмотрены блоки из подгрупп Авиационные приборы из библиотеки Индикаторы, которые возможно использовать для
разработки приборных панелей с авиационными приборами.
Для этого необходимо выполнить следующее:
добавить в проект блоки из подгруппы Авиационные приборы
разработать модель приема данных от авиасимулятора X-Plane
настроить свойства блоков для отображения значений соответствующих сигналов,
принимаемых от авиасимулятора
Создание нового проекта
Для формирования проекта необходимо нажать левой кнопкой мыши в главном окне SimInTech на
вкладку Файл и выбрать подпункт Новый проект, после чего выбрать пункт
Схема модели общего вида.
Откроется новое окно проекта Схема модели общего вида, в котором будет проходить
разработка модели прохождения сигналов на индикацию.
Требуется сохранить созданный проект. Для этого:
В главном окне SimInTech нажать кнопку
Файл и выбрать пункт
Сохранить проект как
В появившемся окне выбрать или при необходимости создать папку, в которую будет
сохранен данный проект
В поле Имя файла указать желаемое имя проекта либо оставить имя проекта по
умолчанию и нажать на кнопку Сохранить
Создание списка сигналов проекта
Необходимо создать в проекте список сигналов, значения которых будут приниматься от
авиасимулятора и использоваться в свойствах блоков для вывода на индикацию. Для этого
необходимо в главном окне SimInTech нажать кнопку
Сервис и выбрать пункт
Сигналы (Рисунок 1).
Рисунок 1. Главное окно SimInTech с выбранным пунктом "Сигналы" в меню "Сервис".
В открывшемся окне Список сигналов проекта необходимо нажать кнопку Добавить сигнал (Рисунок
2).
Необходимо добавить 5 сигналов, для каждого из которых нужно задать имя и название.
Перечень имен и названий сигналов представлен в таблице (Таблица 1). Для всех
добавляемых сигналов тип данных должен иметь значение "Вещественное".
Таблица 1. Перечень имен и названий сигналов, которые необходимо добавить в окне "Список
сигналов проекта"
№ п/п
Имя
Название
1
Sim_Local_time
Местное время
2
Sim_Ny
Перегрузка
3
Sim_Tangaj
Угол тангажа
4
Sim_Kren
Угол крена
5
Sim_Ataka
Угол атаки
Окно Список сигналов проекта после добавления всех сигналов должно выглядеть
аналогично рисунку (Рисунок
3).
Рисунок 3. Окно "Список сигналов проекта" с добавленными сигналами.
Разработка модели приборной панели воздушного судна
Требуется добавить на схему блоки Авиагоризонт с прямой индикацией.
Указатель угла атаки и перегрузки и Авиационные часы, находящиеся в
подгруппе Авиационные приборы из вкладки Индикаторы (Рисунок 4). Для
добавления блоков на схему необходимо в главном окне SimInTech в палитре блоков выбрать
вкладку Индикаторы и, выбрав нужный блок одинарным нажатием левой кнопки мыши,
поместить его на схему повторным нажатием левой кнопки мыши на рабочей области проекта.
Рисунок 4. Главное окно SimInTech с выбранной вкладкой "Индикаторы" в палитре блоков и
открытым подменю "Авиационные приборы".
Необходимо с панели графических примитивов добавить в окно проекта 1 примитив
Кнопка и 2 примитива Текст (Рисунок 5) и расположить
их под блоком Авиационные часы (Рисунок 6).
Рисунок 5. Главное окно программы с панелью примитивов с выделенной кнопкой вызова окна
примитивов и выделенными примитивами "Текст" и "Кнопка".
В графическом примитиве Текст над примитивом Кнопка необходимо задать
текст "Системное время ПК", а под примитивом Кнопка — "Время от
авиасимулятора". Общий вид окна проекта после добавления блоков и изменения текста в
примитивах Текст представлен на рисунке (Рисунок 6).
Рисунок 6. Окно проекта с установленными блоками.
Необходимо настроить зависимость значений свойств каждого добавленного блока из подгруппы
Авиационные приборы вкладки Индикаторы от значений добавленных
сигналов. Для этого необходимо поочередно для каждого добавленного блока из подгруппы
Авиационные приборы открыть окно свойств и записать для каждого свойства в
столбце "Формула" соответствующее значение (Таблица 2). На рисунке
(Рисунок 7)
представлен пример задания свойств блока Авиагоризонт с прямой индикацией. В
столбце "Формула" для свойства "Угол тангажа, град" необходимо записать имя
сигнала "Sim_Tangaj", для свойства "Угол крена, град" необходимо записать
имя сигнала "Sim_Kren".
Рисунок 7. Окно "Свойства" блока "Авиагоризонт с прямой индикацией".
Аналогичным образом необходимо задать свойства других блоков из подгрупп Авиационные приборы. Значения настраиваемых свойств для каждого из блоков представлены в
таблице (Таблица
2). В блоке Авиационные часы в формулах свойств (пункт 3 Таблица 2) необходимо
записать выражения для преобразования значения сигнала "Sim_Local_time" в значения
часов, минут и секунд астрономического времени.
Таблица 2. Значения задаваемых формул для свойств блоков из подгруппы "Авиационные
приборы"
Разработка модели приема данных от авиасимулятора X-Plane
Для приема сигналов от авиасимулятора необходимо составить модель приема и обработки
данных. Необходимо добавить в окно проекта блок Субмодель из вкладки
Субструктуры.
Требуется задать подпись блока, для чего необходимо выделить блок одним нажатием левой
кнопки мыши по блоку, а затем активировать поле ввода подписи блока двойным нажатием левой
кнопки мыши по нему (Рисунок
8) и ввести текст "Прием UDP".
Рисунок 8. Окно проекта с установленным блоком "Субмодель", на котором показано поле ввода
подписи блока.
Окно проекта после добавления подписи блока Субмодель должно выглядеть
аналогично рисунку (Рисунок
9).
Рисунок 9. Окно проекта с установленным блоком "Субмодель" с заданной подписью.
Модель приема данных от авиасимулятора будет реализована внутри блока
Субмодель с подписью "Прием UDP" (далее по
тексту — субмодель "Прием UDP"). Необходимо открыть окно субмодели "Прием
UDP" двойным нажатием левой кнопки мыши по блоку. Для создания модели приема данных
через сетевой протокол UDP необходимо поместить на рабочую область субмодели "Прием
UDP" блок "Сервер UDP" из вкладки Обмен
данными и блок Демультиплексор
из вкладки Векторные.
Кроме того, для модели приема данных от авиасимулятора потребуется настроенный блок
Язык программирования с подписью
"ByteUnPack" (далее по тексту — блок "ByteUnPack"), содержащийся в одном
из демо-примеров в директории установки SimInTech. Для этого необходимо открыть проект
\SimInTech\Demo\Интеграция со сторонним ПО\X-Plane\Обмен данными с X-Plane через
DATA\Обмен данными с X-Plane через DATA.prt. В этом проекте требуется открыть
субмодель "Прием UDP" (Рисунок 10) двойным нажатием левой кнопкой мыши по блоку.
Рисунок 10. Окно проекта "Обмен данными с X-Plane через DATA.prt" с выделенной субмоделью
"Прием UDP".
После этого необходимо выделить любой из блоков "ByteUnPack" нажатием правой
кнопкой мыши по нему, в открывшемся меню выбрать пункт Копировать (Рисунок 11).
Рисунок 11. Окно проекта "Обмен данными с X-Plane через DATA.prt" с выделенным блоком
"ByteUnPack" в субмодели "Прием UDP" с выделенным меню "Копировать".
После этого необходимо вставить блок "ByteUnPack" в рабочую область субмодели
"Прием UDP" разрабатываемого проекта, для чего необходимо открыть окно субмодели,
нажатием правой кнопки мыши на свободное пространство окна проекта вызвать контекстное
меню схемного окна проекта и выбрать в нем пункт Вставить, или вставить с
использованием сочетания клавиш "Ctrl + V" (Рисунок 12).
Рисунок 12. Окно субмодели "Прием UDP" разрабатываемого проекта с выделенным пунктом
"Вставить" в меню, выпадающем при нажатии на правую кнопку мыши в пустом месте рабочей
области.
Требуется вставить в окно субмодели 4 блока "ByteUnPack", для чего необходимо
выполнить операцию вставки блока "ByteUnPack" 4 раза. После добавления блоков
"ByteUnPack" рабочая область субмодели должна выглядеть аналогично рисунку (Рисунок 13).
Рисунок 13. Окно субмодели "Прием UDP" разрабатываемого проекта после добавления блоков
"ByteUnPack".
Необходимо настроить блоки для приема данных от авиасимулятора в субмодели "Прием
UDP". Для настройки блока "Сервер UDP" необходимо открыть окно его свойств.
Для свойства "Типы данных" в столбце "Значение" необходимо указать
"Byte". В свойстве "Размерности данных соответствующие типам" в столбце
"Формула" необходимо указать "[5+36*4]", где 5 — число байт в заголовке
пакета данных (DATA#), принимаемых от X-Plane, 36 — длина одного пакета данных, (каждый
пакет данных содержит индекс пакета в виде числа типа integer (4 байта) и 8 чисел типа
float (каждое по 4 байта)), 4 — количество принимаемых пакетов данных. Для свойства
"Порт ip" в столбце "Значение" необходимо указать порт "49004",
который также должен быть задан в настройках авиасимулятора X-Plane. Для свойства
"Ожидать до прихода пакета" необходимо установить значение "Нет". Для
свойства "Массив начальных значений выходов" необходимо в столбце "Формула"
задать выражение "[(5+36*4)#0]" (Рисунок 14).
Рисунок 14. Окно "Свойства" блока "Сервер UDP" с заданными значениями в столбцах "Формула" и
"Значение".
Примечание:
Символ "#" необходим для формирования вектора заданной размерности, состоящего
из указанных элементов, то есть, в данном случае, для формирования нулевого вектора
размерностью "5+36*4".
В свойствах блока Демультиплексор необходимо задать "Массив размерностей
выходов", установив его значение "[5, 36*4#1]" (Рисунок 15). У блока
Демультиплексор после настройки должно быть 5 выходных портов.
Рисунок 15. Окно "Свойства" блока "Демультиплексор" с заданным значением в столбце
"Формула".
После настройки свойств блоков окно субмодели "Прием UDP" должно иметь вид,
представленный на рисунке (Рисунок 16).
Рисунок 16. Окно субмодели "Прием UDP" после настройки свойств блоков.
Необходимо соединить выходной порт блока "Сервер UDP" с входным портом блока
Демультиплексор. У блока Демультиплексор первый выходной порт
необходимо оставить неподключенным, так как на него поступает заголовок принятого массива
байт ("DATA#"), не содержащий значений принимаемых сигналов. Каждый следующий
выходной порт необходимо поочередно соединить с входным портом одного из блоков
"ByteUnPack". После соединения блоков рабочая область субмодели "Прием
UDP" должна выглядеть аналогично рисунку (Рисунок 17).
Рисунок 17. Рабочая область субмодели "Прием UDP" после соединения блоков.
Данные от авиасимулятора отправляются в пакетах, каждый из которых имеет свой индекс и
содержит по 8 сигналов, которые в схеме проекта выводятся через выходные порты каждого
блока "ByteUnPack". Для корректной работы проекта требуется принимать от
авиасимулятора X-Plane пакеты данных с определенными индексами и знать через какой блок
"ByteUnPack" выводится пакет данных с конкретным индексом.
Для правильного определения индексов пакетов данных, которые необходимо принимать от
авиасимулятора X-Plane, возможно использовать файл "Приложение 1. Перечень пакетов
данных.xlsx", находящийся в директории установки SimInTech в папке
\SimInTech\Demo\Интеграция со сторонним ПО\X-Plane\Приложения\
(перечень ссылок в этом файле составлен для версии X-Plane 11.41, но актуален и для более
поздних версий). Для примера на рисунке (Рисунок 18)
показано, что сигналы "pitch, deg" (угол тангажа, град), "roll, deg" (угол
крена, град) содержатся в пакете данных с индексом 17, а сигнал "alpha, deg" (угол
атаки, град) содержится в пакете данных с индексом 18. Таким образом возможно определить
индекс требуемого пакета данных. С использованием файла "Приложение 1. Перечень пакетов
данных.xlsx" установлено, что сигналы, перечисленные в таблице (Таблица 1),
содержатся в пакетах данных с индексами 1, 4, 17, 18 .
Рисунок 18. Окно файла "Приложение 1. Перечень пакетов данных.xlsx" с выделенными сигналами и
индексами пакетов данных, в которых они находятся.
Для проверки номера индекса пакета данных (для разных версий авиасимулятора номера
индексов пакетов данных с одинаковыми сигналами могут отличаться), содержащего нужный
сигнал, и определения порядкового номера сигнала в пакете данных необходимо запустить
авиасимулятор X-Plane, в главном окне нажать кнопку "Новый полет" (Рисунок 19), выбрать
любое воздушное судно и нажать кнопку "Начать полет" (Рисунок 20).
Рисунок 20. Окно "Конфигурация полета" авиасимулятора X-Plane 12 с выбранным воздушным судном
и выделенной кнопкой "Начать полет".
Для определения порядкового номера каждого сигнала в пакете данных необходимо в окне
настроек авиасимулятора включить отображение сигналов нужных пакетов данных (Рисунок 21).
Рисунок 21. Окно авиасимулятора X-Plane в режиме полета с выделенной кнопкой "Открыть окно
настроек".
Необходимо перейти во вкладку "Вывод данных" и отметить пакеты данных с индексами
1, 4, 17, 18 в столбцах "Показать в кабине" и "Сеть через UDP". Для отправки
данных необходимо отметить пункт "Отправить выходные данные сети", после чего в
появившихся пунктах ввести IP-адрес "127.0.0.1", порт "49004", после чего
нажать кнопку "Готово" (Рисунок 22).
Рисунок 22. Окно настроек авиасимулятора X-Plane на вкладке "Вывод данных" с отмеченными
пакетами данных и выделенной панелью "Конфигурация сети".
Значения сигналов выбранных пакетов данных при этом отображаются в окне авиасимулятора,
как показано на рисунке (Рисунок 23). В каждой строке отображаются сигналы одного пакета данных.
Рисунок 23. Окно авиасимулятора X-Plane в режиме полета с выделенными сигналами в
отображаемых пакетах данных.
Каждый пакет данных содержит по 8 чисел типа "float", каждое из которых
соответствует какому-либо сигналу в авиасимуляторе. Для всех сигналов, перечисленных в
таблице (Таблица
1), индекс пакета данных и порядковый номер каждого сигнала в этом пакете
определены вышеописанным способом и представлены в таблице (Таблица 3).
Таблица 3. Индексы пакетов данных для используемых сигналов
№ п/п
Имя
Название
Индекс пакета данных
Порядковый номер сигнала в пакете данных
1
Sim_Local_time
Местное время
1
7
2
Sim_Ny
Перегрузка
4
5
3
Sim_Tangaj
Угол тангажа
17
1
4
Sim_Kren
Угол крена
17
2
5
Sim_Ataka
Угол атаки
18
1
После соединения блоков в субмодели "Прием UDP" и настройки авиасимулятора
необходимо протестировать схему приема данных и отобразить индексы принимаемых пакетов
данных для каждого блока с подписью "ByteUnPack" перед дальнейшей настройкой схемы.
С целью отображения индексов принимаемых пакетов данных необходимо в каждом блоке с
подписью "ByteUnPack" к первому выходному контакту подключить линию связи, второй
конец которой должен остаться неподключенным. Для этого необходимо левой кнопкой мыши
нажать по первому выходному порту с подписью "m" блока "ByteUnPack", и
сдвинув мышь вправо, нажать правой кнопкой мыши (Рисунок 24).
Рисунок 24. Рабочая область субмодели "Прием UDP" с линией связи, подключенной к первому
выходу блока "ByteUnPack".
Необходимо выполнить вышеописанную процедуру со всеми блоками "ByteUnPack". Для
отображения значений индексов принимаемых пакетов данных необходимо в окне проекта на
панели кнопок нажать левой кнопкой мыши на кнопку Показать значения на линиях связи, после чего вид кнопки должен измениться. Необходимо включить в меню окна
режим "Индикация" нажатием на кнопку Индикация/Редактирование (Рисунок 25).
Рисунок 25. Рабочая область субмодели "Прием UDP" с выделенными в меню окна кнопками
"Индикация/Редактирование" и "Показать значения на линиях связи".
Рабочая область субмодели и меню окна проекта после нажатия на кнопки
Индикация/Редактирование и Показать значения на линиях связи должны
выглядеть согласно рисунку (Рисунок 26).
Рисунок 26. Рабочая область субмодели "Прием UDP" после нажатия в меню окна кнопок
"Индикация/Редактирование" и "Показать значения на линиях связи".
Необходимо запустить расчет проекта и сразу остановить его. Для запуска расчета проекта
необходимо нажать на кнопку Пуск в меню окна (Рисунок 27).
Рисунок 27. Рабочая область субмодели "Прием UDP" с выделенной в меню окна кнопкой
"Пуск".
Во время расчета проекта отображаются значения индексов принимаемых пакетов данных. Если
не запущен авиасимулятор в режиме полета, то блок "Сервер UDP" не принимает данные
от авиасимулятора, а в рабочей области субмодели "Прием UDP" отображаются только
нулевые значения (Рисунок
28). Для остановки проекта необходимо нажать на кнопку Стоп на панели
кнопок окна проекта.
Рисунок 28. Рабочая область субмодели "Прием UDP" с выделенной в меню окна кнопкой "Стоп" и
выделенными на схеме индексами принимаемых пакетов данных.
Для приема данных необходимо загрузить авиасимулятор X-Plane в режиме полета. Необходимо
запустить проект на расчет, после чего рабочая область субмодели "Прием UDP" должна
выглядеть аналогично рисунку (Рисунок 29).
Рисунок 29. Рабочая область субмодели "Прием UDP" с выделенными на схеме индексами
принимаемых пакетов данных после загрузки авиасимулятора X-Plane в режиме
полета.
Необходимо остановить расчет нажатием на кнопку Стоп на панели кнопок окна
проекта, затем добавить в окно субмодели "Прием UDP" 5 блоков Запись в список сигналов из вкладки Сигналы. Используя данные из таблицы (Таблица 3), у каждого
блока Запись в список сигналов для свойства "Имена сигналов" необходимо
указать в столбце "Значение" имя сигнала (Рисунок 30).
Рисунок 30. Окно "Свойства" блока "Запись в список сигналов" с выделенным свойством "Имена
сигналов".
После этого, используя данные из таблицы (Таблица 3), необходимо
для каждого сигнала определить в каком блоке "ByteUnPack" в субмодели принимается
этот сигнал и через какой выходной порт выводится его значение. Необходимо соединить
входной порт каждого блока Запись в список сигналов с указанным в таблице (Таблица 3) выходным
портом блока "ByteUnPack", определяемого по индексу принимаемого пакета данных.
Например, входной порт блока Запись в список сигналов, в свойствах которого
указано имя сигнала "Sim_Local_time", необходимо подключить к выходному порту
"с7" (так как в таблице (Таблица 3) в столбце "Порядковый номер сигнала в пакете
данных" указано значение 7) блока "ByteUnPack", принимающего пакет данных с
индексом 1 (так как в таблице (Таблица 3) в столбце "Индекс пакета данных" указано значение
1), сигнал "Sim_Ny" необходимо подключить к выходному порту "с5" блока
"ByteUnPack", принимающего пакет данных с индексом 4 и т.д. Рабочая область
субмодели "Прием UDP" после подключения всех блоков Запись в список сигналов должна выглядеть аналогично рисунку (Рисунок 31).
Рисунок 31. Рабочая область субмодели "Прием UDP" после подключения всех блоков "Запись в
список сигналов".
Настройка параметров расчета
Необходимо перейти из рабочей области субмодели в рабочую область модели, нажав кнопку
Возврат из субмодели (Рисунок 32).
Рисунок 32. Окно проекта с отображением рабочей области субмодели с выделенной кнопкой
"Возврат из субмодели".
Необходимо в окне проекта нажать кнопку Параметры расчёта (Рисунок 33) и для
свойства "Конечное время расчёта" задать значение "1e8" (Рисунок 34).
Рисунок 33. Окно проекта с выделенной в меню кнопкой "Параметры расчёта".
Рисунок 34. Окно "Параметры проекта" с выделенным параметром "Конечное время
расчета".
Необходимо установить интервал перерисовки для окна проекта, чтобы изменение индикации
было не скачкообразным, а более плавным. Для этого необходимо в главном окне SimInTech
нажать кнопку Вид и выбрать пункт
Интервал перерисовки (Рисунок 35),
установив его значение равным "20" (Рисунок 36).
Рисунок 35. Окно проекта с выделенным пунктом "Интервал перерисовки" меню "Вид" в окне
проекта.
Рисунок 36. Окно "Интервал перерисовки" с заданным значением интервала перерисовки.
Запуск моделирования
По окончании настройки необходимо запустить расчет проекта, нажав левой кнопкой мыши на
кнопку Пуск в меню окна проекта. После запуска расчета проекта рабочая область
субмодели "Прием UDP" должна выглядеть аналогично рисунку (Рисунок 37), рабочая
область модели должна выглядеть аналогично рисунку (Рисунок 38).
Рисунок 37. Окно проекта с отображением рабочей области субмодели "Прием UDP" во время
расчета.
Рисунок 38. Окно проекта с отображением рабочей области модели во время расчета.
Во время расчета проекта возможно изменять источник астрономического времени в блоке
Авиационные часы с помощью примитива Кнопка.
Если примитив Кнопка имеет выходное значение "0" (кнопка нажата в верхнем
положении), как показано на рисунке (Рисунок 33), то в блоке Авиационные часы свойству
"Источник времени астрономического" задается значение "Системное время",
при этом часовая, минутная и секундная стрелки астрономического времени показывают
системное время ПК.
Если примитив Кнопка имеет выходное значение "1" (кнопка нажата в нижнем
положении), как показано на рисунке (Рисунок 38), то выходное свойству "Источник времени
астрономического" задается значение "Формула", при этом стрелки
астрономического времени отображают время, получаемое от авиасимулятора через сигнал
"Sim_Local_time" в соответствии с выражениями, заданными в формулах свойств
блока.
Для более удобного просмотра отображаемой индикации блока рекомендуется увеличить размер
блока Авиационные часы. Для этого необходимо остановить расчет нажатием на кнопку
Стоп, одинарным нажатием левой кнопкой мыши выбрать блок Авиационные часы и навести курсор мыши на край блока. Курсор мыши изменится на курсор
"Изменение размера по диагонали" согласно рисунку (Рисунок 39).
Рисунок 39. Окно проекта с выделенным блоком "Авиационные часы" с курсором мыши, наведенным
на край блока.
Необходимо захватить край блока одинарным нажатием левой кнопкой мыши и потянуть в
сторону для изменения размера блока Авиационные часы согласно рисунку (Рисунок 40).
Рисунок 40. Окно проекта с выделенным блоком "Авиационные часы" после увеличения размера
блока.
После запуска проекта возможно наблюдать на блоках отображаемые значения сигналов, в том
числе астрономического времени (Рисунок 41), принимаемых от авиасимулятора X-Plane, запущенного в
режиме полета.
Рисунок 41. Окно проекта в режиме моделирования с отображаемыми в блоках значениями
принимаемых от авиасимулятора сигналов.
В окне авиасимулятора также возможно наблюдать значения принимаемых сигналов для контроля
правильности работы модели (Рисунок 42).
Рисунок 42. Окно авиасимулятора X-Plane с выделенными значениями используемых в проекте
сигналов.
Заключение
В данной лабораторной работе рассмотрена модель вывода на индикацию в блоках из подгруппы
Авиационные приборы значений сигналов, принимаемых от авиасимулятора X-Plane.
Использованные приемы работы могут быть применены при разработке новых проектов.