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