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

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

Диаграммы отправителей

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

Приемник Графиков

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

Выходы возможностей

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

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

The DataSender график присваивает выходным данным значение 1 M, который соединяется как вход с DataReceiver график.

The DataReceiver график выполняется один раз в каждый временной шаг. В начале симуляции состояние A0 активно. Во время t=3, переход от A0 на A1 происходит. Во время t=4график проверяет ли M равен 1. Это условие верно, поэтому график переходит от A1 на A2. Во время t=5, M все еще равен 1, поэтому график переходит от A2 на A3. На возможностях вы видите, что DataReceiver изменяет состояния три раза.

После того, как данным присвоено значение, оно удерживает его значение на протяжении всей симуляции. Поэтому каждый раз, когда DataReceiver оценивает условие [M == 1], он переходит к новому состоянию.

Поведение события

The EventSender на графике используется команда send(M) чтобы отправить вызов функции выходное событие, чтобы пробудить EventReceiver график.

The EventReceiver график выполняется только тогда, когда входное событие M пробуждает график. В начале симуляции состояние A0 активно. Переход от A0 на A1 основан на абсолютной временной логике и не действителен в то время t=0. A0 остается активным, и график возвращается в спящий режим. Потому что EventSender отправляет событие M только один раз, EventReceiver не просыпается снова. На возможностях вы видите, что EventReceiver никогда не переходит из A0.

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

Поведение сообщения

The MessageSender график использует синтаксис send(M) для отправки сообщения через порт выходного сообщения. Сообщение переходит во входную очередь сообщений MessageReceiver график. Сообщение ожидает в очереди до MessageReceiver оценивает его.

The MessageReceiver график выполняется один раз в каждый временной шаг. В начале симуляции состояние A0 активно. Во время t=3, переход от A0 на A1 происходит. Во время t=4график определяет, что M присутствует в очереди, поэтому он принимает переход на A2. В конце временного шага график удаляет M из очереди. Во время t=5, в очереди нет сообщения, поэтому график не переходит на A3. A2 остается активным состоянием. На возможностях вы видите, что MessageReceiver изменяет состояние только два раза.

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

Похожие темы