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

Лабораторная работа № 9 тема: «Связь Simulink-модели и приложения с графическим интерфейсом»

Данный раздел посвящен обмену данными Simulink-модели и приложения с графическим интерфейсом пользователя. Мы разберем один из вариантов реализации обмена, в котором значение некоторого параметра Simulink-модели устанавливается в приложении с графическим интерфейсом, а данные, получаемые в Simulink-модели, визуализируются на осях приложения с графическим интерфейсом.

Для чтения этого материала необходимы знания:

  • среды Simulink (см. Simulink: Инструмент моделирования динамических систем (Занятия по изучению Simulink проводит д.т.н., проф. Федяева Г. на кафедре АЭП БГТУ));

  • программирования S-функций для Simulink-моделей (см. Simulink-функции);

  • программирования приложений с графическим интерфейсом без среды визуального программирования GUIDE (см. Создание приложений с GUI без среды GUIDE ЛАБ № 5).

Некоторые необходимые сведения изложены в материале этого раздела.

Описание приложения с графическим интерфейсом и Simulink-модели

Рассмотрим простую задачу. В приложении GUI_Simulink с графическим интерфейсом (окно которого приведено ниже) есть полоса прокрутки и пара осей.

Окно приложения GUI_Simulink

Полоса прокрутки служит для изменения параметра Control в Simulink-модели от 0 до 5. Этот параметр влияет на выходной сигнал, возвращаемый Simulink-моделью, по следующему простому закону:

выходной сигнал = Control * sin(t)

Изменение значения Control приводит к отображению этого значения на верхних осях желтой линией и отображению значения выходного сигнала на нижних осях фиолетовой линией. Пределы по оси времени через каждые 50 сек. сдвигаются (на 50 сек.).

Сама Simulink-модель приведена ниже. Файл GUI_Simulink с моделью здесь.

Simulink-модель

Simulink-модель состоит из следующих блоков:

  • блока с именем Control (это библиотечный блок Constant);

  • блока с именем Sin Wave (библиотечный генератор синусоидального сигнала с параметрами по умолчанию);

  • мультиплексора, т.е. библиотечного блока Mux;

  • блока S-function, который как раз и является S-функцией, предназначенной для реализации обмена между Simulink-моделью и приложением GUI_Simulink (для того, чтобы задать S-функцию блока, достаточно сделать по нему двойной щелчок и в появившемся диалоговом окне Sink Block Parameters: S-function в строке ввода S-function задать имя mysfun (см. рисунок ниже).

Задание имени S-функции для блока S-function

Для солвера Simulink-модели сделаны следующие настройки, которые показаны на рисунке ниже (настройки солвера задаются в окне Configuration Parameters, которое появляется после выбора в меню Simulation окна модели пункта Configuration Parameters…).

Настройки солвера модели GUI_Simulink.mdl

После запуска Simulink-модели появляется окно приложения GUI_Simulink, в котором пользователь управляет значением Control и наблюдает за результатом. При остановке Simulink-модели появляется диалоговое окно с запросом, надо ли оставить окно приложения GUI_Simulink или его можно удалить.

Для того, чтобы блок S-function работал, необходимо запрограммировать функцию с подфункциями для:

  • инициализации блока S-function;

  • действиями на каждом шаге по времени;

  • действиями, выполняемыми перед завершением работы Simulink-модели.

Детально эта функция mysfun и подфункции обсуждаются в следующих разделах.

Совместная работа приложения с графическим интерфейсом и Simulink-модели происходит потому, что при инициализации S-функции создается окно приложения GUI_Simulink с полосой прокрутки и осями с заголовками. С событием Callback полосы прокрутки связывается функция, которая меняет значение константы блока Control. Далее на каждом шаге расчета модели S-функция получает на вход значения с выходов блоков Sine Wave и Control и выводит на оси приложения GUI_Simulink значение Control и Control * sin(t).

Основная проблема состоит в том, что подфункция, выводящая текущие значения Control и Control * sin(t) на оси приложения GUI_Simulink, должна знать указатели на оси. Для решения этой проблемы используется следующий механизм обмена указателями между подфункциями. При создании окна приложения указатель на него сохраняется в качестве значения свойства UserData блока S-function. Далее, при расчете на каждом шаге по времени указатель на окно приложения извлекается из свойства UserData и этот указатель используется для получения указателей на оси приложения.

S-функция mysfun

S-функция mysfun (ее текст приведен в разделе Текст S-функции mysfun с подфункциями) состоит из основной функции mysfun и подфункций, необходимых для работы S-функции и приложения с графическим интерфейсом. Основная функция mysfun вызывается как при инициализации Simulink-модели, так и при ее работе и перед остановкой Simulink-модели.