Блок 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], то есть, не занята и не зарезервирована, и возвращает количество свободных слотов в глубине ячейки. int size() Возвращает количество агентов, находящихся в зоне хранения в текущий момент. - Статистика
-
Функция Описание boolean isStatisticsCollected() Возвращает true, если блок собирает статистику. void resetStats() Удаляет статистику, собранную блоком к текущему моменту времени.
- StatisticsContinuous statsUtilization
- Непрерывная статистика использования стеллажа (показатель использования высчитывается как size()/capacity). Статистика собирается, если сбор статистики не выключен блоком PML Settings.
-
Как мы можем улучшить эту статью?
-