В этом примере показано, как использовать блок Queue, чтобы сохранить и поставить сообщения в очередь. Блок Queue позволяет вам задавать способность хранения сообщений, перезаписывая политику, и сортируя политику во время переходов сообщения.
Блок Queue поддерживает три сообщения, сортирующие политики:
В обратном порядке (LIFO) — новейшее сообщение в устройстве хранения данных отбывает сначала.
Метод "первым пришел - первым вышел" (FIFO) — самое старое сообщение в устройстве хранения данных отбывает сначала.
Приоритет — сообщения сортируются на основе их приоритета. Приоритетная очередь может использоваться только, когда Перезапись самый старый элемент, если очередь является полным флажком, очищена.
Этот пример использует простую основанную на сообщении коммуникационную модель, которая введена в Анимационном, и Изучите Отправку и Получение сообщений. Модель включает Поток сообщений 1 и Поток сообщений 2, в котором сообщения текут из Синуса Wave1 к Scope1 и Синусу Wave2 к Scope2.
В потоке сообщений 1 и потоке сообщений 2:
Параметр Шага расчета Синуса Wave1 и Синус Wave2 устанавливается на 0.1
. Они - идентичные источники синусоиды.
Параметр Шага расчета Receive1 и Receive2 устанавливается на 0.5
. Они идентичны, Получают блоки.
Способностью Queue1 и Queue2 является 100
. У обеих очередей есть та же способность.
Политикой сортировки Queue1 является LIFO
и Queue2 является FIFO
, который отображен под марками блока. Единственной разницей между двумя сценариями потока сообщений является очередь, сортирующая политику.
Сигналы среди Синуса Wave1, Receive1 и Receive2 регистрируются.
Симулируйте модель и наблюдайте результаты в Инспекторе Данных моделирования.
Наблюдайте выходной сигнал от Синуса Wave1. Вывод от SineWave2 не отображен, потому что это идентично SineWave1. Также заметьте, что сигнал от Receive1 является представлением синусоиды, но с более длинными интервалами между выборками. Однако сигнал от Receive2 является первой частью синусоиды, достигающей к положительному пику, потому что политика сортировки блока Queue установлена в FIFO
и его способность является достаточно большой, чтобы хранить сообщения.
Можно также задать групповое сообщение Очереди, перезаписывающее политику, когда очередь полна:
По умолчанию Перезапись самый старый элемент, если очередь является полным флажком, выбрана. Блок собирается всегда принять входящее сообщение, перезаписывая самое старое сообщение в устройстве хранения данных. В этом случае блок перезаписывает самое старое сообщение, но сообщение, отбывая из блока определяется очередью, сортирующей политику.
В этом примере поведения очереди сообщения перечисляются на основе их времени поступления в FIFO и очередях LIFO со способностью 8
. Новое сообщение с номером 9
прибывает. В FIFO и случаях LIFO, передайте 9
сообщение 1 замен, потому что это - самый старый элемент в очереди. Однако наблюдайте изменение головы и хвоста очереди во время этого процесса. В очереди FIFO передайте 2
отбывает сначала, потому что это - самое старое сообщение после сообщения 1
заменяется. В очереди LIFO передайте 9
отбывает сначала, потому что это - последнее сообщение, которое прибывает в устройство хранения данных. После отъезда сообщения, новое сообщение 10
прибывает. Очередь принимает новые сообщения к своему пустому интервалу устройства хранения данных.
Если Перезапись, самый старый элемент, если очередь является полным флажком, очищен, значок изменений блока Queue и блока, не принимает новые сообщения, когда очередь полна. Это - блокирующееся поведение очереди.
В модели QueueSortingPoliciesModelSequenceViewer мощности блоков Очереди в Потоке сообщений 1 и Потоке сообщений 2 изменяются на 15
. Уменьшение способности заставляет входящие сообщения перезаписывать существующие единицы в устройстве хранения данных.
Симулируйте модель и откройте блок Sequence Viewer. В блоке Sequence Viewer прокрутите или нажмите Go к первому значку события слева. Наблюдайте сообщения, отбывая из блока на основе политик LIFO и FIFO.
Оба блока Очереди имеют ограниченную возможность. Когда их способность полна, новое входящее сообщение перезаписывает самое старое существующее сообщение в очереди. Прокрутите вниз и заметьте, что блок Sequence Viewer отображает сообщения, которые перезаписывают существующие единицы.
Откройте QueueOverWritingPolicyModel, чтобы смотреть блокирующееся поведение очереди.
В блоке Receive, установленном параметр Шага расчета на 0.5
.
Заметьте что в блоке Queue:
Перезапись самый старый элемент, если очередь является полным флажком, очищена. Наблюдайте изменение значка блока.
Полный параметр устанавливается на 16
.
Во вкладке Statistics выбраны Количество сущностей, из которых отбывают, d и Количество сущностей в блоке, n флажки.
Симулируйте модель. Наблюдайте предупреждение, выведенное в Диагностическом Средстве просмотра. Сообщения, отправленные блоком Send, были пропущены в процессе моделирования.
Блок Queue блокирует сообщения, когда Перезапись самый старый элемент, если очередь является полным флажком, очищена. Можно увеличить возможность блока Queue предотвратить сбрасывание донесений.
Когда Перезапись, самый старый элемент, если очередь является полным флажком, очищен вкладка Statistics, включена. Используйте вкладку Statistics, чтобы включить выходные порты и наблюдать статистику блока Queue. Статистические данные не поддерживаются для генерации кода.
Заметьте, что сигналы пометили Number of Messages in Block и Number of Messages Departed. До времени симуляции 2
, существует 16
сообщения в устройстве хранения данных, которое является способностью очереди. После этого Количество сообщений в Блоке принимает значения 15
и 16
потому что сообщения отбывают из каждого 0.5
время симуляции и новое сообщение прибывают.
Во времени симуляции 10
, в общей сложности 21
сообщения отбывают из блока.
Можно также использовать действия События, когда Перезапись самый старый элемент, если очередь является полным флажком, очищена. Действия события не поддерживаются для генерации кода. Для получения дополнительной информации смотрите События и Действия События (SimEvents).
Используйте действия События, чтобы задать поведение сообщения в определенных событиях. Например, Запись и Выходные действия называются сразу после записи сообщения и незадолго до выхода сообщения. Блокированное действие называется после того, как сообщение блокируется.
Для получения дополнительной информации см. Модель, сообщение Получает Интерфейс, который Работает на Доступности сообщения.
Можно также смоделировать более комплексные коммуникационные политики при помощи блоков из библиотеки SimEvents®, которая требует лицензии SimEvents®.
Sine Wave | Send | Receive | Queue | Hit Crossing Probe | Sequence Viewer