Устаревший блок. Для моделирования конвейеров мы рекомендуем использовать блоки Библиотеки производственных систем (Convey, ConveyorEnter, ConveyorExit) и элементы разметки пространства, созданные специально для этой библиотеки (конвейер, ветвление конвейера, платформа вращения и т.д.).
Блок моделирует конвейер. Перемещает агентов по пути заданной длины с заданной скоростью (одинаковой для всех агентов), сохраняя их порядок и оставляя заданные промежутки между ними.
Конвейер может быть накапливающим и ненакапливающим. Если агент достиг конца конвейера, но не может его покинуть, то он там и останется. Ненакапливающий конвейер в этом случае вообще прекратит продвижение агентов, в то время как накапливающий конвейер продолжит двигать агентов, которые имеют достаточно свободного места перед собой (т.e., тех агентов, у которых расстояние до предыдущего агента больше, чем значение параметра space) до тех пор, пока конвейер не будет заполнен агентами.
Вместимость конвейера определяется как длина length, поделенная на минимальное расстояние между агентами space.
Блок Conveyor может использоваться не только для моделирования конвейеров в производственных моделях. Вы можете использовать его и для моделирования очереди пассажиров в аэропорту или, например, очереди грузовиков на таможне. Если же вы хотите моделировать (и анимировать) независимое движение агентов, которые могут обгонять один другого, то для этих целей лучше подходит блок Delay.
Скорость и параметр накапливания блока (параметры speed и accumulating) могут изменяться динамически во время работы модели, позволяя, например, останавливать и снова запускать конвейер. Мы предлагаем вам посмотреть пример конвейера с динамически изменяющейся скоростью.
Новый агент может быть помещен на конвейер только в том случае, если конвейер движется, и предыдущий агент переместился от начала конвейера хотя бы на расстояние, равное параметру space. Поэтому если существует вероятность того, что два агента могут поступить на вход конвейера с интервалом времени, меньшим, чем space/speed, то вам нужно будет добавить специальный блок буферизации (например, Queue) перед блоком Conveyor.
boolean canEnter() - Возвращает true, если еще один агент может быть помещен на конвейер.
double distanceFromExit(int index) - Возвращает расстояние до конца конвейера для агента с заданным номером.
double distanceFromExit(T agent) - Возвращает расстояние до конца конвейера для указанного агента.
T get(int index) - Возвращает агента с заданным номером (подсчет ведется от конца).
double getSpeed(int index) - Возвращает скорость движения агента, в единицах длины, выбранных в параметре Скорость.
int indexOf(Agent agent) - Возвращает номер позиции для заданного агента (подсчет ведется от конца). Возвращает -1, если агент не найден.
boolean isMoving() - Возвращает true, если конвейер в данный момент движется, и false - если нет.
T remove(Agent agent) - Удаляет заданного агента из любой позиции на конвейере. Если агент не находится на конвейере, возвращает null, иначе - возвращает удаленного агента.
T remove(int index) - Удаляет агента с заданным номером с конвейера. Выдает ошибку, если номер неверен или не найден. Возвращает удаленного агента.
void resume() - Возобновляет движение конвейера.
void stop() - Останавливает конвейер.
int size() - Возвращает количество агентов, перемещаемых по конвейеру в текущий момент.
double spaceAhead(int index) - Возвращает значение свободного пространства перед агентом с заданным номером (для первого агента это значение равно расстоянию до конца конвейера).
Iterator<T> iterator() - Возвращает итератор над агентами (в порядке: первый - ближайший к выходу).