Представление рабочих режимов при помощи состояний

A state описывает режим работы реактивной системы. In a Stateflow® Графики состояния используются для последовательных проектов для создания диаграмм переходов состояний.

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

Создайте состояние

Состояния создаются путем их рисования в редакторе для конкретного графика (блока). Выполните следующие действия:

  1. Выберите инструмент «Состояние»:

  2. Переместите указатель мыши в область рисования.

    В области рисования указатель становится имеющим форму состояния (прямоугольным с овальными углами).

  3. Щелкните в определенном месте, чтобы создать состояние.

    Созданное состояние появляется с вопросительным знаком (?) метка в верхнем левом углу.

  4. Щелкните вопросительный знак.

    Вместо вопросительного знака появляется текстовый курсор.

  5. Введите имя состояния и нажатия кнопки вне состояния по завершении.

Метка для состояния задает ее необходимое имя и необязательные действия. Для получения дополнительной информации см. метку состояний».

Перемещение и изменение размеров состояний

Чтобы переместить состояние, выполните следующее:

  1. Щелкните и перетащите состояние.

  2. Отпустите его в новой должности.

Чтобы изменить размер состояния, выполните следующие действия:

  1. Поместите указатель мыши на угол состояния.

    Когда ваш указатель находится выше угла, он появляется как двойная стрела (только для ПК; внешний вид указателя зависит от других платформ).

  2. Щелкните и перетащите угол состояния, чтобы изменить размер состояния и отпустите левую кнопку мыши.

Создание подсостояний и сверхсостояний

substate является состоянием, которое может быть активным только, когда другое состояние, называемое его родительским элементом, активно. Состояния, которые имеют подсостояния, известны как superstates. Чтобы создать подсостояние, щелкните инструмент State и перетащите новое состояние в состояние, которое должно быть суперстатом. Диаграмма Stateflow создает подсостояние в заданном родительском состоянии. Можно вложить состояния таким образом на любую глубину. Чтобы изменить вид подсостояния, перетащите его из текущего родительского элемента на графике и перетащите в его новый родительский элемент.

Примечание

Родительское состояние должно быть достаточно графически большим, чтобы вместить все его подсостояния. Вам может потребоваться изменить размер родительского состояния, прежде чем перетаскивать в него новое подсостояние. Можно обойти потребность в состоянии большого графического размера, объявив сверхсостояние субдиаграммой. Для получения дополнительной информации смотрите Инкапсуляция модальной логики при помощи Субдиаграмм.

Состояния группы

Когда группировать состояние

Сгруппируйте состояние, чтобы переместить все графические объекты в состояние вместе. Когда вы группируете состояние, график рассматривает состояние и его содержимое как один графический модуль. Это поведение упрощает редактирование графика. Например, перемещение сгруппированного состояния перемещает все подсостояния и функции внутри этого состояния.

Как сгруппировать состояние

Можно сгруппировать состояние, щелкнув его правой кнопкой мыши и выбрав Group & Subchart > Group в контекстном меню. Состояние выглядит затененным серым, чтобы указать, что теперь оно сгруппировано.

Когда отменить группировку состояния

Перед выполнением следующих действий необходимо разгруппировать состояние:

  • Выбор объектов в состоянии

  • Перемещение других графических объектов в состояние

    Если вы пытаетесь переместить объекты, такие как состояния и графические функции, в сгруппированное состояние, появляется недопустимое сообщение об ошибке пересечения. Кроме того, объекты с недопустимым пересечением имеют красную границу.

Как разгруппировать состояние

Можно разгруппировать состояние, щелкнув его правой кнопкой мыши и очистив Group & Subchart > Group в контекстном меню. Фон состояния больше не выглядит серым.

Задайте разложение подсостояния

Вы задаете, содержит ли сверхсостояние параллельные (И) состояния или исключающие (ИЛИ) состояния, задав его разложение. Состояние, подсостояния которого все активны, когда оно активно, имеет параллельное (И) разложение. Состояние, в котором только одно подсостояние активно, когда оно активно, имеет эксклюзивное (OR) разложение. Разложение пустого состояния является эксклюзивным.

