
Объект моделирует конвейер. Перемещает заявки по пути заданной длины с заданной скоростью (одинаковой для всех заявок), сохраняя их порядок и оставляя заданные промежутки между ними.
Конвейер может быть накапливающим и ненакапливающим. Если заявка достигла конца конвейера, но не может его покинуть, то она там и останется. Ненакапливающий конвейер в этом случае вообще прекратит продвижение заявок, в то время как накапливающий конвейер продолжит двигать заявки, которые имеют достаточно свободного места перед собой (т.e., те заявки, расстояние до предыдущей заявки у которых больше, чем значение параметра space) до тех пор, пока конвейер не будет заполнен заявками.
Вместимость конвейера определяется как длина length, поделенная на минимальное расстояние между заявками space.
Объект Conveyor может использоваться не только для моделирования конвейеров в производственных моделях. Вы можете использовать его и для моделирования очереди пассажиров в аэропорту или, например, очереди грузовиков на таможне. Если же Вы хотите моделировать (и анимировать) независимое движение заявок, которые могут обгонять одна другую, то для этих целей лучше подходит объект Delay.
Пожалуйста, помните, что поведение в начальных/конечных точках отличается от реального поведения конвейеров, что, правда, может повлиять только на те модели, в которых два конвейера последовательно соединены друг с другом: объект Conveyor подразумевает, что заявки имеют нулевую длину и только лишь сохраняет расстояние space между ними, в то время, как в реальности заявки могут иметь ненулевые размеры и нулевое расстояние между собой. Поэтому когда заявка покидает один конвейер и помещается на другой, первый конвейер "забывает" об этой заявке и не будет учитывать ее, если будет такая ситуация, что заявка лишь частично была помещена на второй конвейер и остановилась и т.д.
Скорость и параметр накапливания объекта (параметры speed и accumulating) могут изменяться динамически во время работы модели, позволяя, например, останавливать и снова запускать конвейер.
Новая заявка может быть помещена на конвейер только в том случае, если конвейер движется, и предыдущая заявка переместилась от начала конвейера хотя бы на расстояние, равное параметру space. Поэтому если существует вероятность того, что две заявки могут поступить на вход конвейера с интервалом времени, меньшим, чем space/speed, то Вам нужно будет добавить специальный объект буферизации (например, Queue) перед объектом Conveyor.
int size() - возвращает количество заявок, перемещаемых по конвейеру в текущий момент.
boolean canEnter() - возвращает true, если еще одна заявка может быть помещена на конвейер.
Entity get(int index ) - возвращает заявку с заданным номером (подсчет ведется от конца).
boolean isMoving() - возвращает true, если конвейер в данный момент движется, и false - если нет.
double spaceAhead(int index) - возвращает значение свободного пространства перед заявкой с заданным номером (для первой заявки это значение равно расстоянию до конца конвейера).