Сообщение является объектом Stateflow®, который передает данные локально или между графиками в модели Simulink®. Из графика отправителя можно отправить или передать сообщение. В графике получения очередь получает сообщение и содержит его, пока график не может оценить его.
Используя операторы Stateflow, можно получить доступ к данным о сообщении, и отправить, получить, отбросить или передать сообщение. Можно также определить, допустимо ли сообщение, и найдите количество сообщений в очереди. Для получения дополнительной информации смотрите, Связываются с диаграммами Stateflow путем Отправки сообщений.
Сообщения Stateflow имеют поле данных. Чтобы читать или записать в поле данных сообщения допустимого сообщения, используйте синтаксис записи через точку:
message_name.data
enumeration
раздел определения, если вы не задаете в противном случае в methods
раздел определения.Вы не можете получить доступ к данным о сообщении для сообщений, которые находятся все еще в очереди или которые были уже отброшены.
Чтобы отправить выход или локальное сообщение, используйте send
оператор:
send(message_name)
A
состояния
отправляет сообщению M
со значением данных 3
. Если осциллографом сообщения является Local
, затем сообщение входит в локальную очередь получения. Если осциллографом сообщения является Output
, затем график отправляет сообщение через выходной порт с другим блоком в модели Simulink.
В одном временном шаге можно отправить несколько сообщений через выходной порт или локальной очереди получения.
Если график отправляет сообщение, которое превышает способность очереди получения, переполнение очереди происходит. Результат переполнения очереди зависит от типа получения очереди.
Когда переполнение происходит во внутренней очереди, диаграмма Stateflow пропускает новое сообщение. Можно управлять уровнем диагностического действия путем установки свойства Queue Overflow Diagnostic для сообщения. Смотрите Диагностику Переполнения Очереди.
Когда переполнение происходит во внешней очереди, блок Queue или пропускает новое сообщение или перезаписывает самое старое сообщение в очереди, в зависимости от настройки блока. Смотрите Перезапись самый старый элемент, если очередь полна (Simulink). Переполнение во внешней очереди всегда приводит к предупреждению.
Сообщения могут охранять переходы или состояния активности типа 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
не изменяется. Если сообщение присутствует, график удаляет его из очереди независимо от значения данных.
Чтобы отбросить допустимый вход или локальное сообщение, используйте discard
оператор:
discard(message_name)
Например, в этом графике, during
действие в A
состояния проверяет очередь для сообщения
M
. Если сообщение присутствует, график удаляет его из очереди. Если сообщение имеет значение данных, равное 3, график отбрасывает сообщение.
Чтобы передать допустимый вход или локальное сообщение локальной очереди или выходному порту, используйте forward
оператор:
forward(message_in_name,message_out_name)
В этом графике утвердите A
проверяет входную очередь на сообщение M_in
. Если сообщение присутствует, график удаляет сообщение из очереди и вперед его к выходному порту M_out
. После того, как график передает сообщение, сообщение больше не действительно в A
состояния.
В этом графике утвердите A
проверяет входную очередь на сообщение M_in
. Если сообщение присутствует, график передает сообщение к локальной очереди сообщений M_local
. После задержки 0,3 секунд, перехода от A
состояния утверждать
B
удаляет сообщение из M_local
очередь сообщений и вперед это к выходному порту M_out
.
Чтобы проверять, допустимы ли вход или локальное сообщение, используйте isvalid
оператор:
isvalid(message_name)
Например, этот график сначала выполняет A
состояния, как описано в Отбрасывании сообщение. Когда график выполняет
B
состояния,
during
действие проверяет что сообщение M
isvalid. Если сообщение допустимо и имеет значение данных, равное 6, график отбрасывает сообщение.
Чтобы проверять количество сообщений во внутренней очереди получения входа или локального сообщения, используйте length
оператор:
length(message_name)
Например, в этом графике, during
действие в A
состояния проверяет очередь для сообщения
M
. Если сообщение присутствует, график удаляет его из очереди. Если точно семь сообщений остаются в очереди, график постепенно увеличивает значение x
.
length
оператор не поддержан для входных сигналов, которые используют внешние очереди получения, управляемые блоком Queue.
Queue | отбрасывание | передать | isvalid | длина | получить | отправка