Чтобы изменить разложение состояния, выберите состояние, щелкните правой кнопкой мыши, чтобы отобразить контекстное меню Decomposition состояния и выберите в меню (исключающий) OR или AND (Параллельное).

Можно также задать состояние разложения графика. В этом случае диаграмма Stateflow рассматривает свои состояния верхнего уровня как подсостояния. График создает состояния с исключительным разложением. Чтобы задать разложение графика, отмените выбор выбранных объектов, щелкните правой кнопкой мыши, чтобы отобразить контекстное меню графика Decomposition и выберите в меню (исключающего) OR или AND (Параллельный).

Внешний вид подсостояний указывает на разложение их сверхсостояния. Эксклюзивные подсостояния имеют сплошные границы, параллельные подсостояниям, штриховые границы. Параллельное подсостояние также содержит число в правом верхнем углу. Номер указывает порядок активации подсостояния относительно его одноуровневых подсостояний.

Задайте порядок активации для параллельных состояний

Вы можете задать порядок активации с помощью одного из двух методов: явного или неявного упорядоченного расположения.

  • По умолчанию, когда вы создаете новую диаграмму Stateflow, explicit ordering применяется. В этом случае вы задаете порядок активации для базиса состояния по состоянию.

  • Можно также переопределить явное упорядоченное расположение, допустив параллельные состояния порядка графика на основе местоположения. Этот режим известен как implicit ordering.

Для получения дополнительной информации смотрите Явное упорядоченное расположение параллельных состояний и Неявное упорядоченное расположение параллельных состояний.

Примечание

Порядок активации параллельного состояния появляется в его правом верхнем углу.

Изменение свойств состояний

Используйте диалоговое окно «Состояние» для просмотра и изменения свойств состояния. Для доступа к диалоговому окну Состояние:

  1. Щелкните правой кнопкой мыши состояние и выберите Properties.

    Откроется диалоговое окно Свойств состояний. Описание свойств смотрите в Свойства, которые можно задать в Общих Панелях и Свойствах, которые можно задать в Панель Logging.

  2. Измените параметры свойства и нажмите одну из следующих кнопок:

    • Apply, чтобы сохранить изменения и сохранить диалоговое окно Состояние открытым

    • Cancel для возврата к предыдущим настройкам

    • OK, чтобы сохранить изменения и закрыть диалоговое окно

    • Help для отображения документации в окне HTML

Свойства, которые можно задать в общих Панелях

Панель General диалогового окна Свойств состояний появится как показано на рисунке.

Эти свойства можно задать на панели General.

Свойство

Описание

Имя

Имя диаграммы Stateflow; только для чтения; щелкните эту гипертекстовую ссылку, чтобы перевести состояние на передний план.

Порядок выполнения

Установите порядок выполнения параллельного (И) состояния. Это свойство не отображается для исключительных состояний (OR). Смотрите Порядок выполнения для параллельных состояний.

Создайте данные для мониторинга

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

Функция Inline опции

Выберите одну из следующих опций, чтобы контролировать встраивание функций состояния в сгенерированный код:

  • Auto

    Функции состояния Inlines, основанные на внутреннем эвристическом.

  • Inline

    Всегда строит функции состояния в родительской функции, пока функция не является частью рекурсии. Смотрите Встроенные функции состояния в Сгенерированном Коде (Simulink Coder)

  • Function

    Создает отдельные статические функции для каждого состояния.

Метка

Метка для состояния, которая включает имя состояния и связанные с ним действия. См. раздел «Метка состояний».

Свойства, которые можно задать на панели журналов

Панель Logging диалогового окна Свойств состояний появится как показано на рисунке.

Эти свойства можно задать на панели Logging.

Свойство

Описание

Журнал самодеятельности

Сохраняет значение собственной активности в MATLAB® рабочая область во время симуляции.

