exponenta event banner

Представление режимов работы с использованием состояний

Состояние описывает режим работы реактивной системы. В диаграмме Stateflow ® состояния используются для последовательного проектирования для создания диаграмм перехода состояний.

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

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

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

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

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

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

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

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

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

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

  5. По завершении введите имя состояния и щелкните за его пределами.

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

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

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

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

  2. Выпустите его на новую должность.

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

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

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

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

Создание подстанций и суперсостояний

Подсостояние - это состояние, которое может быть активным, только если активно другое состояние, называемое его родительским. Государства, имеющие подсостояния, известны как сверхсостояния. Чтобы создать подсостояние, щелкните инструмент «Состояние» и перетащите новое состояние в состояние, которое должно быть надсостоянием. Диаграмма Stateflow создает подсостояние в указанном родительском состоянии. Таким образом можно вложить состояния на любую глубину. Чтобы изменить родительский элемент подсостояния, перетащите его из текущего родительского элемента на диаграмме и поместите в новый родительский элемент.

Примечание

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

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

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

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

Группирование состояния

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

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

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

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

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

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

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

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

Задание декомпозиции подсостояния

Можно указать, содержит ли суперсостояние параллельные (AND) состояния или исключительные (OR) состояния, задав его разложение. Состояние, все подсостояния которого активны, когда они активны, имеет параллельное разложение (AND). Состояние, в котором только одно подсостояние активно, когда оно активно, имеет исключающее разложение (ИЛИ). Декомпозиция пустого состояния является исключительной.

Чтобы изменить декомпозицию состояния, выберите состояние, щелкните правой кнопкой мыши, чтобы отобразить контекстное меню «Декомпозиция состояния», и выберите в меню команду ИЛИ (исключающее) или И (параллельное).

Можно также указать разложение состояния диаграммы. В этом случае диаграмма Stateflow рассматривает свои состояния верхнего уровня как подсостояния. Диаграмма создает состояния с исключительной декомпозицией. Чтобы задать декомпозицию диаграммы, отмените выбор выбранных объектов, щелкните правой кнопкой мыши, чтобы отобразить контекстное меню «Декомпозиция» диаграммы, и выберите в меню команду ИЛИ (Исключающее) или И (Параллельное).

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

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

Порядок активации можно задать одним из двух способов: явным или неявным.

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

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

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

Примечание

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

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

Диалоговое окно «Состояние» используется для просмотра и изменения свойств состояния. Чтобы открыть диалоговое окно Состояние (State):

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

    Откроется диалоговое окно Свойства состояния (State properties). Описание свойств см. в разделах Свойства, которые можно задать в области «Общие» и Свойства, которые можно задать в области ведения журнала.

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

    • Применить для сохранения изменений и оставить диалоговое окно Состояние открытым

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

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

    • Справка по отображению документации в окне браузера HTML

Свойства, которые можно задать в области «Общие»

Откроется панель Общие (General) диалогового окна Свойства состояния (State properties), как показано на рисунке.

Эти свойства можно задать на панели «Общие».

Собственность

Описание

Имя

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

Заказ на выполнение

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

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

Выберите этот параметр для создания данных о состоянии активности. См. раздел Мониторинг активности состояния через данные активного состояния.

Встроенная функция

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

  • Автомобиль

    Встроенные функции состояния на основе внутренней эвристики.

  • Действующий

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

  • Функция

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

Этикетка

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

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

Откроется панель Ведение журнала (Logging) диалогового окна Свойства состояния (State properties), как показано на рисунке.

Эти свойства можно задать на панели «Ведение журнала».

Собственность

Описание

Вести журнал самоактивности

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

Контрольная точка

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

Имя журнала

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

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

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

Казнь каждого десятого

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

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

Откроется панель Документация (Documentation) диалогового окна Свойства состояния (State properties), как показано на рисунке.

Эти свойства можно задать на панели «Документация».

Собственность

Описание

Описание

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

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

Введите 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 показывает это, отображая? в положении метки состояния (верхний левый угол). Начните маркировку состояния, введя имя состояния, выполнив следующие шаги:

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

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

  2. Нажмите кнопку? для редактирования метки.

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

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

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

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

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

  • 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();
    

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

Совет

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

См. также

Связанные темы