Симулируйте медиаплеер

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

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

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

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

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

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

  3. Нажмите Insert Disc. Состояние медиаплеера кратко говорит Reading: Handel's Greatest Hits прежде, чем превратиться в CD Player: Stopped.

  4. В разделе CD Request нажмите PLAY. Состояние медиаплеера превращается в Playing: Handel's Greatest Hits и музыка начинает играть.

  5. В разделе CD Request нажмите 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. Для получения дополнительной информации смотрите, Задают Тип Данных Stateflow.

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

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

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

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

  • Когда вы нажимаете кнопку в разделе CD Request приложения, соответствующие коллбэки устанавливают значение CDReq.

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

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

Управляйте режимами медиаплеера

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

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

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

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

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

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

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

Если булевы данные DiscInsert true, переход к Inserting состояние происходит. После кратковременной задержки, перехода к DiscPresent состояние происходит. 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 прокрутки передают через отображение.

Смотрите также

| | | | | |

Похожие темы