Математическое моделирование

         

Блоки условной передачи транзактов IF и WAITIF


Безусловная или вероятностная (статистическая) передача транзактов, как отмечалось выше, осуществляется в блоке GOTO. Однако в практике разработки сложных моделей часто возникает необходимость совершить переход с учетом какого-либо условия (условный переход). Для этого используется блок IF, который имеет два режима работы: SNA (режим отношения) и SERVER (режим присвоения).

В SNA-режиме, операнды А и В связаны заданным отношением. В зависимости от того, выполняется ли это отношение, осуществляется (или не осуществляется) передача транзакта. Формат блока IF в SNA?режиме:

IF A*B,C

В приведенной записи символом «*» обозначен знак проверяемого отношения между операндами А и В, которые являются константами или СЧА. Допустимые отношения: > (больше), >= (больше или равно), = (строгое равенство), <> (неравенство), < (меньше), <= (меньше или равно). Операнд С - это адрес блока, в который транзакт должен перейти, если проверка отношения дает результат «true» (истина), в противном случае транзакт переходит в следующий блок. Ниже приведен пример записи блока IF:

IF Q$lin=4,bye

Приведенная запись обозначает следующее: если в очереди lin есть 4 транзакта,то перейти к блоку с адресом (меткой) bye.

Отношение может быть выражено также одним из следующих кодов:

1.      U (The facility is in Use - прибор занят).

2.      NU (The facility is Not in Use - прибор не занят).

3.      E (The storage is Empty - МНУ пустое).

4.      NE (The storage is Not Empty - МНУ не пустое)

5.      F (The storage is Full - МНУ заполнено)

6.      NF (The storage is Not Full - МНУ не заполнено)

В случае использования этой группы отношений операнд А - это имя прибора или МНУ, операнд В содержит один из вышеперечисленных кодов и формат блока будет следующим :

IF A=код,C

Так, например, запись

IF sal=U,bye

означает следующее: если прибор sal занят, то перейти к блоку с меткой bye.


В SERVER? режиме ( режиме присвоения) имеется дополнительный операнд D. Формат блока определяется следующим образом:

IF A*B,C=D

В приведенной записи «*» - любое отношение, операнды А и В - константы или СЧА, операнд С - это S-величина или параметр, которой будет присвоено значение операнда D в случае,если проверка отношения между операндами А и В даст результат true (истина). Операнд D - константа, СЧА или выражение. В качестве примера использования блока IF в SERVER–режиме, может быть приведена следующая запись:

IF X$norm<0,X$norm=0

Приведенная запись означает следующее: если величина X$norm<0 (X$norm - сохраняемая величина с именем norm),то ее нужно установить в «0»,в противном случае она сохранит свое прежнее значение.

Блок WAITIF является разноидностью блока IF.Операнды А и В и отношения между ними задаются так же как и в блоке IF, но отсутствует операнд С. Смысл блока WAITIF может быть сформулирован в следующем виде: «ЖДАТЬ если условие выполняется, до тех пор, пока оно не перестанет выполняться». Так, например, запись

WAITIF stor=E

означает следующее: транзакт должен ждать до тех пор, пока МНУ с именем stor занято. Как только это условие перестанет выполняться (то есть МНУ освободится), транзакт переходит в следующий блок.


Содержание раздела