Инициируйте компоненты Simulink с дискретными Событиями в SimEvents

В этом примере показано, как использовать Функциональные блоки Simulink, чтобы добавить метку времени к сущностям, сущность передачи приписывает компонентам Simulink®, и создайте события уведомления для маршрутизации. Можно Использовать Функциональные блоки Simulink, чтобы захватить атрибуты сущности, передают их компонентам Simulink® для обработки и затем передают их обратно модели SimEvents®.

Это - простая система массового обслуживания дискретного события, созданная при помощи Генератора Сущности, Очереди Сущности, Сервера Сущности и блоков Терминатора Сущности. Чтобы изучить, как создать эту модель, смотрите, Создают Дискретную Модель событий.

В этом примере мы используем эту простую модель SimEvents® и Функциональные блоки Simulink, чтобы показать как:

  • Добавьте метку времени к сущностям и измерьте время между завершением генерации и обслуживания сущности. Можно использовать этот рабочий процесс, чтобы отследить, сколько времени требуется, чтобы сущности процессов в системе массового обслуживания.

  • Извлеките атрибуты сущности и используйте значения атрибута в компоненте Simulink. Можно использовать этот рабочий процесс, чтобы передать атрибуты сущности алгоритму Simulink®.

  • Импортируйте данные от электронной таблицы до модели SimEvents® и задайте интервалы генерации сущности. Можно использовать этот рабочий процесс, чтобы установить блок и параметры сущности из существующих данных.

  • Извлеките атрибуты сущности и передайте их другой сущности с другим типом.

Добавьте метку времени к сущностям Используя функциональный блок Simulink

Эта модель показывает, как отследить время для сущностей, текущих через вашу систему. Функциональный блок Simulink используется, чтобы добавить метку времени ко временам генерации и обслуживания сущности и вычислить общую длительность между этими двумя процессами.

Чтобы открыть модель, используйте этот код:

open_system('TimeStampEntitiesUsingSimulinkFunctionModel');

В этой модели интервалы межгенерации сущности сгенерированы от равномерного распределения на открытом интервале (0,1). Сущности имеют четыре атрибута, и все атрибуты имеют начальное значение 0:

  • Data представляет данные, которые несут сущности.

  • TimeStampGeneration время генерации сущности хранилищ.

  • TimeStampServiceComplete сервисное время завершения сущности хранилищ.

  • TotalTime время между генерацией и обслуживанием сущности.

В Функциональном блоке Simulink блок Digital Clock добавляет метку времени ко времени генерации сущности.

Можно установить метку времени, когда сущность сгенерирована путем вызова timeStamp() функция в Функции Simulink от блока Entity Generator.

Чтобы вызвать функцию, в блоке Entity Generator, в конечном счете вкладка действий, в поле Generate, использует этот код:

entity.TimeStampGeneration = timeStamp();

Код вызывает timeStamp() функция и присвоения значение от блока Digital Clock до TimeStampGeneration припишите, когда сущность будет сгенерирована.

Точно так же, чтобы добавить метку времени к сервисному завершению и вычислить разницу во времени между генерацией сущности и обслуживанием, откройте блок Entity Server, и в конечном счете вкладку действий, нажмите завершенный Service. Введите этот код.

% Stamp the service completion by calling the |timeStamp()|
% function.
entity.TimeStampServiceComplete = timeStamp();
% Calculate the difference between generation and service
% completion time.
entity.TotalTime = entity.TimeStampServiceComplete - entity.TimeStampGeneration;
% Display the entity attribute for the time difference.
disp(entity.TotalTime);

Сервисное время завершения, которое получено путем вызова timeStamp(), присвоен entity.TimeStampServiceComplete атрибут. Затем длительность между завершением генерации и обслуживания сущности вычислена и присвоена entity.TotalTime. Код отображает entity.TotalTime значения для каждой сущности в Диагностическом Средстве просмотра.

Симулируйте модель. В Диагностическом Средстве просмотра можно наблюдать entity.TotalTime значения для 10 сущности. Длительность между генерацией сущности и обслуживанием увеличивается, потому что сущности ожидают в блоке Entity Queue своей очереди сервиса.

Увеличьте время симуляции до 1000 и наблюдайте тот entity.TotalTime сходится приблизительно к 26.

Передайте TotalTime Припишите компоненту Simulink

Предположим, что вы хотите передать entity.TotalTime значения к компоненту Simulink®. Эта модель показывает, как передать значение атрибута Функциональному блоку Simulink, когда сущность прибывает в блок Entity Terminator.

Чтобы открыть эту модель, используйте этот код:

open_system('GetEntityAttributesSimulinkFunctionModel');

Чтобы достигнуть этого поведения, откройте блок Entity Terminator, в конечном счете вкладка действий, нажмите Entry и вызовите getAttribute(entity.TotalTime) функция.

