Симуляция медиаплеера

В этом примере показано, как создать интерфейс между графиком Stateflow ®, которая использует C в качестве языка действий, и приложением MATLAB ®, созданным в App Designer. Для получения дополнительной информации о соединении диаграммы Stateflow, которая использует MATLAB в качестве языка действий с приложением MATLAB, смотрите Модель Контроллера Степени.

В этом примере приложение MATLAB моделирует передний конец медиаплеера. Во время симуляции можно выбрать между компонентами AM-радио, FM-радио и CD-проигрывателем медиаплеера. Когда проигрыватель CD включен, можно также выбрать режим воспроизведения.

Диаграмма Stateflow App Interface обеспечивает двунаправленное соединение между приложением MATLAB и системами управления и объекта в модели Simulink ®. При взаимодействии с виджетами в приложении график отправляет соответствующую команду на другие графики в модели. Эти графики используют строки, чтобы контролировать поведение медиаплеера и предоставлять сообщения на естественном языке выхода, которые указывают на его состояние. При изменении статуса медиаплеера график изменяет цвет кнопок и обновляет текстовое поле в нижней части приложения.

Запуск модели медиаплеера

  1. Откройте модель Simulink и нажатие кнопки Запуска. Откроется приложение Media Player Helper. Текстовое поле в нижней части приложения показывает состояние медиаплеера, Standby (OFF).

  2. В разделе Radio Request нажмите CD. Состояние медиаплеера изменяется на CD Player: Empty.

  3. Нажмите Insert Disc.Краткое описание состояния медиаплеера Reading: Handel's Greatest Hits перед переходом на CD Player: Stopped.

  4. В разделе Запрос компакт-диска нажмите кнопку ВОСПРОИЗВЕДЕНИЕ. Состояние медиаплеера изменяется на Playing: Handel's Greatest Hits и музыка начинает играть.

  5. В разделе Запросе нажмите FF. Музыка останавливается и начинается щебет звуков. Состояние носителя изменяется на Forward >> Handel's Greatest Hits. Имя альбома в этом сообщении прокручивается по отображению.

  6. Используйте приложение Media Player Helper, чтобы выбрать другие режимы работы или ввести другое имя альбома. Например, попробуйте сыграть на альбомы Training Deep Networks или Fun With State Machines. Чтобы остановить симуляцию, закройте приложение Media Player Helper.

Подключите график к приложению MATLAB

График App Interface уже настроен для связи с приложением MATLAB sf_mediaplayer_app. Чтобы создать двунаправленное соединение между приложением MATLAB и диаграммой Stateflow, которая использует C в качестве языка действий, выполните следующие шаги. В приложении MATLAB:

  1. Создайте пользовательское свойство для взаимодействия с графиком во время симуляции. Приложение использует это свойство для доступа к входам графика, выходам графика и локальным данным. Для получения дополнительной информации см. раздел «Обмен данными в приложениях App Designer».

  2. Измените startupFcn коллбэк для приложения путем добавления нового входного параметра и хранения его значения в качестве свойства, которое вы создали на предыдущем шаге. Для получения дополнительной информации см. Раздел «Запись коллбэков в App Designer».

На диаграмме Stateflow:

  1. Создайте локальный объект данных для интерфейса с приложением. График использует этот локальный объект данных в качестве аргумента при вызове вспомогательных функций в приложении.

  2. Установите тип локального объекта данных, созданный вами на предыдущем шаге, равным ml. Для получения дополнительной информации см. Раздел «Задание типа данных Stateflow».

  3. Запустите приложение с помощью ml оператор пространства имен, чтобы указать, что приложение является внешним кодом MATLAB. Передайте ключевое слово this как аргумент, чтобы предоставить приложению доступ к графику во время симуляции. Сохраните значение, возвращенное вызовом функции в приложение, как локальный объект данных, который вы создали для взаимодействия с приложением. для получения дополнительной информации смотрите Доступ к функциям MATLAB и данным рабочей области в графиках С.

В этом примере приложение Media Player Helper использует свойство под названием chart для взаимодействия с графиком App Interface. Коллбэки приложения используют это свойство для записи в выходы графика:

  • Когда вы вставляете или выталкиваете диск, EjectButtonPushed коллбэк устанавливает значения insert, eject, и Album.

  • При нажатии кнопки в разделе Radio Request приложения соответствующие коллбэки устанавливают значение RadioReq.

  • При нажатии кнопки в разделе Запросе приложения соответствующие коллбэки устанавливают значение CDReq.

  • Когда вы закрываете приложение, UIFigureCloseRequest коллбэк устанавливает значение Stop на true.

