Блок TRANSFER изменяет маршрут движения транзактов в зависимости от значения первого операнда (в основном или альтернативном направлении) при определенном состоянии оборудования: обслуживающих устройств, очереди, логических ключей и т.п.:
TRANSFER [A],B,[C],[D]
А - режим перехода;
В - метка первого альтернативного блока;
С - метка второго альтернативного блока;
D - константа, используемая для относительной переадресации транзактов.
Если операнд А блока TRANSFER отсутствует, то транзакт, поступивший в блок TRANSFER, безусловно отправляется в блок с меткой, указанной в операнде В.
Если операнд А - число от 0 до 1, то он определяет вероятность перехода транзакта по адресу С. При этом операнд В определяет альтернативный адрес.
Если операнд А равен «ВОТН», то транзакт делает попытку перемещения в блок с меткой В. При невозможности войти в блок с адресом В, транзакт перемещается в блок с меткой, указанной в операнде С.
Если операнд А равен «ALL», то транзакт делает попытку перемещения в блок с меткой В. При невозможности войти в данный блок, транзакт делает попытку перемещения в блок, следующий за блоком с адресом В через D блоков, если и эта попытка безуспешна - то в блок, следующий за блоком с адресом В через 2D блоков. Адрес последнего блока, в который может перемещаться транзакт, записывается в операнде С.
Например:
TRANSFER ,LABEL1 TRANSFER 0.6,KASSA2,KASSA1
TRANSFER BOTH,OTCH1,OTCH2 TRANSFER BOTH,,KASSA2 TRANSFER ALL,FIRST,LAST,3
; перемещение транзакта к блоку с меткой LABEL1
; с вероятностью 0,6 транзакт перемещается к блоку с меткой KASSA1, с вероятностью 0,4 - к блоку с меткой KASSA2 ; транзакт перемещается к блоку с меткой ОТСН1, но в случае невозможности войти в блок с меткой ОТСН1, транзакт перемещается к блоку с меткой ОТСН2 ; транзакт делает попытку войти в следующий блок, если это ему не удается, транзакт перемещается к блоку с меткой KASSA2
; транзакт перемещается к блоку с меткой FIRST, в случае невозможности войти в блок с меткой FIRST, транзакт делает попытку войти в блок, следующий за блоком с меткой FIRST через 3 блока. В случае неудачи - через 6, 9, 12,... блоков, пока не будет достигнут блок с меткой LAST
В GPSS дополнительно используется относительная адресация блоков, не имеющих меток:
TRANSFER ,LABEL1 ; перемещение транзакта к блоку с меткой LABEL1 TRANSFER , * + 5 ; перемещение транзакта к блоку, следующему
за данным блоком через 5 блоков TRANSFER ,LABELl+2 ; перемещение транзакта к блоку, следующему за блоком с меткой LABEL1 через 5 блоков
Блок TEST определяет направление движения транзакта в зависимости от выполнения условия, заданного алгебраическим соотношением: TEST XX А,В,[С]
XX - знак логической операции: L - меньше, G - больше, Е - равно, LE - меньше или равно, GE - больше или равно, NE - не равно; А, В - сравниваемые значения или СЧА;
С - метка блока, куда перемещается транзакт в случае невыполнения заданного условия.
При выполнении условия, записанного в блоке TEST, транзакт переходит в следующий блок. В противном случае он направляется в блок с меткой, содержащейся в операнде С. Если операнд С не задан, то транзакт задерживается в блоке TEST до выполнения условия.
Например:
Например:
TRANSFER ,LABEL1 TRANSFER 0.6,KASSA2,KASSA1
TRANSFER BOTH,OTCH1,OTCH2 TRANSFER BOTH,,KASSA2 TRANSFER ALL,FIRST,LAST,3
TEST LE Q$0TH1,Q$OTH2,LABEL2 ; транзакт переходит к следующему блоку, если текущая длина очереди ОТН1 меньше или равна длине очереди ОТН2. В противном случае транзакт направляется в блок с меткой LABEL2
TEST G 10,S$KASSA ; транзакт переходит к следующему бло
ку, если 10 больше числа занятых приборов многоканального устройства с именем KASSA. В противном случае транзакт задерживается в данном блоке
Блок GATE разрешает движение транзактам (в основном или альтернативном направлении) при определенном состоянии оборудования: обслуживающих устройств, очереди, логических ключей и т. п. Блок имеет следующий формат:
GATE XXX А,[В]
XXX - логический указатель (определяется таблицей 2);
А - имя или номер оборудования;
GATE FNU OKNOl, KASSA2 GATE LS KEY1
В - метка альтернативного блока.
Таблица 2 - Значения логического указателя блока GATE
Таблица 2 -
Значения логического указателя блока GATE
Тип объекта |
Логический указатель |
Значение |
Одноканальное |
FV |
Устройство занято |
устройство |
FNV |
Устройство не занято |
|
FI |
Устройство обслуживает прерывание |
|
FNI |
Устройство не обслуживает прерывание |
Многоканальное |
SF |
Устройство заполнено |
устройство |
SNF |
Устройство не заполнено |
|
SE |
Устройство пусто |
|
SNE |
Устройство не пусто |
Логический ключ |
LR |
Логический переключатель сброшен |
|
LS |
Логический переключатель установлен |
|
При выполнении условия, записанного в логическом указателе XXX, транзакт переходит в следующий за GATE блок. В противном случае он направляется в блок с меткой, содержащейся в операнде В. Если операнд В не задан, то транзакт задерживается в блоке GATE до выполнения условия, определяемого указателем XXX. Например:
GATE SNF OTK,LABELl ; транзакт переходит к следующему блоку, если многоканальное устройство ОТК не заполнено. В противном случае транзакт направляется в блок с меткой LABEL1 ; транзакт перемещается в блок с меткой KASSA2,
если одноканальное устройство 0KN01 занято ; транзакт переходит к следующему блоку, если логический ключ KEY1 установлен в единицу. В противном случае транзакт задерживается в блоке GATE
Для изменения в ИМ значений логических ключей используется блок LOGIC, который имеет следующий формат:
LOGIC X А
X - указатель операции с логическим ключом: S - установить (единица), R - сбросить (обнулить), I - инвертировать; А - имя или номер логического ключа.
Например:
LOGIC S KEY1 ; установить единичное значение ключа с именем KEY1 LOGIC R 2 ; обнулить значение второго ключа, определенного в модели
LOGIC I KEY2 ; инвертировать значение ключа с именем KEY2
Для организации циклов перемещения транзактов используется блок LOOP А,В
А - номер параметра транзакта, используемого в качестве счетчика цикла с указанием формата: «слово» (PF), «полуслово» (РН), «байт» (РВ);
В - метка блока, являющегося начальным в повторяющейся группе блоков.
При каждом вхождении транзакта в блок значение счетчика уменьшается на 1. Если оно становится равным нулю, транзакт переходит к следующему блоку. Допускается изменение параметра-счетчика внутри цикла. Если вам понадобилась спецтехника то взять ее можно тут - http://www.rtk-ld.ru/.
Например:
ASSIGN 5,3,,РН ; присвоить 5-му параметру текущего транзакта значение 3 и формат «полуслово» LABEL1 ADVANCE 15,10 ; выполнение задержки транзакта на 15±10
единиц модельного времени LOOP PH5,LABEL1 ; организация цикла (многократной задержки транзакта), число повторений равно 3
Для синхронизации движения двух транзактов из семейства используются два сопряженных блока MATCH, например:
LABELl MATCH LABEL2 ; транзакт, вошедший в блок с меткой LABEL1,
будет ожидать в этом блоке прихода транзакта того же семейства в блок с меткой LABEL2
LABEL2 MATCH LABELl ; транзакт, вошедший в блок с меткой LABEL2,
будет ожидать в этом блоке прихода транзакта того же семейства в блок с меткой LABELl
|