Имя_переменной variable формула

В формуле могут использоваться операции сложить +, вычесть -, умножить *, разделить /, разделить по модулю @, найти отношение =, >, <, >=, <=.

Примеры.

11 FVARIABLE XH$1*FN$EXP/XH$2+1

15 VARI XH$6-XH$8

V1 VARIABLE XH$1*(P$1-1)

V2 VARI P$2+FN$NORM

V3 FVAR S$MON*XF$5/10;

V4 FVAR V$V2+3.5; переменная V4 вычисляется как сумма значения переменной V2 и числа 3.5.

5 FVAR FN$EXP*3.14

Примечание.

В приведенных выше примерах имена переменных V1,V2,V3,V4 должны быть объявлены. Переменные в первой, второй и в последней строке не объявляются и задаются номерами 11,15, 5.

РАЗДЕЛ III. СРЕДСТВА ЯЗЫКА, ИМИТИРУЮЩИЕ СТАТИЧЕСКИЕ И ДИНАМИЧЕСКИЕ СВОЙСТВА ТРАНЗАКТОВ ПРИ МОДЕЛИРОВАНИИ ДИСКРЕТНЫХ ПРОЦЕССОВ

Основной структурной единицей языка моделирования в GPSS является блок. Рассмотренные в предыдущей главе 2 блоки имитируют работу объектов – устройств, памяти, очереди, логических ключей и т.д. Для имитационного моделирования дискретных систем необходимо также иметь средства отображения свойств динамических объектов - транзактов, средства имитации параллельных независимых и взаимосвязанных процессов, их синхронизации. Ниже описываются группы таких блоков.

3.1. БЛОКИ, ВЛИЯЮЩИЕ НА ЗНАЧЕНИЯ ПАРАМЕТРОВ ТРАНЗАКТОВ

PRIORITY А [,BUFFER] устанавливает транзакту, входящему в данный блок, значение приоритета A (целое без знака в диапазоне от 0 до 127). Если операнд BUFFER отсутствует, то продолжается обработка текущего транзакта, иначе текущей транзакт помещается в список текущих событий и возобновляется просмотр списка для выбора текущего транзакта с учетом нового значения приоретета.

Примеры.

1. PRIORITY 4

Назначить транзакту приоритет 4 и попытаться продвинуть его по модели в следующий блок.

2. PRIORITY XF$4, BUFFER

Назначить транзакту приоритет, равный значению, хранящемуся в полнословной ячейке 4, поместить транзакт в список текущих событий и возобновить его просмотр.

ASSIGN A,B присваивает в текущем транзакте параметру, номер которого указан в поле А, значение, указанное в поле В; если номер поля сопровождается знаком + или -, то данный блок модифицирует (увеличивает или уменьшает) значение параметра на В.

Примеры.

1. ASSIGN 2,8; P(2):= 8

2. ASSIGN 4+,V$5; P(4):= P(4) + V$5,

INDEX A,B если поле А равно 1, то блок модифицирует значение первого параметра транзакта, вошедшего в данный блок, на величину, задаваемую полем В, если же в поле А записано некоторое другое число, то это число воспринимается как номер параметра транзакта и блок присваивает первому параметру транзакта сумму значения поля В и значения параметра, указанного полем А.

Примеры.

1. INDEX 1,2; P(1):= P(1) + 2

2. INDEX 2, FN$5; где - FN$5 - значение функции номеp 5, выбираемое из таблицы (см. ФУНКЦИИ И ПЕРЕМЕННЫЕ, рис.1).

INCREMENT A,B у величивает значение параметра, номер которого указан в поле А, на величину, указанную в поле В.

DECREMENT A,B у меньшает значение параметра, номер которого указан в поле А, на величину, указанную в поле В.

Примеры.

INCREMENT 5,7; P(5):= P(5) + 7

DECREMENT 5,7; P(5):= P(5) - 7

INCREMENT P$5,FN$7; P(P(5)):= P(P(5)) + FN$7 - здесь в поле А косвенное задание номера параметра транзакта: номер модифицируемого параметра определяется как содержимое пятого параметра транзакта, поступившего в данный блок.

