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

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

Чтобы открыть модель, используйте следующий код:
open_system('TimeStampEntitiesUsingSimulinkFunctionModel');
В этой модели интервалы между поколениями объектов генерируются на основе равномерного распределения в открытом интервале. (0,1). Объекты имеют четыре атрибута, а все атрибуты имеют начальное значение 0:

Data представляет данные, которые несут объекты.
TimeStampGeneration сохраняет время формирования объекта.
TimeStampServiceComplete сохраняет время завершения службы объекта.
TotalTime - время между созданием объекта и его обслуживанием.
В блоке Simulink Function блок Digital Clock отмечает время генерации объекта.

Можно установить отметку времени при создании сущности путем вызова timeStamp() в функции Simulink из блока «Генератор объектов».

Для вызова функции в блоке Генератор сущностей на вкладке Действия с событиями в поле Генерировать используйте следующий код:
entity.TimeStampGeneration = timeStamp();
Код вызывает timeStamp() и присваивает значение из блока цифровых часов TimeStampGeneration при создании сущности.
Аналогично, чтобы отметить время завершения службы и вычислить разницу во времени между созданием сущности и службой, откройте блок Сервер сущностей и на вкладке Действия с событиями нажмите кнопку Служба завершена. Введите этот код.
% 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 сущности. Длительность между созданием объекта и службой увеличивается, поскольку объекты ожидают в блоке очереди объектов своего хода обслуживания.

Увеличение времени моделирования до 1000 и наблюдать, что entity.TotalTime сходится приблизительно к 26.
TotalTime Атрибут компонента SimulinkПредположим, что вы хотите пройти entity.TotalTime значения для компонента Simulink ®. В этой модели показано, как передать значение атрибута блоку Simulink Function при поступлении объекта в блок Entity Terminator.

Чтобы открыть эту модель, используйте следующий код:
open_system('GetEntityAttributesSimulinkFunctionModel');
Для выполнения этого действия откройте блок Терминатор сущности (Entity Terminator), на вкладке Действия с событиями (Event actions) щелкните Ввод (Entry) и вызовите getAttribute(entity.TotalTime) функция.
Блок «Получить атрибуты сущности» принимает entity.Totaltime в качестве входного аргумента и использует блок усиления для усиления его значений путем умножения их на 2.

Моделирование модели. Обратите внимание на блок Scope, отображающий усиленные значения атрибутов.

Предположим, что требуется включить данные из электронной таблицы в моделирование. С помощью электронной таблицы можно задать различные параметры в модели, такие как время между поколениями объектов, атрибуты объектов или время обслуживания.
В этом примере модели показано, как импортировать данные из электронной таблицы в модель SimEvents ® и использовать данные для указания времени взаимодействия сущностей.

Чтобы открыть эту модель, используйте следующий код:
open_system('ImportDataSimEventsModel');
В модели блок из электронной таблицы находится внутри блока функции Simulink и получает значения из interGenerationTimes.xlsx электронная таблица. Электронная таблица имеет пять значений - 1, 2, 3, 4, и 5 - использоваться в качестве времени межпоколенческого взаимодействия.

Для вызова myDataSpreadsheet() в блоке «Генератор сущностей» в поле действия «Время межгенерации» используйте следующий код:
dt = myDataSpreadsheet();
dt - переменная, определяющая время между поколениями для сущностей. Код присваивает dt значения путем вызова функции Simulink myDataSpreadsheet(), которая получает значения из электронной таблицы.
Моделирование модели. Обратите внимание на блок «Область», который отображается при создании объектов, и удалите блок. Интервалы между формированием объектов совпадают с интервалами между данными из электронной таблицы.

В SimEvents можно создать модель с различными типами объектов и передать атрибуты между объектами с помощью блока функции Simulink.

Чтобы открыть эту модель, используйте следующий код:
open_system('AssignEntityAttributeSimulinkFunctionModel');
В модели два блока генератора объектов генерируют объекты. Сущность 1 генерирует объекты с постоянным значением 2 и обслуживаются для 1 время моделирования. После завершения обслуживания объекты прибывают в блок функции Simulink с именем Assign Attribute 1.
В разделе Назначить атрибут 1 объекты принимаются блоком получения с внутренней очередью размера 16. Блок приема преобразует данные объекта в значения сигнала.

Аналогично, объект 2 генерирует объекты, которые несут данные значения 2 и обслуживаются для 5 время моделирования. После завершения обслуживания объекты прибывают в пункт Назначить атрибут 2.
Данные объекта передаются в другой блок генератора объектов с именем «Новый объект». Блок Создать сущность (New Entity) генерирует объекты, несущие два атрибута, data1 и data2, значения которых получены вызовом setAttribute1() и setAttribute2()соответственно.
entity.data1 = setAttribute1(); entity.data2 = setAttribute2();
Смоделировать модель и открыть инспектор данных. Обратите внимание, что значения data1 и data2 значения новой сущности: 0 до времени моделирования 2. Это связано с тем, что объекты обслуживаются, и между ними нет передачи атрибутов. В момент времени 2, data1 является 2, которое является значением, передаваемым setAttribute1(). В момент времени 6, data2 начинает получать значения из setAttribute2(). Эта задержка вызвана разницей во времени обслуживания объектов.

В этой модели показано, как использовать функциональный блок Simulink для создания события, уведомляющего блок маршрутизации о завершении обработки объекта.

Чтобы открыть эту модель, используйте следующий код:
open_system('NotifyEventSimulinkFunctionCallModel');
В модели блок генератора объектов создает объекты, которые представляют детали в объекте. Затем объекты обрабатываются блоком сервера сущностей. Если деталь проходит контроль качества, блок Переключатель вывода объекта (Entity Output Switch) направляет детали в пункт Вылет (Department). В противном случае позиции отправляются на дальнейшую обработку.
Чтобы создать событие уведомления после обработки сущности, в блоке Сервер сущности на вкладке Действия события в поле Действие завершения службы вызовите notifyEvent() функция.
В блоке контроля качества для генерации сигнала используется блок синусоидальной волны. Блок Round используется для округления значений сигнала до ближайшего целого числа, меньшего или равного этому значению. Выходной сигнал из блока скругления принимает значение 1 или 2. Сигнал преобразуется в сообщение блоком Set Event Time.

Значение данных сообщения из блока контроля качества определяет, какой выходной порт выбирается при выходе объектов из блока коммутатора вывода объектов. Если сообщение несет значение 1, выходной порт 1 выбирается для отправления объекта. Если сообщение несет значение 2, вывод 2 выбирается для отправления объекта.
Смоделировать модель и наблюдать за блоком «Область действия» с меткой «Удаляемые детали». Четыре части отходят от объекта.

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

Уклон | Генератор объектов | Очередь сущностей | Сервер сущностей | Терминатор объекта | Выгода | Функция симулятора