Машины Мили и Мура часто считаются базовыми, промышленно стандартными парадигмами для моделирования конечных машин. Можно создать графики, которые реализуют чистую семантику Мили или Мура как подмножество Stateflow® семантика графика. Семантика Мили и Мура поддерживается только в диаграммах Stateflow в Simulink® модели. Для получения дополнительной информации смотрите Обзор машин Мили и Мура.
Лучшая практика - не переходить от одного типа диаграммы Stateflow к другому в середине разработки. Невозможно автоматически преобразовать семантику исходного графика в соответствии с правилами проекта нового типа диаграммы. Изменение типа графика обычно требует, чтобы вы изменили дизайн графика, чтобы достичь эквивалентного поведения исходного графика, так что оба графиков создают одну и ту же последовательность выходов, заданную одной и той же последовательностью входов. Иногда, однако, нет возможности перевести конкретное поведение, не нарушая определений графика.
В этой таблице приводятся сводные данные того, что происходит при изменении типов графиков проекта.
От | Кому | Результат |
---|---|---|
Мучнистый | Классик | Диаграммы Мили сохраняют свою семантику при изменении на Classic type. |
Классик | Мучнистый | Если Классический график определяет свой выход в каждый временной шаг и соответствует семантическим правилам Мили, диаграмма Мили показывает поведение, эквивалентное исходному Классическому графику. |
Мур | Классик | Состояния активности на графике Мура ведут себя следующим entry и during действия, поскольку они не помечены. Классический график показывает поведение, которое не эквивалентно исходному графику Мура. Требует редизайна. |
Классик | Мур | Действия, которые не помечены в Классическом графике (entry и during действия по умолчанию) вести себя как during и exit действия. График Мура показывает поведение, которое не эквивалентно исходному Классическому графику. Требует редизайна. |
Мучнистый | Мур | Правила Мили и Мура о размещении действий являются взаимоисключающими. Преобразование типов графиков между семантиками Мили и Мура не приводит к эквивалентному поведению. Требует редизайна. |
Мур | Мучнистый |
В этом примере показано, как использовать диаграмму Мили для моделирования торгового автомата, как описано в Модели торгового автомата при помощи семантики Мили.
На диаграмме Мили каждое состояние представляет один из трёх возможных входов монеты: никель, дайм или нет монеты. Каждое действие условия вычисляет выход (освобождается ли сода) на основе входов (полученная монета), когда график переходит к следующему состоянию. Если вы измените тип графика на Moore
вы получаете диагностическое сообщение во время компиляции, указывающее, что график нарушает семантику диаграммы Мура. Согласно семантике Мура, вывод графика soda
не может зависеть от значения входа coin
.
Чтобы преобразовать график в действительную семантику Мура, перепроектируйте график, перемещая логику, которая вычисляет выход из переходов и в состояния. На графике Мура каждое состояние должен представлять как полученные монеты, так и условие релиза соды (soda = 0
или soda = 1
). В результате переработанный график требует большего количества состояний.
Перед рассмотрением значения coin
, график Мура должна вычислить значение soda
согласно активному состоянию. В результате происходит задержка в выпуске газировки, даже если машина получает достаточно денег, чтобы покрыть стоимость.
В этой таблице сравнивается семантика графиков до и после преобразования.
Торговый автомат Мили | Торговый автомат Мура |
---|---|
Использует три состояния | Использует пять состояний |
Вычисляет выходы в действиях условия | Вычисляет выходы в состояниях активности |
Обновляет вывод на основе входов | Обновляет выход перед оценкой входа, требуя дополнительного временного шага для производства соды |
Для этого торгового автомата Мили является лучшей парадигмой моделирования, потому что нет задержки в выпуске соды после получения достаточного количества монет. В отличие от этого торговый автомат Мура требует дополнительного временного шага перед производством соды. Поэтому торговый автомат Мура может производить банку соды в то же временной шаг, что он принимает монету к следующей покупке. В этой ситуации доставка газировки может показаться в ответ на эту монету, но на самом деле происходит, потому что торговый автомат получил закупочную цену на предыдущих временных шагах.
В этом примере показано, как использовать график Мура для моделирования светофора, как описано в Модели Светофора при помощи семантики Мура.
На графике Мура каждое состояние представляет цвета светофора в двух противоположных направлениях и длительность текущего цвета. Каждое состояние активности вычисляет выход (цвета светофора) независимо от входа (если есть машины, ожидающие датчика). Если вы измените тип графика на Mealy
, вы получаете диагностическое сообщение во время компиляции, указывающее, что график нарушает семантику диаграммы Мили. Согласно семантике Мили, график не может вычислить свои выходы в состояниях активности.
Чтобы преобразовать график в допустимую семантику Мили, перепроектируйте график, перемещая логику, которая вычисляет выход из состояний и в переходы. Переработанная диаграмма Мили состоит из пяти состояний, так же как график Мура. В большинстве переходов временное логическое выражение или логический вход sens
защищает действие условия, вычисляющее выходы y1
и y2
. Исключение составляют только:
Переход по умолчанию, который вычисляет начальные выходы без защитного условия.
Переход от Stop
состояние в StopForTraffic
состояние, которое не вычисляет новые выходы.
В том же временном шаге диаграмма Мили оценивает временные логические выражения и входной сигнал sens
, и вычисляет значение выходов y1
и y2
. В результате на диаграмме Мили выход меняется на один временной шаг, прежде чем соответствующее изменение происходит в исходном графике Мура. В модели Simulink можно компенсировать ожидаемые изменения в выходе, добавляя блок Delay к каждому выходному сигналу.
В этой таблице сравнивается семантика графиков до и после преобразования.
Светофорный Контроллер Мура | Светофорный Контроллер Мили |
---|---|
Использует пять состояний | Использует пять состояний |
Вычисляет выходы в состояниях активности | Вычисляет выходы в действиях условия |
Обновляет выход перед оценкой входа | Обновляет вывод на основе входа, требуя блока Delay в каждом выходном сигнале |