RackSystem

Блок 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() - Возвращает количество агентов, находящихся в зоне хранения в текущий момент.