В этом примере моделируется склад с автономными роботами для управления заказами. Цель примера - показать, как облегчить сложные модели, созданные с помощью компонентов Simulink ®, Stateflow ® и SimEvents ®, и их обмен сообщениями. Дополнительные сведения о сообщениях см. в разделе Просмотр различий между сообщениями Stateflow, событиями и данными (Stateflow).
Модель выполнения заказа имеет два основных компонента
Компонент Order Queue представляет оперативную очередь заказов с блоками из библиотеки SimEvents ®.
Компонент «Склад» представляет собой поставку позиций заказа автономными роботами. Он использует блоки из библиотек Simulink ® и SimEvents ® и диаграмму Stateflow ®. Для построения диаграммы требуется лицензия Stateflow ®.

В этой модели оперативный заказ для нескольких элементов поступает в компонент Очередь заказа. Местоположения заказанных товаров передаются из блока Заказ на обработку автономным роботам в компоненте Склад. Три робота приписаны к трем проходам. Робот забирает товар из места прохода и возвращает его в исходное место для доставки. Заказ может содержать одну, две или три позиции. Когда роботы доставляют все заказанные товары, заказ завершается и поступает новый заказ. До завершения заказа новые заказы в компонент Очередь заказов не поступают.
Склад имеет три прохода. Первый проход содержит предметы одежды, второй проход содержит игрушки, а третий проход содержит электронику. Три робота доставки идентичны, и их динамика управляется линейной инвариантной по времени системой, которая управляется настроенным ПИД-контроллером. Например, блок подсистемы Aisle1 состоит из подсистемы Robot1 и блока дискретной диаграммы событий в качестве планировщика.

Подсистема Robot1 имеет общий контур управления обратной связью с динамикой робота, представленной блоком State-Space и ПИД-контроллером.

Подсистема Robot1 предназначена для отслеживания опорного сигнала от блока In1, который является out сигнал от блока дискретной диаграммы событий. Система сравнивает входное значение с выходным сигналом блока State-Space, и разность между сигналами подается в блок PID Controller.
Например, если сигнал от блока In1 является константой со значением 10, начиная с начального состояния 0, выход системы сходится к 10.

По осям X и Y Robot1 перемещается следующим образом.
Первоначально Robot1 находится в координатах x1 и y1 = 0. Для захвата и доставки товара он перемещается только по оси Y, а его координата x1 остается прежней.
Каждая позиция заказа в Aisle1 имеет координату yaisle на оси Y. yaisle становится постоянным входным опорным сигналом, отслеживаемым подсистемой Robot1.
Когда Robot1 подсистема достигает yaisle, она забирает позицию заказа и автономно повторно выполняет возврат к местоположению y1 = 0 для поставки.
В области отображается пример траектории для Robot1 подсистемы, которая получает значение yaisle 10 в качестве постоянного опорного ввода во время моделирования 265. Если расстояние между местоположением робота и y = 10 равно 0.1, опорный входной сигнал 0 и робот возвращается в свое исходное местоположение для доставки.

подсистема Robot2 и подсистема Robot3 имеют одинаковую динамику и поведение при поставке изделия в подсистеме Aisle2 и подсистеме Aisle3. Их координатами x являются x2 и x3, и они также перемещаются по вертикальной оси Y.
В предыдущем примере траектории Robot1 имеет три состояния. Блок «Дискретная диаграмма событий» используется для планирования переходов между этими состояниями робота.
Робот ждет в Wait состояние, пока не получит координату элемента yaisle. Robot1 подсистема находится в Wait состояние, пока не наступит время моделирования 265.
Робот переходит к PickUp состояние, когда имеется входящее сообщение, несущее значение yaisle элемента в блок дискретной диаграммы событий. Это значение присваивается out, который является выходным сигналом от блока дискретной диаграммы событий. out сигнал подается в подсистему Robot1, так как входной сигнал In1 отслеживаться, и робот перемещается к месту расположения объекта «Yaisle». Robot1 переходы подсистемы в PickUp состояние в момент времени 265.
Когда робот 0.1 единицы вдали от яхты, она забирает товар. Затем робот переходит в Deliver состояние. out сигнал становится 0 и робот возвращается к y = 0 для доставки. Во время моделирования 290, Robot1 подсистема 0.1 от y = 10 и переходит к Deliver состояние.
Когда робот возвращается и это 0.1 единицы от y = 0, он переходит к Wait состояние. В районе 320, подсистема Robot1 доставляет элемент и переходит обратно в Wait состояние.

Когда робот доставляет свой товар, товар отправляется для создания пакета заказа. Это поведение представлено блоком «Отправить сообщение», который генерирует сообщение внутри блока «Элемент из функции симулятора Aisle». Затем сгенерированное сообщение поступает в блок Entity Queue.

Блок создания составной сущности ожидает всех трех элементов из трех блоков очереди сущностей, чтобы создать составную сущность, представляющую порядок.
Для выполнения заказа необходимо поставить все позиции из трех проходов.
После поставки всех позиций заказ завершается и поступает в блок готовности упаковки.
Ввод заказа в блок Package Ready запускает блок Simulink Function1 для генерации сообщения и открытия литника для завершения заказа.
После завершения заказа в блок Обработка заказа поступает новый заказ, который перезапускает процесс поставки.
Пока заказ не будет выполнен, новые заказы не будут получены, поэтому роботы, доставляющие свои товары, ждут завершения заказа.
Блок очереди заказов представляет собой простую систему очередей, состоящую из генератора сущностей, очереди сущностей, сервера сущностей, шлюза сущностей и блока терминаторов сущностей. Дополнительные сведения о создании простой системы очередей см. в разделе Управление сущностями с помощью действий с событиями.
Блок генератора объектов случайным образом генерирует заказы. Время межпоколенения берется из экспоненциального распределения со средним 100.
Каждая сгенерированная сущность имеет три случайно сгенерированных атрибута aisle1, aisle2, и aisle3 которые представляют координаты yaisle элементов в подсистемах Aisle1, Aisle2 и Aisle3.
entity.Aisle1 = randi([1,30]); entity.Aisle2 = randi([1,30]); entity.Aisle3 = randi([1,30]);
Предполагается, что элементы расположены вертикально между y = 1 и y = 30.
Поступление заказа в блок Сервера Сущностей активирует роботов, сообщая координаты yaisle элементов. Введите этот код MATLAB ® в поле Операция ввода.
LocateAisle1(entity.Aisle1); LocateAisle2(entity.Aisle2); LocateAisle3(entity.Aisle3);
Вызов LocateIsle() функция передает координату yaisle элемента соответствующему роботу.
Порядок ожидает в блоке Сервер сущностей, пока не откроется блок Литник сущностей (Entity Gate).
При поставке всех позиций пакет заказа входит в блок Package Ready, а его запись вызывает блок Simulink Function1 через функцию. ordercomplete(). Блок Simulink Function1 генерирует сообщение для открытия литника.
При открытии литника заказ завершается, и в блок сервера сущностей поступает новый заказ.
Проверьте пропускную способность заказа из очереди заказов.
Увеличение времени моделирования до 1000.
Моделирование модели и наблюдение за отображением области 7 как общее количество выполненных заказов.

Диаграмма дискретных событий | Генератор объектов | Очередь сущностей | Сервер сущностей | Терминатор объекта