Этот пример моделирует склад с автономными роботами для управления порядками. Цель примера - показать, как облегчить сложные модели, созданные с помощью Simulink®, Stateflow®, и SimEvents® компоненты и их коммуникация через сообщения. Дополнительные сведения о сообщениях см. в разделе Просмотр различий между сообщениями Stateflow, Событиями и данными (Stateflow).
Модель выполнения порядка имеет два основных компонента
Компонент Order Queue представляет оперативную очередь порядков с блоками из библиотеки SimEvents ®.
Компонент «Склад» представляет доставку элементов порядка автономными роботами. Он использует блоки из библиотек Simulink ® и SimEvents ® и графики Stateflow ®. Для график требуется лицензия Stateflow ®.
В этой модели оперативный порядок для нескольких элементов поступает в компонент Order Queue. Местоположения упорядоченных элементов передаются из блока Processing Order к автономным роботам в компоненте Warehouse. Три робота закреплены за тремя проходами. Робот забирает элемент из места прохода и возвращает его в исходное место для доставки. У порядок могут быть один два или три элементов. Когда все заказанные элементы доставляются роботами, порядок завершается и приходит новый порядок. До завершения порядка новые порядки в компонент Очередь порядков не поступают.
Склад имеет три прохода. В первом проходе находятся элементы одежды, во втором проходе - игрушки, а в третьем проходе - электроника. Три роботов доставки идентичны, и их динамика определяется линейной инвариантной по времени системой, которая управляется настроенным ПИД-регулятором. Например, блок Aisle1 подсистемы состоит из Robot1 подсистемы и блока Discrete-Event Chart в качестве планировщика.
Подсистема Robot1 имеет типовую обратную связь, цикл управления с динамикой робота, представленной блоком State-Space и ПИД-регулятором.
Подсистема Robot1 предназначена для отслеживания опорного сигнала из блока In1, который является out
сигнал от блока Discrete-Event Chart. Система сравнивает значение входа с выходом из блока 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 имеет три состояния. Блок Discrete-Event Chart используется для планирования переходов между этими состояниями робота.
Робот ждет в Wait
состояние, пока оно не получит yaisle координату элемента. Robot1 подсистема находится в Wait
состояние, пока время симуляции не 265
.
Робот переходит к PickUp
состояние, когда существует входящее сообщение, несущее yaisle значение элемента в блок Discrete-Event Chart. Это значение присвоено out
, который является выходом сигналом от блока Discrete-Event Chart. The out
сигнал подается в подсистему Robot1, когда входной сигнал In1, который будет отслеживаться, и робот движется к местоположению yaisle элемента. Robot1 подсистема переходит к PickUp
состояние в момент времени 265
.
Когда робот 0.1
units off yaisle, он забирает элемент. Затем робот переходит к Deliver
состояние. The out
сигнал становится 0
и робот возвращается назад к y = 0 для доставки. Во времени симуляции 290
, Robot1 подсистема 0.1
unit off y = 10 и переходы к Deliver
состояние.
Когда робот возвращается и это 0.1
в модулях от y = 0, он переходит к Wait
состояние. В окружении 320
Robot1 подсистема поставляет элемент и переходит назад к Wait
состояние.
Когда робот доставляет свой элемент, элемент отправляется для генерации пакета порядка. Это поведение представлено блоком Message Send, который генерирует сообщение внутри блока Item from Aisle Simulink Function. Затем сгенерированное сообщение входит в блок Entity Queue.
Блок Composite Entity Creator ожидает, пока все три элемента из трех блоков Entity Queue не создадут составную сущность, которая представляет порядок.
Для выполнения порядка необходимо доставить все элементы из трех проходов.
После доставки всех элементов порядок будет завершен и поступит в блок Package Ready.
Ввод порядка в блок Package Ready запускает блок Simulink Function1, чтобы сгенерировать сообщение и открыть ворота для завершения заказа.
Когда порядок прекращается, новый порядок поступает в блок Processing Order, который перезапускает процесс поставки.
Пока порядок не будет завершен, новые порядки не поступают, поэтому роботы, которые доставляют свои элементы, ждут выполнения порядка.
Блок очереди порядка - простая система постановки в очередь, состоявшая из Entity Generator, Entity Queue, Entity Server, Entity gate, и Entity Terminator блок. Дополнительные сведения о создании простой системы постановки в очередь см. в разделе Управление сущностями с помощью действий события.
Entity Generator блок случайным образом генерирует порядки. Время межгенерации берётся из экспоненциального распределения со средними 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.
Прибытие порядка в блок Entity Server активирует роботов, сообщая координаты yaisle элементов. Ввод этого MATLAB® код в поле Entry action.
LocateAisle1(entity.Aisle1); LocateAisle2(entity.Aisle2); LocateAisle3(entity.Aisle3);
Вызов LocateIsle()
функция передает yaisle координату элемента соответствующему роботу.
Порядок ожидает в блоке Entity Server, пока не откроется блок Entity Gate.
Когда все элементы поставляются, пакет порядка входит в блок Package Ready, и его запись вызывает блок Simulink Function1 через функцию ordercomplete()
. Блок Function1 Simulink генерирует сообщение, чтобы открыть ворота.
Когда ворота открываются, порядок прекращается, и новый порядок приходит к блоку Entity Server.
Проверьте пропускную способность порядка из очереди порядков.
Увеличьте время симуляции, чтобы 1000
.
Симулируйте модель и наблюдайте, что возможности отображаются 7
как общее количество выполненных порядков.
Discrete-Event Chart | Entity Generator | Entity Queue | Entity Server | Entity Terminator