Создавать в App Designer авиационно-космические приложения с помощью обычных летательных приборов. App Designer - это богатая среда разработки, обеспечивающая представление макета и кода, полностью интегрированную версию редактора MATLAB ® и большой набор интерактивных компонентов. Дополнительные сведения о App Designer см. в разделе Разработка приложений с помощью App Designer. Для использования компонентов летных приборов в App Designer необходимо иметь лицензию Aerospace Toolbox.
Пример простого приложения для летных приборов, использующего App Designer, см. в примерах «Начало работы» при первом запуске App Designer. Чтобы создать приложение для визуализации сохраненных данных полета для Piper PA-24 Comanche, используйте этот рабочий процесс.
Запуск App Designer с помощью ввода appdesigner в командной строке, а затем выберите Пустое приложение на странице Начало работы.
Перетащите аэрокосмические компоненты из библиотеки компонентов на холст приложения.
Чтобы загрузить данные моделирования, добавьте startup в приложение, а затем создайте анимационный объект.
Введите в приложение обратные вызовы, функции и свойства компонентов, а также добавьте связанный код.
Запуск отображения анимации в приложении инструмента.
Сохраните и запустите приложение.
Следующие разделы содержат более подробные шаги для этого рабочего процесса в качестве примера. В этом примере используется Aero.Animation объект.
Запустите конструктор приложений. В окне команды MATLAB введите:
appdesigner
В окне приветствия App Designer щелкните Пустое приложение. App Designer отображается с пустым холстом.
Чтобы просмотреть пустой шаблон приложения, щелкните Просмотр кода. Обратите внимание, что приложение содержит шаблон с разделами для свойств компонента приложения, инициализации компонента, а также создания и удаления приложения.
Чтобы вернуться в вид холста, нажмите «Дизайн».
Чтобы добавить компоненты в пустой холст, выполните следующие действия.
В библиотеке компонентов перейдите в раздел «Аэрокосмическое пространство».

