Наблюдайте Сущности Используя simevents.SimulationObserver Класс

В этом примере показано, как использовать simevents.SimulationObserver возразите, чтобы считать отъезды сущности и получить исходные метки времени.

Используйте simevents.SimulationObserver объект наблюдать или визуализировать сущности и реализовать аниматоров, чтобы отладить симуляции модели. Для получения дополнительной информации смотрите Использование Класс SimulationObserver, чтобы Контролировать Модель SimEvents.

В этой модели, simevents.SimulationObserver объект используется, чтобы получить количество сущностей, отбывая из блока или набора блоков в модели и добавить метку времени к их отъездам. Модель имеет два блока Терминатора Генератора и Сущности Сущности и Блок Сервера Сущности. Блоки Scope отображают Количество сущностей, из которых отбывают, d статистика для блоков Сервера Генератора и Сущности Сущности.

Создайте The Observer

Откройте новый скрипт и инициируйте simevents.SimulationObserver объект этим кодом.

classdef myObserverPreexit < simevents.SimulationObserver
    % Add the observer properties.
    properties
    Model
    % Initialize the property count.
    count
    end
properties (Constant, Access=private)
    increment = 1;
end
methods
     % Observe any model by incorporating its name to MyObserverPreexit.
     function this = myObserverPreexit(Model)
         % Input model name to the simulation observer.
         this@simevents.SimulationObserver(Model);
         this.Model = Model;
     end
     % Initialize the count in the simulation start.
     function simStarted(this)
         this.count = 0;
     end
     % Specify list of blocks to be notified of entity entry and exit
     % events.
     function Block = getBlocksToNotify(this)
         Block = this.getAllBlockWithStorages();
     end
     function preExit(this,evSrc,Data)
         % Get the names of all storage blocks that the entities depart.
         % This returns the block with its path.
         Block = Data.Block.BlockPath;
         % Remove the path to display only the
         % block name.
         Block = regexprep(Block,'ObserverPreexitModel/' ,'');
         % Initialize the blocks to observe.
         BlockName = 'Entity Server';
         % If the block that entity exits contains the block name
         % acquire data for exit time and block name.
         if contains(Block, BlockName)
             % Get time for entity preexit from event calendar.
             evCal = this.getEventCalendars;
             Time = evCal(1).TimeNow;
             % Increase the count for departing entities.
             this.count = this.count + this.increment;
             myInfo = [' At time ',num2str(Time), ...
             ' an entity departs ', Block, ', Total entity count is ', ...
             num2str(this.count)];
             disp(myInfo);
             end
         end
     end
 end

Сохраните файл как myObserverPreexit.m файл.

Контролируйте модель

Включите объекту наблюдателя контролировать ObserverPreexitModel модель.

obj  = myObserverPreexit('ObserverPreexitModel');

Наблюдатель контролирует блок Entity Server, который определяется BlockName параметр в файле наблюдателя myObserverPreexit.m.

  • Симулируйте модель. Нажмите View Diagnostics на окне модели и заметьте, что количество сущностей, отбывая из блока Entity Server и отъезда устанавливает метку времени.

  • Для валидации наблюдайте блок Scope, который отображает Количество сущностей, из которых отбывают, d статистическая величина для блока Entity Server.

Контролируйте несколько блоков в модели

Используйте того же наблюдателя, чтобы контролировать отклонения сущности от всех блоков Генератора Сущности в вашей модели.

  • Измените BlockName параметр в preExit метод к 'Entity Generator'. Блоки Генератора сущности в модели помечены Entity Generator1 и Entity Generator2.

function preExit(this,evSrc,Data)
    % Get the names of all storage blocks that the entities depart.
    % returns the block with its path.
    Block = Data.Block.BlockPath;
    % Remove the path to display only the block name
    Block = regexprep(Block,'ObserverPreexitModel/' ,'');
    % Initialize the common Entity Generator phrase
    BlockName = 'Entity Generator';
    % If the block that the entity exits contains the block name
    % acquire the exit time and the block name.
    if contains(Block, BlockName)
        % Get the time of entity preexit from the event calendar.
        evCal = this.getEventCalendars;
        Time = evCal(1).TimeNow;
        % Increase the count of departing entities.
        this.count = this.count + this.increment;
         myInfo = [' At time ',num2str(Time), ...
             ' an entity departs ', Block, ', Total entity count is ', ...
         num2str(this.count)];
         disp(myInfo);
    end
end
  • Включите объекту наблюдателя контролировать ObserverPreexitModel модель.

obj  = myObserverPreexit('ObserverPreexitModel');
  • Симулируйте модель. Наблюдайте Диагностическое Средство просмотра, которое отображает информацию для 15 сущности, вылетающие от обоих блоков Генератора Сущности.

  • Для валидации заметьте, что блоки Scope1 и Scope2 отображают Количество сущностей, из которых отбывают, d статистическая величина для Сущности Generator1 и Сущности Generator2.

Наблюдайте тот 4 сущности отбывают из Сущности Generator1.

Кроме того, 11 сущности отбывают из Сущности Generator2. Всего, 15 сущности вылетели от блоков Генератора Сущности в модели.

Смотрите также

| | | |

Похожие темы