Добавьте приложение инструментальной панели App Designer, чтобы заправить модель

В этом примере показано, как создать приложение инструментальной панели App Designer для приложения Simulink Real-Time, которое вы создаете от xpctank модель. Инструментальная панель содержит эти компоненты App Designer:

  • Ползунок — Чтобы настроить необходимый уровень бака (Заданное значение).

  • Линейный Прибор — Чтобы отобразить фактический уровень бака (TankLevel).

  • Полукруглый Прибор — Чтобы отобразить насос управляет состоянием (ControlValue).

  • Оси — Чтобы отобразить вывод сигнала для SetPoint, TankLevel и ControlValue.

Этот пример также показывает, как передать потоком сигнал и данные о параметре между приложением реального времени и приложением инструментальной панели при помощи объекта инструментирования.

open_system(docpath(fullfile(matlabroot,'toolbox','rtw','targets','xpc','xpcdemos','xpctank')));

Запустите целевой компьютер и создайте приложение реального времени

Эти операции генерируют приложение реального времени что потоковые данные к приложению инструментальной панели App Designer.

  1. Запустите целевой компьютер.

  2. Откройте модель xpctank.

  3. Соедините компьютер разработчика с целевым компьютером. Создайте xpctank модель. Разверните приложение реального времени в целевой компьютер. В Командном Окне MATLAB введите:

set_param('xpctank', 'RTWVerbose', 'off');
tg = slrt('TargetPC1');
rtwbuild('xpctank');
load(tg,'xpctank');
### Starting Simulink Real-Time build procedure for model: xpctank
### Generated code for 'xpctank' is up to date because no structural, parameter or code replacement library changes were found.
### Successful completion of build procedure for model: xpctank
### Created MLDATX ..\xpctank.mldatx

Запустите приложение инструментальной панели App Designer

Приложение инструментальной панели App Designer tankApp обеспечивает средства управления, чтобы запуститься и взаимодействовать с приложением реального времени xpctank.

  1. Выполнение приложения. Щелкните правой кнопкой по tankApp.mlapp файл и нажимает Run. Или в Командном окне введите: tankApp

  2. Запустите потоковые данные и приложение реального времени. В приложении инструментальной панели нажмите Start. Запуски приложения реального времени и потоковые данные к приложению. Оси отображают изменения в значениях сигналов.

  3. Настройте ползунок SetPoint. Сигналы приложения реального времени реагируют на изменение сетбола.

  4. Чтобы остановить приложение, нажмите Stop.

Создайте приложение инструментальной панели App Designer

Чтобы обеспечить интерактивное отображение инструментальной панели для симуляции, создайте и сохраните приложение инструментальной панели App Designer для xpctank приложение реального времени.

Создать инструментальную панель в App Designer:

  1. От вкладки MATLAB Home выберите New> App.

  2. В начальной странице App Designer нажмите Blank App. Сохраните приложение App Designer как my_tankApp.mlapp.

  3. От Режима конструктора App Designer кликните по холсту приложения. В Component Browser расширьте вкладку Position и установите положение холста на 100 100 640 504.

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

Добавьте ползунок

Добавьте управление ползунком из библиотеки компонентов. Пометьте ползунок как Set Point. Восток ползунок как вертикальный. Установите Предел ползунка как 0 10.

С меткой ползунка выбранный On холста, в Component Browser, расширяет вкладку Position и установил положение метки ползунка на 41 136 54 22. С выбранной линейкой ползунка, в Component Browser, расширяют вкладку Position и устанавливают положение ползунка на 58 172 3 259.

С программированием вы соединяете управление ползунком SetPoint с параметром SetPoint в приложении реального времени. Смотрите Добавляют Функции обратного вызова к Приложению.

Добавьте полукруглый прибор

Добавьте полукруглый прибор из библиотеки компонентов. Пометьте прибор как Control Value (с переводом строки между словами). Установите Предел прибора как -2 12. Установите MajorTicks как 0 10.

Чтобы пометить две метки деления как Прочь и На, установите MajorTicksMode, MajorTickLabelsMode и MinoTicksMode к manual. Затем установите MajorTickLabels на Off On (с переводом строки между словами).

С выбранной меткой прибора, в Component Browser, расширяют вкладку Position и устанавливают положение метки на 79 12 44 28. С выбранным набором прибора, в Component Browser, расширяют вкладку Position и устанавливают положение прибора на 55 55 92 50.

