Этот пример сравнивает поведение сообщений, событий и данных в 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
утверждают только два раза.
В отличие от событий, ставятся в очередь сообщения. График получения может принять решение ответить на сообщение в любое время после того, как он был отправлен. В отличие от данных, сообщение не остается допустимым неопределенно. Сообщение уничтожается в конце временного шага.