В этом примере показано, как создать интерфейс между графиком Stateflow®, который использует MATLAB® в качестве языка действия и приложения MATLAB, созданного в App Designer. Для получения дополнительной информации о соединении диаграммы Stateflow, которая использует C в качестве языка действия к приложению MATLAB, смотрите, Симулируют Медиаплеер.
В этом примере автомобильная система окна со стеклоподъемником повышает и понижает окно пассажирской стороны в ответ на пару переключателей управления окном. Переключатели в приложении MATLAB представляют средства управления на драйвере и пассажирских дверях. Приложение также содержит несколько ламп индикатора, которые контролируют состояние системы окна со стеклоподъемником и кнопки для представления препятствия в пути окна.
Диаграмма Stateflow App Interface
обеспечивает двунаправленную связь между приложением MATLAB и управлением и системами объекта в модели Simulink®. Когда вы указываете переключатель в приложении к новой позиции, график повышает соответствие, "Вниз", или "Нейтральную" команду к системе управления окна со стеклоподъемником. С другой стороны, когда состояние изменений системы управления, график включает или отключает соответствующие лампы состояния в приложении.
Чтобы запустить пример, откройте модель Simulink и нажмите Run. График App Interface
открывает приложение и инициализирует управление и системы объекта в системе окна со стеклоподъемником. Чтобы остановить симуляцию, нажмите Stop или закройте приложение.
График App Interface
уже сконфигурирован, чтобы передать с приложением MATLAB sf_power_window_app
. Чтобы создать двунаправленную связь между вашим приложением MATLAB и диаграммой Stateflow, которая использует MATLAB в качестве языка действия, выполните эти шаги. В приложении MATLAB:
Создайте пользовательское свойство взаимодействовать через интерфейс с графиком в процессе моделирования. Приложение использует это свойство получить доступ к входным параметрам графика, строить диаграмму выходных параметров и локальных данных. Для получения дополнительной информации смотрите, Осуществляют обмен данными В рамках Приложений App Designer.
Измените startupFcn
коллбэк для приложения путем добавления нового входного параметра и хранения его значения как свойства, которое вы создали на предыдущем шаге. Для получения дополнительной информации смотрите Коллбэки Записи в App Designer.
В диаграмме Stateflow:
Создайте локальный объект данных взаимодействовать через интерфейс с приложением. График использует этот локальный объект данных в качестве аргумента, когда это вызывает функции помощника в приложении.
Установите тип локального объекта данных, который вы создали на предыдущем шаге к Inherit: From definition in chart
. Для получения дополнительной информации смотрите, Задают Тип Данных Stateflow.
Вызовите coder.extrinsic
функция, чтобы объявить приложение и любого помощника функционирует как внешний код MATLAB. Для получения дополнительной информации смотрите функции MATLAB Значения внешних параметров Вызова в диаграммах Stateflow.
Запустите приложение с помощью ключевого слова this
в качестве аргумента, чтобы дать доступ к приложениям графику в процессе моделирования. Сохраните значение, возвращенное вызовом функции к приложению как локальный объект данных, который вы создали, чтобы взаимодействовать через интерфейс с приложением.
В этом примере приложение окна со стеклоподъемником использует свойство под названием chart
соединять интерфейсом с графиком с App Interface
. Коллбэки приложения используют это свойство записать в график выходные параметры:
Когда вы перемещаете переключатель управления водительской стороны в новое положение, DriverControlValueChanged
коллбэк устанавливает значения switches.driver_up
и switches.driver_down
.
Когда вы перемещаете переключатель управления пассажирской стороны в новое положение, PassengerControlValueChanged
коллбэк устанавливает значения switches.passenger_up
и switches.passenger_down
.
Когда вы нажимаете кнопку Obstacle, ObstacleButtonPushed
коллбэк устанавливает значение obstacle
к true
.
Когда вы закрываете приложение, UIFigureCloseRequest
коллбэк устанавливает значение stop
к true
.
С другой стороны, в графике, действиях входа в InterfaceWithApp
государственный приложение sf_power_window_app
и сохраните возвращенное значение как локальный объект данных app
. График использует этот локальный объект данных, когда это вызывает функцию помощника updateLamps
. В приложении эта функция помощника включает и выключает лампы на основе значения входа lamps
графика.
Система управления окна со стеклоподъемником использует логику режима, чтобы определить, когда окно должно переместить и выводит объединенную команду движения к сервоприводу. Чтобы понизить производственные затраты, система управления не отслеживает положение окна. Вместо этого это использует сигнал от сервопривода, чтобы определить, когда окно полностью открыто или полностью закрытое, или когда это сталкивается с препятствием.
Система управления соответствует этим требованиям к производительности:
Окно должно открыться или закрыться полностью через 5 секунд.
Двигатель должен остановиться, когда окно достигает полностью открытый или положение полностью закрытого отверстия.
Двигатель должен смочь обнаружить препятствие, когда окно перемещается вверх. Когда двигатель обнаруживает препятствие в пути окна, окно должно быть понижено в течение одной секунды или пока окно не полностью открыто.
Двигатель должен остановиться после 10 секунд непрерывного перемещения в любом направлении. Это требование обеспечивает отказоустойчивую защиту для механизма окна, двигателя и диска.
Если у переключателя управления требуют меньше половины секунды, или если это нажимается для дольше, чем одна секунда, окно должно остановиться, когда переключатель выпущен.
Если переключатель управления нажимается для дольше, чем половина секунды и выпущенный, прежде чем одна секунда, окно должно будет открыться или закрыться полностью, если это не прервано новой командой или препятствием. Это требование представляет возможность автоматического режима окна со стеклоподъемником.
Управление водительской стороны имеет приоритет над управлением пассажирской стороны.
Обнаружение препятствия имеет приоритет и над водительской стороной и над средствами управления пассажирской стороны.
Диаграмма Stateflow Control System
моделирует событийно-управляемый контроллер, который удовлетворяет этим требованиям. График состоит из двух состояний (Switch
и Logic
) в параллельном разложении. Эти состояния реагируют на изменения во входных параметрах графика, определяют рабочий режим системы окна со стеклоподъемником и управляют выходными сигналами, которые активируют сервопривод.
Switch
состояния читает значения входных параметров графика и широковещательных сообщений локальные события, чтобы изменить рабочий режим системы окна со стеклоподъемником. Для получения дополнительной информации смотрите Широковещательную передачу Локальные События, чтобы Синхронизировать Параллельные состояния.
На каждом временном шаге симуляции состояние вызывает функцию таблицы истинности checkSwitches
чтобы определить положения водительской стороны и пассажирской стороны управляют переключателями. В зависимости от значения входной структуры switches
, этот функциональные широковещательные сообщения UP
, DOWN
, и NEUTRAL
события. Поскольку функция игнорирует любой вход от управления пассажирской стороны, когда управление водительской стороны не находится в "Нейтральном" положении, управление водительской стороны имеет приоритет над управлением пассажирской стороны, как задано требованием 7.
Похожим способом состояние вызывает графическую функцию detectObstacles
определить силу тока якоря в сервоприводе. Если значение current
является малым и является ненулевым, препятствие присутствует так функциональные широковещательные сообщения событие OBSTACLE
. В отличие от этого, если значение current
является большим, окно достигло полностью открытого или полностью закрытого положения клапанов так функциональные широковещательные сообщения событие ENDSTOP
. Поскольку график вызывает detectObstacles
перед checkSwitches
, обнаружение препятствия имеет приоритет и над водительской стороной и над средствами управления пассажирской стороны, как задано требованием 8.
Logic
состояния включает алгоритмы обнаружения отказа, чтобы защитить оборудование окна и любые препятствия в пути окна. Состояние содержит три подсостояния,
Stop
перемещение
, и EmergencyDown
, это представляет рабочие режимы системы окна со стеклоподъемником.
Первоначально, Stop
состояния активно. Это состояние содержит два параллельных подсостояния, названные
Mode
и Position
.
Mode
определяет, когда энергосистема готова принять новые команды от переключателей управления. Система готова к новым командам, когда оба переключателя управления находятся в "Нейтральном" положении.
Position
записи, полностью открыто ли окно, полностью закрытое, или где-нибудь в середине. График делает это определение путем замечания направления, в которое перемещается окно, когда сервопривод достигает конца своей области значений.
Stop
остается активным до широковещательной передачи событий UP
или DOWN
указывает на команду от одного из переключателей управления. Пока окно не полностью открыто или полностью закрытое, эти события инициировали переход к Move
состояния. Однако событие
UP
рассматривается недопустимым, когда окно уже полностью закрывается. Аналогично, событие DOWN
недопустимо, когда окно полностью открыто.
Move
состояния активно каждый раз, когда окно находится в движении. Это состояние реализует несколько из требований окна со стеклоподъемником, связанных с автоматическим перемещением окна и обнаружением отказа. Состояние имеет два параллельных подсостояния, названные
Direction
и Mode
.
Direction
определяет направление, в котором окно должно переместить и вызывает функции go.up
и go.down
, как соответствующий. Эти функции устанавливают значения выходных сигналов, которые управляют сервоприводом и лампами состояния "Up" и "Down" в приложении.
Mode
реализует автоматические и ручные режимы окна со стеклоподъемником, заданного требованиями 5 и 6. Это состояние имеет три исключительных подсостояния (Initializing
'auto'
, и Manual
). Первоначально, Initializing
подсостояния активно. Подсостояние ожидает широковещательной передачи
NEUTRAL
событие, которое указывает, что переключатели управления возвратились к "Нейтральному" положению. Если широковещательная передача происходит в течение половины секунды после Initializing
становясь активным, событие инициировало переход к Stop
состояние, указывая, что окно должно прекратить перемещаться. Если широковещательная передача происходит после половины секунды, но перед одной секундой Initializing
становясь активным, событие инициировало переход к Auto
подсостояния, указание, что система окна со стеклоподъемником действует в ее автоматическом режиме. Это подсостояние остается активным, пока оно не прервано широковещательной передачей событий
ENDSTOP
(когда окно полностью открыто или полностью закрытое), OBSTACLE
(когда окно сталкивается с препятствием), или UP
или DOWN
(когда система получает новую команду от одного из переключателей управления). Наконец, если широковещательная передача не происходит перед одной секундой Initializing
становясь активным, временное логическое выражение after(1,sec)
инициировал переход к Manual
подсостояния. Это подсостояние остается активным до широковещательной передачи события
NEUTRAL
инициировал переход назад к Stop
состояние.
Независимый от того, является ли система в автоматическом или ручном режиме, переходы графика непосредственно от Move
к Stop
на широковещательной передаче события ENDSTOP
или когда Move
активно для дольше, чем FAILSAFE_TIMEOUT
секунды, как задано требованиями 2 и 4. По умолчанию значение этой константы установлено к 10.
Когда окно сталкивается с препятствием, приложенная сила на окне увеличивает нагрузку на сервопривод и вызывает повышение тока якоря. Путем контроля для резких увеличений в токе якоря система обнаруживает препятствия в пути окна.
В этом примере Подсистема Simulink симулирует сервопривод. Положение окна вычисляется блоком Integrator (Simulink) с пределами насыщения 0 (полностью открытый) и 10 (полностью закрытый). Поскольку вход с этим блоком имеет усиление 2, окно открывается и закрывается полностью через 5 секунд, как задано требованием 1. Когда блок Integrator достигает точки насыщения, система выход armature current
увеличения к 10. Это значение указывает, что окно полностью открыто или полностью закрыто.
Чтобы ввести препятствие в пути окна, нажмите кнопку Obstacle в приложении, в то время как окно перемещается вверх. App Interface
график отвечает путем отправки положительного сигнала в сервопривод, который в свою очередь производит маленькое повышение тока якоря. В Control System
стройте диаграмму, функциональный detectObstacles
регистры это изменение в текущем и широковещательных сообщениях событие OBSTACLE
. В Logic
состояние, это событие инициировало переход от Move
подсостояния к
EmergencyDown
подсостояния. В то время как это подсостояние активно, система перемещает окно вниз в течение одной секунды или пока окно не полностью открыто. Затем переходы графика назад к
Stop
подсостояния, указание, что окно должно прекратить перемещаться, как задано требованием 3.
after | hasChanged | send | this | coder.extrinsic
(MATLAB Coder) | Integrator (Simulink)