state описывает рабочий режим реактивной системы. В графике Stateflow® состояния используются для последовательного проекта, чтобы создать диаграммы переходов состояний.
Состояния могут быть активными или неактивными. Действие или неактивность состояния могут измениться в зависимости от событий и условий. Вхождение события управляет выполнением диаграммы переходов состояний, заставляя состояния стать активным или неактивным. В любой точке во время выполнения существуют активные и неактивные состояния.
Чтобы управлять многоуровневой сложностью состояния, используйте иерархию в своей диаграмме Stateflow. С иерархией можно представлять несколько уровней субкомпонентов в системе.
В следующем примере три уровня иерархии появляются в графике. Рисование одного состояния в контурах другого состояния указывает, что внутреннее состояние является подсостоянием (или дочерний элемент) внешнего состояния (или сверхсостояние). Внешнее состояние является родительским элементом внутреннего состояния.
В этом примере график является родительским элементом Car_done
состояния.
Car_done
состояния родительское состояние
Car_made
и Car_shipped
состояния. Car_made
состояния также родительский элемент
Parts_assembled
и Painted
состояния. Можно также сказать что состояния Parts_assembled
и Painted
дочерние элементы Car_made
состояние.
Чтобы представлять иерархию Stateflow дословно, используйте символ наклонной черты (/)
представлять график и использовать период (.)
разделить каждый уровень в иерархии состояний. Следующий список является текстовым представлением иерархии объектов в предыдущем примере:
/Car_done
/Car_done
.Car_made
/Car_done
.Car_shipped
/Car_done
.Car_made
.Parts_assembled
/Car_done
.Car_made
.Painted
Состояния могут содержать все другие объекты Stateflow. Обозначение диаграммы Stateflow поддерживает представление иерархии графического объекта в диаграммах Stateflow с включением. Состоянием является superstate, если оно содержит другие состояния. Состоянием является substate, если оно содержится в другом состоянии. Состояние, которое не является ни сверхсостоянием, ни подсостоянием другого состояния, является состоянием, родительским элементом которого является сама диаграмма Stateflow.
Состояния могут также содержать неграфические данные, событие и объекты сообщения. Иерархия этого включения появляется в Model Explorer. Вы задаете данные, событие и включение сообщения путем определения родительского объекта.
Каждое состояние (или график) имеет decomposition, который диктует, какие подсостояния состояние (или график) может содержать. Все подсостояния сверхсостояния должны иметь тот же тип как разложение сверхсостояния. Разложение состояния может быть исключительным (OR) или параллель (AND).
Подсостояния со сплошными границами указывают исключительный (OR) разложение состояния. Используйте это разложение, чтобы описать рабочие режимы, которые являются взаимоисключающими. Когда состояние имеет исключительный (OR) разложение, только одно подсостояние может быть активным за один раз.
В следующем примере, любом A
состояния или
B
состояния может быть активным. Если
A
состояния активно, любой
A1
состояния или
A2
состояния может быть активным в установленный срок.
Подсостояния с пунктирными границами указывают на параллель (AND) разложение. Используйте это разложение, чтобы описать параллельные рабочие режимы. Когда состояние имеет параллель (AND) разложение, все подсостояния активны одновременно.
В следующем примере, когда A
состояния активно,
A1
и A2
оба активны одновременно.
Действие в параллельных состояниях чрезвычайно независимо, как продемонстрировано в следующем примере.
В следующем примере, когда A
состояния становится активным, оба состояния
B
и C
станьте активными одновременно. Когда C
состояния становится активным, любой
C1
состояния или
C2
состояния может быть активным.
Метка для состояния появляется в главном левом угле прямоугольника состояния со следующим общим форматом:
name/ entry:entry actions during:during actions exit:exit actions on event_name:on event_name actions on message_name:on message_name actions bind:events
Следующий пример демонстрирует компоненты метки состояния.
Каждое действие в метке состояния появляется в подтемах, которые следуют. Для получения дополнительной информации о состояниях активности см.:
Выполнение диаграммы Stateflow — Описывает, как и когда выполнение графика происходит.
Типы Состояния активности — Дают более подробные описания каждого типа состояния активности, entry
, during
выход
.
Метка состояния запускается с имени состояния, сопровождаемого дополнительным /
символ. В предыдущем примере именами состояния является On
и Off
. Допустимые имена состояния состоят из алфавитно-цифровых символов и могут включать подчеркивание (_
Символ. Для получения дополнительной информации см. Правила для Именования Объектов Stateflow.
Иерархия обеспечивает некоторую гибкость в именовании состояний. Имя, что вы вводите в метку состояния, должно быть уникальным, когда предшествуется состояниями предка. Имя в иерархии Stateflow является текстом, который вы вводите как метка на состоянии, которому предшествуют имена родительских состояний, разделенных периодами. Каждое состояние может иметь то же имя, появляются в метке, пока их полные имена в иерархии уникальны. В противном случае синтаксический анализатор указывает на ошибку.
Следующий пример показывает, как уникальное именование состояний работает.
Каждое из этих состояний имеет уникальное имя из-за своего местоположения в графике. Полные имена для состояний в FAN1
и FAN2
:
PowerOn.FAN1.On
PowerOn.FAN1.Off
PowerOn.FAN2.On
PowerOn.FAN2.Off
После имени вы вводите дополнительные операторы действия для состояния с меткой ключевого слова, которая идентифицирует тип действия. Вы не можете задать ни один, некоторых или всех их. Двоеточие после каждого ключевого слова требуется. Наклонная черта после имени состояния является дополнительной, пока это сопровождается возвратом каретки.
Для каждого типа действия можно начать больше чем одно действие путем разделения каждого действия возвратом каретки, точкой с запятой или запятой. Можно задать действия больше чем для одного события или сообщения путем добавления дополнительного on
event_name
или on
message_name
линии.
Если вы вводите имя и режете сопровождаемый непосредственно действиями, действия интерпретированы как entry
действие (действия). Это сокращение полезно, если вы задаете только entry
действия.
Действие записи. Предшествовавший префиксным entry
или en
для краткости В предыдущем примере утвердите On
имеет entry
действие on_count=0
. Это означает что значение on_count
сбрасывается к 0 каждый раз, когда On
состояния становится активным (вводимый).
Во время Действия. Предшествовавший префиксным during
или du
для краткости В предыдущем примере метки утвердите On
имеет два during
действия, light_on()
и on_count++
. Эти действия выполняются каждый раз, когда On
состояния уже активно, и любое событие имеет место.
Выйдите из Действия. Предшествовавший префиксным exit
или ex
для краткости В предыдущем примере метки утвердите Off
имеет exit
действие light_off()
. Если state Off
активно, но становится неактивным (вышедший), это действие выполняется.
На Действии. Предшествовавший префиксным on
event_name
, или on
message_name
. В предыдущем примере метки утвердите On
имеет on power_outage
действие. Если On
состояния активно и событие
power_outage
происходит, действие handle_outage()
выполняется.
Свяжите Действие. Предшествовавший префиксным bind
. События, связанные с состоянием, могут только быть широковещательно переданы тем состоянием или его дочерними элементами.