Конструктивные соображения для графиков Мура

Машины Мура являются конечными автоматами, в которых выход изменяется во фронтах синхроимпульса. В графиках Мура выход является функцией текущего состояния только. На каждом временном шаге график Мура просыпается, вычисляет свой выход, и затем оценивает свой вход, чтобы реконфигурировать себя для следующего временного шага. Например, после оценки его входа, график может перейти к новой настройке активных состояний. График вычисляет свой выход прежде, чем оценить его вход и обновить его состояние. Семантика Мура не поддерживается в автономном Stateflow® графики в MATLAB®.

Семантика Мура

Убеждаться, которые выводят, - функция только текущего состояния, машина состояний Мура осуществляет их семантика:

  • Выходные параметры не зависят от входных параметров.

  • Выходные параметры не зависят от предыдущих выходных параметров.

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

Правила проектирования для графиков Мура

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

Ограничения на состояния активности

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

  • Объедините Действия. В графиках Мура можно включать только одно действие на состояние. Действие может состоять из нескольких командных операторов. Stateflow оценивает состояния в графиках Мура от верхнего уровня вниз. Активные состояния в графиках Мура выполняют состояние активности прежде, чем оценить переходы. Поэтому выходные параметры вычисляются на каждом временном шаге, допустим ли внешний переход или нет.

  • Не Помечайте Состояния активности. Не помечайте состояния активности в графиках Мура ни с какими ключевыми словами, такими как entry, during, или exit. По умолчанию графики Мура выполняют действия в активных состояниях прежде, чем оценить входные параметры и обновить состояние.

Ограничения на действия перехода

Переходы в графиках Мура могут содержать условие и действия перехода, если эти действия не вводят зависимость между выходными значениями и входными значениями. Например, в этом графике, каждый переход тестирует вход u в условии и изменяет выход y в действии условия. Поскольку выходное значение зависит от значения входа, это построение нарушает семантику Мура и инициировало ошибку.

Не используйте входные параметры, чтобы вычислить Выходные параметры

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

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

В графиках Мура применяются эти ограничения данных:

  • Ограничьте Порожденные Машиной Данные. Порожденные машиной данные являются данными, которые вы задаете для машины Stateflow. Машина Stateflow является высшим уровнем иерархии Stateflow. Когда вы задаете данные на этом уровне, каждый график в машине может считать и изменить данные. Чтобы гарантировать, что Мур строит диаграмму, не получают доступ к данным, которые могут быть изменены непредсказуемо вне графика, не используйте порожденные машиной данные.

  • Не Задавайте Память Хранилища данных. Вы не можете задать память хранилища данных (DSM) в графиках Мура, потому что объекты, внешние к графику, могут изменить объекты DSM. Диаграмма Stateflow использует память хранилища данных, чтобы осуществлять обмен данными с Simulink® модель. Память хранилища данных действует как глобальные данные. В иерархии Simulink, которая содержит график, другие блоки и модели могут изменить DSM. Графики Мура не должны получать доступ к данным, которые могут измениться непредсказуемо.

Не используйте coder.extrinsic вызывать внешние функции

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

Не вызывайте функции пользовательского кода

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

Не используйте функции Simulink

Вы не можете использовать функции Simulink в графиках Мура. Это ограничение предотвращает нарушения семантики Мура во время выполнения графика.

Не делайте экспортов функций

Вы не можете экспорты функций в графике Мура.

Не отключайте встраивание

Семантика графика Мура требует встраивания.

Не включайте супер семантику шага

Вы не можете использовать супер семантику шага в графике Мура.

Не используйте сообщения

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

Ограничьте использование Событий

Ограничьте использование событий в графиках Мура:

  • Допустимое использование:

    • Используйте только одно входное событие, чтобы инициировать график.

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

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

      Примечание

      В графиках Мура основное событие для временных логических операторов должно быть предопределенным событием, таким как tick (см. неявные События на основе данных и состояний).

  • Недопустимое использование:

    • Вы не можете широковещательно передать событие никакого типа.

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

    • Вы не можете использовать неявные события, такие как chg(data_name), en(state_name), или ex(state_name).

Не используйте графики Мура для моделирования систем непрерывного времени

В графиках Мура вы не можете установить метод обновления на Continuous. Для моделирования систем с непрерывным временем в Stateflow используйте Классику или диаграммы Мили.

Похожие темы