С программированием вы соединяете прибор ControlValue с сигналом ControlValue в приложении реального времени. Смотрите Добавляют Функции обратного вызова к Приложению.

Добавьте линейный прибор

Добавьте линейный прибор из библиотеки компонентов. Пометьте прибор как Tank Level. Восток прибор как вертикальный. Установите Предел прибора как 0 10.

С выбранной меткой прибора, в Component Browser, расширяют вкладку Position и устанавливают положение метки на 110 136 63 22. С выбранной линейкой прибора, в Component Browser, расширяют вкладку Position и устанавливают положение прибора на 110 168 32 270.

С программированием вы соединяете прибор TankLevel с сигналом TankLevel в приложении реального времени. Смотрите Добавляют Функции обратного вызова к Приложению.

Добавьте оси графика

Добавьте оси графика из библиотеки компонентов. Удалите Title. Установите строку XLable на time, и затем удалите строку YLable. Установите XLim на 0 10 и YLim к -1 13.

С выбранными осями, в Component Browser, расширяют вкладку Position и устанавливают положение осей на 197 94 424 396.

Добавьте Запуск / Кнопка Остановки

Добавьте кнопку из библиотеки компонентов. Пометьте кнопку как StartStop. Эта кнопка запускает и останавливает приложение реального времени на целевом компьютере.

С нажатой кнопкой, в Component Browser, расширяют вкладку Position и устанавливают положение кнопки на 18 449 171 41.

С программированием вы направляете приложение, чтобы ответить на события нажатия кнопки. Смотрите Добавляют Функции обратного вызова к Приложению.

Добавьте свойства и методы для объекта инструментирования к приложению

App Designer добавляет код пользовательского интерфейса для каждого компонента, что вы добавляете в приложение инструментальной панели App Designer my_tankApp. Код пользовательского интерфейса задает внешний вид компонента.

Чтобы добавить функциональность в компоненты пользовательского интерфейса, вы добавляете свойства, методы и коллбэки в Представлении кода App Designer.

Переключитесь на Представление кода. В Браузере Кода нажмите Properties, и затем выберите Add> Private Property.

Замените Property % Description с этими свойствами. Эти свойства идентифицируют целевой компьютер, модель, объект инструментирования и запустить/остановить значки кнопки.

tg
mdl = 'xpctank';
hInst
stopIcon  = 'stop_24.png';
startIcon = 'run_24.png';

В Браузере Кода нажмите Functions, и затем выберите Add> Private Function.

Замените функцию результатов:

function results = func(app)
end

с этими функциями. Эти функции настраивают объект инструментирования и коллбэк, чтобы анимировать оси графика.

Для прибора уровня бака и прибора значения управления, HistoryFlag установлен в '1', потому что эти сигналы были уже добавлены к объекту инструментирования как линии. Их история должна присутствовать даже при том, что скалярное отображение использует только последнее значение.

function setupInstrumentation(app)
  % create the instrumentation object
  app.hInst  = SimulinkRealTime.prototype.Instrumentation(app.mdl);
  % connect signals to the axes
  [~,line1] = app.hInst.connectLine(app.UIAxes,[app.mdl '/SetPoint']  ,1,'MaximumNumPoints',10000);
  [~,line2] = app.hInst.connectLine(app.UIAxes,[app.mdl '/TankLevel']   ,1,'MaximumNumPoints',10000);
  [~,line3] = app.hInst.connectLine(app.UIAxes,[app.mdl '/ControlValue'],1,'MaximumNumPoints',10000);
  % add a legend
  legend(app.UIAxes,{line1{1},line2{1},line3{1}})
  % connect signals to the scalar displays
  app.hInst.connectScalar(app.TankLevelGauge   ,[app.mdl '/TankLevel']   ,1,'HistoryFlag',1);
  app.hInst.connectScalar(app.ControlValueGauge,[app.mdl '/ControlValue'],1,'HistoryFlag',1);
  % add a callback to wrap the x axis
  app.hInst.connectCallback(@app.updateUIAxes);
  app.UIAxes.XLim = [0 10];
  app.UIAxes.YLim = [-1 13];
end
function updateUIAxes(app,instObj,eventData)
  % this callback updates XLim so that the axis wrap
  currTime = eventData.ExecTime;
  if max(currTime)<max(app.UIAxes.XLim)
    % do nothing
  else
    app.UIAxes.XLim = max(app.UIAxes.XLim) + [0 10];
  end
end

