Элемент разметки пространства Стеллаж графически задает стеллаж, используемый на складах и в зонах хранения.
Элемент Стеллаж может иметь одну из следующих трех конфигураций:
Один проход, один стеллаж | |
Два прохода, один стеллаж | |
Один проход, два стеллажа |
Чтобы создать сложную систему стеллажей, используйте несколько фигур стеллажа, затем добавьте блок RackSystem из Библиотеки Моделирования Процессов и настройте его.
Элемент Стеллаж создает набор узлов и сегментов вдоль заданного прохода и управляет агентами, которые хранятся по обе стороны от прохода и даже на разных уровнях.
Параметр Количество ячеек в глубину определяет, сколько узлов сети будет создано на каждой стороне прохода; каждый узел фактически является проекцией набора вертикально расположенных ячеек (их количество задается параметром Количество уровней). Следовательно, такой объект с 60 местами в ряду и 4 уровнями будет иметь 60 * 4 * 2 = 480 ячеек, где коэффициент 2 означает, что по каждую сторону от прохода будет создано по стеллажу. У каждой ячейки есть координаты: ряд (0..1), место (0..npositions-1) и уровень (0..nlevels-1).
Объект создает сегмент сети, идущий по центральной оси прохода и соединяющий узел у начала прохода с узлом у конца прохода. Между каждой парой расположенных друг напротив друга узлов — проекций ячеек — элемент Стеллаж создает сегмент, соединяющий эти узлы с маленьким узлом, создаваемым на ранее созданном сегменте сети, идущем вдоль прохода, так что все эти узлы подсоединяются к сети.
Ширина узлов, соответствующих ячейкам, вычисляется автоматически как длина прохода, поделенная на количество мест в ряду. Глубина ячейки задается пользователем. Глубина соответствующего ячейке узла сети, топология проходов и нарисованных пользователем элементов сети должны согласовываться друг с другом, то есть, например, эти элементы не должны пересекаться.
Элемент Стеллаж может проводить с ячейкой следующие операции:
- помещение агента в ячейку
- извлечение агента из ячейки
- резервирование ячейки
- освобождение ячейки (отмена резервирования)
Элемент Стеллаж предоставляет набор методов, позволяющих получить информацию о его состоянии: вместимость, количество занятых, зарезервированных и свободных ячеек, статистика использования и т.д. Вы можете осуществлять поиск агента в хранилище, определять ближайшую свободную к началу или концу прохода ячейку, определять, какой узел сети соответствует ячейке и т.д. Поскольку у вас есть доступ к узлам сети, вы можете отражать состояние соответствующих ячеек (занята, зарезервирована, свободна) с помощью цветов.
Обычно для агента, который должен быть помещен на хранение, выполняется следующий алгоритм:
- Поиск свободной ячейки
- Резервирование этой ячейки
- Перемещение агента (возможно, с помощью каких-то ресурсов) в тот узел сети, который соответствует данной ячейке
- Помещение агента в ячейку
Обратите внимание, что элемент Стеллаж не запоминает, какой именно агент зарезервировал ячейку, так что проверка того, тот ли самый агент, что резервировал ячейку, был туда впоследствии помещен, входит в компетенцию пользователя.
Для агента, который должен быть извлечен из ячейки, в свою очередь, выполняется следующий алгоритм:
- Нахождение ячейки, в которой хранится агент (и соответствующего узла сети)
- Возможно, вызов ресурсов к этому узлу
- Извлечение агента из ячейки
- Перемещение агента в заданный узел сети
Самым простым способом является использование двух объектов RackStore и RackPick, специально разработанных, чтобы выполнять самые частые операции со стеллажами.
Стеллаж может служить препятствием для пешеходов и транспортеров, перемещающихся в режиме произвольной навигации.
Элемент Стеллаж позволяет пользователю задавать любые действия, которые он хочет выполнить в значимые моменты работы объекта (при помещении агента в ячейку, при резервировании ячейки и т.д.).
Если в вашей модели есть некая общая зона хранения, состоящая из набора стеллажей, используемых в сходной манере, имеет смысл задать ее с помощью элемента RackSystem, предоставляющего централизованный доступ и управление этими стеллажами.
Вы можете указать, в какую ячейку поместить поддон. Каждая ячейка имеет три координаты: ряд (0..1), позиция (0..n позиций) и уровень (0..n уровней). Таким образом, вы можете управлять всеми уровнями и позициями.
Чтобы добавить стеллаж
- Перетащите элемент Стеллаж из палитры Разметка пространства в графический редактор.
- Соедините стеллаж с сетью (путь сети должен совпасть с проходом стеллажа). Путь будет использоваться рабочими и автопогрузчиками, чтобы подойти к ячейкам стеллажа.
- Задайте свойства стеллажа: выберите Тип: Один стеллаж, один проход; Один стеллаж, два прохода или Два стеллажа, один проход.
- Выберите Количество уровней, Количество ячеек в глубину, Количество ячеек.
- В секции свойств Местоположение и размер задайте Длину, Глубину стеллажа и Ширину прохода.
- После задания свойств стеллажа удостоверьтесь, что он по-прежнему соединен с сетью. Выберите стеллаж в графическом редакторе. Если стеллаж подсоединен верно, проход будет выделен зеленым цветом. В случае если это не так, переместите стеллаж относительно пути, чтобы путь проходил по центру прохода.
- Основные свойства
-
Имя — Имя элемента. Имя используется для идентификации элемента и доступа к нему из кода.
Исключить — Если опция выбрана, то элемент будет исключен из модели.
Отображается на верхнем агенте — Если опция выбрана, то стеллаж будет виден на презентации того агента, в который будет вложен данный элемент.
Блокировать — Если опция выбрана, то стеллаж будет считаться заблокированным и не будет реагировать на щелчки мыши. Таким образом, вы не сможете выбрать стеллаж в графическом редакторе до тех пор, пока не снимете с него блокировку. Обычно это требуется, когда вы хотите исключить возможность случайного редактирования фигур стеллажа при рисовании других фигур поверх него.
Видимость — Если опция выбрана, стеллаж будет отображаться на анимации во время исполнения модели.
Является препятствием — Если опция выбрана, стеллаж будет служить препятствием для пешеходов и транспортеров, перемещающихся в режиме произвольной навигации.
Тип — Комбинация проходов и стеллажей: Один проход, один стеллаж; Два прохода, один стеллаж; Один проход, два стеллажа.
Количество ячеек — Выберите, как нужно рассчитывать количество ячеек: Задано явно или Вычисляется на основании ширины ячейки.
Количество ячеек — [Виден, если Количество ячеек: Задано явно] Количество ячеек на каждый ряд, расположенных на одном уровне.
Ширина ячейки — [Виден, если Количество ячеек: Вычисляется на основании ширины ячейки] Фиксированная ширина ячейки.
Кол-во ячеек в глубину — Количество позиций в глубине каждой ячейки.
Количество уровней — Количество (вертикальных) уровней стеллажа.
Высота уровня — Высота (вертикальных) уровней стеллажа.
- Внешний вид
-
Цвет заливки — Задает цвет заливки фигуры. Если вы не хотите, чтобы фигура была закрашена, выберите Нет заливки.
Цвет линии — Задает цвет линии. Если вы не хотите, чтобы линия контура была видна, выберите Нет линии.
Рисовать стойки в 3D — Снимите флажок с этой опции, если не хотите рисовать стойки стеллажа в 3D. В таком случае будут отрисованы только "полки".
Кол-во ячеек между стойками — Здесь вы можете указать количество ячеек стеллажа между стойками, если стойки рисуются в 3D. Это свойство никак не влияет на отрисовку стеллажа в 2D анимации.
- Местоположение и размер
-
Уровень — Уровень, на котором расположен этот элемент.
X — X-координата стеллажа (а именно, его левый верхний угол).
Y — Y-координата стеллажа (а именно, его левый верхний угол).
Z — [Доступно, если опция Отображать в: Только в 3D выбрана] Z-координата стеллажа, в метрах.
Длина — Длина стеллажа.
Глубина стеллажа — Глубина стеллажа.
Ширина прохода — Ширина прохода.
Поворот — Угол поворота стеллажа в плоскости XY в градусах.
- Специфические
-
Отображать в — Здесь вы можете выбрать, будет ли фигура отображаться В 2D и в 3D, Только в 2D или Только в 3D.
Отображать имя — Если опция выбрана, то имя фигуры будет отображаться в графическом редакторе.
- Конфигурация стеллажа
-
Функция Описание PalletRackType getType() Возвращает тип этого стеллажа. setType(PalletRackType type) Задает тип этого стеллажа.
type — тип стеллажаdouble getCellWidth() Возвращает текущую ширину ячейки. setCellWidth(double cellWidth) Задает ширину ячейки равной параметру.
cellWidth — ширина ячейкиdouble getDepth() Возвращает глубину стеллажа. double getDepthRight() Возвращает глубину правого стеллажа. setDepth(double depth) Задает глубину стеллажа равной параметру.
depth — глубина стеллажаsetDepthRight(double depthR) Задает глубину правого стеллажа равной параметру.
depthR — глубина правого стеллажаdouble getAisleDepth() Возвращает глубину прохода. double getAisleRightDepth() Возвращает глубину правого прохода. setAisleDepth(double aisleDepth) Задает глубину прохода.
aisleDepth — глубина проходаsetAisleRightDepth(double aisleRDepth) Задает глубину правого прохода.
aisleRDepth — глубина правого проходаdouble getLength() Возвращает длину стеллажа. double getLevelHeight() Возвращает высоту уровня. setLength(double length) Задает длину стеллажа.
length — длина стеллажаsetLevelHeight(double levelHeight) Задает высоту уровня стеллажа.
levelHeight — высота уровняint numberOfDeepPositions() Возвращает количество мест в глубину ячейки. setNumberOfDeepPositions(int nDeep) Задает количество мест в глубину ячейки равной параметру.
nDeep — количество мест в глубину ячейкиint numberOfLevels() Возвращает количество уровней в стеллаже. setNumberOfLevels(int nLevels) Задает количество уровней в стеллаже.
nLevels — количество уровней в стеллажеint numberOfPositions() Возвращает количество мест (ячеек) на одной полке стеллажа. Общее количество мест можно посчитать, умножив это количество на количество мест в глубину ячейки и на количество уровней и на два, если у этого объекта два стеллажа. void setNumberOfPositions(int nPositions) Задает количество мест (ячеек) на одной полке стеллажа.
nPositions — количество ячеек на одной полке стеллажаint numberOfRows() Возвращает количество стеллажей, 1 или 2.
- Уровень
-
Функция Описание Level getLevel() Возвращает уровень моделируемого пространства, на котором расположен стеллаж.
- Препятствие
-
Функция Описание boolean isObstacle() Возвращает true, если этот стеллаж является препятствием для пешеходов и транспортеров, перемещающихся в режиме произвольной навигации. В противном случае возвращает false. void setObstacle() Задает этот стеллаж в качестве препятствия для пешеходов и транспортеров, перемещающихся в режиме произвольной навигации.
isObstacle — если true, стеллаж будет считаться препятствием для пешеходов и транспортеров. В противном случае, стеллаж не будет считаться препятствием
- Работа с содержимым стеллажа
-
Функция Описание boolean hasSpace() Проверяет, есть ли в хранилище свободное место, то есть, имеются ли незанятые или не зарезервированные ячейки. Возвращает true, если имеется достаточно места для хотя бы одного агента. boolean isFree(int row, int position, int level) Проверяет, свободна ли заданная ячейка [row,position,level], то есть, не занята и не зарезервирована. Если ячейка свободна, то возвращает true
row — номер стеллажа (0 или 1)
position — положение в ряду (0, 1, ...)
level — уровень (0 - самый низкий).int nFree(int row, int position, int level) Проверяет, свободна ли заданная ячейка [row,position,level], то есть, не занята и не зарезервирована, и возвращает количество свободных мест в глубину ячейки.
row — номер стеллажа (0 или 1)
position — положение в ряду (0, 1, ...)
level — уровень (0 - самый низкий)reserve(int row, int position, int level, boolean leftAisle) Помечает заданную ячейку как зарезервированную [row,position,level]. Ячейка должна быть свободна.
row — номер стеллажа (0 или 1)
position — положение в ряду (0, 1, ...)
level — уровень (0 - самый низкий)
leftAisle — [для стеллажей с двумя проходами]: из какого прохода должна быть резервируемая ячейкаint reserved() Возвращает количество зарезервированных ячеек в стеллаже (стеллажах). int nReserved(int row, int position, int level) Проверяет, зарезервирована ли заданная ячейка [row,position,level]. Возвращает количество зарезервированных ячеек (может быть > 1 для стеллажей с "глубиной").
row — номер стеллажа (0 или 1)
position — положение в ряду (0, 1, ...)
level — уровень (0 - самый низкий)release(int row, int position, int level, boolean leftAisle) Освобождает указанную зарезервированную ячейку [row,position,level]. Ячейка должна быть зарезервирована.
row — номер стеллажа (0 или 1)
position — положение в ряду (0, 1, ...)
level — уровень (0 - самый низкий)
leftAisle — [для стеллажей с двумя проходами]: из какого прохода должна быть резервируемая ячейкаput(int row, int position, int level, boolean leftAisle, Agent agent) Помещает агента в ячейку с указанными координатами [row,position,level]. Если ячейка занята, выдает ошибку. Не проверяет, зарезервирована ли ячейка.
row — номер стеллажа (0 или 1)
position — положение в ряду (0, 1, ...)
level — уровень (0 - самый низкий)
leftAisle — [для стеллажей с двумя проходами]: из какого прохода должна быть резервируемая ячейка
agent — агентAgent get(int row, int position, int level, int deepPosition) Возвращает агента, хранящегося в ячейке с заданными координатами [ряд row, место position, уровень level] (или null, если эта ячейка зарезервирована или свободна).
row — номер стеллажа (0 или 1)
position — положение в ряду (0, 1, ...)
level — уровень (0 - самый низкий)
deepPosition — [если у ячейки есть глубина] номер (0, 1, ..), при счете от прохода (или от левого прохода, если возле этого ряда есть несколько проходов).PalletRackLocation getCellOf(Agent agent) Возвращает координаты ячейки с заданным агентом [row, position, level], или null, если агент здесь не хранится.
agent — агентPalletRackLocation getFreeCell(boolean infront) Возвращает массив координат [ряд row, место position, уровень level] свободной ячейки, ближайшей к началу или концу зоны хранения, в зависимости от значения параметра infront. Если зона хранения переполнена, возвращает null.
infront — если true, возвращаемый объект будет иметь самое маленькое из доступных местоположенийAgent randomAgent() Возвращает случайного агента в зоне хранения или null, если зона хранения пуста. Agent remove(Agent agent) Извлекает агента agent из зоны хранения и возвращает его. Если такого агента в зоне хранения нет, возвращает null.
agent — извлекаемый агентAgent removeFromCell(int row, int position, int level, boolean leftAisle) Извлекает агента из заданной ячейки [ряд row, место position, уровень level] и возвращает его.
row — номер стеллажа (0 или 1)
position — положение в ряду (0, 1, ...)
level — уровень (0 - самый низкий)
leftAisle — [для стеллажей с двумя проходами]: из какого прохода должна быть резервируемая ячейкаAgent removeFromCell(PalletRackLocation location, boolean leftAisle) Извлекает агента из заданного стеллажа [ряд row, место position, уровень level] и возвращает его.
location — [ряд row, место position, уровень level]
leftAisle — [для стеллажей с двумя проходами]: из какого прохода должна быть резервируемая ячейкаAgent getByIndex(int index) Возвращает находящегося в стеллаже агента с заданным номером. Порядок хранения агентов - внутренний, и может меняться, когда агенты добавляются или удаляются. Если номер больше чем количество агентов -1, возвращает null.
index — номер.int capacity() Возвращает вместимость объекта (все уровни и стеллажи, если имеется два стеллажа), то есть (1 or 2) * number of positions along row * number of deep positions * number of levels. boolean contains(Agent agent) Возвращает true, если стеллажи содержат данного агента.
agent — агент.int size() Возвращает количество агентов, находящихся в стеллажах в текущий момент. resetStats() Удаляет статистику, собранную объектом к текущему моменту времени.
- Специфические
-
Функция Описание double getNearestPoint(double x, double y, double z, Point output) Рассчитывает расстояние (с помощью объекта output) точку в этом стеллаже, ближайшую к заданным координатам (x, y, z). Возвращает квадрат расстояния до точки. x — x-координата точки.
y — y-координата точки.
z — z-координата точки
output — точка выходаdouble getNearestPoint(double x, double y, Point output) Рассчитывает расстояние (с помощью объекта output) точку в этом стеллаже, ближайшую к заданным координатам (x, y). Возвращает квадрат расстояния до точки. Все расчеты производятся в горизонтальной проекции (z-координата не используется, как если бы все значения z равнялись нулю).
x — x-координата точки.
y — y-координата точки.
output — точка выхода. Обратите внимание, что output.z остается неизмененнымPosition getPositionAtCell(int row, int position, int level, int deepPosition, double offset, double depth, boolean leftAisle, Position out) Возвращает местоположение в заданной ячейке. Возвращает заданный объект output (если он не null) или новое местоположение с координатами и углом поворота.
row — номер стеллажа (0 или 1). Используется в элементах с двумя стеллажами (0 = левый ряд, 1 = правый ряд). Если имеется только один стеллаж, то его номер - 0
position — положение в ряду (0, 1, ...)
level — уровень (0, 1, ...)
offset — смещение по краю ряда
depth — глубина ячеек (перпендикулярно краю ряда)
out — местоположение агента (может быть null).
deepPosition — [если у ячеек есть глубина] номер (0, 1, ..), отсчет начинается от прохода (или от левого прохода, если возле этого стеллажа несколько проходов)
leftAisle — [для стеллажей с двумя проходами, требуется для ориентации при расчете] куда "смотрит" агент: был ли он помещен с левого прохода или с правогоPosition getPositionAtCellEntry(int row, int position, int level, boolean leftAisle, Position out) Возвращает местоположение в заданной ячейке. Возвращает: заданный объект output (если он не null) или новое местоположение с координатами и углом поворота. row — номер стеллажа (0 или 1). Используется в элементах с двумя стеллажами (0 = левый ряд, 1 = правый ряд). Если имеется только один стеллаж, то его номер - 0
position — положение в ряду (0, 1, ...)
level — уровень (0, 1, ...)
offset — смещение по краю ряда
depth — глубина ячеек (перпендикулярно краю ряда)
out — местоположение агента (может быть null)Position getPositionInAisle(int row, int position, boolean leftAisle, Position out) Возвращает местоположение в заданном проходе в заданной ячейке. Возвращает: заданный объект output (если он не null) или новое местоположение с координатами и углом поворота.
row — номер стеллажа (0 или 1). Используется в элементах с двумя стеллажами (0 = левый ряд, 1 = правый ряд). Если имеется только один стеллаж, то его номер - 0
position — положение в ряду (0, 1, ...)
out — местоположение агента (может быть null).
leftAisle — [для стеллажей с двумя проходами, требуется для ориентации при расчете] куда "смотрит" агент: был ли он помещен с левого прохода или с правогоdouble getRotation() Возвращает угол поворота стеллажа в радианах, по часовой стрелке. setRotation(double rotation) Задает поворот стеллажа. rotation — угол поворота стеллажа в радианах, по часовой стрелке
- Удаление
-
Функция Описание void remove() Удаляет стеллаж из презентации. Если стеллаж не является частью презентации, функция не выполняет ничего. Обратите внимание, что удаление из презентации не обязательно подразумевает удаление из логики модели, поскольку логические сети и маршруты могли быть заданы еще до удаления элемента и не исчезают.
-
Как мы можем улучшить эту статью?
-