Этот пример показывает, как создать пользовательский исходный блок, который генерирует сущности и управлять дискретными состояниями при реализации дискретной системы событий 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