В этом примере показано, как создать пользовательский исходный блок, который генерирует сущности и управлять дискретными состояниями при реализации дискретной системы событий object™ методы.
Предположим, что вы управляете средством, которое производит сырье с фиксируемой детерминированной ставкой. Материалы содержат 12-разрядный штрихкод для управления запасом и приоритетные значения для установления приоритетов порядка. Чтобы представлять это поведение, этот пример показывает, как сгенерировать пользовательский блок системы хранения сущности, сгенерирован с одним входным портом сигнала, одним выходным портом сущности и одним запоминающим элементом. Блок генерирует сущности с отличными приоритетными значениями. Сущности несут данные и отбывают из блока из его выходного порта. Приоритетные значения сущности получены от значений входящего сигнала.
Чтобы открыть модель и наблюдать поведение пользовательского блока, смотрите CustomEntityGeneratorBlockExample.

Блок задан как пользовательский блок генератора сущности, который генерирует сущности с заданными периодами межгенерации. Сгенерированные сущности несут данные, и их приоритетные значения определяются значениями входного сигнала.
См. код, чтобы создать пользовательский блок генератора сущности
Задайте время между существенными поколениями.
% Nontunable properties properties (Nontunable) % Generation period period = 1; end
Инициализируйте переменные дискретного состояния.
function resetImpl(obj) % Initialize / reset discrete-state properties. obj.priority = 10; obj.value = 1:12; end
Переменная priority представляет существенный приоритет и value представляет данные о штрихкоде, которые несут материалы.
Инициализируйте выход для исходного блока.
function out = getOutputSizeImpl(obj) % Return size for output port. out = [1 12]; end function out = getOutputDataTypeImpl(obj) % Return data type for output port. out = "double"; end function out = isOutputComplexImpl(obj) % Return true for output port with complex data. out = false; end
Первая функция объявляет выходной размер.
Вторая функция объявляет, что типом данных выходного порта является double.
Третья функция объявляет false для выходного порта, потому что это не поддерживает комплексные данные.
Объявите размер, данные и сложность дискретных состояний.
function [sz,dt,cp] = getDiscreteStateSpecificationImpl(obj,name) % Return size, data type, and complexity of discrete-state. switch name case 'priority' sz = [1 1]; case 'value' sz = [1 12]; end dt = "double"; cp = false; end
Дискретное состояние priority isscalar. Типом данных является double и принимает действительные значения.
Дискретное состояние value 1- 12 вектор. Типом данных является double и принимает действительные значения.
Сгенерируйте материалы с периодом межгенерации, приоритетом и данными, заданными:
Параметр obj.period, объявленный как общедоступный параметр, который может быть изменен от диалогового окна блока.
Параметр obj.priority значения, заданные сигналом от входного порта.
Параметр obj.value, 1- 12 вектор, который представляет данные, которые несут сущности.
function events = setupEvents(obj) % Set up entity generation event for storage 1 at simulation start. events = obj.eventGenerate(1,'mygen',obj.period,obj.priority); end function [entity,events] = generate(obj,storage,entity,tag,in1) % Specify event actions when entity is generated in storage. entity.data = obj.value; % The value from the signal is assigned to the entity priority. obj.priority = in1; events = [obj.eventForward('output',1,0) ... obj.eventGenerate(1,'mygen',obj.period,obj.priority)]; end
Сохраните .m файл как CustomEntityStorageBlockGeneration. Соедините Системный объект с моделью SimEvents® при помощи блока MATLAB Discrete-Event System. Для получения дополнительной информации о соединении, смотрите, Создают Пользовательские блоки Используя Блок Дискретной Системы событий MATLAB.
Создайте модель SimEvents, которая включает блок MATLAB Discrete-Event System, блок Ramp и блок Entity Terminator. Соедините блоки как показано в модели.

В блоке Ramp, набор Slope к 5 и Initial output к 10.
Определите объем сигнала между блоком Ramp и блоком MATLAB Discrete-Event System.
В блоке Entity Terminator, чтобы отобразить приоритетные значения сущностей, прибывающих в блок, в поле Entry action, вводят этот код.
coder.extrinsic('fprintf'); fprintf('Priority: %d\n', double(entitySys.priority))
Щелкните правой кнопкой по пути сущности от пользовательского Entity Generator до Entity Terminator и выберите Log Selected Signals.
Симулируйте модель.
Наблюдайте выходной сигнал блока Ramp. Например, выходное значение становится 15, 20, 25, и 30 для времени симуляции 1, 2, 3, и 4, соответственно.

Инспектор Данных моделирования показывает, что сущности передаются блоку Entity Terminator с данными размера 1 12.

Диагностическое Средство просмотра показывает entitySys.priority значения. Приоритетные значения получены от значения сигналов пандуса во времена генерации сущности 1, 2,3, 4, 5, 6, 7, 8, 9, и 10.

entry | generate | getEntityPortsImpl | getEntityStorageImpl | matlab.DiscreteEventSystem | matlab.System