Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ № 9 Связь Simulink с приложением с графичес...doc
Скачиваний:
12
Добавлен:
24.11.2019
Размер:
152.06 Кб
Скачать

Подфункция mdlUpdate

Подфункция mdlUpdate вызывается на каждом шаге по времени. Ее входные аргументы содержат:

  • t - текущее время;

  • x - вектор состояний (в нашем примере не используется);

  • u - вектор, содержащий значения на входах блока S-function. В нашем случае элемент u(1) содержит значение Control, а элемент u(2) - текущую величину синусоидального сигнала.

Для вывода нужной информации на оси окна приложения GUI_Simulink необходимо получить указатели на соответствующие объекты. Указатель на окно приложения записан в свойстве UserData блока S-function. Он извлекается в переменную Fig при помощи функции get_param, в качестве первого входного аргумента которой задается функция gcbh, возвращающая указатель на текущий блок, т.е. на блок S-function. Далее указатели на объекты приложения записываются в переменную Handles при помощи функции guihandles, вызванной от указателя на окно. Функция guihandles возвращает структуру, поля которой совпадают с тегами объектов, данными им при создании в функции mdlInitializeSizes. Таким образом в Handles.ax1 содержится указатель на нижние оси, а в Handles.ax2 - указатель на верхние оси окна приложения.

Далее в подфункции mdlUpdate проверяется, нужно ли увеличить пределы оси времени на 50 сек. и производится вывод значения Control и Control * sin(t) на верхние и нижние оси, соответственно. Задача заключается в нанесении точки на оси и соединении ее с предыдущей точкой отрезком. Предыдущее значение времени и выводимой на оси величины хранится в свойстве UserData осей. Перед выводом это значение (т.е. вектор из двух элементов) извлекается при помощи функции get в переменную LastPoint. Если LastPoint содержит пустой массив, то значит предыдущей точки не было и выводимая сейчас точка соответствует значению для первого момента времени. Если LastPoint не пуст, то соединяем текущую точку с предыдущей отрезком.

В конце функции mdlUpdate выходному аргументу sys присваивается пустой массив, поскольку выходов у блока S-function нет.

Подфункция mdlOutputs

Подфункция mdlOutputs вычисляет значения на выходах, но в нашем примере у блока S-function нет выходов, поэтому в подфункции mdlOutputs единственный оператор

sys = [];

Подфункция mdlTerminate

Подфункция mdlTerminate выполняется при завершении работы Simulink-модели. В mdlTerminate при помощи стандартной функции questdlg выводится диалоговое окно с запросом на удаление окна приложения GUI_Simulink.

Окно с запросом на удаление окна приложения

Входными аргументами функции questdlg являются:

  • текст в окне запроса;

  • заголовок окна запроса;

  • названия кнопок;

  • последний аргумент означает кнопку, которой по умолчанию передается фокус ввода.

Функция questdlg возвращает надпись на нажатой пользователем кнопке. Если пользователь нажал кнопку Yes, то при помощи функции get_param указатель на окно приложения записывается в переменную Fig и затем вызывается функция delete для удаления окна. Входным аргументом функции delete должен быть указатель на удаляемый объект.