Тестовая точка

Определяет состояние как тестовая точка, которую можно контролировать с помощью плавающих возможностей во время симуляции модели. Можно также записать значения тестовых точек в объекты рабочего пространства MATLAB. См. «Мониторинг тестовых точек» в диаграммах Stateflow.

Имя логгирования

Задает имя, сопоставленное с записанной в журнал самодеятельностью. Simulink® по умолчанию в качестве имени логгирования используется имя сигнала. Чтобы задать пользовательское имя логгирования, выберите Custom в поле списка и введите новое имя в соседнее поле редактирования.

Ограничьте точки данных до последнего

Ограничивает самодеятельность, регистрируемую в последних выборках.

Десятикратное уменьшение

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

Свойства, которые можно задать в области документации

Панель Documentation диалогового окна Свойств состояний появится как показано на рисунке.

Эти свойства можно задать на панели Documentation.

Свойство

Описание

Описание

Текстовое описание или комментарий.

Ссылка на документ

Введите URL-адрес или общую команду MATLAB. Примерами являются www.mathworks.com, mailto:email_address, и edit /spec/data/speed.txt.

Маркируйте состояния

Метка для состояния задает его необходимое имя для состояния и необязательные действия, выполняемые при входе, выходе или получении события во время его работы.

Метки состояний имеют следующий общий формат.

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

Курсивные записи в этом формате имеют следующие значения:

Ключевое слово

Вход

Описание

Не применяется

имя

Уникальная ссылка на состояние с необязательной косой чертой

entry или en

действия входа

Действия, выполненные, когда конкретное состояние введено в результате перехода, выполненного в это состояние

during или du

во время действий

Действия, которые выполняются, когда состояние получает событие в то время как оно активно без допустимого перехода от состояния

exit или ex

выход из действия

Действия, выполняемые при выходе из состояния в результате перехода, удаленного из состояния

bind

данные или события

Связывает указанные данные или события с этим состоянием. Связанные данные могут быть изменены только этим состоянием или его дочерними элементами, но могут считываться другими состояниями. Связанные события могут транслироваться только этим состоянием или его дочерними элементами.

on

event_or_message_name

и

о event_name действиях

Указанное событие или сообщение

и

Действия, выполняемые, когда состояние активно и заданное событие происходит или сообщение присутствует.

Для получения дополнительной информации смотрите Синхронизация компонентов модели посредством широковещательных событий и Связь с диаграммами Stateflow путем отправки сообщений.

Введите имя

Первоначально метка состояния пуста. Диаграмма Stateflow указывает на это, отображая? в положении метки состояния (левый верхний угол). Начните маркировать состояние, введя имя для состояния со следующими шагами:

  1. Щелкните состояние.

    Состояние переходит к цвету подсветки, и символ вопросительного знака появляется в верхнем левом углу состояния.

  2. Щелкните ?, чтобы отредактировать метку.

    Появится курсор редактирования. Теперь вы можете вводить метку.

    Введите имя состояния в первую линию метки состояния. Имена чувствительны к регистру. Чтобы избежать конфликтов по совпадению имен, не присваивайте то же имя состояниям одноуровневого типа. Однако можно присвоить то же имя состояниям, которые не имеют общего родительского элемента.

    После маркировки состояния щелкните за его пределами. В противном случае продолжите вводить действия. Чтобы перередактировать метку, щелкните текст метки рядом с положением символов, которые вы хотите изменить.

Введите действия

После ввода имени состояния в метке можно ввести действия для любого из следующих типов действий:

  • Действия входа - начните с новой линии с ключевого слова 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();
    

Выполнение действий, которые вы вводите для состояния, зависит только от их типа действия, а не от порядка, в котором вы вводите действия в метке. Если вы явным образом не задаете тип действия для оператора, график рассматривает этот оператор как действие входа.

Совет

Можно также отредактировать метку в диалоговом окне свойств состояния. См. Раздел «Изменение свойств состояний»

См. также

Похожие темы