Блок Get Entity Attributes берет entity.Totaltime как входной параметр и использование блок Gain, чтобы усилить его значения путем умножения их на 2.

Симулируйте модель. Наблюдайте блок Scope, который показывает усиленные значения атрибута.

Импортируйте данные из электронной таблицы, чтобы задать времена межгенерации сущности

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

Эта модель в качестве примера показывает, как импортировать данные от электронной таблицы до модели SimEvents® и данные об использовании, чтобы задать времена межгенерации сущности.

Чтобы открыть эту модель, используйте этот код:

open_system('ImportDataSimEventsModel');

В модели блок From Spreadsheet в Функциональном блоке Simulink и получает значения от interGenerationTimes.xlsx электронная таблица. Электронная таблица имеет пять значений — 1, 2, 3, 4, и 5 — использоваться в качестве времен межгенерации сущности.

Вызывать myDataSpreadsheet() функция, в блоке Entity Generator, в поле действия времени Межгенерации, использует этот код:

dt = myDataSpreadsheet();

dt переменная, которая задает времена межгенерации для сущностей. Код присваивает dt значения путем вызова Simulink функционируют myDataSpreadsheet(), который получает значения из электронной таблицы.

Симулируйте модель. Наблюдайте блок Scope, который отображается, когда сущности сгенерированы и отбывают из блока. Интервалы между генерацией сущности совпадают с данными из электронной таблицы.

Передайте атрибуты сущности между различными типами сущности

В SimEvents можно создать модель, которая имеет различные типы сущности, и передайте атрибуты между сущностями с помощью Функционального блока Simulink.

Чтобы открыть эту модель, используйте этот код:

open_system('AssignEntityAttributeSimulinkFunctionModel');

В модели два блока Генератора Сущности генерируют сущности. Сущность 1 генерирует сущности с постоянным значением 2 и обслуживаются для 1 время симуляции. После того, как сервис завершен, сущности прибывают в Функциональный блок Simulink, пометил Assign Attribute 1.

В Атрибуте Присвоения 1, сущности получены блоком Receive с внутренней очередью размера 16. Блок Receive преобразует данные сущности в значения сигналов.

Точно так же Сущность 2 генерирует сущности, которые несут данные значения 2 и обслуживаются для 5 время симуляции. После того, как сервис завершен, сущности прибывают в Атрибут Присвоения 2.

Данные сущности передаются другому блоку Entity Generator, пометил New Entity. Блок New Entity генерирует сущности, несущие два атрибута, data1 и data2, чьи значения получены путем вызова setAttribute1() и setAttribute2(), соответственно.

entity.data1 = setAttribute1();
entity.data2 = setAttribute2();

Симулируйте модель и откройте Data Inspector. Заметьте что значения data1 и data2 значениями новой сущности является 0 до времени симуляции 2. Это вызвано тем, что сущности обслуживаются и между сущностями нет никакой передачи атрибута. Во время 2, data1 2, который является значением, которое передается setAttribute1(). Во время 6, data2 начинает получать значения от setAttribute2(). Эта задержка происходит из-за различия между сервисными временами сущностей.

Создайте событие уведомления для маршрутизации

Эта модель показывает, как использовать Функциональный блок Simulink, чтобы создать событие, чтобы уведомить блок маршрутизации, когда обработка сущности завершена.

Чтобы открыть эту модель, используйте этот код:

open_system('NotifyEventSimulinkFunctionCallModel');

В модели блок Entity Generator генерирует сущности, которые представляют части в средстве. Сущности затем обрабатываются блоком Entity Server. Если часть передает контроль качества, блок switch Сущности Выход направляет части к Отъезду. В противном случае части отправляются в Последующую обработку.

Чтобы создать событие уведомления после, сущность обрабатывается в блоке Entity Server, в конечном счете вкладка действий, в Сервисе полное поле действия, вызывает notifyEvent() функция.

В блоке Quality Control блок Sine Wave используется, чтобы сгенерировать сигнал. Блок Round используется к раунду значения сигналов к самому близкому целому числу, меньше чем или равному тому значению. Выходной сигнал блока Round принимает значение 1 или 2. Сигнал преобразован в сообщение блоком Set Event Time.

Значение данных сообщения от блока Quality Control задает, какой выходной порт выбран, когда сущности отбывают из блока switch Сущности Выход. Если сообщение несет значение 1, выходной порт 1 выбран для отъезда сущности. Если сообщение несет значение 2, выход 2 выбран для отъезда сущности.

Симулируйте модель и заметьте, что блок Scope пометил Parts Departed. Четыре части отбывают из средства.

Заметьте, что блок Scope пометил Parts Sent to Processing, который показывает, что шесть частей отправляются в последующую обработку.

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

| | | | | |

Похожие темы