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

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

Откройте модель Simulink и нажмите Run. Вспомогательное приложение Медиаплеера открывается. Текстовое поле в нижней части приложения показывает состояние медиаплеера, Standby (OFF).
В разделе Radio Request нажмите CD. Состояние медиаплеера превращается в CD Player: Empty.
Нажмите Insert Disc. Состояние медиаплеера кратко говорит Reading: Handel's Greatest Hits прежде, чем превратиться в CD Player: Stopped.
В разделе CD Request нажмите PLAY. Состояние медиаплеера превращается в Playing: Handel's Greatest Hits и музыка начинает играть.
В разделе CD Request нажмите FF. Музыкальные остановки и щебечущие звуки начинаются. Состояние медиа-контента превращается в Forward >> Handel's Greatest Hits. Название альбома в этом сообщении прокручивает вперед через отображение.
Используйте Вспомогательное приложение Медиаплеера, чтобы выбрать другие рабочие режимы или ввести различное название альбома. Например, попытайтесь проигрывать к альбомам Training Deep Networks или Fun With State Machines. Чтобы остановить симуляцию, закройте Вспомогательное приложение Медиаплеера.
График App Interface уже сконфигурирован, чтобы передать с приложением MATLAB sf_mediaplayer_app. Чтобы создать двунаправленную связь между вашим приложением MATLAB и диаграммой Stateflow, которая использует C в качестве языка действия, выполните эти шаги. В приложении MATLAB:
Создайте пользовательское свойство взаимодействовать через интерфейс с графиком в процессе моделирования. Приложение использует это свойство получить доступ к входным параметрам графика, строить диаграмму выходных параметров и локальных данных. Для получения дополнительной информации смотрите, Осуществляют обмен данными В рамках Приложений App Designer.
Измените startupFcn коллбэк для приложения путем добавления нового входного параметра и хранения его значения как свойства, которое вы создали на предыдущем шаге. Для получения дополнительной информации смотрите Коллбэки Записи в App Designer.
В диаграмме Stateflow:
Создайте локальный объект данных взаимодействовать через интерфейс с приложением. График использует этот локальный объект данных в качестве аргумента, когда это вызывает функции помощника в приложении.
Установите тип локального объекта данных, который вы создали на предыдущем шаге к ml. Для получения дополнительной информации смотрите, Задают Тип Данных Stateflow.
Запустите приложение с помощью 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 прокрутки передают через отображение.
after | hasChanged | strcat | strcmp | strcpy | strlen | substr