В этом примере показано, как синхронизировать выполнение с доступностью данных в системах, основанных на сообщениях. Мы покажем, как смоделировать это поведение с помощью событий и действий. Этот пример основан на другом примере, Установление интерфейсов отправки и приема сообщений между программными компонентами, где два программных компонента взаимодействуют с помощью сообщений.
Как и в предыдущем примере, процесс генерации кода должен применяться к SendComponent и ReceiveComponent. Устройство хранения сообщений моделирует промежуточное ПО и события уведомления данных, предоставляемые промежуточным ПО.
Ниже представлена модель композиции с SendComponent и ReceiveComponent, созданными с помощью двух блоков Model. Эти два блока Model соединяются через блок Queue со линиями сообщений.
Когда сообщение приходит к блоку Queue, его поступление передается в ReceiveComponent с помощью действия события входа в очередь. Это активирует блок Simulink Function внутри ReceiveComponent, чтобы принять новое сообщение для обработки.
Чтобы добиться такого поведения, в блоке Queue, на вкладке действия Event, в поле Entry, блок вызывает Функцию Simulink onMessageAvailable()
. Смотрите Языки Действий События и Генерация Случайных Чисел (SimEvents) для получения дополнительной информации о Действиях События.
Когда блок The Simulink Function активирован, он принимает сообщение и преобразует его в сигнал.
В результате сообщения, отправленные из SendComponent, запускают выполнение в ReceiveComponent. Чтобы наблюдать это поведение, используйте блок Sequence Viewer.
Для примера соблюдайте время симуляции 0
:
Стрела от блока Send до блока Queue представляет, что сообщение отправляется со значением данных 0
.
Стрела от блока Queue до блока Simulink Function указывает на вызов onMessageAvailable()
функция.
Стрела из блока Queue иллюстрирует, что сообщение со значением данных 0
принимается блоком Receive в рамках этого вызова функции.
Горизонтальная штриховая стрела от блока Simulink Function до блока Queue указывает на возврат функции onMessageAvailable()
.
Дополнительные сведения о блоке Sequence Viewer см. в разделе Использование Sequence Viewer для визуализации сообщений, событий и сущностей.
Queue | Receive | Send | Sine Wave