Из библиотеки перетащите на холст следующие аэрокосмические компоненты:
Индикатор скорости полета
Искусственный горизонт
Координатор поворота
Индикатор курса
Индикатор набора высоты
Высотомер
В этом примере используется Aero.Animation объект для визуализации состояния полета летательного аппарата во времени. Чтобы задать текущее время, добавьте устройство ввода времени, например ползунок или ручку. При изменении времени на устройстве ввода времени компоненты летного прибора и окно анимации обновляются для отображения результатов. Более подробная информация содержится в примере кода.
Для этого примера:
Добавьте компонент Slider в качестве устройства ввода времени.
Чтобы отобразить текущее время ползунка, отредактируйте его метку. Например:
Изменение метки на Time: 00.0 sec.
Измените верхний предел на 50.
Щелкните Вид кода (Code View) и обратите внимание, что в разделах свойств и инициализации компонентов теперь содержатся определения для новых компонентов. Код, управляемый App Designer, не редактируется (отображается серым цветом).
В разделе «Инспектор свойств» в правой части полотна переименуйте следующие компоненты:
Компонент UIfigure для FlightInstrumentsFlightDataPlaybackUIFigure
Компонент ползунка для Time000secSlider
Этот рабочий процесс предполагает, что вы запустили App Designer, создали пустое приложение и добавили в него аэрокосмические компоненты.
В представлении кода приложения установите курсор после раздела свойств и в разделе Вставка нажмите кнопку Обратный вызов.
Откроется диалоговое окно Add Callback Function (Добавление функции обратного вызова).
В диалоговом окне Add Callback Function выполните следующие действия.
В списке Обратный вызов выберите StartupFcn.
В параметре Name введите имя функции запуска, например, startupFcn.
Добавляется раздел обратных вызовов.
Добавьте дополнительные свойства в класс для данных моделирования и объекта анимации. Поместите курсор сразу после раздела свойств компонента и в разделе «Вставка» выберите «Свойство» > «Общее свойство». В новом шаблоне свойств добавьте код так, чтобы он выглядел следующим образом:
simdata % Saved flight data [time X Y Z phi theta psi] animObj % Aero.Animation object
simdata - сохраненные полетные данные. animObj является Aero.Animation объект для окна фигуры.
В раздел startupFcn добавьте код к startup функция, загружающая данные моделирования. Например, simdata.mat файл содержит протоколированные данные моделируемой траектории полета.
% Code that executes after component creation function startupFcn(app) % Load saved flight status data savedData = load(fullfile(matlabroot, 'toolbox', 'aero', 'astdemos', 'simdata.mat'), 'simdata'); yaw = savedData.simdata(:,7); yaw(yaw<0) = yaw(yaw<0)+2*pi; % Unwrap yaw angles savedData.simdata(:,7) = yaw; app.simdata = savedData.simdata; % Load saved flight status data
Для визуализации данных анимации создайте объект анимации. Например, после загрузки данных моделирования:
Создание Aero.Animation объект.
app.animObj = Aero.Animation;
Используйте геометрию piper pa-24 для объекта анимации.
app.animObj.createBody('pa24-250_orange.ac','Ac3d'); % Piper PA-24 Comanche geometryИспользуйте ранее загруженные данные, app.simdata, в качестве источника для объекта анимации.
app.animObj.Bodies{1}.TimeseriesSourceType = 'Array6DoF'; % [time X Y Z phi theta psi]
app.animObj.Bodies{1}.TimeSeriesSource = app.simdata;Инициализируйте положение камеры и фигуры.
app.animObj.Camera.PositionFcn = @staticCameraPosition;
app.animObj.Figure.Position = [app.FlightInstrumentsFlightDataPlaybackUIFigure.Position(1)+625,...
app.FlightInstrumentsFlightDataPlaybackUIFigure.Position(2),...
app.FlightInstrumentsFlightDataPlaybackUIFigure.Position(3),...
app.FlightInstrumentsFlightDataPlaybackUIFigure.Position(4)];
app.animObj.updateBodies(app.simdata(1,1)); % Initialize animation window at t=0
app.animObj.updateCamera(app.simdata(1,1));Создание и отображение графического объекта фигуры.
app.animObj.show();
В этом рабочем процессе предполагается, что в приложение добавлена функция запуска для загрузки данных моделирования и создания объекта анимации. Для запуска обновления объекта анимации и приборов полета:
В представлении кода приложения добавьте обратный вызов для ползунка. Например, перейдите в раздел «Инспектор свойств» и выберите app.Time000secSlider.
Введите имя для valueChangingFcn, например, Time000secSliderValueChangingи нажмите Enter.
В представлении кода App Designer добавляет функцию обратного вызова Time000secSliderValueChanging.
Добавление кода для отображения текущего времени в метке ползунка Time000secSliderLabel, например:
% Display current time in slider component
t = event.Value;
app.Time000secSliderLabel.Text = sprintf('Time: %.1f sec', t);Добавьте код для вычисления значений данных для каждого компонента летного прибора, соответствующего выбранному времени на ползунке, например:
% Find corresponding time data entry
k = find(app.simdata(:,1)<=t);
k = k(end);
app.Altimeter.Altitude = convlength(-app.simdata(k,4), 'm', 'ft');
app.HeadingIndicator.Heading = convang(app.simdata(k,7),'rad','deg');
app.ArtificialHorizon.Roll = convang(app.simdata(k,5),'rad','deg');
app.ArtificialHorizon.Pitch = convang(app.simdata(k,6),'rad','deg');
if k>1
% Estimate velocity and angular rates
Vel = (app.simdata(k,2:4)-app.simdata(k-1,2:4))/(app.simdata(k,1)-app.simdata(k-1,1));
rates = (app.simdata(k,5:7)-app.simdata(k-1,5:7))/(app.simdata(k,1)-app.simdata(k-1,1));
app.AirspeedIndicator.Airspeed = convvel(sqrt(sum(Vel.^2)),'m/s','kts');
app.ClimbIndicator.ClimbRate = convvel(-Vel(3),'m/s','ft/min');
% Estimate turn rate and slip behavior
app.TurnCoordinator.Turn = convangvel(rates(1)*sind(30) + rates(3)*cosd(30),'rad/s','deg/s');
app.TurnCoordinator.Slip = 1/(2*pi)*convang(atan(rates(3)*sqrt(sum(Vel.^2))/9.81)-app.simdata(k,5),'rad','deg');
else
% time = 0
app.ClimbIndicator.ClimbRate = 0;
app.AirspeedIndicator.Airspeed = 0;
app.TurnCoordinator.Slip = 0;
app.TurnCoordinator.Turn = 0;
endДобавьте код для обновления отображения окна анимации, например:
%% Update animation window display app.animObj.updateBodies(app.simdata(k,1)); app.animObj.updateCamera(app.simdata(k,1));
Этот поток операций предполагает, что вы готовы определить функцию закрытия для FlightInstrumentsFlightDataPlaybackUIFigure окно фигуры.
Добавить CloseRequestFcn функция. В представлении кода приложения установите курсор после раздела свойств для FlightInstrumentsFlightDataPlaybackUIFigure и в разделе Вставка щелкните Обратный вызов.
Откроется диалоговое окно Add Callback Function (Добавление функции обратного вызова).
В диалоговом окне Add Callback Function выполните следующие действия.
В списке Обратный вызов выберите CloseRequestFcn.
В параметре Имя (Name) введите имя функции закрытия, например, FlightInstrumentsFlightDataPlaybackUIFigureCloseRequest.
Добавляется раздел обратных вызовов.
В новом шаблоне обратного вызова добавьте код для удаления объекта анимации, например:
% Close animation figure with app
delete(app.animObj);
delete(app);В этом рабочем процессе предполагается, что добавлен код для закрытия окна uifigure. Чтобы сохранить и запустить приложение:
Сохранить приложение с именем файла myFlightInstrumentsExample. Обратите внимание, что это имя применяется к classdef.
Щелкните Выполнить (Run).
После сохранения изменений можно запустить приложение из окна App Designer или ввести его имя (без .mlapp ) в окне команд MATLAB. При запуске приложения из командной строки файл должен находиться в текущей папке или в пути MATLAB.

Для визуализации сохраненных данных полета измените положение ползунка. Наблюдайте за приборами полета при изменении ориентации самолета в окне анимации.
Полный пример см. в разделе Авиационно-космические летные приборы в App Designer.
uiaeroairspeed | uiaeroaltimeter | uiaeroclimb | uiaeroegt | uiaeroheading | uiaerohorizon | uiaerorpm | uiaeroturn | uiaxes | uifigure | uilabel | uislider