В этом примере показано, как создать интерфейс между графиком 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
, график использует строковые операторы strcat
strlen
, и 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