В этом примере показано, как использовать семантику Мура для моделирования светофора.
В этом примере модель светофора содержит график Мура под названием Light_Controller, которая работает в пяти состояниях трафика. Каждое состояние представляет цвет светофора в двух противоположных направлениях, Север-Юг и Восток-Запад, и длительность текущего цвета. Имя каждого состояния представляет операцию света, просматриваемого с направления Север-Юг.
Этот график использует временную логику, чтобы регулировать переходы состояний. The after
оператор реализует таймер обратного отсчета, который инициализируется при вводе исходного состояния. По умолчанию таймер обеспечивает более длинный зеленый свет в направлении Восток-Запад, чем в направлении Север-Юг, потому что объем трафика больше по дороге Восток-Запад. Зеленый свет в направлении Восток-Запад остается на протяжении по крайней мере 20 часов тактов, но он может оставаться зеленым, пока никакое движение не прибывает в направлении Север-Юг. Датчик определяет, ждут ли автомобили на красный свет в направлении Север-Юг. Если это так, свет становится зеленым в направлении Север-Юг, чтобы сохранить движение.
Light_Controller графика ведет себя как машина Мура, потому что обновляет свои выходы на основе текущего состояния перед переходом в новое состояние:
Когда начальное состояние Stop
активно. Светофор красный для Север-Юг, зеленый для Восток-Запад.
Устанавливает выходные y1 = RED
(Север-Юг) на основе текущего состояния.
Устанавливает выходные y2 = GREEN
(Восток-Запад) на основе текущего состояния.
После 20 тактов активное состояние становится StopForTraffic
.
В активном состоянии StopForTraffic
. Светофор был красным для Север-Юг, зеленым для Востока-Запад - не менее 20 тактов.
Устанавливает выходные y1 = RED
(Север-Юг) на основе текущего состояния.
Устанавливает выходные y2 = GREEN
(Восток-Запад) на основе текущего состояния.
Проверяет датчик.
Если датчик указывает, что автомобили ждут ([sens]
true) в направлении Север-Юг активное состояние становится StopToGo
.
В активном состоянии StopToGo
. Светофор должен обратить поток трафика назад в ответ на датчик.
Устанавливает выходные y1 = RED
(Север-Юг) на основе текущего состояния.
Устанавливает выходные y2 = YELLOW
(Восток-Запад) на основе текущего состояния.
После 3 тактов активное состояние становится Go
.
В активном состоянии Go
. Светофор был красным для Север-Юг, желтый для Восток-Запад для 3 часов тактов.
Устанавливает выходные y1 = GREEN
(Север-Юг) на основе текущего состояния.
Устанавливает выходные y2 = RED
(Восток-Запад) на основе текущего состояния.
После 10 тактов активное состояние становится GoToStop
.
В активном состоянии GoToStop
. Светофор был зеленым для Север-Юг, красный для Восток-Запад для 10 часов тактов.
Устанавливает выходные y1 = YELLOW
(Север-Юг) на основе текущего состояния.
Устанавливает выходные y2 = RED
(Восток-Запад) на основе текущего состояния.
После 3 тактов активное состояние становится Stop
.
Этот пример светофора Мура иллюстрирует эти правила проекта Мура:
График вычисляет выходы в состояниях активности.
График проверяет входы в условиях переходов.
График использует временную логику, но без асинхронных событий.
График определяет входы графика (sens
) и выходы (y1
и y2
).