Машины Мура являются конечными машинами состояний, в которых выход изменяется в тактовых ребрах. В графиках Мура выход является функцией только текущего состояния. На каждом временном шаге график Мура просыпается, вычисляет его выход, а затем оценивает его вход, чтобы перенастроить себя для следующего временного шага. Для примера после оценки его входа график может перейти к новому строению активных состояний. График вычисляет свой выход перед оценкой своего входа и обновлением своего состояния. Семантика Мура поддерживается только в Stateflow® графики в Simulink® модели.
Чтобы убедиться, что вывод является функцией только текущего состояния, машины состояний Мура применяют эту семантику:
Выходы не зависят от входов.
Выходы не зависят от предыдущих выходов.
Выходы не зависят от временной логики.
Чтобы соответствовать определению Мура конечного автомата, гарантируйте, что каждый раз, когда график Мура просыпается, она вычисляет выходы из текущего набора активных состояний без учета входов.
Чтобы гарантировать, что выходы зависят исключительно от текущего состояния, можно вычислить выходы в действиях состояний активности учетом этих ограничений:
Объедините действия. В графиках Мура можно включать только одно действие в каждом состоянии. Действие может состоять из нескольких командных операторов. Stateflow оценивает состояния в графиках Мура с верхнего уровня вниз. Активные состояния в графиках Мура выполняют состояние активности перед оценкой переходов. Поэтому выходы вычисляются на каждом временном шаге, является ли внешний переход допустимым или нет.
Не помечайте состояний активности. Не помечайте состояний активности в графиках Мура никакими ключевыми словами, такими как entry
, during
, или exit
. По умолчанию графики Мура выполняют действия в активных состояниях перед оценкой входов и обновлением состояния.
Переходы в графиках Мура могут содержать условие и переходные действия, если эти действия не вводят зависимость между выходными значениями и входными значениями. Для примера в этом графике каждый переход проверяет вход u
в условии и изменяет выходной y
в действии условия. Поскольку выходное значение зависит от значения входа, эта конструкция нарушает семантику Мура и вызывает ошибку.
В графиках Мура выходы не могут зависеть от входов. Использование входа для прямого или косвенного вклада в расчет выходного сигнала вызывает ошибку.
В графиках Мура применяются эти ограничения данных:
Ограничение данных с пометкой машин. Машинно-родительские данные - это данные, которые вы задаете для машины Stateflow. Машина Stateflow является самым высоким уровнем иерархии Stateflow. Когда вы задаете данные на этом уровне, каждый график в машине может считать и изменять данные. Чтобы гарантировать, что диаграммы Мура не обращаются к данным, которые могут быть непредсказуемо изменены вне графика, не используйте родительские данные машины.
Не задайте память хранилища данных. Вы не можете задать память хранилища данных (DSM) в графиках Мура, потому что объекты, внешние по отношению к графику, могут изменять объекты DSM. Диаграмма Stateflow использует память хранилища данных для обмена данными с моделью Simulink. Память хранилища данных действует как глобальные данные. В иерархии Simulink, которая содержит график, другие блоки и модели могут изменять DSM. Графики Мура не должны обращаться к данным, которые могут непредсказуемо измениться.
coder.extrinsic
Вызов внешних функцийПри вызове внешних функций с coder.extrinsic
невозможно применить, чтобы выходы зависели только от текущего состояния. Вызов внешней функции с coder.extrinsic
в графике Мура инициирует ошибку.
Вы не можете использовать функции Simulink в графиках Мура. Это ограничение предотвращает нарушения семантики Мура во время выполнения графика.
Вы не можете экспортировать функции в графике Мура.
Семантика графика Мура требует инкрустации.
Вы не можете использовать семантику супер-шага в графике Мура.
Вы не можете использовать сообщения в графике Мура.
Ограничьте использование событий в графиках Мура:
Допустимое использование:
Используйте только одно входное событие для запуска графика.
Используйте основанную на событиях временную логику, чтобы защитить переходы.
Изменение значения временного логического условия ведет себя как событие, которое график Мура планирует внутренне. На каждом временном шаге количество тактов перед выполнением временного события зависит только от состояния графика. Для получения дополнительной информации см. Раздел «Временные логические операторы»
Примечание
В графиках Мура базовым событием для временных логических операторов должно быть предопределенное событие, такое как tick
(см. Неявные события на основе данных и состояний).
Недопустимое использование:
Вы не можете транслировать событие любого типа.
Вы не можете использовать локальные события для защиты переходов. Локальные события нарушают семантику Мура, потому что они не детерминированы и могут происходить, пока график вычисляет свои выходы.
Вы не можете использовать неявные события, такие как chg(data_name)
, en(state_name)
, или ex(state_name)
.
В графиках Мура вы не можете задать метод обновления Continuous
. Для моделирования систем с непрерывным временем в Stateflow используйте Classic или Диаграммы Мили.