Стеллаж


Элемент разметки пространства Стеллаж графически задает стеллаж, используемый на складах и в зонах хранения.

Элемент Стеллаж может иметь одну из следующих трех конфигураций:

Один проход, один стеллаж
Два прохода, один стеллаж
Один проход, два стеллажа

    Чтобы создать сложную систему стеллажей, используйте несколько фигур стеллажа, затем добавьте блок RackSystem из Библиотеки Моделирования Процессов и настройте его.

    Элемент Стеллаж создает набор узлов и сегментов вдоль заданного прохода и управляет агентами, которые хранятся по обе стороны от прохода и даже на разных уровнях.

    Параметр Количество ячеек в глубину определяет, сколько узлов сети будет создано на каждой стороне прохода; каждый узел фактически является проекцией набора вертикально расположенных ячеек (их количество задается параметром Количество уровней). Следовательно, такой объект с 60 местами в ряду и 4 уровнями будет иметь 60 * 4 * 2 = 480 ячеек, где коэффициент 2 означает, что по каждую сторону от прохода будет создано по стеллажу. У каждой ячейки есть координаты: ряд (0..1), место (0..npositions-1) и уровень (0..nlevels-1).

    Объект создает сегмент сети, идущий по центральной оси прохода и соединяющий узел у начала прохода с узлом у конца прохода. Между каждой парой расположенных друг напротив друга узлов - проекций ячеек - элемент Стеллаж создает сегмент, соединяющий эти узлы с маленьким узлом, создаваемым на ранее созданном сегменте сети, идущем вдоль прохода, так что все эти узлы подсоединяются к сети.

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

    Элемент Стеллаж может проводить с ячейкой следующие операции:

    Элемент Стеллаж предоставляет набор методов, позволяющих получить информацию о его состоянии: вместимость, количество занятых, зарезервированных и свободных ячеек, статистика использования и т.д. Вы можете осуществлять поиск агента в хранилище, определять ближайшую свободную к началу или концу прохода ячейку, определять, какой узел сети соответствует ячейке и т.д. Поскольку у вас есть доступ к узлам сети, вы можете отражать состояние соответствующих ячеек (занята, зарезервирована, свободна) с помощью цветов.

    Обычно для агента, который должен быть помещен на хранение, выполняется следующий алгоритм:

    1. Поиск свободной ячейки
    2. Резервирование этой ячейки
    3. Перемещение агента (возможно, с помощью каких-то ресурсов) в тот узел сети, который соответствует данной ячейке
    4. Помещение агента в ячейку

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

    Для агента, который должен быть извлечен из ячейки, в свою очередь, выполняется следующий алгоритм:

    1. Нахождение ячейки, в которой хранится агент (и соответствующего узла сети)
    2. Возможно, вызов ресурсов к этому узлу
    3. Извлечение агента из ячейки
    4. Перемещение агента в заданный узел сети

    Самым простым способом является использование двух объектов RackStore и RackPick, специально разработанных, чтобы выполнять самые частые операции со стеллажами.

    Стеллаж может служить препятствием для транспортеров, перемещающихся в режиме произвольной навигации.

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

    Если в вашей модели есть некая общая зона хранения, состоящая из набора стеллажей, используемых в сходной манере, имеет смысл задать ее с помощью элемента RackSystem, предоставляющего централизованный доступ и управление этими стеллажами.

    Вы можете указать, в какую ячейку поместить поддон. Каждая ячейка имеет три координаты: ряд (0..1), позиция (0..n позиций) и уровень (0..n уровней). Таким образом, вы можете управлять всеми уровнями и позициями.

    Чтобы добавить стеллаж

    1. Перетащите элемент Стеллаж из палитры Разметка пространства в графический редактор.
    2. Соедините стеллаж с сетью (путь сети должен совпасть с проходом стеллажа). Путь будет использоваться рабочими и автопогрузчиками, чтобы подойти к ячейкам стеллажа.

    3. Задайте свойства стеллажа: выберите Тип: Один стеллаж, один проход; Один стеллаж, два прохода или Два стеллажа, один проход.
    4. Выберите Количество уровней, Количество ячеек в глубину, Количество ячеек.
    5. В секции свойств Местоположение и размер задайте Длину, Глубину стеллажа и Ширину прохода.
    6. После задания свойств стеллажа удостоверьтесь, что он по-прежнему соединен с сетью. Выберите стеллаж в графическом редакторе. Если стеллаж подсоединен верно, проход будет выделен зеленым цветом. В случае если это не так, переместите стеллаж относительно пути, чтобы путь проходил по центру прохода.

    Свойства

    Основные свойства

    Имя – Имя элемента. Имя используется для идентификации элемента и доступа к нему из кода.

    Исключить – Если опция выбрана, то элемент будет исключен из модели.

    Отображается на верхнем агенте – Если опция выбрана, то стеллаж будет виден на презентации того агента, в который будет вложен данный элемент.

    Блокировать – Если опция выбрана, то стеллаж будет считаться заблокированным и не будет реагировать на щелчки мыши. Таким образом, вы не сможете выбрать стеллаж в графическом редакторе до тех пор, пока не снимете с него блокировку. Обычно это требуется, когда вы хотите исключить возможность случайного редактирования фигур стеллажа при рисовании других фигур поверх него.

    Видимость – Если опция выбрана, стеллаж будет отображаться на анимации во время исполнения модели.

    Является препятствием – Если опция выбрана, стеллаж будет служить препятствием для транспортеров, перемещающихся в режиме произвольной навигации.

    Тип – Комбинация проходов и стеллажей: Один проход, один стеллаж; Два прохода, один стеллаж; Один проход, два стеллажа.

    Количество ячеек – Выберите, как нужно рассчитывать количество ячеек: Задано явно или Вычисляется на основании ширины ячейки.

    Количество ячеек – [Виден, если Количество ячеек: Задано явно] Количество ячеек на каждый ряд, расположенных на одном уровне.

    Ширина ячейки – [Виден, если Количество ячеек: Вычисляется на основании ширины ячейки] Фиксированная ширина ячейки.

    Кол-во ячеек в глубину – Количество позиций в глубине каждой ячейки.

    Количество уровней – Количество (вертикальных) уровней стеллажа.

    Высота уровня – Высота (вертикальных) уровней стеллажа.

    Внешний вид

    Цвет заливки – Задает цвет заливки фигуры. Если вы не хотите, чтобы фигура была закрашена, выберите Нет заливки.

    Цвет линии – Задает цвет линии. Если вы не хотите, чтобы линия контура была видна, выберите Нет линии.

    Рисовать стойки в 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() - Возвращает количество мест (ячеек) на одной полке стеллажа.

    setNumberOfPositions(int nPositions) - Задает количество мест (ячеек) на одной полке стеллажа.
    Параметр: nPositions - количество ячеек на одной полке стеллажа.

    int numberOfRows() - Возвращает количество стеллажей, 1 или 2.

    Уровень

    Level getLevel() - Возвращает уровень моделируемого пространства, на котором расположен стеллаж.

    Препятствие

    boolean isObstacle() - Возвращает true, если этот стеллаж является препятствием для транспортеров, перемещающихся в режиме произвольной навигации. В противном случае возвращает false.

    void setObstacle() - Задает этот стеллаж в качестве препятствия для транспортеров, перемещающихся в режиме произвольной навигации.
    Параметр: isObstacle - если true, стеллаж будет считаться препятствием для транспортеров. В противном случае, стеллаж не будет считаться препятствием.

    Работа с содержимым стеллажа

    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() - Удаляет статистику, собранную объектом к текущему моменту времени.

    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].
    Параметры:
    row - номер стеллажа (0 или 1).
    position - положение в ряду (0, 1, ...)
    level - уровень (0 - самый низкий)
    Возвращает: количество зарезервированных ячеек (может быть > 1 для стеллажей с "глубиной")

    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 - [для стеллажей с двумя проходами]: из какого прохода должна быть ячейка

    Специфические

    double getRotation() - Возвращает угол поворота стеллажа в радианах, по часовой стрелке.

    void setRotation(double rotation) - Задает поворот стеллажа.
    Параметр: rotation - угол поворота стеллажа в радианах, по часовой стрелке.

    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 остается неизмененным.
    Возвращает: квадрат расстояния до точки в горизонтальной (XY) проекции

    Position getPositionAtCell(int row, int position, int level, int deepPosition, double offset, double depth, boolean leftAisle, Position out) - Возвращает местоположение в заданной ячейке.
    Параметры:
    row - номер стеллажа (0 или 1). Используется в элементах с двумя стеллажами (0 = левый ряд, 1 = правый ряд). Если имеется только один стеллаж, то его номер - 0.
    position - положение в ряду (0, 1, ...)
    level - уровень (0, 1, ...)
    offset - смещение по краю ряда
    depth - глубина ячеек (перпендикулярно краю ряда)
    out - местоположение агента (может быть null)
    deepPosition - [если у ячеек есть глубина] номер (0, 1, ..), отсчет начинается от прохода (или от левого прохода, если возле этого стеллажа несколько проходов)
    leftAisle - [для стеллажей с двумя проходами, требуется для ориентации при расчете] куда "смотрит" агент: был ли он помещен с левого прохода или с правого
    Возвращает: заданный объект output (если он не null) или новое местоположение с координатами и углом поворота.

    Position getPositionAtCellEntry(int row, int position, int level, boolean leftAisle, Position out) - Возвращает местоположение в заданной ячейке.
    Параметры:
    row - номер стеллажа (0 или 1). Используется в элементах с двумя стеллажами (0 = левый ряд, 1 = правый ряд). Если имеется только один стеллаж, то его номер - 0.
    position - положение в ряду (0, 1, ...)
    level - уровень (0, 1, ...)
    offset - смещение по краю ряда
    depth - глубина ячеек (перпендикулярно краю ряда)
    out - местоположение агента (может быть null)
    Возвращает: заданный объект output (если он не null) или новое местоположение с координатами и углом поворота.

    Position getPositionInAisle(int row, int position, boolean leftAisle, Position out) - Возвращает местоположение в заданном проходе в заданной ячейке.
    Параметры:
    row - номер стеллажа (0 или 1). Используется в элементах с двумя стеллажами (0 = левый ряд, 1 = правый ряд). Если имеется только один стеллаж, то его номер - 0.
    position - положение в ряду (0, 1, ...)
    out - местоположение агента (может быть null)
    leftAisle - [для стеллажей с двумя проходами, требуется для ориентации при расчете] куда "смотрит" агент: был ли он помещен с левого прохода или с правого
    Возвращает: заданный объект output (если он не null) или новое местоположение с координатами и углом поворота.

    Agent getByIndex(int index) - Возвращает находящегося в стеллаже агента с заданным номером. Порядок хранения агентов - внутренний, и может меняться, когда агенты добавляются или удаляются. Если номер больше чем количество агентов -1, возвращает null.
    Параметр: index - номер
    Возвращает: агента по номеру или null

    Удаление

    void remove() - Удаляет стеллаж из презентации. Если стеллаж не является частью презентации, функция не выполняет ничего. Обратите внимание, что удаление из презентации не обязательно подразумевает удаление из логики модели, поскольку логические сети и маршруты могли быть заданы еще до удаления элемента и не исчезают.