- •Лабораторная работа № 9 тема: «Связь Simulink-модели и приложения с графическим интерфейсом»
- •Описание приложения с графическим интерфейсом и Simulink-модели
- •Аргументы mysfun
- •Подфункция mdlInitializeSizes
- •Value - текущее значение, задаем равным InitControl.
- •Подфункция mdlUpdate
- •Окно с запросом на удаление окна приложения
- •Подфункция sldCallback
- •Текст s-функции mysfun с подфункциями
Подфункция 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 должен быть указатель на удаляемый объект.