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