Состояние описывает режим работы реактивной системы. В диаграмме Stateflow ® состояния используются для последовательного проектирования для создания диаграмм перехода состояний.
Состояния могут быть активными или неактивными. Активность или неактивность состояния может меняться в зависимости от событий и условий. Возникновение события управляет выполнением диаграммы перехода состояний, делая состояния активными или неактивными. Дополнительные сведения см. в разделе Состояния.
Состояния создаются путем их рисования в редакторе для определенной диаграммы (блока). Выполните следующие действия.
Выберите инструмент «Состояние»:
![]()
Переместите указатель в область рисования.
В области рисования указатель становится статовидным (прямоугольным с овальными углами).
Щелкните в определенном расположении, чтобы создать состояние.
Созданное состояние отображается с вопросительным знаком (?) метка в верхнем левом углу.
Щелкните знак вопроса.
Вместо вопросительного знака появляется текстовой курсор.
По завершении введите имя состояния и щелкните за его пределами.
Метка состояния указывает требуемое имя и необязательные действия. Дополнительные сведения см. в разделе Состояния меток.
Чтобы переместить состояние, выполните следующие действия.
Щелкните и перетащите состояние.
Выпустите его на новую должность.
Чтобы изменить размер состояния, выполните следующие действия.
Поместите указатель на угол состояния.
Когда указатель находится над углом, он отображается как двойная стрелка (только для ПК; внешний вид указателя зависит от других платформ).
Щелкните и перетащите угол состояния, чтобы изменить его размер и отпустить левую кнопку мыши.
Подсостояние - это состояние, которое может быть активным, только если активно другое состояние, называемое его родительским. Государства, имеющие подсостояния, известны как сверхсостояния. Чтобы создать подсостояние, щелкните инструмент «Состояние» и перетащите новое состояние в состояние, которое должно быть надсостоянием. Диаграмма Stateflow создает подсостояние в указанном родительском состоянии. Таким образом можно вложить состояния на любую глубину. Чтобы изменить родительский элемент подсостояния, перетащите его из текущего родительского элемента на диаграмме и поместите в новый родительский элемент.
Примечание
Родительское состояние должно быть графически достаточно большим, чтобы вместить все его подсостояния. Возможно, потребуется изменить размер родительского состояния перед перетаскиванием в него нового подсостояния. Можно обойти необходимость в состоянии большого графического размера, объявив суперсостояние подшарниром. Дополнительные сведения см. в разделе Инкапсуляция модальной логики с помощью подшаблонов.
Сгруппируйте состояние, чтобы переместить все графические объекты внутри состояния вместе. При группировании состояния диаграмма обрабатывает состояние и его содержимое как одну графическую единицу. Такое поведение упрощает редактирование диаграммы. Например, перемещение сгруппированного состояния перемещает все подсостояния и функции внутри этого состояния.
Чтобы сгруппировать состояние, щелкните его правой кнопкой мыши и выберите в контекстном меню пункт «Группа» и «Вложенная диаграмма» > «Группа». Состояние тонируется серым цветом, указывая на то, что теперь оно сгруппировано.

Перед выполнением следующих действий необходимо разгруппировать состояние:
Выбор объектов внутри состояния
Перемещение других графических объектов в состояние
При попытке переместить такие объекты, как состояния и графические функции, в сгруппированное состояние отображается недопустимое сообщение об ошибке пересечения. Кроме того, объекты с недопустимым перекрестком имеют красную границу.
Чтобы разгруппировать состояние, щелкните его правой кнопкой мыши, а затем в контекстном меню снимите флажок «Группа» > «Группа». Фон состояния больше не выглядит серым.