DECREMENT P$5,FN$7; P(P(5)):= P(P(5)) - FN$7

INCREMENT XH$5,V$7; Р(ХН$5):= P(XH$5) + V$7

MARK A записывает текущее значение абсолютного модельного времени в указанный в поле А параметр транзакта; если же параметр не указан, то заменяет значение отметки времени (время создания транзакта) на текущее значение таймера.

USING A,B,C,D,E осуществляет доступ текущего транзакта к параметрам другого транзакта, номер которого указан в поле A. Параметр, номер которого определяется полем B (может иметь суффиксы PB, PF, PH), копируется в ячейку или в параметр, заданный в поле C. Если транзакт, заданный в поле A, не активен, то поле E не определено и требуемый транзакт не является активным, происходит ошибка.

LOCATE A,B,C,D определяет и записывает в параметр текущего транзакта номер блока, в который должен войти транзакт, определенный номером в поле A. Этот номер блока записывается в параметре или в ячейке, которые указаны в полях В и С. В поле В записывается СЧА ячейки или параметра (X, XB, XH, P, PF, PH), а в поле C - номер ячейки или параметра, указанного в поле В. Если требуемый транзакт не активен, то текущий транзакт переходит в альтернативный блок, указанный в поле D. Если поле D не задано и транзакт неактивный, то возникает ошибка.

Пример:

LOCATE XH$TRANS, P, 3, INACT

В параметр 3 текущего транзакта записывается номер следующего блока в который должен войти транзакт, при этом номер блока записан в полусловной ячейке с именем TRANS. Если данный транзакт не активен, то текущий транзакт посылается в блок с меткой INACT.

3.2. БЛОКИ, ОПРЕДЕЛЯЮЩИЕ НАПРАВЛЕНИЕ ПЕРЕМЕЩЕНИЯ

ТРАНЗАКТОВ ПО МОДЕЛИ

TRANSFER A,B,С,D пересылает транзакт в требуемую точку модели, где A - режим передачи, B,C - следующие блоки, D - значение индекса, используемое в режиме ALL.

Возможны такие режимы работы блока, задаваемые полем А:

1. ПРОБЕЛ - транзакт передается в блок, задаваемый полем В (безусловный переход);

2. ЧИСЛО, начинающееся точкой, означающее вероятность перехода в блок С, а дополнение числа до 1 означает вероятность перехода в блок В;

3. ALL - транзакт последовательно пытается перейти в блоки, определяемые значениями B, B+D, B+2D, …, C;

4. BOTH - транзакт последовательно пытается войти сначала в блок В, а затем в блок С до тех пор, пока один из них не станет доступным;

5. FN - поле В является номером функции, и следующий блок определяется суммой значения этой функции и поля С;

6. P - поле В является номером параметра транзакта и следующий блок определяется суммой значения этого параметра и поля С;

7. PICK - следующий блок выбирается с равной вероятностью из блоков с номерами B, B+1,…,C;

8. SBR - режим перехода к программе - номер текущего блока перемещается в параметр, указанный в поле С, а транзакт передается в блок, номер которого указан в поле В.

Примеры.

1. TERANSFER,NEXT; безусловная передача транзакта на блок с меткой NEXT

2. TRANSFER.355, FC1, UST1; передача транзактов с вероятностью 0,645 в блок FC1 и с вероятностью 0.355 в блок UST1.

TEST_r A, B проверяет выполнение определенного условия, задаваемого отношением r между стандартными числовыми атрибутами A и В, т.е. отношением (A r B):

1) если это условие выполняется, то транзакт входит в данный блок TEST и будет пытаться передвигаться в следующий блок;

2) если условие не выполняется, то:

- если указан блок С, то транзакт передается в этот блок С,

- если же С не задан, то транзакт блокируется, т.е. задерживается в предыдущем блоке до снятия условия блокировки.

Отношение r может принимать следующие значения:

E - равно;

NE - не равно;

L - меньше чем;

LE - меньше или равно;

G - больше чем;

GE - больше или равно.

Примеры.

