AnyLogic
Развернуть
Размер шрифта

RackSystem

Устаревший блок. Для моделирования складов мы рекомендуем использовать блоки Библиотеки производственных систем (Store, Retrieve, StorageSystem) и соответствующий элемент разметки пространства Storage.

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

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

RackSystem предоставляет тот же программный интерфейс, что и элемент разметки пространства стеллаж, но отсчет рядов начинается с 0 до 2*(число блоков)-1, поэтому, скажем, пятому блоку в зоне хранения будут соответствовать стеллажи с номерами 8 и 9. Кроме того, есть дополнительная функция cellExists( row, position, level ) для проверки того, находится ли ячейка с заданными координатами в зоне хранения, и функция getMaxPositions(), возвращающая количество мест в самом протяженном стеллаже этой зоны хранения (он может пригодиться при прохождении в цикле всех стеллажей зоны хранения).

Действия, производимые при совершении действий с ячейками зоны хранения (такие, как действие При помещении, действие При извлечении и т.д.) не переопределяют аналогичные действия соответствующих стеллажей, а выполняются после них.

Стоит отметить, что блоки RackStore и RackPick могут работать как с блоком, моделирующим зону хранения, так и с блоком, моделирующим стеллажи.

Параметры

Тип агента
Тип агентов, находящихся в этой зоне хранения.
Упоминается ниже как: T
Стеллажи
Список стеллажей, которые должны быть включены в зону хранения.
Синтаксис: PalletRack[] palletRacks

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

Включить сбор статистики
По умолчанию, статистика собирается для всех блоков Библиотеки Моделирования Процессов. Тем не менее, вы можете настроить этот параметр и выключить сбор статистики, чтобы улучшить динамику модели. Для этого добавьте блок PML Settings и отключите опцию Включить статистику по умолчанию. Таким образом, вы отключите сбор статистики для всех блоков диаграммы процесса в этой модели. Но вы можете включить статистику для некоторых конкретных блоков, включив эту опцию Включить сбор статистики в свойствах самого блока.
Синтаксис: boolean forceStatisticsCollection
Значение по умолчанию: false
Отображать хранящихся агентов
Здесь вы можете выбрать, где вы хотите отображать агентов, находящихся в зоне хранения. Возможные опции:
Не отображать, использовать подсветку (быстрый способ)
В позиции по умолчанию
В верхнем левом углу ячейки
В центре ячейки
При выборе опции Не отображать, использовать подсветку (быстрый способ) фигуры анимации хранящихся агентов не отображаются, а каждая ячейка заливается цветом находящегося в ней агента или цветом-смесью цветов всех агентов (их может быть несколько по вертикали). Такой способ анимации более информативен в случае многоуровневых стеллажей и обеспечивает намного более быструю производительность для складов большого масштаба. Цвет агента может быть задан с помощью вызова функции agent.setColor().
Имя: drawMode
Значение по умолчанию: Не отображать, использовать подсветку (быстрый способ) (RackSystem.DRAW_INDICATION_ONLY)
Допустимые значения:
RackSystem.DRAW_INDICATION_ONLY — Не отображать, использовать подсветку (быстрый способ)
RackSystem.DRAW_DEFAULT — В позиции по умолчанию
RackSystem.DRAW_TOPLEFT — В верхнем левом углу ячейки
RackSystem.DRAW_CENTER — В центре ячейки

Действия

При помещении
Код, выполняемый при помещении агента в ячейку зоны хранения (выполняется после действия При помещениисоответствующего стеллажа).
Локальные переменные:
T agent — агент
int row — ряд ячейки
int position — место ячейки
int level — уровень ячейки
При извлечении
Код, выполняемый при извлечении агента из ячейки зоны хранения (выполняется после действия При извлечении соответствующего стеллажа).
Локальные переменные:
T agent — агент
int row — ряд ячейки
int position — место ячейки
int level — уровень ячейки
При резервировании
Код, выполняемый, когда ячейка помечается как зарезервированная (выполняется после действия При резервированиисоответствующего стеллажа).
Локальные переменные:
T agent — агент
int row — ряд ячейки
int position — место ячейки
int level — уровень ячейки
При освобождении
Код, выполняемый, когда отменяется резервирование ячейки (выполняется после действия При освобождении соответствующего стеллажа).
Локальные переменные:
int row — ряд ячейки
int position — место ячейки
int level — уровень ячейки

Функции

