Conveyor

Объект моделирует конвейер. Перемещает заявки по пути заданной длины с заданной скоростью (одинаковой для всех заявок), сохраняя их порядок и оставляя заданные промежутки между ними.  

Конвейер может быть накапливающим и ненакапливающим. Если заявка достигла конца конвейера, но не может его покинуть, то она там и останется. Ненакапливающий конвейер в этом случае вообще прекратит продвижение заявок, в то время как накапливающий конвейер продолжит двигать заявки, которые имеют достаточно свободного места перед собой (т.e., те заявки, расстояние до предыдущей заявки у которых больше, чем значение параметра space) до тех пор, пока конвейер не будет заполнен заявками.   

Вместимость конвейера определяется как длина length, поделенная на минимальное расстояние между заявками space.

Объект Conveyor может использоваться не только для моделирования конвейеров в производственных моделях. Вы можете использовать его и для моделирования очереди пассажиров в аэропорту или, например, очереди грузовиков на таможне. Если же Вы хотите моделировать (и анимировать) независимое движение заявок, которые могут обгонять одна другую, то для этих целей лучше подходит объект Delay.

Пожалуйста, помните, что поведение в начальных/конечных точках отличается от реального поведения конвейеров, что, правда, может повлиять только на те модели, в которых два конвейера последовательно соединены друг с другом: объект Conveyor подразумевает, что заявки имеют нулевую длину и только лишь сохраняет расстояние space между ними, в то время, как в реальности заявки могут иметь ненулевые размеры и нулевое расстояние между собой. Поэтому когда заявка покидает один конвейер и помещается на другой, первый конвейер "забывает" об этой заявке и не будет учитывать ее, если будет такая ситуация, что заявка лишь частично была помещена на второй конвейер и остановилась и т.д. 

Скорость и параметр накапливания объекта (параметры speed и accumulating) могут изменяться динамически во время работы модели, позволяя, например, останавливать и снова запускать конвейер.

Новая заявка может быть помещена на конвейер только в том случае, если конвейер движется, и предыдущая заявка переместилась от начала конвейера хотя бы на расстояние, равное параметру space. Поэтому если существует вероятность того, что две заявки могут поступить на вход конвейера с интервалом времени, меньшим, чем space/speed, то Вам нужно будет добавить специальный объект буферизации (например, Queue) перед объектом Conveyor.

Параметры класса

Класс заявки
Класс заявок, проходящих через объект, должен быть подклассом Entity. Указав класс заявки, Вы можете напрямую обращаться к полям этого класса в коде динамических параметров, таких, как onEnter.
Синтаксис: T extends Entity
Значение по умолчанию: Entity

Порты

InPort in
Входной порт.
OutPort out
Выходной порт.

Параметры

Длина задается
Определяет, как задается длина конвейера: задается ли она Явно или же она определяется Согласно пути.
Синтаксис: boolean lengthDefinedByPath
Значение по умолчанию: Явно (false)
Длина
[Виден, если Длина задается Явно] Длина конвейера.
Синтаксис: double length
Значение по умолчанию: 100
Расстояние между заявками
Минимальное расстояние между двумя соседними заявками.
Синтаксис: double space
Значение по умолчанию
: 10
Скорость
Скорость, с которой двигается конвейер.
Синтаксис: double speed
Значение по умолчанию: 10
Накапливающий
Если опция выбрана (true), то заявки будут двигаться даже тогда, когда на выходе образовалась «пробка», если нет, то в этом случае весь конвейер остановится.
Синтаксис: boolean accumulating
Значение по умолчанию
: true
Действие при входе [динамический]
Код, выполняемый, когда заявка поступает в объект.
Синтаксис: void onEnter
Локальная переменная: T entity - заявка. 
Действие при подходе к выходу [динамический]
Код, выполняемый, когда заявка достигает конца конвейера (что не означает, что она немедленно покинет объект, поскольку следующий за конвейером объект может быть не готов к приему заявки).
Синтаксис: void onAtExit
Локальная переменная: T entity - заявка.
Действие при выходе [динамический]
Код, выполняемый, когда заявка покидает объект.
Синтаксис: void onExit
Локальная переменная: T entity - заявка.
Фигура анимации
Фигура анимации конвейера. В качестве типа анимации всегда выбран Путь.
Синтаксис: Shape animationGuide
Направление анимации
Направление движения анимаций заявок по фигуре анимации конвейера.
Синтаксис: boolean animationForward
Значение по умолчанию: Вперед (true)

Функции

int size() - возвращает количество заявок, перемещаемых по конвейеру в текущий момент.

boolean canEnter() - возвращает true, если еще одна заявка может быть помещена на конвейер.

Entity get(int index ) - возвращает заявку с заданным номером (подсчет ведется от конца).

boolean isMoving() - возвращает true, если конвейер в данный момент движется, и false - если нет.

double spaceAhead(int index) - возвращает значение свободного пространства перед заявкой с заданным номером (для первой заявки это значение равно расстоянию до конца конвейера).

double distanceFromExit(int index) - возвращает расстояние до конца конвейера для заявки с заданным номером.