1. TEST_E P$1,2,MET1; если значение первого параметра транзакта равно 2, то транзакт войдет в блок TEST и продолжит движение в следующий блок, иначе транзакт перейдет в блок с меткой MET1.

2. TEST_L FN$4,P$2; если значение функции 4 меньше значения параметра 2 данного транзакта, то транзакт входит в блок TEST, иначе задержится перед этим блоком (заблокируется движение данного транзакта).

GATE_R A,B проверяет значение внутреннего операнда R, являющегося стандартным логическим атрибутом и отражающего состояние устройства, памяти или ключа, номер которого задается полем А. При этом СЛА R может принимать значения:

U -устройство занято;

NU - устройство не занято;

I - устройство прервано;

NI - устройство не прервано;

SF - память заполнена;

SNF - память не заполнена;

SE - память пустая;

SNE - память не пустая;

LR - ключ выключен;

LS - ключ включен;

M - транзакт находится в состоянии синхронизации;

NM - транзакт не находится в состоянии синхронизации.

Примеры.

1. GATE_SF 1; если память номер 1 полна, то транзакт входит в блок GATE, иначе ждет ее заполнения.

2. GATE_NU P$2, МТК; если устройство, номер которого указан параметром 2, не занято, то транзакт входит в блок GATE, иначе он входит в блок с меткой МТК.

LOOP A,B используется для организации в модели циклов, т.е. с его помощью можно предусмотреть многократное прохождение транзактом заданной цепочки блоков. Здесь А - номер параметра, значение которого определяет число циклов; В - блок, на который переходит транзакт, если значение параметра с номером А не равно 0.

Пример.

LOOP 2, VTN; уменьшает значение параметра 2 на 1 и, если параметр 2 не равен 0, то переходит на блок с меткой VTN, иначе - к следующему блоку модели.

3.3. БЛОКИ, ОБЕСПЕЧИВАЮЩИЕ КОПИРОВАНИЕ И СИНХРОНИЗАЦИЮ ПЕРЕМЕЩЕНИЯ ТРАНЗАКТОВ ПО МОДЕЛИ

SPLIT A,B,C,D создает А копий текущего транзакта. Копии входят в блок, указанный в поле В, а текущий транзакт продолжает движение в следующий блок. Номера создаваемых копий транзактов записываются в параметры, номера которых указываются в поле С. Нумерация осуществляется таким образом: порядковый номер исходного транзакта после прохождения блока SPLIT увеличивается на 1, порядковый номер первой копии станет на 1 больше номера исходного транзакта, порядковый номер следующей копии станет на 1 больше порядкового номера предыдущей копии транзакта. В поле D указывается число параметров у транзактов-копий. Если поле D не задано, то число и тип параметров у копий такие же, как и у исходного транзакта.

Примеры.

SPLIT 4, THE

Создает 4 копии транзакта, которые посылаются в блок по метке ТНЕ, а текущий транзакт продолжает движение в следующий блок.

SPLIT 3,P$1,2,4

Создает 3 копии транзакта, которые поступают на блоки, указанные в первом параметре, номера транзактов-копий указываются во втором параметре, каждая копия будет иметь 4 параметра.

ASSEMBLE A объединяет транзакты одного семейства, накапливая и задерживая транзакты, являющиеся членами семейства, до тех пор пока их число не станет равным А. Когда последний транзакт войдет в блок, А-1 транзактов будет удалено из модели, кроме первого, который и продолжит движение.

GATHER A накапливает и задерживает транзакты, являющиеся членами семейства, до тех пор пока их число не станет равным А. Когда последний транзакт войдет в блок, все они одновременно (по времени моделирования) выходят из него в том порядке, в котором поступили.

МАТСН А синхронизирует два транзакта одного семейства: первый транзакт, достигнув блока MATCH, задерживается в нем до тех пор, пока другой транзакт данного семейства не достигнет сопряженного блока MATCH, указанного в поле А. Во время задержки устанавливается индикатор синхронизации. Он сбрасывается, когда транзакт того же семейства входит в соответствующий блок MATCH.

Пример.

АА МАТСН ВВ

……


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: