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