Этот пример сравнивает поведение сообщений, событий и данных в Stateflow®.
Эта модель имеет три графика отправителя: DataSender
, EventSender
, и MessageSender
. Каждый график отправителя имеет одно состояние. В действии записи состояния графики присваивают значение данным, отправляют событие вызова функции или отправляют сообщение.
Для каждого из графиков отправителя существует соответствующий график приемника. Каждый график приемника имеет диаграмму состояний с состояниями A0
, A1
, A2
, и A3
. Неявное событие after(3,sec)
инициировал переход от A0
к A1
. Данные, событие или сообщение из соответствующего графика отправителя охраняют переходы между A1
, A2
, и A3
.
Каждый график приемника имеет активный выход состояния, включил и соединился с осциллографом. Осциллограф показывает, какие состояния активны в каждом временном шаге. Этот выход подсвечивает различие в поведении между выходными данными, событиями и сообщениями.
DataSender
график присваивает значение 1 к выходным данным M
, который соединяется как вход с DataReceiver
график.
DataReceiver
график выполняется однажды на каждом временном шаге. В начале симуляции, A0
состояния активно. Во время
t=3
, переход от A0
к A1
происходит. Во время t=4
, график тестирует ли M
равняется 1. Это условие верно, таким образом, переходы графика от A1
к A2
. Во время t=5
M
все еще равняется 1
, так переходы графика от A2
к A3
. На осциллографе вы видите тот DataReceiver
изменения утверждают три раза.
После того, как данные присвоены значение, они содержат свое значение в течение симуляции. Поэтому каждый раз, когда DataReceiver
оценивает условие [M == 1]
, это переходит к новому состоянию.
EventSender
график использует команду send(M)
отправить вызову функции выходное событие, чтобы разбудить EventReceiver
график.
EventReceiver
график выполняется только когда входное событие M
будит график. В начале симуляции, A0
состояния активно. Переход от
A0
к A1
основан на абсолютно-разовой временной логике и не допустим во время t=0
. A0
остается активным, и график возвращается ко сну. Поскольку EventSender
отправляет событие M
только однажды, EventReceiver
не просыпается снова. На осциллографе вы видите тот EventReceiver
никогда переходы из A0
.
События не остаются допустимыми через временные шаги, таким образом, график получения имеет только один шанс ответить на событие. Когда EventSender
отправляет событие, EventReceiver
не готово ответить на него. Возможность для EventReceiver
к переходу в ответ на событие потерян.
MessageSender
график использует синтаксис send(M)
отправить сообщение через порт выходного сигнала. Сообщение входит в очередь входного сигнала MessageReceiver
график. Сообщение ожидает в очереди до MessageReceiver
оценивает его.
MessageReceiver
график выполняется однажды на каждом временном шаге. В начале симуляции, A0
состояния активно. Во время
t=3
, переход от A0
к A1
происходит. Во время t=4
, график определяет тот M
присутствует в очереди, таким образом, она берет переход к A2
. В конце временного шага график удаляет M
от очереди. Во время t=5
, нет никакого сообщения, существующего в очереди, таким образом, график не переходит к A3
. A2
остается активное состояние. На осциллографе вы видите тот MessageReceiver
изменения утверждают только два раза.
В отличие от событий, ставятся в очередь сообщения. График получения может принять решение ответить на сообщение в любое время после того, как он был отправлен. В отличие от данных, сообщение не остается допустимым неопределенно. Сообщение уничтожается в конце временного шага.