Просмотрите различия между сообщениями Stateflow, Событиями и данными

Этот пример сравнивает поведение сообщений, событий и данных в Stateflow®.

Графики отправителя

Эта модель имеет три графика отправителя: DataSender, EventSender и MessageSender. Каждый график отправителя имеет одно состояние. В действии записи состояния графики присваивают значение данным, отправляют событие вызова функции или отправляют сообщение.

Графики получателя

Для каждого из графиков отправителя существует соответствующий график получателя. Каждый график получателя имеет диаграмму состояний с состояниями A0, A1, A2 и A3. Неявное событие after(3,sec) инициировало переход от A0 до A1. Данные, событие или сообщение из соответствующего графика отправителя охраняют переходы между A1, A2 и A3.

Вывод Scope

Каждый график получателя имеет активный вывод состояния, включил и соединился с осциллографом. Осциллограф показывает, какие состояния активны в каждом временном шаге. Этот вывод подсвечивает различие в поведении между выходными данными, событиями и сообщениями.

Поведение данных

График 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 утверждают только два раза.

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

Похожие темы