Триггер компонентов Simulink с дискретными событиями в SimEvents

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

Это простая система организации очередей с дискретными событиями, созданная с помощью блоков Entity Generator, Entity Queue, Entity Server и Entity Terminator. Чтобы узнать, как создать эту модель, см. Раздел «Создание дискретно-событийной модели».

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

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

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

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

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

Сущности временной метки, использующие функциональный блок Simulink

Эта модель показывает, как отслеживать время для сущностей, протекающих через вашу систему. Блок 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, помеченным как Детали, отправленные на обработку, который показывает, что шесть частей отправляются на дальнейшую обработку.

См. также

| | | | | |

Похожие темы