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

Диаграмма Stateflow App Interface обеспечивает двунаправленное соединение между приложением MATLAB и системами управления и установки в модели Simulink ®. При наведении переключателя в приложении на новое положение диаграмма отправляет соответствующую команду «Вверх», «Вниз» или «Нейтрально» в систему управления окном питания. И наоборот, когда система управления изменяет состояние, диаграмма включает или отключает соответствующие индикаторы состояния в приложении.

Чтобы запустить пример, откройте модель Simulink и щелкните Выполнить (Run). Диаграмма App Interface открывает приложение и инициализирует системы управления и установки в системе окна питания. Чтобы остановить моделирование, нажмите кнопку Остановить или закрыть приложение.
Диаграмма App Interface уже настроен для связи с приложением MATLAB sf_power_window_app. Чтобы создать двунаправленное соединение между приложением MATLAB и диаграммой Stateflow, использующей MATLAB в качестве языка действий, выполните следующие действия. В приложении MATLAB:
Создайте пользовательское свойство для взаимодействия с диаграммой во время моделирования. Приложение использует это свойство для доступа к входам диаграммы, выводам диаграммы и локальным данным. Дополнительные сведения см. в разделе Общий доступ к данным в приложениях App Designer.
Изменение startupFcn обратный вызов приложения путем добавления нового входного аргумента и сохранения его значения в качестве свойства, созданного на предыдущем шаге. Дополнительные сведения см. в разделе Обратные вызовы записи в App Designer.
На диаграмме Stateflow:
Создайте локальный объект данных для взаимодействия с приложением. Диаграмма использует этот локальный объект данных в качестве аргумента при вызове вспомогательных функций в приложении.
Задайте тип локального объекта данных, созданного на предыдущем шаге, равным Inherit: From definition in chart. Дополнительные сведения см. в разделе Указание типа данных потока состояний.
Позвоните в coder.extrinsic чтобы объявить приложение и любые вспомогательные функции как внешний код MATLAB. Дополнительные сведения см. в разделе Вызов внешних функций MATLAB в диаграммах потока состояний.
Запустить приложение с помощью ключевого слова this в качестве аргумента для предоставления приложению доступа к диаграмме во время моделирования. Сохраните значение, возвращенное вызовом функции приложению, как локальный объект данных, созданный для взаимодействия с приложением.
В этом примере приложение power window использует свойство с именем 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. Диаграмма использует этот локальный объект данных при вызове функции помощника 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). Первоначально подсостояние 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. Когда блок интегратора достигает точки насыщения, система выводит armature current увеличивается до 10. Это значение указывает, что окно полностью открыто или закрыто.

Чтобы создать препятствие на пути к окну, нажмите кнопку Препятствие в приложении во время движения окна вверх. App Interface график реагирует, посылая положительный сигнал сервоприводу, который, в свою очередь, производит небольшой подъем тока якоря. В Control System диаграмма, функция detectObstacles регистрирует это изменение в текущем и транслирует событие OBSTACLE. В Logic состояние, это событие запускает переход из подсостояния Move в подсостояние EmergencyDown. Пока это подсостояние активно, система перемещает окно вниз на одну секунду или до тех пор, пока окно не будет полностью открыто. Затем диаграмма переходит обратно в подсостояние Stop, указывая, что окно должно прекратить движение, как указано в требовании 3.

после | hasChanged | послать | это | coder.extrinsic (кодер MATLAB) | Интегратор (Simulink)