Действие управляющего сообщения в диаграммах Stateflow

Сообщение является объектом Stateflow®, который передает данные локально или между графиками в модели Simulink®. Из графика отправителя можно отправить или передать сообщение. В графике получения очередь получает сообщение и содержит его, пока график не может оценить его.

Используя операторы Stateflow, можно получить доступ к данным о сообщении, и отправить, получить, отбросить или передать сообщение. Можно также определить, допустимо ли сообщение, и найдите количество сообщений в очереди. Для получения дополнительной информации смотрите, Связываются с диаграммами Stateflow путем Отправки сообщений.

Доступ к данным о сообщении

Сообщения Stateflow имеют поле данных. Чтобы читать или записать в поле данных сообщения допустимого сообщения, используйте синтаксис записи через точку:

message_name.data
Если вы отправляете сообщение без первого присвоения значения к данным о сообщении, значение по умолчанию для числовых данных 0. Для перечислимых данных значением по умолчанию является первое значение, перечисленное в enumeration раздел определения, если вы не задаете в противном случае в methods раздел определения.

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

Отправьте сообщение

Чтобы отправить выход или локальное сообщение, используйте send оператор:

send(message_name)
Например, в этом графике, действии записи в A состояния отправляет сообщению M со значением данных 3. Если осциллографом сообщения является Local, затем сообщение входит в локальную очередь получения. Если осциллографом сообщения является Output, затем график отправляет сообщение через выходной порт с другим блоком в модели Simulink.

Stateflow chart that uses the send operator in a state.

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

Если график отправляет сообщение, которое превышает способность очереди получения, переполнение очереди происходит. Результат переполнения очереди зависит от типа получения очереди.

  • Когда переполнение происходит во внутренней очереди, диаграмма Stateflow пропускает новое сообщение. Можно управлять уровнем диагностического действия путем установки свойства Queue Overflow Diagnostic для сообщения. Смотрите Диагностику Переполнения Очереди.

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

Переходы охраны и действия

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

Охрана переход с сообщением

В этом графике, сообщении M охраняет переход от A состояния утверждать B. Переход происходит, когда оба из этих условий верны:

  • Сообщение присутствует в очереди.

  • Значение данных сообщения равно 3.

Если сообщение не присутствует или если значение данных не равно 3, то переход не происходит. Если сообщение присутствует, оно удалено из очереди независимо от того, происходит ли переход.

Охрана on состояния Действие с сообщением

В этом графике, сообщении M охраняет on действие в A состояния. Когда A состояния становится активным, это постепенно увеличивает значение x если оба из этих условий верны:

  • Сообщение присутствует в очереди.

  • Значение данных сообщения равно 3.

Если сообщение не присутствует или если значение данных не равно 3, то значение x не изменяется. Если сообщение присутствует, оно удалено из очереди независимо от ли x изменяется.

Получите сообщение

Чтобы извлечь вход или локальное сообщение от его получающей очереди, используйте receive оператор:

receive(message_name)
Если допустимое сообщение M существует, receive(M) возвращает true. Если допустимое сообщение не существует, но в очереди существует сообщение, то график удаляет сообщение из очереди и receive(M) возвращает true. Если допустимое сообщение не существует и нет никаких сообщений в очереди, receive(M) возвращает false.

Например, в этом графике, during действие в A состояния проверяет очередь для сообщения M и постепенно увеличивает значение x если оба из этих условий верны:

  • Сообщение присутствует в очереди.

  • Значение данных сообщения равно 3.

Если сообщение не присутствует или если значение данных не равно 3, то значение x не изменяется. Если сообщение присутствует, график удаляет его из очереди независимо от значения данных.

Stateflow chart that uses the receive operator.

Отбросьте сообщение

Чтобы отбросить допустимый вход или локальное сообщение, используйте discard оператор:

discard(message_name)
После того, как график отбрасывает сообщение, он может удалить другое сообщение из очереди в том же временном шаге. График не может получить доступ к данным отброшенного сообщения.

Например, в этом графике, during действие в A состояния проверяет очередь для сообщения M. Если сообщение присутствует, график удаляет его из очереди. Если сообщение имеет значение данных, равное 3, график отбрасывает сообщение.

Stateflow chart that uses the discard operator.

Передайте сообщение

Чтобы передать допустимый вход или локальное сообщение локальной очереди или выходному порту, используйте forward оператор:

forward(message_in_name,message_out_name)
После того, как график передает сообщение, он может удалить другое сообщение из очереди в том же временном шаге.

Передайте входной сигнал

В этом графике утвердите A проверяет входную очередь на сообщение M_in. Если сообщение присутствует, график удаляет сообщение из очереди и вперед его к выходному порту M_out. После того, как график передает сообщение, сообщение больше не действительно в A состояния.

Stateflow chart that uses the forward operator.

Передайте локальное сообщение

В этом графике, переходе между A состояния и B состояния проверяет локальную очередь для сообщения M_local. Если сообщение присутствует, переход удаляет сообщение из M_local очередь сообщений и вперед это к выходному порту M_out.

Stateflow chart that uses the forward operator.

Определите, допустимо ли сообщение

Чтобы проверять, допустимы ли вход или локальное сообщение, используйте isvalid оператор:

isvalid(message_name)
Сообщение допустимо, если график удалил его из очереди получения и не передал или отбросил его.

Например, этот график сначала выполняет A состояния, как описано в Отбрасывании сообщение. Когда график выполняет B состояния, during действие проверяет что сообщение M isvalid. Если сообщение допустимо и имеет значение данных, равное 6, график отбрасывает сообщение.

Stateflow chart that uses the isvalid operator.

Определите длину очереди

Чтобы проверять количество сообщений во внутренней очереди получения входа или локального сообщения, используйте length оператор:

length(message_name)

Например, в этом графике, during действие в A состояния проверяет очередь для сообщения M. Если сообщение присутствует, график удаляет его из очереди. Если точно семь сообщений остаются в очереди, график постепенно увеличивает значение x.

Stateflow chart that uses the length operator.

length оператор не поддерживается для входных сигналов, которые используют внешние очереди получения, управляемые блоком Queue.

Смотрите также

| | | | | |

Похожие темы