Определение количества ячеек
Функция Описание
int nRows() Возвращает количество рядов в этой зоне хранения.
int nLevels(int row) Возвращает количество уровней в указанном ряду.
int nPositions(int row) Возвращает количество ячеек в заданном ряду. Общее количество ячеек рассчитывается умножением этого числа на количество ячеек в глубину и на количество уровней.
int nDeepPositions(int row) [если имеется несколько ячеек в глубину] Возвращает количество ячеек в глубину в указанном ряду.
int capacity() Возвращает вместимость зоны хранения (сумму вместимостей отдельных стеллажей, входящих в состав этой зоны).
int getMaxPositions() Возвращает количество мест в ряду в самом протяженном стеллаже этой зоны хранения.
Резервирование ячейки
Функция Описание
void reserve(int row, int position, int level, boolean leftAisle) Помечает ячейку [ряд row, место position, уровень level] как зарезервированную. При этом ячейка должна быть свободной.
int nReserved(int row, int position, int level) Проверяет, зарезервирована ли ячейка [ряд row, место position, уровень level].
int reserved() Возвращает количество зарезервированных ячеек в текущий момент.
void release(int row, int position, int level, boolean leftAisle) Отменяет резервирование ячейки [ряд row, место position, уровень level]. Ячейка должна быть зарезервирована.
boolean cellExists(int row, int position, int level) Проверяет, находится ли ячейка с заданными координатами [ряд row, место position, уровень level] в этой зоне хранения (это бывает нужно тогда, когда зона хранения содержит стеллажи разной высоты или стеллажи с различным числом ячеек в ряду).
boolean contains(Agent agent) Проверяет, содержит ли зона хранения агента agent.
T get(int row, int position, int level, int deepPosition) Возвращает агента, хранящегося в ячейке с заданными координатами [ряд row, место position, уровень level] (или null, если эта ячейка зарезервирована или свободна).
PalletRackApproachDirection getApproachDirection(Agent agent, int rowToSearch) Возвращает массив координат [ряд row, место position, уровень level] ячейки, содержащей агента agent, или null, если агент не хранится в этой зоне хранения.
Размещение и извлечение агентов из ячеек
Функция Описание
void put(int row, int position, int level, boolean leftAisle, Agent agent) Помещает агента agent в ячейку [ряд row, место position, уровень level]. Если ячейка занята, выдает ошибку. Не проверяет ячейку на предмет резервирования.
T randomAgent() Возвращает случайного агента из зоны хранения или null, если зона хранения пуста.
T remove(Agent agent) Извлекает агента agent из зоны хранения и возвращает ее. Если такого агента в зоне хранения нет, возвращает null.
T removeFromCell(int row, int position, int level, boolean leftAisle) Извлекает агента из заданной ячейки [ряд row, место position, уровень level] и возвращает его.
T removeFromCell(PalletRackLocation location, boolean leftAisle) Извлекает агента из заданной ячейки [ряд row, место position, уровень level] и возвращает его.
T getByIndex(int index) Возвращает агента с заданным номером index. Порядок агентов определяется блоком и может изменяться при добавлении и удалении агентов. Если index 1 больше, чем количество агентов, то функция возвращает null.
PalletRackLocation getCellOf(Agent agent) Возвращает массив координат [ряд row, место position, уровень level] ячейки, содержащей агента agent, или null, если агент не хранится в этой зоне хранения.
PalletRackLocation getFreeCell(boolean infront) Возвращает массив координат [ряд row, место position, уровень level] свободной ячейки, ближайшей к началу или концу зоны хранения, в зависимости от значения параметра infront. Если зона хранения переполнена, возвращает null.
Position getPositionAtCell(int row, int position, int level, int deepPosition, double offset, double depth, boolean leftAisle, Position out) Возвращает позицию в данной ячейке.
Position getPositionAtCellEntry(int row, int position, int level, boolean leftAisle, Position out) Возвращает позицию на входе в данную ячейку.
Position getPositionInAisle(int row, int position, boolean leftAisle, Position out) Возвращает позицию, расположенную в проходе перед ячейкой с заданными координатами [ряд row, место position] (уровень не имеет значения, поскольку ячейки, располагающиеся одна над другой, имеют одну и ту же позицию).
PalletRack getPalletRack(int row) Возвращает стеллаж, содержащий заданный ряд.
boolean hasSpace() Проверяет, есть ли свободное место в зоне хранения, т.e. есть ли пустые и не зарезервированные ячейки.
boolean isFree(int row, int position, int level) Проверяет, свободна ли ячейка [ряд row, место position, уровень level]. Свободной считается не занятая и не зарезервированная ячейка.
int nFree(int row, int position, int level) Проверяет, свободна ли ячейка [ряд row, место position, уровень level], то есть, не занята и не зарезервирована, и возвращает количество свободных слотов в глубине ячейки.
void resetStats() Удаляет статистику, собранную блоком к текущему моменту времени.
int size() Возвращает количество агентов, находящихся в зоне хранения в текущий момент.
Как мы можем улучшить эту статью?