TrainCouple


Сцепляет в один два "касающихся друг друга" состава. Те два состава, которые нужно сцепить вместе, должны поступить в объект TrainCouple через разные входные порты (они могут это сделать в разные моменты времени), и должны при этом "касаться" друг друга своими крайними вагонами. Чтобы удостовериться в том, что составы располагаются достаточно близко друг к другу для сцепления, Вы можете, например, переместить один из составов на путь, на котором располагается другой состав, выбрав опцию Проверять свободное место на пути назначения у объекта TrainMoveTo.

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

Сцепление производится путем добавления вагонов состава, поступившего в объект через порт in2, к составу, поступившему в объект через порт in1, так что последний состав остается в модели, в то время как состав, поступивший через порт in2, удаляется. При этом у оставшегося состава сохраняется как направление, так и другие свойства, такие, как скорость и т.д. Местоположение вагонов при сцеплении не меняется.

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

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

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

Порты

InPort in1

Входной порт 1.

InPort in2

Входной порт 2.

OutPortPush out

Выходной порт.

Параметры

Действие при входе 1 [динамический]
Здесь Вы можете задать код, который будет выполняться в момент поступления состава в этот объект через порт in1.
Синтаксис: void onEnter1
Локальная переменная: T train – состав
Действие при входе 2 [динамический]
Здесь Вы можете задать код, который будет выполняться в момент поступления состава в этот объект через порт in2.
Синтаксис: void onEnter2
Локальная переменная: T train – состав
Действие при выходе [динамический]
Здесь Вы можете задать код, который будет выполняться в тот момент, когда состав покинет объект. Это будет тот же состав, который поступил в объект через порт in1, к которому будут добавлены вагоны из другого состава.
Синтаксис: void onExit
Локальная переменная: T train – состав

Функции

int size1() - Возвращает количество составов, поступивших в объект через порт in1 и ожидающих в данный момент в соответствующей очереди поступления в порт in2 другого состава, необходимого для сцепки.

int size2() - Возвращает количество составов, поступивших в объект через порт in2 и ожидающих в данный момент в соответствующей очереди поступления в порт in1 другого состава, необходимого для сцепки.

T get1( int index ) - Возвращает состав, находящийся в очереди первого порта in1 в позиции с заданным индексом (индекс 0 соответствует составу, находящемуся в самом начале очереди).

T get2( int index ) - Возвращает состав, находящийся в очереди второго порта in2 в позиции с заданным индексом (индекс 0 соответствует составу, находящемуся в самом начале очереди).