Можно указать, содержит ли суперсостояние параллельные (AND) состояния или исключительные (OR) состояния, задав его разложение. Состояние, все подсостояния которого активны, когда они активны, имеет параллельное разложение (AND). Состояние, в котором только одно подсостояние активно, когда оно активно, имеет исключающее разложение (ИЛИ). Декомпозиция пустого состояния является исключительной.
Чтобы изменить декомпозицию состояния, выберите состояние, щелкните правой кнопкой мыши, чтобы отобразить контекстное меню «Декомпозиция состояния», и выберите в меню команду ИЛИ (исключающее) или И (параллельное).
Можно также указать разложение состояния диаграммы. В этом случае диаграмма Stateflow рассматривает свои состояния верхнего уровня как подсостояния. Диаграмма создает состояния с исключительной декомпозицией. Чтобы задать декомпозицию диаграммы, отмените выбор выбранных объектов, щелкните правой кнопкой мыши, чтобы отобразить контекстное меню «Декомпозиция» диаграммы, и выберите в меню команду ИЛИ (Исключающее) или И (Параллельное).
Внешний вид подстанций указывает на разложение их сверхсостояния. Эксклюзивные подстанции имеют сплошные границы, параллельные подстанции, пунктирные границы. Параллельное подсостояние также содержит число в правом верхнем углу. Число указывает порядок активации подсостояния относительно его однородных подсостояний.
Порядок активации можно задать одним из двух способов: явным или неявным.
По умолчанию при создании новой диаграммы Stateflow применяется явное упорядочение. В этом случае порядок активации определяется на основе каждого конкретного состояния.
Можно также переопределить явное упорядочение, разрешив параллельное состояние порядка диаграммы в зависимости от местоположения. Этот режим называется неявным упорядочением.
Дополнительные сведения см. в разделах Явное упорядочение параллельных состояний и неявное упорядочение параллельных состояний.
Примечание
Порядок активации параллельного состояния отображается в правом верхнем углу.
Диалоговое окно «Состояние» используется для просмотра и изменения свойств состояния. Чтобы открыть диалоговое окно Состояние (State):
Щелкните правой кнопкой мыши состояние и выберите «Свойства».
Откроется диалоговое окно Свойства состояния (State properties). Описание свойств см. в разделах Свойства, которые можно задать в области «Общие» и Свойства, которые можно задать в области ведения журнала.
Измените параметры свойств и нажмите одну из следующих кнопок:
Применить для сохранения изменений и оставить диалоговое окно Состояние открытым
Отмена для возврата к предыдущим параметрам
OK для сохранения изменений и закрытия диалогового окна
Справка по отображению документации в окне браузера HTML
Откроется панель Общие (General) диалогового окна Свойства состояния (State properties), как показано на рисунке.

Эти свойства можно задать на панели «Общие».
Собственность | Описание |
|---|---|
Имя диаграммы Stateflow; только для чтения; щелкните эту гипертекстовую ссылку, чтобы вывести состояние на передний план. | |
Установка порядка выполнения параллельного состояния (И). Это свойство не отображается для состояний exclusive (OR). См. раздел Порядок выполнения для параллельных состояний. | |
Выберите этот параметр для создания данных о состоянии активности. См. раздел Мониторинг активности состояния через данные активного состояния. | |
Выберите одну из следующих опций для управления вложением функций состояния в сгенерированный код:
| |
Метка состояния, включающая имя состояния и связанные с ним действия. См. раздел Состояния меток. |
Откроется панель Ведение журнала (Logging) диалогового окна Свойства состояния (State properties), как показано на рисунке.

Эти свойства можно задать на панели «Ведение журнала».
Собственность | Описание |
|---|---|
Сохраняет значение самоактивности в рабочей области MATLAB ® во время моделирования. | |
Определяет состояние как тестовую точку, которую можно контролировать с плавающей областью во время моделирования модели. Можно также регистрировать значения контрольных точек в объектах рабочей области MATLAB. См. раздел Мониторинг контрольных точек в диаграммах потока состояний. | |
Указывает имя, связанное с зарегистрированной самостоятельной деятельностью. Программное обеспечение Simulink ® по умолчанию использует имя сигнала в качестве имени регистрации. Чтобы указать имя пользовательского журнала, выберите | |
Ограничивает самостоятельную активность, зарегистрированную для последних образцов. | |
Ограничивает самостоятельную активность, регистрируемую путем пропуска проб. Например, коэффициент прореживания 2 сохраняет каждую другую выборку. |
Откроется панель Документация (Documentation) диалогового окна Свойства состояния (State properties), как показано на рисунке.

