Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОМСК ПОСОБИЕ.doc
Скачиваний:
6
Добавлен:
02.09.2019
Размер:
528.9 Кб
Скачать

3.5. Изменение маршрутов транзактов

Блок TRANSFER позволяет осуществлять безусловные и стати­стические переходы. Тип перехода определяется в операнде А, на­правление перехода – в операндах В и С.

В режиме безусловного перехода операнд А в блоке пуст. Все транзакты переходят к блоку, указанному в ноле В. Например:

TRANSFER ,NEXT

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

Если в поле А блока TRANSFER записана десятичная дробь, на­чинающаяся точкой, то блок работает в режиме статистического перехода. Здесь десятичная дробь определяет вероятность перехода транзакта к блоку, имя которого указывается в поле С. При этом поле В пустое. С вероятностью (1 – < А >) транзакт переходит к блоку, следующему за блоком TRANSFER.

Если оба блока, заняты, то транзакт остается в блоке TRANSFER и повторяет попытку перехода к выбранному ранее блоку при каждом изменении системного времени.

С помощью этого блока можно промоделировать, например, вы­бор покупателями в магазине одного из двух отделов, если известно, что половина покупателей направляется в 1 -й отдел, а вторая половина – во 2-й отдел:

TRANSFER .5,,OTD2

OTD1 SEIZE PRODI

.

.

OTD2 SEIZE PROD2

Для организации условного перехода исполь­зуется оператор IF, операнд А которого указывает условие перехода транзактов, а в поле В указывается имя блока, куда направляются транзакты, если условие перехода выполняется.

При описании условия используются операции отношения: >, <, =, а также различные СЧА объектов, числовые константы, мнемокоды. Например, при входе транзакта в оператор

IF KASS=NU,KAS1 проверяется условие: свободно ли устройст­во с именем KASS.

Если устройство свободно, то транзакт направляется к блоку с именем KASS, в противном случае транзакт направляется к блоку, стоящему непосредственно за оператором IF.

Условная задержка транзакта. В случае, если необходимо за­держать транзакт перед каким-либо блоком до выполнения определен­ного условия, используется оператор WA1TIF. В поле А этого операто­ра задается условие задержки, и транзакт остается в данном блоке до тех пор, пока это условие истинно; как только условие становится лож­ным, транзакт продолжает свой путь.

Здесь для описания условия используется только операция срав­нения, где слева указывается имя памяти либо устройства, чье состоя­ние проверяется, а справа – мнемокод состояния. Например, в блоке

WAITIF STR=F

транзакт будет задержан до тех пор, пока память с именем STR будет полной.

Пример 3. В магазине находится два отдела: продовольственный и промто­варный. Около 30-ти процентов приходящих в магазин покупателей направляются в промтоварный отдел, остальные – в продовольствен­ный. Причем, если очередь в промтоварном отделе больше двух чело­век, а в продовольственном – больше пяти, то покупатели уходят из магазина, не дожидаясь обслуживания. Время прихода и обслуживания покупателей распределено экспоненциально. Среднее значение времени прихода равно соответственно 20 сек., времени обслуживания в продовольственном отделе – 30 сек.; в промтоварном – 35 сек. Модель, имитирующая работу магазина за 8 ч:

SIMULATE

GENERATE

20,FN$XPDIS

приход покупателей

TRANSFER

.3,,PROM

выбор покупателем отдела

* работа продовольственного отдела

PROD IF

Q$LIN1>5,BYBY

если очередь больше 5-ти человек – уход покупателя

QUEUE

LIN1

поставить в очередь в продовольственный отдел

SEIZE

PRODI

занять продавца

DEPART

LIN1

покинуть очередь в продовольственный отдел

ADVANCE

30,FN$XPDIS

обслуживание покупателя

RELEASE

PRODI

освободить продавца

TERMINATE

уход покупателя

* работа промтоварного отдела

PROM IF

Q$LIN1>2,BYBY

QUEUE

LIN2

SEIZE

PROD2

DEPART

LIN2

ADVANCE

35,FN$XPDIS

RELEASE

PROD2 BYBY

TERMINATE

* таймер

GENERATE

2880

TERMINATE

1

START

1