exponenta event banner

Моделирование проигрывателя мультимедиа

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

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

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

Запустить модель проигрывателя мультимедиа

  1. Откройте модель Simulink и щелкните Выполнить (Run). Откроется приложение «Помощник проигрывателя мультимедиа». Текстовое поле в нижней части приложения показывает состояние медиаплеера. Standby (OFF).

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

  3. Щелкните Вставить диск. Состояние медиаплеера кратко говорит Reading: Handel's Greatest Hits перед изменением на CD Player: Stopped.

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

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

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

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

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

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

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

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

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

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

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

В этом примере приложение «Помощник проигрывателя мультимедиа» использует свойство с именем chart для взаимодействия с диаграммой App Interface. Обратные вызовы приложения используют это свойство для записи в выходные данные диаграммы:

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

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

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

  • При закрытии приложения UIFigureCloseRequest обратный вызов устанавливает значение Stop кому true.

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

Управление режимами проигрывателя мультимедиа

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

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

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

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

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

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

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

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

Когда происходит переход состояния, действие входа в новом состоянии изменяет значение CDStatus для отражения состояния проигрывателя компакт-дисков. В FF или REW substates, во время действий постоянно изменять значение 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 прокручивает вперед по дисплею.

См. также

| | | | | |

Связанные темы