Эти свойства можно задать на панели «Документация».
Метка состояния указывает требуемое имя состояния и необязательные действия, выполняемые при вводе, выходе или получении события во время его активности.
Метки состояния имеют следующий общий формат.
name/ entry:entry actions during:during actions exit:exit actions bind:data and events on event_or_message_name:on event_or_message_name actions
Выделенные курсивом записи в этом формате имеют следующие значения:
Ключевое слово | Вход | Описание |
|---|---|---|
Неприменимо | имя | Уникальная ссылка на состояние с необязательной косой чертой |
| действия ввода | Действия, выполняемые при вводе определенного состояния в результате перехода в это состояние |
| во время действий | Действия, выполняемые, когда состояние получает событие, когда оно активно без допустимого перехода из состояния |
| действия выхода | Действия, выполняемые при выходе из состояния в результате перехода, извлеченного из состояния |
| данные или события | Привязывает указанные данные или события к этому состоянию. Связанные данные могут быть изменены только этим состоянием или его потомками, но могут быть прочитаны другими состояниями. Связанные события могут транслироваться только этим состоянием или его дочерними объектами. |
| event_or_message_name и о event_name действиях | Указанное событие или сообщение и Действия, выполняемые при активном состоянии и наличии указанного события или сообщения. Дополнительные сведения см. в разделах Синхронизация компонентов модели путем трансляции событий и Взаимодействие с диаграммами потока состояний посредством отправки сообщений. |
Изначально метка состояния пуста. Диаграмма Stateflow показывает это, отображая? в положении метки состояния (верхний левый угол). Начните маркировку состояния, введя имя состояния, выполнив следующие шаги:
Щелкните состояние.
Состояние переходит к своему цвету выделения, и в левом верхнем углу состояния появляется символ вопросительного знака.
Нажмите кнопку? для редактирования метки.
Появится курсор редактирования. Теперь вы можете вводить наклейку.
Введите имя штата в первой строке метки штата. Имена чувствительны к регистру. Чтобы избежать конфликтов имен, не присваивайте одноименным состояниям одно и то же имя. Однако одно и то же имя можно назначить состояниям, у которых нет общего родительского элемента.
После маркировки состояния щелкните за его пределами. В противном случае продолжите ввод действий. Чтобы повторно отредактировать метку, щелкните текст метки рядом с позицией символа, которую требуется изменить.
После ввода имени состояния в метку можно ввести действия для любого из следующих типов действий:
Entry Actions - начинается в новой строке с ключевым словом entry или en, за которым следует двоеточие, за которым следует одна или несколько инструкций действия в одной или нескольких строках. Чтобы разделить несколько действий в одной строке, используйте запятую или точку с запятой.
Действия ввода можно начать в той же строке, что и имя государства. В этом случае действие ввода начинается с косой черты (/) вместо ключевого слова entry.
Exit Actions - начинается в новой строке с ключевым словом exit или ex, за которым следует двоеточие, за которым следует одна или несколько инструкций действия в одной или нескольких строках. Чтобы разделить несколько действий в одной строке, используйте запятую или точку с запятой.
Во время действий - начинается в новой строке с ключевым словом during или du, за которым следует двоеточие, за которым следует одна или несколько инструкций действия в одной или нескольких строках. Чтобы разделить несколько действий в одной строке, используйте запятую или точку с запятой.
Bind Actions - начало в новой строке с ключевым словом bind за которым следует двоеточие, за которым следует одно или несколько данных или событий в одной или нескольких строках. Чтобы разделить несколько действий в одной строке, используйте запятую или точку с запятой.
On Actions - начинается с ключевого слова on, за которым следует пробел и имя события или сообщения, за которым следует двоеточие, за которым следует одна или несколько инструкций действия в одной или нескольких строках, например,
on ev1: exit();
Чтобы разделить несколько действий в одной строке, используйте запятую или точку с запятой. Если необходимо, чтобы различные события запускали различные действия, введите несколько on блоки в метке состояния. Каждый блок определяет действие для конкретного события или сообщения, например:
on ev1: action1(); on ev2: action2();
Выполнение действий, вводимых для состояния, зависит только от их типа, а не от порядка ввода действий в метку. Если явно не указать тип действия для инструкции, диаграмма рассматривает эту инструкцию как действие ввода.
Совет
Можно также отредактировать метку в диалоговом окне свойств состояния. См. раздел Изменение свойств состояния.