При использовании connectLine функционируйте, чтобы соединить выходные сигналы от приложения реального времени до объекта инструментирования, Simulink Real-Time Explorer обеспечивает полезное представление сигналов и их номеров портов. Чтобы открыть Проводник и просмотреть сигналы, в Окне Команды MATLAB, введите:

SimulinkRealTime.prototype.Explorer

Добавьте функции обратного вызова в приложение

Функции обратного вызова в приложении отвечают на события. События, которые обслуживаются функциями обратного вызова, включают запуск приложения, нажатие кнопки, новые данные сигнала и изменение значения параметров.

Добавьте функцию запуска

Функция запуска startupFcn в выполнении приложения после создания компонента.

Переключитесь на Режим конструктора и нажмите на холст приложения. В Component Browser, во вкладке Callbacks, выбирают add StartupFcn callback. Добавьте этот код в startupFcn функция.

% get target object
app.tg = slrt;
% if the target is running stop it
if strcmp(app.tg.status,'running')
    app.tg.stop;
end
% load the model on to the target
app.tg.load(app.mdl);
% update the slider based on the target value
value = app.tg.getparam('SetPoint','Value');
app.SetPointSlider.Value = value;
% setup the instrumentation object
app.setupInstrumentation;

Добавьте, что интерфейс закрывает функцию запроса

Близкий запрос функционирует UIFigureCloseRequest в выполнении приложения, когда приложение закрывается. Объект инструментирования использует коллбэки, чтобы добавить данные о потоковой передаче в ваш UIAxes. Если вы удаляете UIAxes путем удаления и закрытия UIFigure без первого удаления объекта инструментирования, состояние коллбэков приводит к ошибкам или предупреждениям. Лучшая практика состоит в том, чтобы добавить близкий коллбэк запроса в приложение, которое останавливается, инструментирование возражают, и удаляет его.

Переключитесь на вкладку Design View и кликните по холсту приложения. В Component Browser, во вкладке Callbacks, выбирают add CloseRequestFcn callback. В UIFigureCloseRequest функция, замена delete(app) с этим кодом:

app.hInst.stop;
app.tg.stop;
delete(app.hInst)
delete(app)

Добавьте функцию значения изменения сетбола

Изменение заданного значения функционирует SetPointSliderValueChanged в выполнении приложения, когда значение ползунка сетбола изменяется.

Переключитесь на вкладку Design View и кликните на съемочной площадке по ползунку точки. В Component Browser, во вкладке Callbacks, выбирают add ValueChangedFcn callback. В SetPointSliderValueChanged функция, замена value = app.SetPointSlider.Value; с этим кодом:

value = app.SetPointSlider.Value;
app.tg.setparam('SetPoint','Value',value);

Добавьте стартстопную функцию события нажатия кнопки

Коллбэк, который вы добавляете в определение кнопки, переключает текст и значок на этой кнопке, в зависимости от состояния приложения. Нажмите Start, чтобы запустить приложение реального времени на целевом компьютере и потоковых данных к приложению инструментальной панели. Нажмите Stop, чтобы остановить приложение реального времени.

С нажатой кнопкой, в Component Browser, нажимают Callbacks. Выберите StartStopButtonPushed и кликните по курсору Перемещения к функциональной клавише. Добавьте этот код в StartStopButtonPushed функция.

if strcmp(app.StartStopButton.Icon, app.startIcon)
    % START
    % clear old data
    app.hInst.clearData;
    % start instrumentation and target
    app.hInst.start(app.tg);
    % change the icon
    app.StartStopButton.Icon = app.stopIcon;
    app.StartStopButton.Text = 'Stop';
else
    % STOP
    app.hInst.stop;
    app.tg.stop;
    % change the icon
    app.StartStopButton.Icon = app.startIcon;
    app.StartStopButton.Text = 'Start';
end

Сохраните и запустите приложение

Приложение my_tankApp приложение завершено. Ползунок, полукруглый прибор, линейный прибор, оси, и Запускаются - *Stop*, кнопка имеет код коллбэка, который отвечает на их события. Приложение соединяет с приложением реального времени xpctank при помощи инструментирования возражают, чтобы передать данные потоком к приложению.

В App Designer сохраните приложение my_tankApp.

Запустите приложение реального времени xpctank и запустите приложение App Designer my_tankApp. Для инструкций смотрите, Запускают Приложение реального времени Целевого компьютера и Сборки и Запуск Приложение Инструментальной панели App Designer.

bdclose ('all');