Этот пример показывает, как создать пользовательский исходный блок, который генерирует сущности и управлять дискретными состояниями при реализации дискретной системы событий 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 является скаляром. Тип данных является double и принимает действительные значения.
Дискретным состоянием value является 1-by-12 вектор. Тип данных является double и принимает действительные значения.
Сгенерируйте материалы с периодом межгенерации, приоритетом и данными, заданными:
obj.period параметра, объявленный как общедоступный параметр, который может быть изменен от диалогового окна блока.
Параметр значения obj.priority, заданные сигналом от входного порта.
obj.value параметра, 1-by-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))
Щелкните правой кнопкой по пути сущности от пользовательского Генератора Сущности до Терминатора Сущности и выберите 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