В этом примере показано, как использовать блоки Simulink Function для сущностей временной метки, передать атрибуты сущности компонентам Simulink ® и создать события уведомления для маршрутизации. Можно использовать функциональные блоки Simulink, чтобы захватить атрибуты сущности, передать их компонентам Simulink ® для обработки и затем передать их обратно в вашу модель SimEvents ®.
Это простая система организации очередей с дискретными событиями, созданная с помощью блоков Entity Generator, Entity Queue, Entity Server и Entity Terminator. Чтобы узнать, как создать эту модель, см. Раздел «Создание дискретно-событийной модели».
В этом примере мы используем эту простую модель SimEvents ® и блоки Simulink Function, чтобы показать, как:
Временная метка сущностей и измеряет время между генерацией сущности и завершением обслуживания. Можно использовать этот рабочий процесс, чтобы отслеживать, сколько времени требуется для обработки сущностей в системе построения очередей.
Извлеките атрибуты сущности и используйте значения атрибутов в компоненте Simulink. Можно использовать этот рабочий процесс для передачи атрибутов сущности алгоритму Simulink ®.
Импортируйте данные из электронной таблицы в модель SimEvents ® и задайте интервалы генерации сущностей. Можно использовать этот рабочий процесс, чтобы задать параметры блоков и сущностей из существующих данных.
Извлеките атрибуты сущности и передайте их другому объекту с другим типом.
Эта модель показывает, как отслеживать время для сущностей, протекающих через вашу систему. Блок Simulink Function используется для генерации временной метки и времени обслуживания и для вычисления общей длительности между этими двумя процессами.
Чтобы открыть модель, используйте этот код:
open_system('TimeStampEntitiesUsingSimulinkFunctionModel');
В этой модели интервалы межгенерации сущностей генерируются из равномерного распределения на открытом интервале (0,1)
. Сущности имеют четыре атрибута, и все атрибуты имеют начальное значение 0
:
Data
представляет данные, которые несут сущности.
TimeStampGeneration
сохраняет время генерации сущности.
TimeStampServiceComplete
сохраняет время завершения обслуживания сущности.
TotalTime
- время между генерацией сущности и обслуживанием.
В блоке Simulink Function блок Digital Clock блокирует время генерации сущности.
Вы можете выполнить временную метку, когда сущность генерируется вызовом timeStamp()
функция в функции Simulink из блока Entity Generator.
Чтобы вызвать функцию, в блоке Entity Generator, на вкладке Event actions, в поле Generate, используйте этот код:
entity.TimeStampGeneration = timeStamp();
Код вызывает timeStamp()
и присваивает значение из блока Digital Clock в TimeStampGeneration
атрибут, когда сущность генерируется.
Точно так же, чтобы выполнить метку времени и вычислить время, различие между генерацией сущности и службой, откройте блок Entity Server и на вкладке Event actions щелкните Service complete. Введите этот код.
% 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
значения для каждой сущности в Средство Просмотра.
Симулируйте модель. В Diagnostic Viewer можно наблюдать entity.TotalTime
значения для 10
сущности. Длительность между генерацией сущности и службой увеличивается, потому что сущности ожидают в блоке Entity Queue своей очереди обслуживания.
Увеличьте время симуляции, чтобы 1000
и наблюдайте, что entity.TotalTime
сходится к приблизительно 26
.
TotalTime
Атрибут к компоненту SimulinkПредположим, что вы хотите пройти entity.TotalTime
значения в компонент Simulink ®. Эта модель показывает, как передать значение атрибута в блок Simulink Function, когда сущность приходит к блоку Entity Terminator.
Чтобы открыть эту модель, используйте этот код:
open_system('GetEntityAttributesSimulinkFunctionModel');
Чтобы добиться такого поведения, откройте блок Entity Terminator, на вкладке Event actions, нажмите Entry и вызовите getAttribute(entity.TotalTime)
функция.
Блок Get Entity Attributes принимает entity.Totaltime
как входной параметр и использует блок Gain, чтобы усилить свои значения, умножив их на 2
.
Симулируйте модель. Наблюдайте блок Scope, который показывает значения усиленных атрибутов.
Предположим, что вы хотите включить данные из электронной таблицы в свою симуляцию. Используя электронную таблицу, можно задать различные параметры в модели, такие как время межгенерации объектов, атрибуты сущностей или время обслуживания.
Эта модель примера показывает, как импортировать данные из электронной таблицы в модель SimEvents ® и использовать данные для определения времени межгенерации сущностей.
Чтобы открыть эту модель, используйте этот код:
open_system('ImportDataSimEventsModel');
В модели блок Из Электронной таблицы находится внутри блока Simulink Function и получает значения от interGenerationTimes.xlsx
электронная таблица. Электронная таблица имеет пять значений - 1
, 2
, 3
, 4
, и 5
- для использования в качестве времени межгенерации между сущностями.
Чтобы вызвать myDataSpreadsheet()
функция, в блоке Entity Generator, в поле Intergeneration time action, используйте этот код:
dt = myDataSpreadsheet();
dt
- переменная, которая задает время межгенерации для сущностей. Код присваивает dt
значения вызовом функции Simulink myDataSpreadsheet()
, который получает значения из электронной таблицы.
Симулируйте модель. Наблюдайте за блоком Scope, который отображается, когда сущности генерируются и уходят из блока. Интервалы между генерацией сущностей совпадают с данными из электронной таблицы.
В SimEvents можно создать модель, которая имеет различные типы сущностей и передает атрибуты между сущностями с помощью блока Simulink Function.
Чтобы открыть эту модель, используйте этот код:
open_system('AssignEntityAttributeSimulinkFunctionModel');
В модели два блока Генератора сущностей генерируют сущности. Сущность 1 генерирует сущности с постоянным значением 2
и обслуживаются для 1
время симуляции. После завершения службы сущности приходят к блоку Simulink Function с меткой 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 Function для создания события, чтобы уведомить блок маршрутизации, когда обработка сущности завершена.
Чтобы открыть эту модель, используйте этот код:
open_system('NotifyEventSimulinkFunctionCallModel');
В модели блок Генератор сущностей генерирует сущности, которые представляют детали в объекте. Затем объекты обрабатываются блоком Entity Server. Если деталь проходит контроль качества, блок «Выходной переключатель сущности» направляет детали в Вылет. В противном случае позиции будут отправлены на дальнейшую обработку.
Чтобы создать событие уведомления после обработки сущности, в блоке Entity Server, на вкладке Event actions, в поле Service complete action, вызовите notifyEvent()
функция.
В блоке Quality Control для генерации сигнала используется блок Sine Wave. Блок Round используется, чтобы округлить значения сигналов до ближайшее целого числа, меньшего или равного этому значению. Сигнал выхода от блока Round принимает значение 1
или 2
. Сигнал преобразуется в сообщение блоком Set Event Time.
Значение данных сообщения из блока Quality Control задает, какой выходной порт будет выбран, когда сущности покинут блок Entity Output Switch. Если сообщение содержит значение 1
, выходной порт 1
выбран для отправки сущности. Если сообщение содержит значение 2
, выход 2
выбран для отправки сущности.
Симулируйте модель и наблюдайте за блоком Scope, помеченным как Parts Departed. Четыре части отходят от объекта.
Наблюдайте за блоком Scope, помеченным как Детали, отправленные на обработку, который показывает, что шесть частей отправляются на дальнейшую обработку.
Уклон | Entity Generator | Entity Queue | Entity Server | Entity Terminator | Выгода | Функция Simulink