И наоборот, на графике, действия входа в InterfaceWithApp состояние запуска приложения sf_mediaplayer_app и сохраните возвращенное значение как локальный объект данных app. График использует этот локальный объект данных, когда вызывает вспомогательные функции updateButtons и updateStatus. В приложении эти вспомогательные функции изменяют цвет кнопок и обновляют текстовое поле в нижней части приложения на основе значения входов графика RadioMode, CDMode, и CDStatus.

Управление режимами медиаплеера

The Mode Manager график активирует соответствующий подкомпонент медиаплеера (AM-радио, FM-радио или CD-проигрыватель) в зависимости от входов, полученных от App Interface график. Входные входы графика RadioReq и CDReq содержат строковые данные, которые управляют поведением графика. Чтобы вычислить строковые данные, график использует строковый оператор strcmp и его эквивалентная стенографическая форма ==. Выходные данные графика CurrentRadioMode обеспечивает выход данных на естественном языке для приложения, в то время как MechCmd управляет поведением подкомпонента проигрывателя компакт-дисков. Чтобы присвоить значения этим выходам, график использует строковый оператор strcpy и его эквивалентная стенографическая форма =.

В начале симуляции NormalOperation состояние становится активным. Если логические данные DiscEject является true, переход к Eject происходит состояние, за которым следует переход назад в NormalOperation состояние.

Когда NormalOperation активно, ранее активное подсостояние (Standby или ON), записанный историческим соединением, становится активным. Последующие переходы между Standby и ON подсостояния зависят от значения выражения strcmp(RadioReq,"OFF"):

  • Если strcmp возвращает значение нуля, затем RadioReq является "OFF" и Standby подсостояние активируется.

  • Если strcmp возвращает ненулевое значение, затем RadioReq не является «|OFF|» и ON подсостояние активируется.

В ON substate, три подсостояния представляют рабочие режимы медиаплеера: CD-проигрыватель, AM-радио и FM-радио. Каждое подсостояние соответствует другому значению входного RadioReq. Внутренний переход внутри ON состояние использует оператор hasChanged постоянно сканировать на изменения в значении RadioReq.

  • Если значение RadioReq является "CD", затем substate CDMode становится активным, и медиаплеер переходит в режим CD-проигрывателя. The Mode Manager выходы графика "PLAY", "REW", "FF", и "STOP" команды к CD Player график через строковые данные MechCmd.

  • Если значение RadioReq является "AM", затем substate AMMode становится активным, и медиаплеер переключается в режим радиосвязи AM. The Mode Manager график выводит "STOP" команда на CD Player график через строковые данные MechCmd.

  • Если значение RadioReq является "FM", затем substate FMMode становится активным, и медиаплеер переключается в режим FM-радио. The Mode Manager график выводит "STOP" команда на CD Player график через строковые данные MechCmd.

Управление режимами проигрывателя компакт-дисков

The CD Player график активирует соответствующий режим работы проигрывателя компакт-дисков в зависимости от входов, полученных от App Interface и Mode Manager чарты. Входные входы графика Cmd и Album содержат строковые данные, которые управляют поведением графика. Выходные данные графика AlbumName обеспечивает выход на естественный язык приложения. Чтобы назначить и сравнить значения строковых данных, график использует краткие операции = (см. strcpy) и == (см. strcmp). Чтобы создать текст в выход строке CDStatusграфик использует строковые операторы strcat, strlen, и substr.

В начале симуляции Empty состояние активировано.

Если логические данные DiscInsert является true, переход к Inserting происходит состояние. После короткой задержки переход к DiscPresent происходит состояние. The DiscPresent состояние остается активным до тех пор, пока данные не Cmd становится "EJECT". На этой точке переход к Ejecting происходит состояние. После короткой задержки переход к Empty происходит состояние. Оператор временной логики after управляет синхронизацией переходов во время вставки и выталкивания диска.

Когда происходит переход состояния, действие входа в новом состоянии изменяет значение CDStatus для отражения статуса проигрывателя компакт-диска. В FF или REW подсостояния, во время действия постоянно изменяют значение CDStatus для создания эффекта прокрутки движения.

  • Когда активное состояние Empty, значение CDStatus является "CD Player: Empty".

  • Когда активное состояние Inserting, значение CDStatus является "Reading: AlbumName".

  • Когда активное состояние Ejecting, значение CDStatus является "Ejecting: AlbumName".

  • Когда активное состояние DiscPresent.STOP, значение CDStatus является "CD Player: Stopped".

  • Когда активное состояние DiscPresent.PLAY, значение CDStatus является "Playing: AlbumName".

  • Когда активное состояние DiscPresent.REW, значение CDStatus является "Reverse << AlbumName", где AlbumName прокрутка назад по отображению.

  • Когда активное состояние DiscPresent.FF, значение CDStatus является "Forward >> AlbumName", где AlbumName прокрутка по отображению.

См. также

| | | | | |

Похожие темы