Чтобы смоделировать системы, которые переключаются между периодической или непрерывной динамикой времени, используйте Simulink® основанные состояния. Состояния, основанные на Simulink, поддерживаются только в Stateflow® графики в модели Simulink. Для получения дополнительной информации см. Подсистемы Simulink как государства.
Вы можете считать и записывать состояние блоков в состояниях, основанных на Simulink, в переходных действиях вашей диаграммы Stateflow. Вы можете читать и записывать состояние блоков текстово на переходах графика или с помощью блоков Simulink State Reader и State Writer.
Эта диаграмма Stateflow моделирует человека, перемещающегося через стадии сводирования полюсов. Первый этап является запуском подхода вальтера, который моделируется состоянием, основанным на Simulink Run_up
. На втором этапе сводник устанавливает шест и взлетает, что моделируется состоянием, основанным на Simulink Take_off
. Заключительный этап происходит, когда сводник очищает планку и отпускает шест, который моделируется состоянием, основанным на Simulink Fly
.
Состояния Run_up
и Fly
легче смоделировать при помощи Декартовых координат. Состояние Take_off
более легкий для моделирования при помощи полярных координат. Simulink функционирует InitTakeOff
и InitFly
используются для переключения с одной системы координат на другую. Для получения дополнительной информации на этой диаграмме смотрите Модель сводника полюсов при помощи состояний на основе Simulink.
Эта подсистема содержится в состоянии, основанном на Simulink Run_up
. Для перехода от Run_up
на Take_off
чтобы произойти, положение сводчика полюсов вдоль оси X, p(1)
, должно быть больше -4
.
Путем установки имени состояния блока интегратора Position
на 'p'
, вы можете получить текстовый доступ к состоянию этого блока из диаграммы Stateflow. Для доступа к состоянию блока интегратора в условии введите [Run_up.p(1)> -4]
. Когда это условие становится истинным, происходит переход, и активное состояние становится Take_off
.
На панели «Символы» можно увидеть, что состояние 'p'
появляется под состоянием Run_up
.
Stateflow использует State Reader и State Writer блоки, чтобы соединить подсистемы в состоянии, основанном на Simulink, с другими подсистемами Simulink в вашей модели. State Reader и State Writer блоки отображают имя блока владельца состояния, к которому они подключены. И наоборот, блок владельца состояния отображает тег, указывающий ссылку на State Reader или State Writer блок. Если щелкнуть метку над тегом, откроется список со ссылкой для перехода к блоку State Writer.
Следующая подсистема содержится в функции Simulink InitTakeOff
. Функция использует State Reader блоков, чтобы соединиться с состоянием Run_up
и читает p
и v
. Затем функция преобразует Декартовы значения для положения сводчика полюсов и скорости в полярные координаты, r
и theta
и rdot
и theta_dot
, соответственно. Эти полярные координаты затем получают доступ с помощью блоков владельцев состояний в состоянии Take_off
.
Когда происходит действие перехода, State Reader блокируется InitTakeOff
считайте состояние их блоков состояний. Когда функция Simulink заканчивает выполняться, блоки State Writer записывают в блоки владельца состояния в основанном на Simulink состоянии Take_off
.
Чтобы соединить State Reader или State Writer блок с блоком владельца в подсистеме Simulink:
Чтобы открыть свойства, дважды кликните State Reader.
В State Owner Selector Tree перейдите к блоку, который вы хотите быть блоком владельца состояния. В этом примере путем выбора Position
блок State Reader соединяется с интегратором Position
в состоянии Run_up
.
Путем соединения блока State Reader с Position
интегратор блок, эта функция Simulink может использовать состояние интегратора Position
для выполнения.