A state описывает режим работы реактивной системы. In a Stateflow® Графики состояния используются для последовательных проектов для создания диаграмм переходов состояний.
Состояния могут быть активными или неактивными. Активность или бездействие состояния могут меняться в зависимости от событий и условий. Вхождение события управляет выполнением диаграммы переходов состояний, делая состояния активными или неактивными. Для получения дополнительной информации см. States.
Состояния создаются путем их рисования в редакторе для конкретного графика (блока). Выполните следующие действия:
Выберите инструмент «Состояние»:
Переместите указатель мыши в область рисования.
В области рисования указатель становится имеющим форму состояния (прямоугольным с овальными углами).
Щелкните в определенном месте, чтобы создать состояние.
Созданное состояние появляется с вопросительным знаком (?)
метка в верхнем левом углу.
Щелкните вопросительный знак.
Вместо вопросительного знака появляется текстовый курсор.
Введите имя состояния и нажатия кнопки вне состояния по завершении.
Метка для состояния задает ее необходимое имя и необязательные действия. Для получения дополнительной информации см. метку состояний».
Чтобы переместить состояние, выполните следующее:
Щелкните и перетащите состояние.
Отпустите его в новой должности.
Чтобы изменить размер состояния, выполните следующие действия:
Поместите указатель мыши на угол состояния.
Когда ваш указатель находится выше угла, он появляется как двойная стрела (только для ПК; внешний вид указателя зависит от других платформ).
Щелкните и перетащите угол состояния, чтобы изменить размер состояния и отпустите левую кнопку мыши.
substate является состоянием, которое может быть активным только, когда другое состояние, называемое его родительским элементом, активно. Состояния, которые имеют подсостояния, известны как superstates. Чтобы создать подсостояние, щелкните инструмент State и перетащите новое состояние в состояние, которое должно быть суперстатом. Диаграмма Stateflow создает подсостояние в заданном родительском состоянии. Можно вложить состояния таким образом на любую глубину. Чтобы изменить вид подсостояния, перетащите его из текущего родительского элемента на графике и перетащите в его новый родительский элемент.
Примечание
Родительское состояние должно быть достаточно графически большим, чтобы вместить все его подсостояния. Вам может потребоваться изменить размер родительского состояния, прежде чем перетаскивать в него новое подсостояние. Можно обойти потребность в состоянии большого графического размера, объявив сверхсостояние субдиаграммой. Для получения дополнительной информации смотрите Инкапсуляция модальной логики при помощи Субдиаграмм.
Сгруппируйте состояние, чтобы переместить все графические объекты в состояние вместе. Когда вы группируете состояние, график рассматривает состояние и его содержимое как один графический модуль. Это поведение упрощает редактирование графика. Например, перемещение сгруппированного состояния перемещает все подсостояния и функции внутри этого состояния.
Можно сгруппировать состояние, щелкнув его правой кнопкой мыши и выбрав Group & Subchart > Group в контекстном меню. Состояние выглядит затененным серым, чтобы указать, что теперь оно сгруппировано.
Перед выполнением следующих действий необходимо разгруппировать состояние:
Выбор объектов в состоянии
Перемещение других графических объектов в состояние
Если вы пытаетесь переместить объекты, такие как состояния и графические функции, в сгруппированное состояние, появляется недопустимое сообщение об ошибке пересечения. Кроме того, объекты с недопустимым пересечением имеют красную границу.
Можно разгруппировать состояние, щелкнув его правой кнопкой мыши и очистив Group & Subchart > Group в контекстном меню. Фон состояния больше не выглядит серым.
Вы задаете, содержит ли сверхсостояние параллельные (И) состояния или исключающие (ИЛИ) состояния, задав его разложение. Состояние, подсостояния которого все активны, когда оно активно, имеет параллельное (И) разложение. Состояние, в котором только одно подсостояние активно, когда оно активно, имеет эксклюзивное (OR) разложение. Разложение пустого состояния является эксклюзивным.
Чтобы изменить разложение состояния, выберите состояние, щелкните правой кнопкой мыши, чтобы отобразить контекстное меню Decomposition состояния и выберите в меню (исключающий) OR или AND (Параллельное).
Можно также задать состояние разложения графика. В этом случае диаграмма Stateflow рассматривает свои состояния верхнего уровня как подсостояния. График создает состояния с исключительным разложением. Чтобы задать разложение графика, отмените выбор выбранных объектов, щелкните правой кнопкой мыши, чтобы отобразить контекстное меню графика Decomposition и выберите в меню (исключающего) OR или AND (Параллельный).
Внешний вид подсостояний указывает на разложение их сверхсостояния. Эксклюзивные подсостояния имеют сплошные границы, параллельные подсостояниям, штриховые границы. Параллельное подсостояние также содержит число в правом верхнем углу. Номер указывает порядок активации подсостояния относительно его одноуровневых подсостояний.
Вы можете задать порядок активации с помощью одного из двух методов: явного или неявного упорядоченного расположения.
По умолчанию, когда вы создаете новую диаграмму Stateflow, explicit ordering применяется. В этом случае вы задаете порядок активации для базиса состояния по состоянию.
Можно также переопределить явное упорядоченное расположение, допустив параллельные состояния порядка графика на основе местоположения. Этот режим известен как implicit ordering.
Для получения дополнительной информации смотрите Явное упорядоченное расположение параллельных состояний и Неявное упорядоченное расположение параллельных состояний.
Примечание
Порядок активации параллельного состояния появляется в его правом верхнем углу.
Используйте диалоговое окно «Состояние» для просмотра и изменения свойств состояния. Для доступа к диалоговому окну Состояние:
Щелкните правой кнопкой мыши состояние и выберите Properties.
Откроется диалоговое окно Свойств состояний. Описание свойств смотрите в Свойства, которые можно задать в Общих Панелях и Свойствах, которые можно задать в Панель Logging.
Измените параметры свойства и нажмите одну из следующих кнопок:
Apply, чтобы сохранить изменения и сохранить диалоговое окно Состояние открытым
Cancel для возврата к предыдущим настройкам
OK, чтобы сохранить изменения и закрыть диалоговое окно
Help для отображения документации в окне HTML
Панель General диалогового окна Свойств состояний появится как показано на рисунке.
Эти свойства можно задать на панели General.
Свойство | Описание |
---|---|
Имя диаграммы Stateflow; только для чтения; щелкните эту гипертекстовую ссылку, чтобы перевести состояние на передний план. | |
Установите порядок выполнения параллельного (И) состояния. Это свойство не отображается для исключительных состояний (OR). Смотрите Порядок выполнения для параллельных состояний. | |
Выберите эту опцию, чтобы создать данные о действии состояния. Смотрите Мониторинг активности состояния через данные активного состояния. | |
Выберите одну из следующих опций, чтобы контролировать встраивание функций состояния в сгенерированный код:
| |
Метка для состояния, которая включает имя состояния и связанные с ним действия. См. раздел «Метка состояний». |
Панель Logging диалогового окна Свойств состояний появится как показано на рисунке.
Эти свойства можно задать на панели Logging.
Свойство | Описание |
---|---|
Сохраняет значение собственной активности в MATLAB® рабочая область во время симуляции. | |
Определяет состояние как тестовая точка, которую можно контролировать с помощью плавающих возможностей во время симуляции модели. Можно также записать значения тестовых точек в объекты рабочего пространства MATLAB. См. «Мониторинг тестовых точек» в диаграммах Stateflow. | |
Задает имя, сопоставленное с записанной в журнал самодеятельностью. Simulink® по умолчанию в качестве имени логгирования используется имя сигнала. Чтобы задать пользовательское имя логгирования, выберите | |
Ограничивает самодеятельность, регистрируемую в последних выборках. | |
Ограничивает самостоятельную активность, регистрируемую путем пропуска выборок. Для примера коэффициент десятикратного уменьшения 2 сохраняет каждую другую выборку. |
Панель Documentation диалогового окна Свойств состояний появится как показано на рисунке.
Эти свойства можно задать на панели Documentation.
Метка для состояния задает его необходимое имя для состояния и необязательные действия, выполняемые при входе, выходе или получении события во время его работы.
Метки состояний имеют следующий общий формат.
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 путем отправки сообщений. |
Первоначально метка состояния пуста. Диаграмма Stateflow указывает на это, отображая? в положении метки состояния (левый верхний угол). Начните маркировать состояние, введя имя для состояния со следующими шагами:
Щелкните состояние.
Состояние переходит к цвету подсветки, и символ вопросительного знака появляется в верхнем левом углу состояния.
Щелкните ?, чтобы отредактировать метку.
Появится курсор редактирования. Теперь вы можете вводить метку.
Введите имя состояния в первую линию метки состояния. Имена чувствительны к регистру. Чтобы избежать конфликтов по совпадению имен, не присваивайте то же имя состояниям одноуровневого типа. Однако можно присвоить то же имя состояниям, которые не имеют общего родительского элемента.
После маркировки состояния щелкните за его пределами. В противном случае продолжите вводить действия. Чтобы перередактировать метку, щелкните текст метки рядом с положением символов, которые вы хотите изменить.
После ввода имени состояния в метке можно ввести действия для любого из следующих типов действий:
Действия входа - начните с новой линии с ключевого слова 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();
Выполнение действий, которые вы вводите для состояния, зависит только от их типа действия, а не от порядка, в котором вы вводите действия в метке. Если вы явным образом не задаете тип действия для оператора, график рассматривает этот оператор как действие входа.
Совет
Можно также отредактировать метку в диалоговом окне свойств состояния. См. Раздел «Изменение свойств состояний»