В этом примере показано, как создать интерфейс между графиком Stateflow ®, которая использует MATLAB ® в качестве языка действий, и приложением MATLAB, созданным в App Designer. Дополнительные сведения о соединении диаграммы Stateflow, которая использует C в качестве языка действий, с приложением MATLAB, см. в разделе Моделирование медиаплеера.
В этом примере автомобильная система окна со степенью поднимает и опускает окно со стороны пассажира в ответ на пару ключей управления окном. Переключатели в приложении MATLAB представляют элементы управления на дверях драйвера и пассажира. Приложение также содержит несколько индикаторных ламп, которые контролируют состояние системы окна со степенью и кнопку для введения препятствия в путь окна.
Диаграмма Stateflow App Interface
обеспечивает двунаправленное соединение между приложением MATLAB и системами управления и объекта в модели Simulink ®. Когда вы указываете переключатель в приложении на новую позицию, график отправляет соответствующую команду «Вверх», «Вниз» или «Нейтраль» в систему управления окна со степенью. И наоборот, когда система управления изменяет состояние, график включает или отключает соответствующие лампы состояния в приложении.
Чтобы запустить пример, откройте модель Simulink и нажмите запуск. График App Interface
открывает приложение и инициализирует системы управления и объекта в системе степени. Чтобы остановить симуляцию, нажмите кнопку Остановить или закрыть приложение.
График 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
.
При нажатии кнопки «Препятствия» ObstacleButtonPushed
коллбэк устанавливает значение obstacle
на true
.
Когда вы закрываете приложение, UIFigureCloseRequest
коллбэк устанавливает значение stop
на true
.
И наоборот, на графике, действия входа в InterfaceWithApp
состояние запуска приложения sf_power_window_app
и сохраните возвращенное значение как локальный объект данных app
. График использует этот локальный объект данных, когда вызывает функцию helper 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
, Move
, и EmergencyDown
, которые представляют рабочие режимы системы степени.
Первоначально состояние Stop
активно. Это состояние содержит два параллельных подсостояния с именем Mode
и Position
.
Mode
определяет, когда система степени готова принять новые команды от ключей управления. Система готова к новым командам, когда оба переключателя находятся в положении «Нейтраль».
Position
регистрирует, полностью ли окно открыто, полностью закрыто или где-то посередине. График делает это определение, отмечая направление, в котором окно движется, когда сервопривод достигает конца своей области значений.
Stop
остается активным до трансляции событий UP
или DOWN
указывает команду от одного из ключей управления. Пока окно не полностью открыто или полностью закрыто, эти события запускают переход в состояние Move
. Однако событие UP
считается недопустимым, когда окно уже полностью закрыто. Точно так же событие DOWN
недопустимо, когда окно полностью открыто.
Состояние Move
активен каждый раз, когда окно находится в движении. Это состояние реализует несколько требований степени, связанных с автоматическим перемещением окна и обнаружением отказа. Состояние имеет два параллельных подсостояния с именем Direction
и Mode
.
Direction
определяет направление, в котором окно должно перемещаться, и вызывает функции go.up
и go.down
По обстоятельствам. Эти функции устанавливают значения выходных сигналов, которые управляют сервоприводом и лампами состояния «Вверх» и «Вниз» в приложении.
Mode
реализует автоматический и ручной режимы окна со степенью, заданные требованиями 5 и 6. Это состояние имеет три эксклюзивных подсостояния (Initializing
, Auto
, и Manual
). Первоначально substate Initializing
активно. Подсостояние ждет трансляции NEUTRAL
событие, указывающее, что управляющие переключатели вернулись в положение «Нейтраль». Если вещание происходит в течение половины секунды Initializing
став активным, событие запускает переход к Stop
состояние, указывающее, что окно должно прекратить движение. Если трансляция происходит через полсекунды, но до одной секунды Initializing
став активным, событие запускает переход к substate Auto
, указывающий, что система степени работает в автоматическом режиме. Это подсостояние остается активным до тех пор, пока оно не будет прервано трансляцией событий ENDSTOP
(когда окно полностью открыто или полностью закрыто), OBSTACLE
(когда окно сталкивается с препятствием), или UP
или DOWN
(когда система получает новую команду от одного из ключей управления). Наконец, если вещание не происходит до одной секунды Initializing
становится активным, временное логическое выражение after(1,sec)
инициирует переход к substate Manual
. Это подсостояние остается активным до трансляции события NEUTRAL
инициирует переход назад в Stop
состояние.
Независимо от того, находится ли система в автоматическом или ручном режиме, график переходит непосредственно от Move
на Stop
о трансляции мероприятия ENDSTOP
или когда Move
активен дольше FAILSAFE_TIMEOUT
секунд, как указано требованиями 2 и 4. По умолчанию значение этой константы устанавливается равным 10.
Когда окно сталкивается с препятствием, приложенная сила на окне увеличивает нагрузку на сервопривод и вызывает подъем тока якоря. Отслеживая резкие увеличения тока якоря, система обнаруживает препятствия в пути окна.
В этом примере подсистема Simulink моделирует сервопривод. Положение окна вычисляется блоком Integrator (Simulink) с пределами насыщения 0 (полностью открытый) и 10 (полностью закрытый). Поскольку вход в этот блок имеет коэффициент усиления 2, окно откроется и закроется полностью за 5 секунд, как задано требованием 1. Когда блок Integrator достигает точки насыщения, выход системы armature current
увеличивается до 10. Это значение указывает, что окно полностью открыто или полностью закрыто.
Чтобы ввести препятствие в путь окна, нажмите кнопку «Препятствие» в приложении, пока окно движется вверх. The App Interface
график реагирует передачей положительного сигнала на сервопривод, который, в свою очередь, производит небольшой подъем тока якоря. В Control System
график, функция detectObstacles
регистрирует это изменение в текущем и транслирует событие OBSTACLE
. В Logic
состояние, это событие запускает переход от substate Move
к подсостоянию EmergencyDown
. Пока это подсостояние активно, система перемещает окно вниз на одну секунду или до тех пор, пока окно не будет полностью открыто. Затем график переходит назад к подсостоянию Stop
, указывающий, что окно должно прекратить движение, как указано в требовании 3.
after | hasChanged | send | this | coder.extrinsic
(MATLAB CODER) | Integrator (Simulink)