logo
Обработка данных / Томашевский_Имитационное моделирование в среде GPSS_2003

4.9. Переход транзакта в блок, отличный от последующего. БлокTransfer

В GPSSблокTRANSFER (ПЕРЕДАТЬ) может быть использо­ван в девяти разных режимах. Рассмотрим три основных.

Блок TRANSFER в режиме безусловной передачи. Его фор­мат:

TRANSFER ,B

Таблица 4.8

Операнд

Значение

Результат по умолчанию

А

Не используется

В

позиция блока, в которую должен перейти транзакт

Ошибка

Позиция блока – это номер или метка блока. Так как операнд А не используется, то перед операндом В должна стоять запятая. В ре­жиме безусловной передачи блокTRANSFER не может отказывать транзакту во входе. Кстати, если транзакт входит в блок, то он сразу же пытается войти в блокВ.

Транслятор GPSS/PCне улавливает пропущенную запятую вместо операндаA(например,TRANSFERLAMD). На этапе трансля­ции меткеLAMDприсваивается числовое значение, и транзакт в этом случае направляется в блокcсоответствующем номером.

Статистический режим. В этом режиме осуществляется пере­дача транзакта в один из двух блоков случайным образом. Формат блока:

TRANSFER A,[B],C

Таблица 4.9

Опе­ранд

Значение

Результат но умол­чанию

А

Вероятность передачи транзакта в блок С, задаваемая в долях тысячи

Ошибка

В

Позиция блока, в которую должен пе­рейти транзакт (с вероятностью 1 – А)

Следующий по по­рядку блок

С

Позиция блока, в которую должен пе­рейти транзакт (с вероятностью А)

Ошибка

При задании вероятности (операнд А) используется не более трех цифр, первый символ записи частоты «.» (десятичная точка), если используется действительное число, которое должно быть в пределах от 0 до 1,0 (например, 0,235). Если операнд – положительное целое число, то вероятность интер­претируется в долях тысячи.

Пример 4.6

Cчастотой 0,667 транзакт переходит в блокcметкойLPRIB1 иcчастотой 0,333 – в блокcметкойLPRIB2.

Пример 4.7

Cчастотой 0,6 транзакт переходит в блокSEIZE PR1 иcчасто­той 0,4 – в блокcметкойLPRIB2.

Режим BOTH. Если в операнде А стоит зарезервированное сло­воBOTH, то блокTRANSFER работает в режимеBOTH.

В этом режиме входящий транзакт сначала пытается перейти к блоку, указанному в операнде В. Если это сделать не удается, тран­закт пытается перейти в блок, указанный в операндеC. Если тран­закт не сможет перейти ни к тому, ни к другому блоку, то он остается в блокеTRANSFER и при каждом просмотре списка текущих собы­тий, будет повторять в том же порядке попытки перехода до тех пор, пока не сможет выйти из блокаTRANSFER.

Пример 4.8

Транзакт сначала пытается перейти в блок cметкойLL1. Если устройствоPRI1 занято, транзакт пытается войти в блокcметкойLL2. Если транзакт не может войти и в этот блок (устройствоPRI2 также занято), он остается в списке текущих событий и повторяет эти попытки при каждом просмотре списка до тех пор, пока не выйдет из блокаTRANSFER.

1. Не путайте метку блока SEIZE cименем соответствующего этому блоку устройства.

2. Если бы меткой LL1 был помечен блокQUEUE, А не блокSEIZE, то все транзакты были бы направлены по меткеLL1, так как в отличие от блокаSEIZE блокQUEUE всегда готов принять транзакты.