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

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

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

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

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

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

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

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

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

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

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

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

Сообщения могут охранять переходы или акты государственной власти типа 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 не изменяется. Если сообщение присутствует, оно удалено из очереди независимо от того, изменяется ли x.

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

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

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

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

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

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

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

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

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

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

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

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

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

isvalid(message_name)
Сообщение допустимо, если график удалил его из очереди и не передал или отбросил его. Используйте оператор isvalid, чтобы проверять, допустимо ли сообщение в модели Simulink, которая содержит больше чем одну диаграмму Stateflow.

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

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

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

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

Определите, когда очередь переполнится

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

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

По умолчанию, когда очередь сообщений переполняется, остановки симуляции с ошибкой. Чтобы предотвратить ошибку времени выполнения и позволить оператору overflowed динамически реагировать на пропущенные сообщения, установите значение свойства Queue Overflow Diagnostic к Warning или None. Для получения дополнительной информации смотрите Диагностику Переполнения Очереди.

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

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

  • Охрана переход с сообщением и оператором overflowed.

  • Охрана переход с сообщением и вызовом оператор overflowed в действии записи целевого состояния.

  • Охрана действие on состояния с сообщением и вызовом оператор overflowed в действии.

  • В акте государственной власти используйте оператор receive, сопровождаемый оператором overflowed.

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

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

Чтобы проверять состояние переполнения очереди выходного сигнала, сначала добавьте сообщение в очередь. Вы можете:

  • Используйте оператор send, сопровождаемый оператором overflowed.

  • Используйте оператор forward, сопровождаемый оператором overflowed.

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

Проверяйте на локальное переполнение сообщения

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

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

| | | | | |

Похожие темы