Моделируйте контроллер окна со степенью

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

В этом примере автомобильная система окна со степенью поднимает и опускает окно со стороны пассажира в ответ на пару ключей управления окном. Переключатели в приложении MATLAB представляют элементы управления на дверях драйвера и пассажира. Приложение также содержит несколько индикаторных ламп, которые контролируют состояние системы окна со степенью и кнопку для введения препятствия в путь окна.

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

Чтобы запустить пример, откройте модель Simulink и нажмите запуск. График App Interface открывает приложение и инициализирует системы управления и объекта в системе степени. Чтобы остановить симуляцию, нажмите кнопку Остановить или закрыть приложение.

Подключите график к приложению MATLAB

График App Interface уже настроен для связи с приложением MATLAB sf_power_window_app. Чтобы создать двунаправленное соединение между приложением MATLAB и диаграммой Stateflow, которая использует MATLAB в качестве языка действий, выполните следующие шаги. В приложении MATLAB:

  1. Создайте пользовательское свойство для взаимодействия с графиком во время симуляции. Приложение использует это свойство для доступа к входам графика, выходам графика и локальным данным. Для получения дополнительной информации см. раздел «Обмен данными в приложениях App Designer».

  2. Измените startupFcn коллбэк для приложения путем добавления нового входного параметра и хранения его значения в качестве свойства, которое вы создали на предыдущем шаге. Для получения дополнительной информации см. Раздел «Запись коллбэков в App Designer».

На диаграмме Stateflow:

  1. Создайте локальный объект данных для интерфейса с приложением. График использует этот локальный объект данных в качестве аргумента при вызове вспомогательных функций в приложении.

  2. Установите тип локального объекта данных, созданный вами на предыдущем шаге, равным Inherit: From definition in chart. Для получения дополнительной информации см. Раздел «Задание типа данных Stateflow».

  3. Вызовите coder.extrinsic функция для объявления приложения и любых вспомогательных функций в качестве внешнего кода MATLAB. Для получения дополнительной информации смотрите Вызов внешних функций MATLAB в диаграммах Stateflow.

  4. Запустите приложение с помощью ключевого слова 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.

Разработка системы управления

Система управления окна со степенью использует логику режима, чтобы определить, когда окно должно двигаться, и выводит унифицированную команду движения на сервопривод. Для снижения производственных затрат система управления не отслеживает положение окна. Вместо этого он полагается на сигнал от сервопривода, чтобы определить, когда окно полностью открыто или полностью закрыто, или когда оно сталкивается с препятствием.

Система управления удовлетворяет следующим требованиям к эффективности:

  1. Окно должно открыться или закрыться полностью за 5 секунд.

  2. Двигатель должен остановиться, когда окно достигнет полностью открытого или положения полностью закрытого отверстия.

  3. Двигатель должен быть в состоянии обнаружить препятствие, когда окно движется вверх. Когда двигатель обнаруживает препятствие в пути окна, окно должно быть опущено на одну секунду или пока окно не будет полностью открыто.

  4. Двигатель должен остановиться через 10 секунд непрерывного движения в любом направлении. Это требование обеспечивает надежную защиту оконного механизма, двигателя и привода.

  5. Если переключатель управления нажат менее половины секунды или нажат более одной секунды, окно должно остановиться, когда переключатель будет отпущен.

  6. Если переключатель управления нажат более половины секунды и отпущен до одной секунды, окно должно полностью открыться или закрыться, если только оно не прерывается новой командой или препятствием. Это требование представляет возможность автоматического режима окна со степенью.

  7. Управление со стороны водителя имеет приоритет над управлением со стороны пассажира.

  8. Обнаружение препятствий имеет приоритет над управлением как со стороны водителя, так и со стороны пассажира.

Диаграмма 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.

См. также

| | | | (MATLAB CODER) | (Simulink)

Похожие темы